6810 lines
210 KiB
JavaScript
6810 lines
210 KiB
JavaScript
(function() {
|
|
var window, global = {};
|
|
(function() {
|
|
'use strict';
|
|
|
|
var globals = typeof window === 'undefined' ? global : window;
|
|
if (typeof globals.require === 'function') return;
|
|
|
|
var modules = {};
|
|
var cache = {};
|
|
var aliases = {};
|
|
var has = ({}).hasOwnProperty;
|
|
|
|
var expRe = /^\.\.?(\/|$)/;
|
|
var expand = function(root, name) {
|
|
var results = [], part;
|
|
var parts = (expRe.test(name) ? root + '/' + name : name).split('/');
|
|
for (var i = 0, length = parts.length; i < length; i++) {
|
|
part = parts[i];
|
|
if (part === '..') {
|
|
results.pop();
|
|
} else if (part !== '.' && part !== '') {
|
|
results.push(part);
|
|
}
|
|
}
|
|
return results.join('/');
|
|
};
|
|
|
|
var dirname = function(path) {
|
|
return path.split('/').slice(0, -1).join('/');
|
|
};
|
|
|
|
var localRequire = function(path) {
|
|
return function expanded(name) {
|
|
var absolute = expand(dirname(path), name);
|
|
return globals.require(absolute, path);
|
|
};
|
|
};
|
|
|
|
var initModule = function(name, definition) {
|
|
var hot = null;
|
|
hot = hmr && hmr.createHot(name);
|
|
var module = {id: name, exports: {}, hot: hot};
|
|
cache[name] = module;
|
|
definition(module.exports, localRequire(name), module);
|
|
return module.exports;
|
|
};
|
|
|
|
var expandAlias = function(name) {
|
|
return aliases[name] ? expandAlias(aliases[name]) : name;
|
|
};
|
|
|
|
var _resolve = function(name, dep) {
|
|
return expandAlias(expand(dirname(name), dep));
|
|
};
|
|
|
|
var require = function(name, loaderPath) {
|
|
if (loaderPath == null) loaderPath = '/';
|
|
var path = expandAlias(name);
|
|
|
|
if (has.call(cache, path)) return cache[path].exports;
|
|
if (has.call(modules, path)) return initModule(path, modules[path]);
|
|
|
|
throw new Error("Cannot find module '" + name + "' from '" + loaderPath + "'");
|
|
};
|
|
|
|
require.alias = function(from, to) {
|
|
aliases[to] = from;
|
|
};
|
|
|
|
var extRe = /\.[^.\/]+$/;
|
|
var indexRe = /\/index(\.[^\/]+)?$/;
|
|
var addExtensions = function(bundle) {
|
|
if (extRe.test(bundle)) {
|
|
var alias = bundle.replace(extRe, '');
|
|
if (!has.call(aliases, alias) || aliases[alias].replace(extRe, '') === alias + '/index') {
|
|
aliases[alias] = bundle;
|
|
}
|
|
}
|
|
|
|
if (indexRe.test(bundle)) {
|
|
var iAlias = bundle.replace(indexRe, '');
|
|
if (!has.call(aliases, iAlias)) {
|
|
aliases[iAlias] = bundle;
|
|
}
|
|
}
|
|
};
|
|
|
|
require.register = require.define = function(bundle, fn) {
|
|
if (typeof bundle === 'object') {
|
|
for (var key in bundle) {
|
|
if (has.call(bundle, key)) {
|
|
require.register(key, bundle[key]);
|
|
}
|
|
}
|
|
} else {
|
|
modules[bundle] = fn;
|
|
delete cache[bundle];
|
|
addExtensions(bundle);
|
|
}
|
|
};
|
|
|
|
require.list = function() {
|
|
var list = [];
|
|
for (var item in modules) {
|
|
if (has.call(modules, item)) {
|
|
list.push(item);
|
|
}
|
|
}
|
|
return list;
|
|
};
|
|
|
|
var hmr = globals._hmr && new globals._hmr(_resolve, require, modules, cache);
|
|
require._cache = cache;
|
|
require.hmr = hmr && hmr.wrap;
|
|
require.brunch = true;
|
|
globals.require = require;
|
|
})();
|
|
var require = global.require;
|
|
global = this;
|
|
if (global.window) window = this;
|
|
require.register("auth.coffee", function(exports, require, module) {
|
|
var TeamSnap, authRequest, browserStorageName, browserStore, collectionJSONMime, createAuthDialog, generateUrl, jsonMime, multipartMime, promises, request, sdkRequest;
|
|
|
|
TeamSnap = require('./teamsnap').TeamSnap;
|
|
|
|
promises = require('./promises');
|
|
|
|
request = require('./request');
|
|
|
|
jsonMime = 'application/json';
|
|
|
|
collectionJSONMime = 'application/vnd.collection+json';
|
|
|
|
multipartMime = 'multipart/form-data';
|
|
|
|
browserStorageName = 'teamsnap.authToken';
|
|
|
|
authRequest = request.create().hook(function(xhr, data) {
|
|
xhr.setRequestHeader('Accept', jsonMime);
|
|
if (data) {
|
|
xhr.setRequestHeader('Content-Type', jsonMime);
|
|
}
|
|
return xhr.withCredentials = true;
|
|
});
|
|
|
|
sdkRequest = request.create().hook(function(xhr, data) {
|
|
xhr.setRequestHeader('Accept', collectionJSONMime);
|
|
if (data && !(data instanceof FormData)) {
|
|
xhr.setRequestHeader('Content-Type', collectionJSONMime);
|
|
}
|
|
return xhr.withCredentials = true;
|
|
});
|
|
|
|
generateUrl = function(endpoint, params) {
|
|
var key, queries, url, value;
|
|
queries = [];
|
|
for (key in params) {
|
|
value = params[key];
|
|
if (value) {
|
|
queries.push(key + '=' + encodeURIComponent(value));
|
|
}
|
|
}
|
|
url = teamsnap.authUrl + '/oauth/' + endpoint;
|
|
if (queries.length) {
|
|
url = url + '?' + queries.join('&');
|
|
}
|
|
return url.replace(/%20/g, '+');
|
|
};
|
|
|
|
TeamSnap.prototype.auth = function(token) {
|
|
var cachedCollections, callback;
|
|
if (typeof token === 'function') {
|
|
callback = token;
|
|
token = null;
|
|
} else if (typeof token === 'object') {
|
|
callback = cachedCollections;
|
|
cachedCollections = token;
|
|
token = null;
|
|
}
|
|
if (typeof cachedCollections === 'function') {
|
|
callback = cachedCollections;
|
|
cachedCollections = null;
|
|
}
|
|
this.request = sdkRequest.clone();
|
|
if (typeof token === 'number' && teamsnap.apiUrl.indexOf(':3000') !== -1) {
|
|
this.request.hook(function(xhr) {
|
|
return xhr.setRequestHeader('X-Teamsnap-User-ID', token);
|
|
});
|
|
return this;
|
|
}
|
|
if (!token) {
|
|
token = browserStore();
|
|
}
|
|
if (!token) {
|
|
throw new TSArgsError('teamsnap.auth', 'A token is required to auth unless in the browser it has been cached');
|
|
}
|
|
this.request.hook(function(xhr) {
|
|
return xhr.setRequestHeader('Authorization', 'Bearer ' + token);
|
|
});
|
|
return this;
|
|
};
|
|
|
|
TeamSnap.prototype.deleteAuth = function() {
|
|
return this.request = null;
|
|
};
|
|
|
|
TeamSnap.prototype.isAuthed = function() {
|
|
return !!this.request;
|
|
};
|
|
|
|
TeamSnap.prototype.hasSession = function() {
|
|
return !!browserStore();
|
|
};
|
|
|
|
TeamSnap.prototype.browserLogout = function() {
|
|
createAuthDialog(teamsnap.authUrl + '/logout');
|
|
if (this.isAuthed) {
|
|
return this.deleteAuth();
|
|
}
|
|
};
|
|
|
|
TeamSnap.prototype.init = function(clientId, secret) {
|
|
var generateAuthUrl, generatePasswordUrl, generateTokenUrl;
|
|
generateAuthUrl = function(type, redirect, scopes) {
|
|
scopes = Array.isArray(scopes) ? scopes.join(' ') : scopes;
|
|
return generateUrl('authorize', {
|
|
response_type: type,
|
|
client_id: clientId,
|
|
redirect_uri: redirect,
|
|
scope: scopes
|
|
});
|
|
};
|
|
generateTokenUrl = function(code) {
|
|
return generateUrl('token', {
|
|
grant_type: 'authorization_code',
|
|
code: code,
|
|
client_id: clientId,
|
|
client_secret: secret
|
|
});
|
|
};
|
|
generatePasswordUrl = function(username, password) {
|
|
return generateUrl('token', {
|
|
grant_type: 'password',
|
|
username: username,
|
|
password: password,
|
|
client_id: clientId,
|
|
client_secret: secret
|
|
});
|
|
};
|
|
this.getServerAuthUrl = function(redirect, scopes) {
|
|
return generateAuthUrl('code', redirect, scopes);
|
|
};
|
|
this.getServerTokenUrl = function(code) {
|
|
return generateTokenUrl(code);
|
|
};
|
|
this.getBrowserAuthUrl = function(redirect, scopes) {
|
|
return generateAuthUrl('token', redirect, scopes);
|
|
};
|
|
this.getPasswordAuthUrl = function(username, password) {
|
|
return generatePasswordUrl(username, password);
|
|
};
|
|
this.createDialog = function(url, callback) {
|
|
return createAuthDialog(url, callback);
|
|
};
|
|
this.finishServerAuth = function(code, callback) {
|
|
return authRequest.post(this.getServerTokenUrl(code), callback);
|
|
};
|
|
this.startBrowserAuth = function(redirect, scopes, callback) {
|
|
if (location.protocol === 'file:') {
|
|
throw new TSError('TeamSnap.js cannot auth from the file system');
|
|
}
|
|
return this.createDialog(this.getBrowserAuthUrl(redirect, scopes)).then((function(_this) {
|
|
return function(response) {
|
|
var token;
|
|
token = response.access_token;
|
|
browserStore(token);
|
|
return _this.auth(token);
|
|
};
|
|
})(this)).callback(callback);
|
|
};
|
|
return this.startPasswordAuth = function(username, password, callback) {
|
|
return authRequest.post(this.getPasswordAuthUrl(username, password), callback);
|
|
};
|
|
};
|
|
|
|
browserStore = function(token) {
|
|
if (!global.sessionStorage) {
|
|
return;
|
|
}
|
|
if (arguments.length === 0) {
|
|
return sessionStorage.getItem(browserStorageName);
|
|
} else {
|
|
sessionStorage.setItem(browserStorageName, token);
|
|
}
|
|
};
|
|
|
|
createAuthDialog = function(url, callback) {
|
|
var deferred, dialog, height, interval, left, top, width, windowHeight, windowWidth, x, y;
|
|
width = 860;
|
|
height = 720;
|
|
deferred = promises.defer();
|
|
x = window.screenLeft || window.screenX;
|
|
y = window.screenTop || window.screenY;
|
|
windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
|
|
windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
|
|
left = x + (windowWidth - width) / 2;
|
|
top = y + (windowHeight - height) / 2;
|
|
dialog = window.open(url, 'oauth', 'menubar=no,scrollbars=no,status=no,toolbar=no,' + 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top);
|
|
interval = setInterval(function() {
|
|
var e, params, response;
|
|
try {
|
|
if (dialog.closed) {
|
|
clearInterval(interval);
|
|
deferred.reject({
|
|
error: 'access_denied',
|
|
error_description: 'The resource owner denied the request.'
|
|
});
|
|
}
|
|
if (dialog.location.host !== location.host) {
|
|
return;
|
|
}
|
|
params = dialog.location.hash.replace(/^#/, '') || dialog.location.search.replace(/^\?/, '');
|
|
} catch (error) {
|
|
e = error;
|
|
return;
|
|
}
|
|
clearInterval(interval);
|
|
dialog.close();
|
|
response = {};
|
|
params.split('&').forEach(function(param) {
|
|
var key, ref, value;
|
|
ref = param.split('='), key = ref[0], value = ref[1];
|
|
return response[decodeURIComponent(key)] = decodeURIComponent(value.replace(/\+/g, ' '));
|
|
});
|
|
if (response.error) {
|
|
return deferred.reject(response);
|
|
} else {
|
|
return deferred.resolve(response);
|
|
}
|
|
}, 50);
|
|
return deferred.promise.callback(callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/assignments.coffee", function(exports, require, module) {
|
|
exports.EVENT_SETS = ['future_games_and_events', 'future_games', 'future_events'];
|
|
|
|
exports.loadAssignments = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadAssignments', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('assignment', params, callback);
|
|
};
|
|
|
|
exports.createAssignment = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'assignment',
|
|
description: ''
|
|
});
|
|
};
|
|
|
|
exports.saveAssignment = function(assignment, callback) {
|
|
var ref;
|
|
if (!assignment) {
|
|
throw new TSArgsError('teamsnap.saveAssignment', "`assignment` must be provided");
|
|
}
|
|
if (!this.isItem(assignment, 'assignment')) {
|
|
throw new TSArgsError('teamsnap.saveAssignment', "`assignment.type` must be 'assignment'");
|
|
}
|
|
if (!assignment.eventId) {
|
|
return this.reject('You must choose an event.', 'eventId', callback);
|
|
}
|
|
if (!((ref = assignment.description) != null ? ref.trim() : void 0)) {
|
|
return this.reject('You must provide a description for the assignment.', 'name', callback);
|
|
}
|
|
return this.saveItem(assignment, callback);
|
|
};
|
|
|
|
exports.deleteAssignment = function(assignment, callback) {
|
|
if (!assignment) {
|
|
throw new TSArgsError('teamsnap.deleteAssignment', '`assignment` must be provided');
|
|
}
|
|
return this.deleteItem(assignment, callback);
|
|
};
|
|
|
|
exports.getAssignmentSort = function(reverse) {
|
|
return (function(_this) {
|
|
return function(itemA, itemB) {
|
|
var valueA, valueB;
|
|
if (!_this.isItem(itemA, 'assignment') || !_this.isItem(itemB, 'assignment')) {
|
|
valueA = itemA.type;
|
|
valueB = itemB.type;
|
|
} else {
|
|
valueA = _this.memberName(itemA.member, reverse).toLowerCase();
|
|
valueB = _this.memberName(itemB.member, reverse).toLowerCase();
|
|
}
|
|
if (typeof (valueA != null ? valueA.localeCompare : void 0) === 'function') {
|
|
return valueA.localeCompare(valueB);
|
|
} else {
|
|
if (valueA === valueB) {
|
|
return 0;
|
|
} else if (!valueA && valueB) {
|
|
return 1;
|
|
} else if (valueA && !valueB) {
|
|
return -1;
|
|
} else if (valueA > valueB) {
|
|
return 1;
|
|
} else if (valueA < valueB) {
|
|
return -1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
};
|
|
})(this);
|
|
};
|
|
|
|
exports.sendAssignmentEmails = function(teamId, eventIds, message, sendingMemberId, callback) {
|
|
var params;
|
|
if (!this.isId(teamId)) {
|
|
throw new TSArgsError('teamsnap.sendAssignmentEmails', "must provide a `teamId`");
|
|
}
|
|
if (!eventIds) {
|
|
throw new TSArgsError('teamsnap.sendAssignmentEmails', "must provide `eventIds`");
|
|
}
|
|
if (this.isItem(eventIds)) {
|
|
eventIds = eventIds.id;
|
|
}
|
|
if (!this.isId(sendingMemberId)) {
|
|
throw new TSArgsError('teamsnap.sendAssignmentEmails', "must provide a `sendingMemberId`");
|
|
}
|
|
params = {
|
|
teamId: teamId,
|
|
eventIds: eventIds,
|
|
message: message,
|
|
sendingMemberId: sendingMemberId
|
|
};
|
|
return this.collections.assignments.exec('sendAssignmentEmails', params, callback);
|
|
};
|
|
|
|
exports.reorderAssignments = function(eventId, assignmentIds, callback) {
|
|
var params;
|
|
if (!this.isId(eventId)) {
|
|
throw new TSArgsError('teamsnap.reorderAssignments', '`eventId` must be provided');
|
|
}
|
|
if (!(assignmentIds && Array.isArray(assignmentIds))) {
|
|
throw new TSArgsError('teamsnap.reorderAssignments', 'You must provide an array of ordered Assignments IDs');
|
|
}
|
|
params = {
|
|
eventId: eventId,
|
|
sortedIds: assignmentIds
|
|
};
|
|
return this.collections.assignments.exec('reorderAssignments', params).callback(callback);
|
|
};
|
|
|
|
exports.createBulkAssignments = function(eventSet, description, teamId, createAsMemberId, callback) {
|
|
var params;
|
|
if (!(this.EVENT_SETS.indexOf(eventSet) > -1)) {
|
|
throw new TSArgsError('teamsnap.createBulkAssignments', " `eventSet` must be one of the following: " + this.EVENT_SETS.toString() + ".");
|
|
}
|
|
if (!description.trim()) {
|
|
return this.reject('You must provide a description for the assignments.', 'description', callback);
|
|
}
|
|
if (!teamId) {
|
|
throw new TSArgsError('teamsnap.createBulkAssignments', '`teamId` must be provided.');
|
|
}
|
|
if (this.isItem(teamId, 'team')) {
|
|
({
|
|
teamId: teamId.id
|
|
});
|
|
}
|
|
if (!createAsMemberId) {
|
|
throw new TSArgsError('teamsnap.createBulkAssignments', '`createAsMemberId` must be provided.');
|
|
}
|
|
if (this.isItem(createAsMemberId, 'member')) {
|
|
({
|
|
createAsMemberId: createAsMemberId.id
|
|
});
|
|
}
|
|
params = {
|
|
eventSet: eventSet,
|
|
description: description,
|
|
teamId: teamId,
|
|
createAsMemberId: createAsMemberId
|
|
};
|
|
return this.collections.assignments.exec('createBulkAssignments', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/availabilities.coffee", function(exports, require, module) {
|
|
var key, ref, statuses, value;
|
|
|
|
exports.AVAILABILITIES = {
|
|
NONE: null,
|
|
NO: 0,
|
|
YES: 1,
|
|
MAYBE: 2
|
|
};
|
|
|
|
statuses = {};
|
|
|
|
ref = exports.AVAILABILITIES;
|
|
for (key in ref) {
|
|
value = ref[key];
|
|
statuses[value] = true;
|
|
}
|
|
|
|
exports.loadAvailabilities = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadAvailabilities', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('availability', params, callback);
|
|
};
|
|
|
|
exports.saveAvailability = function(availability, callback) {
|
|
if (!availability) {
|
|
throw new TSArgsError('teamsnap.saveAvailability', "`availability` must be provided");
|
|
}
|
|
if (!this.isItem(availability, 'availability')) {
|
|
throw new TSArgsError('teamsnap.saveAvailability', "`type` must be 'availability'");
|
|
}
|
|
if (availability.statusCode !== null && !statuses[availability.statusCode]) {
|
|
return this.reject('You must select a valid status or null', 'statusCode', callback);
|
|
}
|
|
return this.saveItem(availability, callback);
|
|
};
|
|
|
|
exports.bulkMarkUnsetAvailabilities = function(memberId, statusCode, callback) {
|
|
var params;
|
|
if (!this.isId(memberId)) {
|
|
throw new TSArgsError('teamsnap.bulkMarkUnsetAvailabilities', "must provide a `memberId`");
|
|
}
|
|
if (!((statusCode != null) && statuses[statusCode])) {
|
|
return this.reject('You must select a valid status', 'statusCode', callback);
|
|
}
|
|
params = {
|
|
memberId: memberId,
|
|
statusCode: statusCode
|
|
};
|
|
return this.collections.availabilities.exec('bulkMarkUnsetAvailabilities', params).pop().callback(callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/broadcastAlerts.coffee", function(exports, require, module) {
|
|
exports.loadBroadcastAlerts = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadBroadcastAlerts', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('broadcastAlert', params, callback);
|
|
};
|
|
|
|
exports.createBroadcastAlert = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'broadcastAlert'
|
|
});
|
|
};
|
|
|
|
exports.saveBroadcastAlert = function(broadcastAlert, callback) {
|
|
var ref;
|
|
if (!broadcastAlert) {
|
|
throw new TSArgsError('teamsnap.saveBroadcastAlert', "`broadcastAlert` must be provided");
|
|
}
|
|
if (!this.isItem(broadcastAlert, 'broadcastAlert')) {
|
|
throw new TSArgsError('teamsnap.saveBroadcastAlert', "`type` must be 'broadcastAlert'");
|
|
}
|
|
if (!broadcastAlert.teamId) {
|
|
return this.reject('You must provide a team id.', 'teamId', callback);
|
|
}
|
|
if (!broadcastAlert.memberId) {
|
|
return this.reject('You must provide a member id.', 'memberId', callback);
|
|
}
|
|
if (!((ref = broadcastAlert.body) != null ? ref.trim() : void 0)) {
|
|
return this.reject('You must provide the text alert body.', 'body', callback);
|
|
}
|
|
return this.saveItem(broadcastAlert, callback);
|
|
};
|
|
|
|
exports.deleteBroadcastAlert = function(broadcastAlert, callback) {
|
|
if (!broadcastAlert) {
|
|
throw new TSArgsError('teamsnap.deleteBroadcastAlert', '`broadcastAlert` must be provided');
|
|
}
|
|
return this.deleteItem(broadcastAlert, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/broadcastEmailAttachments.coffee", function(exports, require, module) {
|
|
exports.loadBroadcastEmailAttachments = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadBroadcastEmailAttachments', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('broadcastEmailAttachment', params, callback);
|
|
};
|
|
|
|
exports.deleteBroadcastEmailAttachment = function(broadcastEmailAttachment, callback) {
|
|
if (!broadcastEmailAttachment) {
|
|
throw new TSArgsError('teamsnap.deleteBroadcastEmailAttachment', '`broadcastEmailAttachment` must be provided');
|
|
}
|
|
return this.deleteItem(broadcastEmailAttachment, callback);
|
|
};
|
|
|
|
exports.uploadBroadcastEmailAttachment = function(broadcastEmailId, memberId, file, progressCallback, callback) {
|
|
var params;
|
|
if (typeof FormData === 'undefined') {
|
|
this.reject('Your browser does not support the new file upload APIs.', 'file', callback);
|
|
}
|
|
if (!broadcastEmailId) {
|
|
throw new TSArgsError('teamsnap.uploadBroadcastEmailAttachment', 'broadcastEmailId is required');
|
|
}
|
|
if (!(file instanceof File)) {
|
|
throw new TSArgsError('teamsnap.uploadBroadcastEmailAttachment', 'must include `file` as type File', 'file is required');
|
|
}
|
|
if (!memberId) {
|
|
throw new TSArgsError('teamsnap.uploadBroadcastEmailAttachment', 'memberId is required');
|
|
}
|
|
params = {
|
|
broadcastEmailId: broadcastEmailId,
|
|
file: file,
|
|
memberId: memberId
|
|
};
|
|
return this.collections.broadcastEmailAttachments.file('uploadBroadcastEmailAttachment', params, progressCallback, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/broadcastEmails.coffee", function(exports, require, module) {
|
|
exports.loadBroadcastEmails = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadBroadcastEmails', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('broadcastEmail', params, callback);
|
|
};
|
|
|
|
exports.createBroadcastEmail = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'broadcastEmail'
|
|
});
|
|
};
|
|
|
|
exports.saveBroadcastEmail = function(broadcastEmail, callback) {
|
|
var ref;
|
|
if (!broadcastEmail) {
|
|
throw new TSArgsError('teamsnap.saveBroadcastEmail', "`broadcastEmail` must be provided");
|
|
}
|
|
if (!this.isItem(broadcastEmail, 'broadcastEmail')) {
|
|
throw new TSArgsError('teamsnap.saveBroadcastEmail', "`type` must be 'broadcastEmail'");
|
|
}
|
|
if (broadcastEmail.isLeague) {
|
|
if (!broadcastEmail.divisionId) {
|
|
return reject('You must provide a division id.', 'divisionId', callback);
|
|
}
|
|
} else {
|
|
if (!broadcastEmail.teamId) {
|
|
return this.reject('You must provide a team id.', 'teamId', callback);
|
|
}
|
|
}
|
|
if (!broadcastEmail.memberId) {
|
|
return this.reject('You must provide a member id.', 'memberId', callback);
|
|
}
|
|
if (!((ref = broadcastEmail.body) != null ? ref.trim() : void 0)) {
|
|
return this.reject('You must provide the text alert body.', 'body', callback);
|
|
}
|
|
if (!broadcastEmail.isDraft) {
|
|
if (!broadcastEmail.isLeague) {
|
|
if (!(Array.isArray(broadcastEmail.recipientIds) && broadcastEmail.recipientIds.length > 0)) {
|
|
return this.reject('You must provide at least one recipient.', 'recipientIds');
|
|
}
|
|
}
|
|
}
|
|
return this.saveItem(broadcastEmail, callback);
|
|
};
|
|
|
|
exports.deleteBroadcastEmail = function(broadcastEmail, callback) {
|
|
if (!broadcastEmail) {
|
|
throw new TSArgsError('teamsnap.deleteBroadcastEmail', '`broadcastEmail` must be provided');
|
|
}
|
|
return this.deleteItem(broadcastEmail, callback);
|
|
};
|
|
|
|
exports.bulkDeleteBroadcastEmails = function(broadcastEmailIds, callback) {
|
|
if (!(Array.isArray(broadcastEmailIds))) {
|
|
throw new TSArgsError('teamsnap.broadcastEmailIds', 'You must provide an array of broadcastEmail IDs');
|
|
}
|
|
return this.collections.broadcastEmails.exec('bulkDelete', {
|
|
id: broadcastEmailIds
|
|
}, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/contactEmailAddresses.coffee", function(exports, require, module) {
|
|
exports.loadContactEmailAddresses = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadContactEmailAddresses', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('contactEmailAddress', params, callback);
|
|
};
|
|
|
|
exports.createContactEmailAddress = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'contactEmailAddress',
|
|
receivesTeamEmails: true
|
|
});
|
|
};
|
|
|
|
exports.saveContactEmailAddress = function(contactEmailAddress, callback) {
|
|
if (!contactEmailAddress) {
|
|
throw new TSArgsError('teamsnap.saveContactEmailAddress', '`contactEmailAddress` must be provided');
|
|
}
|
|
if (!this.isItem(contactEmailAddress, 'contactEmailAddress')) {
|
|
throw new TSArgsError('teamsnap.saveContactEmailAddress', "`contactEmailAddress.type` must be 'contactEmailAddress'");
|
|
}
|
|
if (!contactEmailAddress.contactId) {
|
|
return this.reject('You must choose a contact.', 'contactId', callback);
|
|
}
|
|
return this.saveItem(contactEmailAddress, callback);
|
|
};
|
|
|
|
exports.deleteContactEmailAddress = function(contactEmailAddress, callback) {
|
|
if (!contactEmailAddress) {
|
|
throw new TSArgsError('teamsnap.deleteContactEmailAddress', '`contactEmailAddress` must be provided');
|
|
}
|
|
return this.deleteItem(contactEmailAddress, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/contactPhoneNumbers.coffee", function(exports, require, module) {
|
|
exports.loadContactPhoneNumbers = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadContactPhoneNumbers', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('contactPhoneNumber', params, callback);
|
|
};
|
|
|
|
exports.createContactPhoneNumber = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'contactPhoneNumber'
|
|
});
|
|
};
|
|
|
|
exports.saveContactPhoneNumber = function(contactPhoneNumber, callback) {
|
|
if (!contactPhoneNumber) {
|
|
throw new TSArgsError('teamsnap.saveContactPhoneNumber', '`contactPhoneNumber` must be provided');
|
|
}
|
|
if (!this.isItem(contactPhoneNumber, 'contactPhoneNumber')) {
|
|
throw new TSArgsError('teamsnap.saveContactPhoneNumber', "`contactPhoneNumber.type` must be 'contactPhoneNumber'");
|
|
}
|
|
if (!contactPhoneNumber.contactId) {
|
|
return this.reject('You must choose a contact.', 'contactId', callback);
|
|
}
|
|
return this.saveItem(contactPhoneNumber, callback);
|
|
};
|
|
|
|
exports.deleteContactPhoneNumber = function(contactPhoneNumber, callback) {
|
|
if (!contactPhoneNumber) {
|
|
throw new TSArgsError('teamsnap.deleteContactPhoneNumber', '`contactPhoneNumber` must be provided');
|
|
}
|
|
return this.deleteItem(contactPhoneNumber, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/contacts.coffee", function(exports, require, module) {
|
|
exports.loadContacts = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadContacts', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('contact', params, callback);
|
|
};
|
|
|
|
exports.createContact = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'contact'
|
|
});
|
|
};
|
|
|
|
exports.saveContact = function(contact, callback) {
|
|
var ref;
|
|
if (!contact) {
|
|
throw new TSArgsError('teamsnap.saveContact', "`contact` must be provided");
|
|
}
|
|
if (!this.isItem(contact, 'contact')) {
|
|
throw new TSArgsError('teamsnap.saveContact', "`contact.type` must be 'contact'");
|
|
}
|
|
if (!contact.memberId) {
|
|
return this.reject('You must choose a member.', 'memberId', callback);
|
|
}
|
|
if (!((ref = contact.firstName) != null ? ref.trim() : void 0)) {
|
|
return this.reject('You must provide a firstName for the contact.', 'name', callback);
|
|
}
|
|
return this.saveItem(contact, callback);
|
|
};
|
|
|
|
exports.deleteContact = function(contact, callback) {
|
|
if (!contact) {
|
|
throw new TSArgsError('teamsnap.deleteContact', '`contact` must be provided');
|
|
}
|
|
return this.deleteItem(contact, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/customData.coffee", function(exports, require, module) {
|
|
exports.loadCustomData = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadCustomData', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('customDatum', params, callback);
|
|
};
|
|
|
|
exports.createCustomDatum = function(data, field) {
|
|
return this.createItem(data, {
|
|
type: 'customDatum',
|
|
customFieldId: field.id,
|
|
kind: field.kind,
|
|
name: field.name,
|
|
isPrivate: false,
|
|
value: null
|
|
});
|
|
};
|
|
|
|
exports.saveCustomDatum = function(customDatum, callback) {
|
|
if (!customDatum) {
|
|
throw new TSArgsError('teamsnap.saveCustomField', '`customDatum` must be provided');
|
|
}
|
|
if (!this.isItem(customDatum, 'customDatum')) {
|
|
throw new TSArgsError('teamsnap.saveCustomField', "`customDatum.type` must be 'customDatum'");
|
|
}
|
|
return this.saveItem(customDatum, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/customFields.coffee", function(exports, require, module) {
|
|
exports.loadCustomFields = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadCustomFields', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('customField', params, callback);
|
|
};
|
|
|
|
exports.createCustomField = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'customField'
|
|
});
|
|
};
|
|
|
|
exports.saveCustomField = function(customField, callback) {
|
|
if (!customField) {
|
|
throw new TSArgsError('teamsnap.saveCustomField', '`customField` must be provided');
|
|
}
|
|
if (!this.isItem(customField, 'customField')) {
|
|
throw new TSArgsError('teamsnap.saveCustomField', "`customField.type` must be 'customField'");
|
|
}
|
|
if (!customField.teamId) {
|
|
return this.reject('You must choose a team.', 'teamId', callback);
|
|
}
|
|
if (!customField.name) {
|
|
return this.reject('You must enter a name.', 'name', callback);
|
|
}
|
|
if (!customField.kind) {
|
|
return this.reject('You must choose a type.', 'kind', callback);
|
|
}
|
|
return this.saveItem(customField, callback);
|
|
};
|
|
|
|
exports.deleteCustomField = function(customField, callback) {
|
|
if (!customField) {
|
|
throw new TSArgsError('teamsnap.deleteCustomField', '`customField` must be provided');
|
|
}
|
|
return this.deleteItem(customField, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/divisionEvents.coffee", function(exports, require, module) {
|
|
exports.loadDivisionEvents = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
divisionId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadDivisionEvents', 'must provide a divisionId or query parameters');
|
|
}
|
|
return this.loadItems('divisionEvent', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/divisionLocations.coffee", function(exports, require, module) {
|
|
exports.loadDivisionLocations = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadDivisionLocations', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('divisionLocation', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/divisionMembers.coffee", function(exports, require, module) {
|
|
exports.loadDivisionMembers = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadDivisionMembers', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('divisionMember', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/divisionMembersPreferences.coffee", function(exports, require, module) {
|
|
exports.PREFS = {
|
|
SCHEDULE_SHOW: {
|
|
ALL: 1,
|
|
GAMES: 2,
|
|
EVENTS: 3
|
|
}
|
|
};
|
|
|
|
exports.loadDivisionMembersPreferences = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadDivisionMembersPreferences', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('divisionMemberPreferences', params, callback);
|
|
};
|
|
|
|
exports.loadDivisionMemberPreferences = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadDivisionMemberPreferences', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItem('divisionMemberPreferences', params, callback);
|
|
};
|
|
|
|
exports.saveDivisionMemberPreferences = function(divisionMemberPreferences, callback) {
|
|
if (!divisionMemberPreferences) {
|
|
throw new TSArgsError('teamsnap.saveDivisionMemberPreferences', "`divisionMemberPreferences` must be provided");
|
|
}
|
|
if (!this.isItem(divisionMemberPreferences, 'divisionMemberPreferences')) {
|
|
throw new TSArgsError('teamsnap.saveDivisionMemberPreferences', "`divisionMemberPreferences.type` must be 'divisionMemberPreferences'");
|
|
}
|
|
return this.saveItem(divisionMemberPreferences, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/divisionTeamStandings.coffee", function(exports, require, module) {
|
|
exports.loadDivisionTeamStandings = function(teamId, callback) {
|
|
var params;
|
|
if (!this.isId(teamId)) {
|
|
throw new TSArgsError('teamsnap.loadDivisionTeamStandings', 'must provide a teamId');
|
|
}
|
|
params = {
|
|
teamId: teamId
|
|
};
|
|
return this.loadItems('divisionTeamStanding', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/divisions.coffee", function(exports, require, module) {
|
|
exports.loadDivisions = function(params, callback) {
|
|
if (params == null) {
|
|
params = {};
|
|
}
|
|
if (typeof params === 'function') {
|
|
callback = params;
|
|
params = {};
|
|
}
|
|
if (Object.keys(params).length) {
|
|
return this.loadItems('division', params, callback);
|
|
} else {
|
|
return this.loadMe().then((function(_this) {
|
|
return function(me) {
|
|
params.userId = me.id;
|
|
return _this.loadItems('division', params, callback);
|
|
};
|
|
})(this));
|
|
}
|
|
};
|
|
|
|
exports.loadDivision = function(divisionId, callback) {
|
|
if (!this.isId(divisionId)) {
|
|
throw new TSArgsError('teamsnap.loadDivision', 'divisionId must be provided');
|
|
}
|
|
return this.loadItem('division', {
|
|
id: divisionId
|
|
}, callback);
|
|
};
|
|
|
|
exports.createDivision = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'division',
|
|
name: ''
|
|
});
|
|
};
|
|
|
|
exports.saveDivision = function(division, callback) {
|
|
var ref;
|
|
if (!division) {
|
|
throw new TSArgsError('teamsnap.saveDivision', "`division` must be provided");
|
|
}
|
|
if (!this.isItem(division, 'division')) {
|
|
throw new TSArgsError('teamsnap.saveDivision', "`type` must be 'division'");
|
|
}
|
|
if (!((ref = division.name) != null ? ref.trim() : void 0)) {
|
|
return this.reject('You must provide a name for the division.', 'name', callback);
|
|
}
|
|
return this.saveItem(division, callback);
|
|
};
|
|
|
|
exports.deleteDivision = function(division, callback) {
|
|
if (!division) {
|
|
throw new TSArgsError('teamsnap.deleteDivision', '`division` must be provided');
|
|
}
|
|
return this.deleteItem(division, callback);
|
|
};
|
|
|
|
exports.loadAncestorDivisions = function(divisionId, callback) {
|
|
if (!this.isId(divisionId)) {
|
|
throw new TSArgsError('teamsnap.loadAncestorDivisions', 'divisionId must be provided');
|
|
}
|
|
return this.collections.divisions.queryItems('ancestors', {
|
|
id: divisionId
|
|
}, callback);
|
|
};
|
|
|
|
exports.loadDescendantDivisions = function(divisionId, callback) {
|
|
if (!this.isId(divisionId)) {
|
|
throw new TSArgsError('teamsnap.loadDescendantDivisions', 'divisionId must be provided');
|
|
}
|
|
return this.collections.divisions.queryItems('descendants', {
|
|
id: divisionId
|
|
}, callback);
|
|
};
|
|
|
|
exports.loadChildDivisions = function(divisionId, callback) {
|
|
if (!this.isId(divisionId)) {
|
|
throw new TSArgsError('teamsnap.loadChildDivisions', 'divisionId must be provided');
|
|
}
|
|
return this.collections.divisions.queryItems('children', {
|
|
id: divisionId
|
|
}, callback);
|
|
};
|
|
|
|
exports.loadActiveTrialDivisions = function(userId, callback) {
|
|
if (!this.isId(userId)) {
|
|
throw new TSArgsError('teamsnap.loadActiveTrialsDivisions', 'userId must be provided');
|
|
}
|
|
return this.collections.divisions.queryItems('activeTrials', {
|
|
userId: userId
|
|
}, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/divisionsPreferences.coffee", function(exports, require, module) {
|
|
exports.loadDivisionsPreferences = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
divisionId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadDivisionsPreferences', 'must provide a divisionId or query parameters');
|
|
}
|
|
return this.loadItems('divisionPreferences', params, callback);
|
|
};
|
|
|
|
exports.loadDivisionPreferences = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
divisionId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadDivisionPreferences', 'must provide a divisionId or query parameters');
|
|
}
|
|
return this.loadItem('divisionPreferences', params, callback);
|
|
};
|
|
|
|
exports.saveDivisionPreferences = function(divisionPreferences, callback) {
|
|
if (!divisionPreferences) {
|
|
throw new TSArgsError('teamsnap.saveDivisionPreferences', "`divisionPreferences` must be provided");
|
|
}
|
|
if (!this.isItem(divisionPreferences, 'divisionPreferences')) {
|
|
throw new TSArgsError('teamsnap.saveDivisionPreferences', "`divisionPreferences.type` must be 'divisionPreferences'");
|
|
}
|
|
return this.saveItem(divisionPreferences, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/eventStatistics.coffee", function(exports, require, module) {
|
|
exports.loadEventStatistics = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadEventStatistics', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('eventStatistic', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/events.coffee", function(exports, require, module) {
|
|
var includes, key, ref, value;
|
|
|
|
exports.EVENTS = {
|
|
NONE: 'none',
|
|
FUTURE: 'future',
|
|
ALL: 'all'
|
|
};
|
|
|
|
exports.REMINDERS = {
|
|
ALL: 'all',
|
|
UNSET: 'unset'
|
|
};
|
|
|
|
includes = {};
|
|
|
|
ref = exports.EVENTS;
|
|
for (key in ref) {
|
|
value = ref[key];
|
|
includes[value] = true;
|
|
}
|
|
|
|
exports.loadEvents = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadEvents', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('event', params, callback);
|
|
};
|
|
|
|
exports.createEvent = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'event',
|
|
isGame: false,
|
|
tracksAvailability: true
|
|
});
|
|
};
|
|
|
|
exports.saveEvent = function(event, callback) {
|
|
var ref1, ref2;
|
|
if (!event) {
|
|
throw new TSArgsError('teamsnap.saveEvent', "`event` must be provided");
|
|
}
|
|
if (!this.isItem(event, 'event')) {
|
|
throw new TSArgsError('teamsnap.saveEvent', "`event.type` must be 'event'");
|
|
}
|
|
if (!(event.isGame || ((ref1 = event.name) != null ? ref1.trim() : void 0))) {
|
|
return this.reject('You must provide a name.', 'name', callback);
|
|
}
|
|
if (!event.teamId) {
|
|
return this.reject('You must choose a team.', 'teamId', callback);
|
|
}
|
|
if (!(event.locationId || event.divisionLocationId)) {
|
|
return this.reject('You must choose a location.', 'locationId', callback);
|
|
}
|
|
if (event.isGame && !event.opponentId) {
|
|
return this.reject('You must choose an opponent.', 'opponentId', callback);
|
|
}
|
|
if (isNaN((ref2 = event.startDate) != null ? ref2.getTime() : void 0)) {
|
|
return this.reject('You must provide a valid start date.', 'startDate', callback);
|
|
}
|
|
if (event.notifyTeam && !event.notifyTeamAsMemberId) {
|
|
return this.reject('You must provide the current member\'s id.', 'notifyTeamAsMemberId', callback);
|
|
}
|
|
return this.saveItem(event, callback);
|
|
};
|
|
|
|
exports.deleteEvent = function(event, include, notify, notifyAs, callback) {
|
|
var params;
|
|
params = {};
|
|
if (!event) {
|
|
throw new TSArgsError('teamsnap.deleteEvent', '`event` must be provided');
|
|
}
|
|
if (typeof include === 'function') {
|
|
callback = include;
|
|
include = null;
|
|
}
|
|
if (!include && event.repeatingUuid) {
|
|
include = this.EVENTS.NONE;
|
|
}
|
|
if (include) {
|
|
if (!includes[include]) {
|
|
throw new TSArgsError('teamsnap.deleteEvent', "`include` must be one of " + (Object.keys(includes).join(', ')));
|
|
}
|
|
params.repeatingInclude = include;
|
|
}
|
|
if (notify) {
|
|
params.notifyTeam = notify;
|
|
if (!notifyAs) {
|
|
throw new TSArgsError('teamsnap.deleteEvent', '`notifyTeamAsMemberId` must be provided');
|
|
}
|
|
params.notifyTeamAsMemberId = notifyAs;
|
|
}
|
|
return this.deleteItem(event, params, callback);
|
|
};
|
|
|
|
exports.sendAvailabilityReminders = function(eventId, sendingMemberId, include) {
|
|
var options;
|
|
if (!include) {
|
|
include = [];
|
|
}
|
|
if (this.isItem(eventId, 'event')) {
|
|
eventId = eventId.id;
|
|
}
|
|
if (this.isItem(sendingMemberId, 'member')) {
|
|
sendingMemberId = sendingMemberId.id;
|
|
} else if (this.isItem(sendingMemberId, 'divisionMember')) {
|
|
sendingMemberId = sendingMemberId.id;
|
|
}
|
|
if (!this.isId(eventId)) {
|
|
throw new TSArgsError('teamsnap.sendAvailabilityReminders', 'must include id `eventId`');
|
|
}
|
|
if (!this.isId(sendingMemberId)) {
|
|
throw new TSArgsError('teamsnap.sendAvailabilityReminders', 'must include id `sendingMemberId`');
|
|
}
|
|
if (!Array.isArray(include)) {
|
|
throw new TSArgsError('teamsnap.sendAvailabilityReminders', "`include` must be an array of member ids");
|
|
}
|
|
if ((include == null) || include.length === 0) {
|
|
throw new TSArgsError('teamsnap.sendAvailabilityReminders', "`include` must be an array of member ids");
|
|
}
|
|
options = {
|
|
id: eventId,
|
|
membersToNotify: include,
|
|
notifyTeamAsMemberId: sendingMemberId
|
|
};
|
|
return this.collections.events.exec('sendAvailabilityReminders', options);
|
|
};
|
|
|
|
exports.getEventSort = function() {
|
|
return (function(_this) {
|
|
return function(itemA, itemB) {
|
|
var valueA, valueB;
|
|
if (!_this.isItem(itemA, 'event') || !_this.isItem(itemB, 'event')) {
|
|
valueA = itemA.type;
|
|
valueB = itemB.type;
|
|
} else {
|
|
valueA = itemA.startDate;
|
|
valueB = itemB.startDate;
|
|
}
|
|
if (valueA > valueB) {
|
|
return 1;
|
|
} else if (valueA < valueB) {
|
|
return -1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
};
|
|
})(this);
|
|
};
|
|
|
|
exports.bulkCreateEvents = function(params, callback) {
|
|
var options;
|
|
if (!params.teamId) {
|
|
return this.reject('You must choose a team.', 'teamId', callback);
|
|
}
|
|
if (!Array.isArray(params.events)) {
|
|
throw new TSArgsError('teamsnap.bulkCreateEvents', "`events` must be an array of events");
|
|
}
|
|
options = {
|
|
templates: params.events,
|
|
teamId: params.teamId,
|
|
notifyTeamAsMemberId: params.sendingMemberId,
|
|
notifyTeam: params.notifyTeam
|
|
};
|
|
return this.collections.events.exec('bulkCreate', options, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/facebookPages.coffee", function(exports, require, module) {
|
|
exports.loadFacebookPages = function(callback) {
|
|
var params;
|
|
params = {};
|
|
return this.loadItems('facebookPage', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/forumPosts.coffee", function(exports, require, module) {
|
|
exports.loadForumPosts = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadForumPosts', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('forumPost', params, callback);
|
|
};
|
|
|
|
exports.createForumPost = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'forumPost'
|
|
});
|
|
};
|
|
|
|
exports.saveForumPost = function(forumPost, callback) {
|
|
var ref;
|
|
if (!forumPost) {
|
|
throw new TSArgsError('teamsnap.saveForumPost', "`forumPost` must be provided");
|
|
}
|
|
if (!this.isItem(forumPost, 'forumPost')) {
|
|
throw new TSArgsError('teamsnap.saveForumPost', "`type` must be 'forumPost'");
|
|
}
|
|
if (!forumPost.forumTopicId) {
|
|
return this.reject('You must provide a forum topic id.', 'forumTopicId', callback);
|
|
}
|
|
if (!forumPost.memberId) {
|
|
return this.reject('You must provide a member id.', 'memberId', callback);
|
|
}
|
|
if (!((ref = forumPost.message) != null ? ref.trim() : void 0)) {
|
|
return this.reject('You must provide a message for the forum post.', 'message', callback);
|
|
}
|
|
return this.saveItem(forumPost, callback);
|
|
};
|
|
|
|
exports.deleteForumPost = function(forumPost, callback) {
|
|
if (!forumPost) {
|
|
throw new TSArgsError('teamsnap.deleteForumPost', '`forumPost` must be provided');
|
|
}
|
|
return this.deleteItem(forumPost, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/forumSubscriptions.coffee", function(exports, require, module) {
|
|
exports.loadForumSubscriptions = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadForumSubscriptions', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('forumSubscription', params, callback);
|
|
};
|
|
|
|
exports.createForumSubscription = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'forumSubscription'
|
|
});
|
|
};
|
|
|
|
exports.saveForumSubscription = function(forumSubscription, callback) {
|
|
if (!forumSubscription) {
|
|
throw new TSArgsError('teamsnap.saveForumSubscription', "`forumSubscription` must be provided");
|
|
}
|
|
if (!this.isItem(forumSubscription, 'forumSubscription')) {
|
|
throw new TSArgsError('teamsnap.saveForumSubscription', "`type` must be 'forumSubscription'");
|
|
}
|
|
if (!forumSubscription.forumTopicId) {
|
|
return this.reject('You must provide a forum topic id.', 'forumTopicId', callback);
|
|
}
|
|
if (!forumSubscription.memberId) {
|
|
return this.reject('You must provide a member id.', 'memberId', callback);
|
|
}
|
|
return this.saveItem(forumSubscription, callback);
|
|
};
|
|
|
|
exports.deleteForumSubscription = function(forumSubscription, callback) {
|
|
if (!forumSubscription) {
|
|
throw new TSArgsError('teamsnap.deleteForumSubscription', '`forumSubscription` must be provided');
|
|
}
|
|
return this.deleteItem(forumSubscription, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/forumTopics.coffee", function(exports, require, module) {
|
|
exports.loadForumTopics = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadForumTopics', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('forumTopic', params, callback);
|
|
};
|
|
|
|
exports.createForumTopic = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'forumTopic'
|
|
});
|
|
};
|
|
|
|
exports.saveForumTopic = function(forumTopic, callback) {
|
|
var ref;
|
|
if (!forumTopic) {
|
|
throw new TSArgsError('teamsnap.saveForumTopic', "`forumTopic` must be provided");
|
|
}
|
|
if (!this.isItem(forumTopic, 'forumTopic')) {
|
|
throw new TSArgsError('teamsnap.saveForumTopic', "`type` must be 'forumTopic'");
|
|
}
|
|
if (!forumTopic.teamId) {
|
|
return this.reject('You must choose a team.', 'teamId', callback);
|
|
}
|
|
if (!((ref = forumTopic.title) != null ? ref.trim() : void 0)) {
|
|
return this.reject('You must provide a title for the forum topic.', 'title', callback);
|
|
}
|
|
return this.saveItem(forumTopic, callback);
|
|
};
|
|
|
|
exports.deleteForumTopic = function(forumTopic, callback) {
|
|
if (!forumTopic) {
|
|
throw new TSArgsError('teamsnap.deleteForumTopic', '`forumTopic` must be provided');
|
|
}
|
|
return this.deleteItem(forumTopic, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/leagueCustomData.coffee", function(exports, require, module) {
|
|
exports.loadLeagueCustomData = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadLeagueCustomData', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('leagueCustomDatum', params, callback);
|
|
};
|
|
|
|
exports.createLeagueCustomDatum = function(data, field) {
|
|
return this.createItem(data, {
|
|
type: 'leagueCustomDatum',
|
|
leagueCustomFieldId: field.id,
|
|
kind: field.kind,
|
|
name: field.name,
|
|
isPrivate: false,
|
|
value: null
|
|
});
|
|
};
|
|
|
|
exports.saveLeagueCustomDatum = function(leagueCustomDatum, callback) {
|
|
if (!leagueCustomDatum) {
|
|
throw new TSArgsError('teamsnap.saveLeagueCustomDatum', '`leagueCustomDatum` must be provided');
|
|
}
|
|
if (!this.isItem(leagueCustomDatum, 'leagueCustomDatum')) {
|
|
throw new TSArgsError('teamsnap.saveLeagueCustomDatum', "`leagueCustomDatum.type` must be 'leagueCustomDatum'");
|
|
}
|
|
return this.saveItem(leagueCustomDatum, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/leagueCustomFields.coffee", function(exports, require, module) {
|
|
exports.loadLeagueCustomFields = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadLeagueCustomFields', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('leagueCustomField', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/leagueRegistrantDocuments.coffee", function(exports, require, module) {
|
|
exports.loadLeagueRegistrantDocuments = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadLeagueRegistrantDocuments', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('leagueRegistrantDocument', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/locations.coffee", function(exports, require, module) {
|
|
exports.loadLocations = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadLocations', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('location', params, callback);
|
|
};
|
|
|
|
exports.createLocation = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'location',
|
|
name: ''
|
|
});
|
|
};
|
|
|
|
exports.saveLocation = function(location, callback) {
|
|
var ref;
|
|
if (!location) {
|
|
throw new TSArgsError('teamsnap.saveLocation', "`location` must be provided");
|
|
}
|
|
if (!this.isItem(location, 'location')) {
|
|
throw new TSArgsError('teamsnap.saveLocation', "`location.type` must be 'location'");
|
|
}
|
|
if (!location.teamId) {
|
|
return this.reject('You must choose a team.', 'teamId', callback);
|
|
}
|
|
if (!((ref = location.name) != null ? ref.trim() : void 0)) {
|
|
return this.reject('You must provide a name for the location.', 'name', callback);
|
|
}
|
|
return this.saveItem(location, callback);
|
|
};
|
|
|
|
exports.deleteLocation = function(location, callback) {
|
|
if (!location) {
|
|
throw new TSArgsError('teamsnap.deleteLocation', '`location` must be provided');
|
|
}
|
|
return this.deleteItem(location, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/memberAssignments.coffee", function(exports, require, module) {
|
|
exports.loadMemberAssignments = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMemberAssignments', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('memberAssignment', params, callback);
|
|
};
|
|
|
|
exports.createMemberAssignment = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'memberAssignment'
|
|
});
|
|
};
|
|
|
|
exports.saveMemberAssignment = function(memberAssignment, callback) {
|
|
if (!memberAssignment) {
|
|
throw new TSArgsError('teamsnap.saveMemberAssignment', "`memberAssignment` must be provided");
|
|
}
|
|
if (!this.isItem(memberAssignment, 'memberAssignment')) {
|
|
throw new TSArgsError('teamsnap.saveMemberAssignment', "`memberAssignment.type` must be 'memberAssignment'");
|
|
}
|
|
return this.saveItem(memberAssignment, callback);
|
|
};
|
|
|
|
exports.deleteMemberAssignment = function(memberAssignment, callback) {
|
|
if (!memberAssignment) {
|
|
throw new TSArgsError('teamsnap.deleteMemberAssignment', '`memberAssignment` must be provided');
|
|
}
|
|
return this.deleteItem(memberAssignment, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/memberBalances.coffee", function(exports, require, module) {
|
|
exports.loadMemberBalances = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMemberBalances', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('memberBalance', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/memberEmailAddresses.coffee", function(exports, require, module) {
|
|
exports.INVITED_STATES = ["new", "new_user", "existing_user"];
|
|
|
|
exports.loadMemberEmailAddresses = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMemberEmailAddresses', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('memberEmailAddress', params, callback);
|
|
};
|
|
|
|
exports.createMemberEmailAddress = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'memberEmailAddress',
|
|
receivesTeamEmails: true
|
|
});
|
|
};
|
|
|
|
exports.inviteMemberEmailAddresses = function(options, callback) {
|
|
if (!options.memberEmailAddressIds) {
|
|
throw new TSArgsError('teamsnap.inviteMemberEmailAddresses', 'options.memberEmailAddressIds is required.');
|
|
}
|
|
if (!options.memberId) {
|
|
throw new TSArgsError('teamsnap.inviteMemberEmailAddresses', 'options.memberId is required.');
|
|
}
|
|
if (!options.teamId) {
|
|
throw new TSArgsError('teamsnap.inviteMemberEmailAddresses', 'options.teamId is required.');
|
|
}
|
|
if (!options.notifyAsMemberId) {
|
|
throw new TSArgsError('teamsnap.inviteMemberEmailAddresses', 'options.notifyAsMemberId is required.');
|
|
}
|
|
return this.collections.memberEmailAddresses.exec('invite', options).pop().callback(callback);
|
|
};
|
|
|
|
exports.saveMemberEmailAddress = function(memberEmailAddress, callback) {
|
|
if (!memberEmailAddress) {
|
|
throw new TSArgsError('teamsnap.saveMemberEmailAddress', '`memberEmailAddress` must be provided');
|
|
}
|
|
if (!this.isItem(memberEmailAddress, 'memberEmailAddress')) {
|
|
throw new TSArgsError('teamsnap.saveMemberEmailAddress', "`memberEmailAddress.type` must be 'memberEmailAddress'");
|
|
}
|
|
if (!memberEmailAddress.memberId) {
|
|
return this.reject('You must choose a member.', 'memberId', callback);
|
|
}
|
|
return this.saveItem(memberEmailAddress, callback);
|
|
};
|
|
|
|
exports.deleteMemberEmailAddress = function(memberEmailAddress, callback) {
|
|
if (!memberEmailAddress) {
|
|
throw new TSArgsError('teamsnap.deleteMemberEmailAddress', '`memberEmailAddress` must be provided');
|
|
}
|
|
return this.deleteItem(memberEmailAddress, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/memberFiles.coffee", function(exports, require, module) {
|
|
exports.loadMemberFiles = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMemberFiles', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('memberFile', params, callback);
|
|
};
|
|
|
|
exports.createMemberFile = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'memberFile'
|
|
});
|
|
};
|
|
|
|
exports.saveMemberFile = function(memberFile, callback) {
|
|
if (!memberFile) {
|
|
throw new TSArgsError('teamsnap.saveMemberFile', '`memberFile` must be provided');
|
|
}
|
|
if (!this.isItem(memberFile, 'memberFile')) {
|
|
throw new TSArgsError('teamsnap.saveMemberFile', "`memberFile.type` must be 'memberFile'");
|
|
}
|
|
if (!memberFile.memberId) {
|
|
return this.reject('You must choose a member.', 'memberId', callback);
|
|
}
|
|
return this.saveItem(memberFile, callback);
|
|
};
|
|
|
|
exports.deleteMemberFile = function(memberFile, callback) {
|
|
if (!memberFile) {
|
|
throw new TSArgsError('teamsnap.deleteMemberFile', '`memberFile` must be provided');
|
|
}
|
|
return this.deleteItem(memberFile, callback);
|
|
};
|
|
|
|
exports.uploadMemberFile = function(memberFileId, file, callback) {
|
|
var params;
|
|
if (this.isItem(memberFileId, 'memberFile')) {
|
|
memberFileId = memberFileId.id;
|
|
}
|
|
if (typeof FormData === 'undefined') {
|
|
this.reject('Your browser does not support the new file upload APIs.', 'file', callback);
|
|
}
|
|
if (!this.isId(memberFileId)) {
|
|
throw new TSArgsError('teamsnap.uploadMemberFile', 'must include `memberFileId`');
|
|
}
|
|
if (!(file instanceof File)) {
|
|
throw new TSArgsError('teamsnap.uploadMemberFile', 'must include `file` as type File');
|
|
}
|
|
params = {
|
|
memberFileId: memberFileId,
|
|
file: file
|
|
};
|
|
return this.collections.memberFiles.exec('uploadMemberFile', params).pop().callback(callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/memberLinks.coffee", function(exports, require, module) {
|
|
exports.loadMemberLinks = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMemberLinks', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('memberLink', params, callback);
|
|
};
|
|
|
|
exports.createMemberLink = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'memberLink'
|
|
});
|
|
};
|
|
|
|
exports.saveMemberLink = function(memberLink, callback) {
|
|
if (!memberLink) {
|
|
throw new TSArgsError('teamsnap.saveMemberLink', '`memberLink` must be provided');
|
|
}
|
|
if (!this.isItem(memberLink, 'memberLink')) {
|
|
throw new TSArgsError('teamsnap.saveMemberLink', "`memberLink.type` must be 'memberLink'");
|
|
}
|
|
if (!memberLink.memberId) {
|
|
return this.reject('You must choose a member.', 'memberId', callback);
|
|
}
|
|
return this.saveItem(memberLink, callback);
|
|
};
|
|
|
|
exports.deleteMemberLink = function(memberLink, callback) {
|
|
if (!memberLink) {
|
|
throw new TSArgsError('teamsnap.deleteMemberLink', '`memberLink` must be provided');
|
|
}
|
|
return this.deleteItem(memberLink, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/memberPayments.coffee", function(exports, require, module) {
|
|
exports.loadMemberPayments = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMemberPayments', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('memberPayment', params, callback);
|
|
};
|
|
|
|
exports.saveMemberPayment = function(memberPayment, callback) {
|
|
if (!memberPayment) {
|
|
throw new TSArgsError('teamsnap.saveMemberPayment', '`memberPayment` must be provided');
|
|
}
|
|
if (!this.isItem(memberPayment, 'memberPayment')) {
|
|
throw new TSArgsError('teamsnap.saveMemberPayment', "`memberPayment.type` must be 'memberPayment'");
|
|
}
|
|
if (!memberPayment.memberId) {
|
|
return this.reject('You must choose a member.', 'memberId', callback);
|
|
}
|
|
return this.saveItem(memberPayment, callback);
|
|
};
|
|
|
|
exports.memberPaymentTransaction = function(memberPaymentId, amount, note, callback) {
|
|
var params;
|
|
if (!this.isItem(memberPaymentId)) {
|
|
throw new TSArgsError('teamsnap.memberPaymentTransaction', "must provide a `memberPaymentId`");
|
|
}
|
|
if (this.isItem(memberPaymentId)) {
|
|
memberPaymentId = memberPaymentId.id;
|
|
}
|
|
if (!amount) {
|
|
return this.reject('You must add an amount.', 'amount', callback);
|
|
}
|
|
if (typeof note === 'function') {
|
|
callback = note;
|
|
}
|
|
params = {
|
|
memberPaymentId: memberPaymentId,
|
|
amount: amount,
|
|
note: note
|
|
};
|
|
return this.collections.memberPayments.exec('transaction', params).pop().callback(callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/memberPhoneNumbers.coffee", function(exports, require, module) {
|
|
exports.loadMemberPhoneNumbers = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMemberPhoneNumbers', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('memberPhoneNumber', params, callback);
|
|
};
|
|
|
|
exports.createMemberPhoneNumber = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'memberPhoneNumber'
|
|
});
|
|
};
|
|
|
|
exports.saveMemberPhoneNumber = function(memberPhoneNumber, callback) {
|
|
if (!memberPhoneNumber) {
|
|
throw new TSArgsError('teamsnap.saveMemberPhoneNumber', '`memberPhoneNumber` must be provided');
|
|
}
|
|
if (!this.isItem(memberPhoneNumber, 'memberPhoneNumber')) {
|
|
throw new TSArgsError('teamsnap.saveMemberPhoneNumber', "`memberPhoneNumber.type` must be 'memberPhoneNumber'");
|
|
}
|
|
if (!memberPhoneNumber.memberId) {
|
|
return this.reject('You must choose a member.', 'memberId', callback);
|
|
}
|
|
return this.saveItem(memberPhoneNumber, callback);
|
|
};
|
|
|
|
exports.deleteMemberPhoneNumber = function(memberPhoneNumber, callback) {
|
|
if (!memberPhoneNumber) {
|
|
throw new TSArgsError('teamsnap.deleteMemberPhoneNumber', '`memberPhoneNumber` must be provided');
|
|
}
|
|
return this.deleteItem(memberPhoneNumber, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/memberPhotos.coffee", function(exports, require, module) {
|
|
exports.loadMemberPhotos = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMemberPhotos', 'must provide a `teamId` or query parameters');
|
|
}
|
|
return this.loadItems('memberPhoto', params, callback);
|
|
};
|
|
|
|
exports.loadMemberPhoto = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
id: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMemberPhoto', 'must provide an `id` or query parameters');
|
|
}
|
|
return this.loadItem('memberPhoto', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/memberRegistrationSignups.coffee", function(exports, require, module) {
|
|
exports.loadMemberRegistrationSignups = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
id: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMemberRegistrationSignups', 'must provide a id or query parameters');
|
|
}
|
|
return this.loadItems('memberRegistrationSignup', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/memberStatistics.coffee", function(exports, require, module) {
|
|
exports.loadMemberStatistics = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMemberStatistics', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('memberStatistic', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/members.coffee", function(exports, require, module) {
|
|
exports.loadMembers = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMembers', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('member', params, callback);
|
|
};
|
|
|
|
exports.createMember = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'member'
|
|
});
|
|
};
|
|
|
|
exports.saveMember = function(member, callback) {
|
|
var ref;
|
|
if (!member) {
|
|
throw new TSArgsError('teamsnap.saveMember', "`member` must be provided");
|
|
}
|
|
if (!this.isItem(member, 'member')) {
|
|
throw new TSArgsError('teamsnap.saveMember', "`type` must be 'member'");
|
|
}
|
|
if (!member.teamId) {
|
|
return this.reject('You must choose a team.', 'teamId', callback);
|
|
}
|
|
if (!((ref = member.firstName) != null ? ref.trim() : void 0)) {
|
|
return this.reject('You must provide a first name for the member.', 'name', callback);
|
|
}
|
|
return this.saveItem(member, callback);
|
|
};
|
|
|
|
exports.deleteMember = function(member, callback) {
|
|
if (!member) {
|
|
throw new TSArgsError('teamsnap.deleteMember', '`member` must be provided');
|
|
}
|
|
return this.deleteItem(member, callback);
|
|
};
|
|
|
|
exports.uploadMemberPhoto = function(memberId, file, callback) {
|
|
var params;
|
|
if (this.isItem(memberId, 'member')) {
|
|
memberId = memberId.id;
|
|
}
|
|
if (typeof FormData === 'undefined') {
|
|
this.reject('Your browser does not support the new file upload APIs.', 'file', callback);
|
|
}
|
|
if (!this.isId(memberId)) {
|
|
throw new TSArgsError('teamsnap.deleteMemberPhoto', "`memberId` must be a valid id");
|
|
}
|
|
if (!(file instanceof File)) {
|
|
throw new TSArgsError('teamsnap.uploadMemberFile', 'must include `file` as type File');
|
|
}
|
|
params = {
|
|
memberId: memberId,
|
|
file: file
|
|
};
|
|
return this.collections.members.exec('uploadMemberPhoto', params).pop().callback(callback);
|
|
};
|
|
|
|
exports.removeMemberPhoto = function(memberId, callback) {
|
|
var params;
|
|
if (this.isItem(memberId, 'member')) {
|
|
memberId = memberId.id;
|
|
}
|
|
if (!this.isId(memberId)) {
|
|
throw new TSArgsError('teamsnap.deleteMemberPhoto', "`memberId` must be a valid id");
|
|
}
|
|
params = {
|
|
memberId: memberId
|
|
};
|
|
return this.collections.members.exec('removeMemberPhoto', params).pop().callback(callback);
|
|
};
|
|
|
|
exports.generateMemberThumbnail = function(memberId, x, y, width, height, callback) {
|
|
var params;
|
|
if (this.isItem(memberId, 'member')) {
|
|
memberId = memberId.id;
|
|
}
|
|
if (!((memberId != null) && (x != null) && (y != null) && (width != null) && (height != null))) {
|
|
throw new TSArgsError('teamsnap.generateThumbnail', "`memberId`, `x`, `y`, `width`, and `height` are all required");
|
|
}
|
|
if (!this.isId(memberId)) {
|
|
throw new TSArgsError('teamsnap.generateMemberThumbnail', "`memberId` must be a valid id");
|
|
}
|
|
params = {
|
|
memberId: memberId,
|
|
x: x,
|
|
y: y,
|
|
width: width,
|
|
height: height
|
|
};
|
|
return this.collections.members.exec('generateMemberThumbnail', params).pop().callback(callback);
|
|
};
|
|
|
|
exports.disableMember = function(memberId, callback) {
|
|
var params;
|
|
if (this.isItem(memberId, 'member')) {
|
|
memberId = memberId.id;
|
|
}
|
|
if (!this.isId(memberId)) {
|
|
throw new TSArgsError('teamsnap.disableMember', "`memberId` must be a valid id");
|
|
}
|
|
params = {
|
|
memberId: memberId
|
|
};
|
|
return this.collections.members.exec('disableMember', params).pop().callback(callback);
|
|
};
|
|
|
|
exports.divisionLoadMembers = function(params, callback) {
|
|
if (!params.divisionId) {
|
|
throw new TSArgsError('teamsnap.divisionLoadMembers', "`divisionId` must be provided");
|
|
}
|
|
return this.collections.members.queryItems('divisionSearch', params, callback);
|
|
};
|
|
|
|
exports.divisionAdvancedLoadMembers = function(params, callback) {
|
|
if (!params.divisionId) {
|
|
throw new TSArgsError('teamsnap.divisionAdvancedLoadMembers', "`divisionId` must be provided");
|
|
}
|
|
return this.collections.members.queryItems('advancedDivisionSearch', params, callback);
|
|
};
|
|
|
|
exports.memberName = function(member, reverse, forSort) {
|
|
if (!member) {
|
|
return '';
|
|
}
|
|
if (reverse && (member.firstName && member.lastName || forSort)) {
|
|
return member.lastName + ', ' + member.firstName;
|
|
}
|
|
return [member.firstName || '', member.lastName || ''].join(' ').trim();
|
|
};
|
|
|
|
exports.getMemberSort = function(reverse) {
|
|
return (function(_this) {
|
|
return function(itemA, itemB) {
|
|
var valueA, valueB;
|
|
if (!_this.isItem(itemA, 'member') || !_this.isItem(itemB, 'member')) {
|
|
valueA = itemA.type;
|
|
valueB = itemB.type;
|
|
} else {
|
|
valueA = _this.memberName(itemA, reverse, true).toLowerCase();
|
|
valueB = _this.memberName(itemB, reverse, true).toLowerCase();
|
|
}
|
|
if (typeof (valueA != null ? valueA.localeCompare : void 0) === 'function') {
|
|
return valueA.localeCompare(valueB);
|
|
} else {
|
|
if (valueA === valueB) {
|
|
return 0;
|
|
} else if (!valueA && valueB) {
|
|
return 1;
|
|
} else if (valueA && !valueB) {
|
|
return -1;
|
|
} else if (valueA > valueB) {
|
|
return 1;
|
|
} else if (valueA < valueB) {
|
|
return -1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
};
|
|
})(this);
|
|
};
|
|
|
|
exports.canEditTeam = function(member, team) {
|
|
if (!(member && team)) {
|
|
return false;
|
|
}
|
|
return (member.isManager || member.isOwner) && (!team.isArchivedSeason || member.isOwner);
|
|
};
|
|
|
|
exports.canEditItem = function(member, team, item) {
|
|
if (!(member && team && this.isItem(item))) {
|
|
return false;
|
|
}
|
|
if (item.readOnly) {
|
|
return false;
|
|
}
|
|
if (item.type === 'member' && item.isOwner && !member.isOwner) {
|
|
return false;
|
|
}
|
|
if (teamsnap.canEditTeam(member, team)) {
|
|
return true;
|
|
}
|
|
if (team.isArchivedSeason) {
|
|
return false;
|
|
}
|
|
if (this.isItem(item, 'member')) {
|
|
return item.href === member.href;
|
|
} else {
|
|
return item.links.member.href === member.href;
|
|
}
|
|
};
|
|
|
|
exports.importMembersFromTeam = function(memberIds, teamId, sendInvites, callback) {
|
|
var params;
|
|
if (!memberIds) {
|
|
throw new TSArgsError('teamsnap.importMembersFromTeam', 'must include `memberIds`');
|
|
}
|
|
if (!this.isItem(teamId)) {
|
|
throw new TSArgsError('teamsnap.importMembersFromTeam', "must provide a teamId");
|
|
}
|
|
if (this.isItem(teamId)) {
|
|
teamId = teamId.id;
|
|
}
|
|
if (typeof sendInvites === 'function') {
|
|
callback = sendInvites;
|
|
}
|
|
params = {
|
|
sourceMemberIds: memberIds,
|
|
destinationTeamId: teamId,
|
|
sendInvites: sendInvites
|
|
};
|
|
return this.collections.members.exec('importFromTeam', params, callback);
|
|
};
|
|
|
|
exports.loadImportableMembers = function(userId, includeArchivedTeams, callback) {
|
|
var params;
|
|
if (!userId) {
|
|
throw new TSArgsError('teamsnap.loadImportableMembers', "must provide a userId");
|
|
}
|
|
if (typeof includeArchivedTeams === 'function') {
|
|
callback = includeArchivedTeams;
|
|
}
|
|
params = {
|
|
userId: userId,
|
|
includeArchivedTeams: includeArchivedTeams
|
|
};
|
|
return this.collections.members.queryItems('importableMembers', params, callback);
|
|
};
|
|
|
|
exports.bulkDeleteMembers = function(members, callback) {
|
|
if (Array.isArray(members)) {
|
|
if (members.length === 0) {
|
|
throw new TSArgsError('teamsnap.bulkDeleteMembers', 'The array of members to be deleted is empty.');
|
|
} else if (members.every((function(_this) {
|
|
return function(member) {
|
|
return _this.isItem(member, 'member');
|
|
};
|
|
})(this))) {
|
|
members = {
|
|
memberId: members.map(function(member) {
|
|
return member.id;
|
|
})
|
|
};
|
|
} else {
|
|
throw new TSArgsError('teamsnap.bulkDeleteMembers', 'Must provide an `array` of member `ids` or `member` objects');
|
|
}
|
|
} else if (typeof members === 'object' && this.isItem(members, 'member')) {
|
|
members = {
|
|
memberId: members.id
|
|
};
|
|
} else {
|
|
throw new TSArgsError('teamsnap.bulkDeleteMembers', 'Must provide an `array` of members, or a `member` object');
|
|
}
|
|
return this.collections.members.exec('bulkDelete', members).callback(callback);
|
|
};
|
|
|
|
exports.moveMemberToTeam = function(params, callback) {
|
|
if (!params.member) {
|
|
throw new TSArgsError('teamsnap.moveMemberToTeam', 'params must include `member`');
|
|
}
|
|
if (!params.divisionId) {
|
|
throw new TSArgsError('teamsnap.moveMemberToTeam', 'params must include `divisionId`');
|
|
}
|
|
if (Array.isArray(params.member)) {
|
|
if (params.member.length === 0) {
|
|
throw new TSArgsError('teamsnap.moveMemberToTeam', 'member in params is empty.');
|
|
} else if (params.member.every((function(_this) {
|
|
return function(member) {
|
|
return _this.isItem(member, 'member');
|
|
};
|
|
})(this))) {
|
|
params.memberId = params.member.map(function(member) {
|
|
return member.id;
|
|
});
|
|
} else {
|
|
throw new TSArgsError('teamsnap.moveMemberToTeam', 'Must provide an `array` of member objects or a `member` object for member');
|
|
}
|
|
} else if (this.isItem(params.member, 'member')) {
|
|
params.memberId = params.member.id;
|
|
} else {
|
|
throw new TSArgsError('teamsnap.moveMemberToTeam', 'Must provide an `array` of member objects or `member` objects for member');
|
|
}
|
|
if (this.isItem(params.divisionId, 'division')) {
|
|
params.divisionId = params.divisionId.id;
|
|
}
|
|
if (this.isItem(params.teamId, 'team')) {
|
|
params.teamId = params.teamId.id;
|
|
}
|
|
return this.collections.members.exec('moveMember', params).callback(callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/membersPreferences.coffee", function(exports, require, module) {
|
|
exports.PREFS = {
|
|
SCHEDULE_SHOW: {
|
|
ALL: 1,
|
|
GAMES: 2,
|
|
EVENTS: 3
|
|
}
|
|
};
|
|
|
|
exports.loadMembersPreferences = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMembersPreferences', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('memberPreferences', params, callback);
|
|
};
|
|
|
|
exports.loadMemberPreferences = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMemberPreferences', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItem('memberPreferences', params, callback);
|
|
};
|
|
|
|
exports.saveMemberPreferences = function(memberPreferences, callback) {
|
|
if (!memberPreferences) {
|
|
throw new TSArgsError('teamsnap.saveMemberPreferences', "`memberPreferences` must be provided");
|
|
}
|
|
if (!this.isItem(memberPreferences, 'memberPreferences')) {
|
|
throw new TSArgsError('teamsnap.saveMemberPreferences', "`memberPreferences.type` must be 'memberPreferences'");
|
|
}
|
|
return this.saveItem(memberPreferences, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/messageData.coffee", function(exports, require, module) {
|
|
exports.loadMessageData = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMessageData', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('messageDatum', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/messages.coffee", function(exports, require, module) {
|
|
exports.loadMessages = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadMessages', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('message', params, callback);
|
|
};
|
|
|
|
exports.markMessageAsRead = function(params, callback) {
|
|
if (typeof params === 'object') {
|
|
params = {
|
|
id: params.id
|
|
};
|
|
} else if (this.isId(params)) {
|
|
params = {
|
|
id: params
|
|
};
|
|
} else {
|
|
throw new TSArgsError('teamsnap.markMessageAsRead', 'a message `id` or `message` object must be provided');
|
|
}
|
|
return this.collections.messages.exec('markMessageAsRead', params).pop().callback(callback);
|
|
};
|
|
|
|
exports.bulkDeleteMessages = function(messages, callback) {
|
|
if (Array.isArray(messages)) {
|
|
if (messages.length === 0) {
|
|
throw new TSArgsError('teamsnap.bulkDeleteMessages', 'The array of messages to be deleted is empty.');
|
|
} else if (this.isItem(messages[0], 'message')) {
|
|
messages = {
|
|
id: messages.map(function(message) {
|
|
return message.id;
|
|
})
|
|
};
|
|
} else if (this.isId(messages[0])) {
|
|
messages = {
|
|
id: messages
|
|
};
|
|
} else {
|
|
throw new TSArgsError('teamsnap.bulkDeleteMessages', 'Must provide an `array` of message `ids` or `message` objects');
|
|
}
|
|
} else if (typeof messages === 'object' && this.isItem(messages, 'message')) {
|
|
messages = {
|
|
id: messages.id
|
|
};
|
|
} else if (this.isId(messages)) {
|
|
messages = {
|
|
id: messages
|
|
};
|
|
} else {
|
|
throw new TSArgsError('teamsnap.bulkDeleteMessages', 'Must provide an `array` of message `ids`, an `id` or a `message` object');
|
|
}
|
|
return this.collections.messages.exec('bulkDelete', messages).callback(callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/opponents.coffee", function(exports, require, module) {
|
|
exports.loadOpponents = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadOpponents', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('opponent', params, callback);
|
|
};
|
|
|
|
exports.createOpponent = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'opponent',
|
|
name: ''
|
|
});
|
|
};
|
|
|
|
exports.saveOpponent = function(opponent, callback) {
|
|
var ref;
|
|
if (!opponent) {
|
|
throw new TSArgsError('teamsnap.saveOpponent', "`opponent` must be provided");
|
|
}
|
|
if (!this.isItem(opponent, 'opponent')) {
|
|
throw new TSArgsError('teamsnap.saveOpponent', "`opponent.type` must be 'opponent'");
|
|
}
|
|
if (!opponent.teamId) {
|
|
return this.reject('You must choose a team.', 'teamId', callback);
|
|
}
|
|
if (!((ref = opponent.name) != null ? ref.trim() : void 0)) {
|
|
return this.reject('You must provide a name for the opponent.', 'name', callback);
|
|
}
|
|
return this.saveItem(opponent, callback);
|
|
};
|
|
|
|
exports.deleteOpponent = function(opponent, callback) {
|
|
if (!opponent) {
|
|
throw new TSArgsError('teamsnap.deleteOpponent', '`opponent` must be provided');
|
|
}
|
|
return this.deleteItem(opponent, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/opponentsResults.coffee", function(exports, require, module) {
|
|
exports.loadOpponentsResults = function(params, callback) {
|
|
if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadOpponentsResults', 'must provide query parameters');
|
|
}
|
|
return this.loadItems('opponentResults', params, callback);
|
|
};
|
|
|
|
exports.loadOpponentResults = function(opponentId, callback) {
|
|
var params;
|
|
if (!this.isId(opponentId)) {
|
|
throw new TSArgsError('teamsnap.loadOpponentResults', 'must provide an opponentId');
|
|
}
|
|
params = {
|
|
id: opponentId
|
|
};
|
|
return this.loadItem('opponentResults', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/paymentNotes.coffee", function(exports, require, module) {
|
|
exports.loadPaymentNotes = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadPaymentNotes', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('paymentNote', params, callback);
|
|
};
|
|
|
|
exports.createPaymentNote = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'paymentNote'
|
|
});
|
|
};
|
|
|
|
exports.savePaymentNote = function(paymentNote, callback) {
|
|
if (!paymentNote) {
|
|
throw new TSArgsError('teamsnap.savePaymentNote', '`paymentNote` must be provided');
|
|
}
|
|
if (!this.isItem(paymentNote, 'paymentNote')) {
|
|
throw new TSArgsError('teamsnap.savePaymentNote', "`paymentNote.type` must be 'paymentNote'");
|
|
}
|
|
if (!paymentNote.teamId) {
|
|
return this.reject('You must choose a team.', 'teamId', callback);
|
|
}
|
|
if (!paymentNote.memberPaymentId) {
|
|
return this.reject('You must specify a memberPaymentId.', 'memberPaymentId', callback);
|
|
}
|
|
if (!paymentNote.note) {
|
|
return this.reject('You must provide a note.', 'note', callback);
|
|
}
|
|
return this.saveItem(paymentNote, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/plans.coffee", function(exports, require, module) {
|
|
exports.loadPlans = function(params, callback) {
|
|
if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadPlans', 'must provide query parameters');
|
|
}
|
|
return this.loadItems('plan', params, callback);
|
|
};
|
|
|
|
exports.loadPlan = function(teamId, callback) {
|
|
var params;
|
|
if (!this.isId(teamId)) {
|
|
throw new TSArgsError('teamsnap.loadPlan', 'must provide a teamId');
|
|
}
|
|
params = {
|
|
teamId: teamId
|
|
};
|
|
return this.loadItem('plan', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/registrationForms.coffee", function(exports, require, module) {
|
|
exports.loadRegistrationForms = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
id: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadRegistrationForms', 'must provide a id or query parameters');
|
|
}
|
|
return this.loadItems('registrationForm', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/sponsors.coffee", function(exports, require, module) {
|
|
exports.loadSponsors = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadSponsors', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('sponsor', params, callback);
|
|
};
|
|
|
|
exports.createSponsor = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'sponsor',
|
|
name: ''
|
|
});
|
|
};
|
|
|
|
exports.saveSponsor = function(sponsor, callback) {
|
|
if (!sponsor) {
|
|
throw new TSArgsError('teamsnap.saveSponsor', "`sponsor` must be provided");
|
|
}
|
|
if (!this.isItem(sponsor, 'sponsor')) {
|
|
throw new TSArgsError('teamsnap.saveSponsor', "`sponsor.type` must be 'sponsor'");
|
|
}
|
|
return this.saveItem(sponsor, callback);
|
|
};
|
|
|
|
exports.deleteSponsor = function(sponsor, callback) {
|
|
if (!sponsor) {
|
|
throw new TSArgsError('teamsnap.deleteSponsor', "`sponsor` must be provided");
|
|
}
|
|
return this.deleteItem(sponsor, callback);
|
|
};
|
|
|
|
exports.uploadSponsorLogo = function(sponsorId, file, callback) {
|
|
var params;
|
|
if (this.isItem(sponsorId, 'sponsor')) {
|
|
sponsorId = sponsorId.id;
|
|
}
|
|
if (typeof FormData === 'undefined') {
|
|
this.reject('Your browser does not support the new file upload APIs.', 'file', callback);
|
|
}
|
|
if (!this.isId(sponsorId)) {
|
|
throw new TSArgsError('teamsnap.uploadSponsorLogo', 'must include `sponsorId`');
|
|
}
|
|
if (!(file instanceof File)) {
|
|
throw new TSArgsError('teamsnap.uploadSponsorLogo', 'must include `file` as type File');
|
|
}
|
|
params = {
|
|
sponsorId: sponsorId,
|
|
file: file
|
|
};
|
|
return this.collections.sponsors.exec('uploadSponsorLogo', params).pop().callback(callback);
|
|
};
|
|
|
|
exports.deleteSponsorLogo = function(sponsorId, callback) {
|
|
var params;
|
|
if (!sponsorId) {
|
|
throw new TSArgsError('teamsnap.deleteSponsorLogo', "`sponsorId` must be provided");
|
|
}
|
|
if (this.isItem(sponsorId, 'sponsor')) {
|
|
sponsorId = sponsorId.id;
|
|
}
|
|
if (!this.isId(sponsorId)) {
|
|
throw new TSArgsError('teamsnap.deleteSponsorLogo', "`sponsorId` must be a valid id");
|
|
}
|
|
params = {
|
|
sponsorId: sponsorId
|
|
};
|
|
return this.collections.sponsors.exec('removeSponsorLogo', params).callback(callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/sports.coffee", function(exports, require, module) {
|
|
exports.loadSports = function(params, callback) {
|
|
if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadSports', 'must provide query parameters');
|
|
}
|
|
return this.loadItems('sport', params, callback);
|
|
};
|
|
|
|
exports.loadSport = function(teamId, callback) {
|
|
var params;
|
|
if (!this.isId(teamId)) {
|
|
throw new TSArgsError('teamsnap.loadSport', 'must provide a teamId');
|
|
}
|
|
params = {
|
|
teamId: teamId
|
|
};
|
|
return this.loadItem('sport', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/statisticAggregates.coffee", function(exports, require, module) {
|
|
exports.loadStatisticAggregates = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadStatisticAggregates', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('statisticAggregate', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/statisticData.coffee", function(exports, require, module) {
|
|
exports.loadStatisticData = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadStatisticData', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('statisticDatum', params, callback);
|
|
};
|
|
|
|
exports.createStatisticDatum = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'statisticDatum'
|
|
});
|
|
};
|
|
|
|
exports.saveStatisticDatum = function(statisticDatum, callback) {
|
|
if (!statisticDatum) {
|
|
throw new TSArgsError('teamsnap.saveStatisticDatum', '`statisticDatum` must be provided');
|
|
}
|
|
if (!this.isItem(statisticDatum, 'statisticDatum')) {
|
|
throw new TSArgsError('teamsnap.saveStatisticDatum', "`statisticDatum.type` must be 'statisticDatum'");
|
|
}
|
|
if (!statisticDatum.eventId) {
|
|
return this.reject('You must specify an event.', 'eventId', callback);
|
|
}
|
|
if (!statisticDatum.statisticId) {
|
|
return this.reject('You must specify a statistic.', 'statisticId', callback);
|
|
}
|
|
if (!statisticDatum.teamId) {
|
|
return this.reject('You must choose a team.', 'teamId', callback);
|
|
}
|
|
return this.saveItem(statisticDatum, callback);
|
|
};
|
|
|
|
exports.deleteStatisticDatum = function(statisticDatum, callback) {
|
|
if (!statisticDatum) {
|
|
throw new TSArgsError('teamsnap.deleteStatisticDatum', '`statisticDatum` must be provided');
|
|
}
|
|
return this.deleteItem(statisticDatum, callback);
|
|
};
|
|
|
|
exports.bulkSaveStatisticData = function(templates, callback) {
|
|
var params;
|
|
if (!templates) {
|
|
throw new TSArgsError('teamsnap.bulkSaveStatisticData', "`templates` must be provided");
|
|
}
|
|
params = {
|
|
templates: templates
|
|
};
|
|
return this.collections.statisticData.exec('bulkUpdateStatisticData', params).callback(callback);
|
|
};
|
|
|
|
exports.bulkDeleteStatisticData = function(member, event, callback) {
|
|
var params;
|
|
if (!member) {
|
|
throw new TSArgsError('teamsnap.bulkDeleteStatisticData', "`member` must be provided");
|
|
}
|
|
if (!this.isItem(member, 'member')) {
|
|
throw new TSArgsError('teamsnap.bulkDeleteStatisticData', "`member.type` must be 'member'");
|
|
}
|
|
if (!event) {
|
|
throw new TSArgsError('teamsnap.bulkDeleteStatisticData', "`event` must be provided");
|
|
}
|
|
if (!this.isItem(event, 'event')) {
|
|
throw new TSArgsError('teamsnap.bulkDeleteStatisticData', "`event.type` must be 'event'");
|
|
}
|
|
params = {
|
|
memberId: member.id,
|
|
eventId: event.id
|
|
};
|
|
return this.collections.statisticData.exec('bulkDeleteStatisticData', params).callback(callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/statisticGroups.coffee", function(exports, require, module) {
|
|
exports.loadStatisticGroups = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadStatisticGroups', 'you must provide a a teamId or query parameters');
|
|
}
|
|
return this.loadItems('statisticGroup', params, callback);
|
|
};
|
|
|
|
exports.createStatisticGroup = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'statisticGroup'
|
|
});
|
|
};
|
|
|
|
exports.saveStatisticGroup = function(statisticGroup, callback) {
|
|
if (!statisticGroup) {
|
|
throw new TSArgsError('teamsnap.saveStatisticGroup', '`statisticGroup` must be provided');
|
|
}
|
|
if (!this.isItem(statisticGroup, 'statisticGroup')) {
|
|
throw new TSArgsError('teamsnap.saveStatisticGroup', "`statisticGroup.type` must be 'statisticGroup'");
|
|
}
|
|
if (!statisticGroup.name) {
|
|
return this.reject('You must specify a name', 'name', callback);
|
|
}
|
|
if (!statisticGroup.teamId) {
|
|
return this.reject('You must specify a team', 'teamId', callback);
|
|
}
|
|
return this.saveItem(statisticGroup, callback);
|
|
};
|
|
|
|
exports.deleteStatisticGroup = function(statisticGroup, callback) {
|
|
if (!statisticGroup) {
|
|
throw new TSArgsError('teamsnap.deleteStatisticGroup', '`statisticGroup` must be provided');
|
|
}
|
|
return this.deleteItem(statisticGroup, callback);
|
|
};
|
|
|
|
exports.reorderStatisticGroups = function(teamId, statisticGroupIds, callback) {
|
|
var params;
|
|
if (!this.isId(teamId)) {
|
|
throw new TSArgsError('teamsnap.reorderStatisticGroups', '`teamId` must be provided');
|
|
}
|
|
if (!(statisticGroupIds && Array.isArray(statisticGroupIds))) {
|
|
throw new TSArgsError('teamsnap.reorderStatisticGroups', 'You must provide an array of ordered Statistic Group IDs');
|
|
}
|
|
params = {
|
|
teamId: teamId,
|
|
sortedIds: statisticGroupIds
|
|
};
|
|
return this.collections.statisticGroups.exec('reorderStatisticGroups', params).callback(callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/statistics.coffee", function(exports, require, module) {
|
|
exports.loadStatistics = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadStatistics', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('statistic', params, callback);
|
|
};
|
|
|
|
exports.createStatistic = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'statistic'
|
|
});
|
|
};
|
|
|
|
exports.saveStatistic = function(statistic, callback) {
|
|
if (!statistic) {
|
|
throw new TSArgsError('teamsnap.saveStatistic', '`statistic` must be provided');
|
|
}
|
|
if (!this.isItem(statistic, 'statistic')) {
|
|
throw new TSArgsError('teamsnap.saveStatistic', "`statistic.type` must be 'statistic'");
|
|
}
|
|
if (!statistic.name) {
|
|
return this.reject('You must specify a name.', 'name', callback);
|
|
}
|
|
if (!statistic.acronym) {
|
|
return this.reject('You must specify an acronym.', 'acronym', callback);
|
|
}
|
|
if (!statistic.teamId) {
|
|
return this.reject('You must choose a team.', 'teamId', callback);
|
|
}
|
|
return this.saveItem(statistic, callback);
|
|
};
|
|
|
|
exports.deleteStatistic = function(statistic, callback) {
|
|
if (!statistic) {
|
|
throw new TSArgsError('teamsnap.deleteStatistic', '`statistic` must be provided');
|
|
}
|
|
return this.deleteItem(statistic, callback);
|
|
};
|
|
|
|
exports.reorderStatistics = function(teamId, statisticIds, callback) {
|
|
var params;
|
|
if (!this.isId(teamId)) {
|
|
throw new TSArgsError('teamsnap.reorderStatistics', '`teamId` must be provided');
|
|
}
|
|
if (!(statisticIds && Array.isArray(statisticIds))) {
|
|
throw new TSArgsError('teamsnap.reorderStatistics', 'You must provide an array of ordered Statistic IDs');
|
|
}
|
|
params = {
|
|
teamId: teamId,
|
|
sortedIds: statisticIds
|
|
};
|
|
return this.collections.statistics.exec('reorderStatistics', params).callback(callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/teamFees.coffee", function(exports, require, module) {
|
|
exports.loadTeamFees = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTeamFees', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('teamFee', params, callback);
|
|
};
|
|
|
|
exports.createTeamFee = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'teamFee'
|
|
});
|
|
};
|
|
|
|
exports.saveTeamFee = function(teamFee, callback) {
|
|
if (!teamFee) {
|
|
throw new TSArgsError('teamsnap.saveTeamFee', '`teamFee` must be provided');
|
|
}
|
|
if (!this.isItem(teamFee, 'teamFee')) {
|
|
throw new TSArgsError('teamsnap.saveTeamFee', "`teamFee.type` must be 'teamFee'");
|
|
}
|
|
if (!teamFee.teamId) {
|
|
return this.reject('You must choose a team.', 'teamId', callback);
|
|
}
|
|
if (!teamFee.description) {
|
|
return this.reject('You must provide a team fee description.', 'description', callback);
|
|
}
|
|
if (!teamFee.amount) {
|
|
return this.reject('You must provide a fee amount.', 'description', callback);
|
|
}
|
|
return this.saveItem(teamFee, callback);
|
|
};
|
|
|
|
exports.deleteTeamFee = function(teamFee, callback) {
|
|
if (!teamFee) {
|
|
throw new TSArgsError('teamsnap.deleteTeamFee', '`teamFee` must be provided');
|
|
}
|
|
return this.deleteItem(teamFee, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/teamMedia.coffee", function(exports, require, module) {
|
|
exports.ROTATION_DIRECTIONS = {
|
|
CLOCKWISE: 'clockwise',
|
|
COUNTERCLOCKWISE: 'counterclockwise'
|
|
};
|
|
|
|
exports.loadTeamMedia = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTeamMedia', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('teamMedium', params, callback);
|
|
};
|
|
|
|
exports.createTeamMedium = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'teamMedium'
|
|
});
|
|
};
|
|
|
|
exports.uploadTeamMedium = function(teamMedium, progressCallback, callback) {
|
|
if (!teamMedium) {
|
|
throw new TSArgsError('teamsnap.uploadTeamMedium', "`teamMedium` must be provided");
|
|
}
|
|
if (!this.isItem(teamMedium, 'teamMedium')) {
|
|
throw new TSArgsError('teamsnap.uploadTeamMedium', "`type` must be 'teamMedium'");
|
|
}
|
|
if (!this.isId(teamMedium.teamId)) {
|
|
throw new TSArgsError('teamsnap.uploadTeamMedium', 'must include `teamId`');
|
|
}
|
|
if (!this.isId(teamMedium.teamMediaGroupId)) {
|
|
throw new TSArgsError('teamsnap.uploadTeamMedium', 'must include `teamMediaGroupId`');
|
|
}
|
|
if (!(teamMedium.file instanceof File)) {
|
|
throw new TSArgsError('teamsnap.uploadTeamMedium', 'must include `file` as type File');
|
|
}
|
|
return this.collections.teamMedia.file('uploadTeamMedium', teamMedium, progressCallback).pop().callback(callback);
|
|
};
|
|
|
|
exports.deleteTeamMedium = function(teamMedium, callback) {
|
|
if (!teamMedium) {
|
|
throw new TSArgsError('teamsnap.deleteTeamMedium', '`teamMedium` must be provided');
|
|
}
|
|
return this.deleteItem(teamMedium, callback);
|
|
};
|
|
|
|
exports.saveTeamMedium = function(teamMedium, callback) {
|
|
if (!teamMedium) {
|
|
throw new TSArgsError('teamsnap.saveTeamMedium', "`teamMedium` must be provided");
|
|
}
|
|
if (!this.isItem(teamMedium, 'teamMedium')) {
|
|
throw new TSArgsError('teamsnap.saveTeamMedium', "`type` must be 'teamMedium'");
|
|
}
|
|
if (!this.isId(teamMedium.teamId)) {
|
|
throw new TSArgsError('teamsnap.saveTeamMedium', 'must include `teamId`');
|
|
}
|
|
if (!this.isId(teamMedium.memberId)) {
|
|
throw new TSArgsError('teamsnap.saveTeamMedium', 'must include `memberId`');
|
|
}
|
|
if (!this.isId(teamMedium.teamMediaGroupId)) {
|
|
throw new TSArgsError('teamsnap.saveTeamMedium', 'must include `teamMediaGroupId`');
|
|
}
|
|
return this.saveItem(teamMedium, callback);
|
|
};
|
|
|
|
exports.saveTeamVideoLink = function(teamMedium, callback) {
|
|
if (!teamMedium) {
|
|
throw new TSArgsError('teamsnap.createVideoLink', "`teamMedium` must be provided");
|
|
}
|
|
if (!this.isItem(teamMedium, 'teamMedium')) {
|
|
throw new TSArgsError('teamsnap.createVideoLink', "`type` must be 'teamMedium'");
|
|
}
|
|
if (!this.isId(teamMedium.teamId)) {
|
|
throw new TSArgsError('teamsnap.createVideoLink', 'must include `teamId`');
|
|
}
|
|
if (!this.isId(teamMedium.teamMediaGroupId)) {
|
|
throw new TSArgsError('teamsnap.createVideoLink', 'must include `teamMediaGroupId`');
|
|
}
|
|
return this.collections.teamMedia.exec('createTeamVideoLink', teamMedium).pop().callback(callback);
|
|
};
|
|
|
|
exports.bulkDeleteTeamMedia = function(teamMediumIds, callback) {
|
|
var params;
|
|
if (!teamMediumIds) {
|
|
throw new TSArgsError('teamsnap.bulkDeleteTeamMedia', "`teamMediumIds` must be provided");
|
|
}
|
|
params = {
|
|
teamMediumIds: teamMediumIds
|
|
};
|
|
return this.collections.teamMedia.exec('bulkDeleteTeamMedia', params).callback(callback);
|
|
};
|
|
|
|
exports.assignMediaToGroup = function(teamMediumIds, teamMediaGroupId, callback) {
|
|
var params;
|
|
if (!teamMediumIds) {
|
|
throw new TSArgsError('teamsnap.assignMediaToGroup', 'must provide teamMediumIds');
|
|
}
|
|
if (this.isItem(teamMediaGroupId, 'teamMediaGroup')) {
|
|
teamMediaGroupId = teamMediaGroupId.id;
|
|
}
|
|
if (!(teamMediaGroupId && this.isId(teamMediaGroupId))) {
|
|
throw new TSArgsError('teamsnap.assignMediaToGroup', 'must provide a teamMediaGroupId');
|
|
}
|
|
params = {
|
|
teamMediumIds: teamMediumIds,
|
|
teamMediaGroupId: teamMediaGroupId
|
|
};
|
|
return this.collections.teamMedia.exec('assignMediaToGroup', params).callback(callback);
|
|
};
|
|
|
|
exports.rotateTeamMediumImage = function(teamMediumId, rotateDirection, callback) {
|
|
var params;
|
|
if (this.isItem(teamMediumId, 'teamMedium')) {
|
|
teamMediumId = teamMediumId.id;
|
|
}
|
|
if (!(teamMediumId && this.isId(teamMediumId))) {
|
|
throw new TSArgsError('teamsnap.rotateTeamMediumImage', 'must provide a teamMediumId');
|
|
}
|
|
if (!rotateDirection) {
|
|
throw new TSArgsError('teamsnap.rotateTeamMediumImage', 'must provide a rotateDirection');
|
|
}
|
|
params = {
|
|
teamMediumId: teamMediumId,
|
|
rotateDirection: rotateDirection
|
|
};
|
|
return this.collections.teamMedia.exec('rotateTeamMediumImage', params).pop().callback(callback);
|
|
};
|
|
|
|
exports.setMediumAsTeamPhoto = function(teamMediumId, callback) {
|
|
var params;
|
|
if (this.isItem(teamMediumId, 'teamMedium')) {
|
|
teamMediumId = teamMediumId.id;
|
|
}
|
|
if (!(teamMediumId && this.isId(teamMediumId))) {
|
|
throw new TSArgsError('teamsnap.setMediumAsTeamPhoto', 'must include a teamMediumId');
|
|
}
|
|
params = {
|
|
teamMediumId: teamMediumId
|
|
};
|
|
return this.collections.teamMedia.exec('setMediumAsTeamPhoto', params).pop().callback(callback);
|
|
};
|
|
|
|
exports.setMediumAsMemberPhoto = function(teamMediumId, memberId, callback) {
|
|
var params;
|
|
if (this.isItem(teamMediumId, 'teamMedium')) {
|
|
teamMediumId = teamMediumId.id;
|
|
}
|
|
if (this.isItem(memberId, 'member')) {
|
|
memberId = memberId.id;
|
|
}
|
|
if (!(teamMediumId && this.isId(teamMediumId))) {
|
|
throw new TSArgsError('teamsnap.setMediumAsMemberPhoto', 'must include a teamMediumId');
|
|
}
|
|
if (!(memberId && this.isId(memberId))) {
|
|
throw new TSArgsError('teamsnap.setMediumAsMemberPhoto', 'must include a memberId');
|
|
}
|
|
params = {
|
|
teamMediumId: teamMediumId,
|
|
memberId: memberId
|
|
};
|
|
return this.collections.teamMedia.exec('setMediumAsMemberPhoto', params).pop().callback(callback);
|
|
};
|
|
|
|
exports.reorderTeamMedia = function(teamId, teamMediaIds, callback) {
|
|
var params;
|
|
if (!this.isId(teamId)) {
|
|
throw new TSArgsError('teamsnap.reorderTeamMedia', '`teamId` must be provided');
|
|
}
|
|
if (!(teamMediaIds && Array.isArray(teamMediaIds))) {
|
|
throw new TSArgsError('teamsnap.reorderTeamMedia', 'You must provide an array of ordered Team Medium IDs');
|
|
}
|
|
params = {
|
|
teamId: teamId,
|
|
sortedIds: teamMediaIds
|
|
};
|
|
return this.collections.teamMedia.exec('reorderTeamMedia', params).callback(callback);
|
|
};
|
|
|
|
exports.facebookShareTeamMedium = function(teamMediumId, facebookPageId, isSuppressedFromFeed, caption, callback) {
|
|
var params;
|
|
if (typeof facebookPageId === 'boolean') {
|
|
callback = caption;
|
|
caption = isSuppressedFromFeed;
|
|
isSuppressedFromFeed = facebookPageId;
|
|
facebookPageId = null;
|
|
}
|
|
if (typeof caption === 'function') {
|
|
callback = caption;
|
|
}
|
|
if (facebookPageId != null) {
|
|
facebookPageId = parseInt(facebookPageId);
|
|
}
|
|
if (this.isItem(teamMediumId, 'teamMedium')) {
|
|
teamMediumId = teamMediumId.id;
|
|
}
|
|
if (!((isSuppressedFromFeed != null) && typeof isSuppressedFromFeed === 'boolean')) {
|
|
throw new TSArgsError('teamsnap.facebookShareMedium', 'must include boolean isSuppressedFromFeed');
|
|
}
|
|
params = {
|
|
teamMediumId: teamMediumId,
|
|
facebookPageId: facebookPageId,
|
|
caption: caption,
|
|
isSuppressedFromFeed: isSuppressedFromFeed
|
|
};
|
|
return this.collections.teamMedia.exec('facebookShareTeamMedium', params).pop().callback(callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/teamMediaGroups.coffee", function(exports, require, module) {
|
|
exports.loadTeamMediaGroups = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTeamMediaGroups', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('teamMediaGroup', params, callback);
|
|
};
|
|
|
|
exports.createTeamMediaGroup = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'teamMediaGroup'
|
|
});
|
|
};
|
|
|
|
exports.saveTeamMediaGroup = function(teamMediaGroup, callback) {
|
|
if (!teamMediaGroup) {
|
|
throw new TSArgsError('teamsnap.saveTeamMediaGroup', "`teamMediaGroup` must be provided");
|
|
}
|
|
if (!this.isItem(teamMediaGroup, 'teamMediaGroup')) {
|
|
throw new TSArgsError('teamsnap.saveTeamMediaGroup', "`teamMediaGroup.type` must be 'teamMediaGroup'");
|
|
}
|
|
return this.saveItem(teamMediaGroup, callback);
|
|
};
|
|
|
|
exports.deleteTeamMediaGroup = function(teamMediaGroup, callback) {
|
|
if (!teamMediaGroup) {
|
|
throw new TSArgsError('teamsnap.deleteTeamMediaGroup', '`teamMediaGroup` must be provided');
|
|
}
|
|
return this.deleteItem(teamMediaGroup, callback);
|
|
};
|
|
|
|
exports.reorderTeamMediaGroups = function(teamId, teamMediaGroupIds, callback) {
|
|
var params;
|
|
if (!this.isId(teamId)) {
|
|
throw new TSArgsError('teamsnap.reorderTeamMediaGroups', '`teamId` must be provided');
|
|
}
|
|
if (!(teamMediaGroupIds && Array.isArray(teamMediaGroupIds))) {
|
|
throw new TSArgsError('teamsnap.reorderTeamMediaGroups', 'You must provide an array of ordered Team Media Group IDs');
|
|
}
|
|
params = {
|
|
teamId: teamId,
|
|
sortedIds: teamMediaGroupIds
|
|
};
|
|
return this.collections.teamMediaGroups.exec('reorderTeamMediaGroups', params).callback(callback);
|
|
};
|
|
|
|
exports.facebookShareTeamMediaGroup = function(teamMediaGroupId, facebookPageId, isSuppressedFromFeed, albumName, callback) {
|
|
var params;
|
|
if (typeof facebookPageId === 'boolean') {
|
|
callback = albumName;
|
|
albumName = isSuppressedFromFeed;
|
|
isSuppressedFromFeed = facebookPageId;
|
|
facebookPageId = null;
|
|
}
|
|
if (typeof albumName === 'function') {
|
|
callback = albumName;
|
|
}
|
|
if (facebookPageId != null) {
|
|
facebookPageId = parseInt(facebookPageId);
|
|
}
|
|
if (this.isItem(teamMediaGroupId, 'teamMedium')) {
|
|
teamMediaGroupId = teamMediaGroup.id;
|
|
}
|
|
if (!((isSuppressedFromFeed != null) && typeof isSuppressedFromFeed === 'boolean')) {
|
|
throw new TSArgsError('teamsnap.facebookShareMediaGroup', 'must include boolean isSuppressedFromFeed');
|
|
}
|
|
params = {
|
|
teamMediaGroupId: teamMediaGroupId,
|
|
facebookPageId: facebookPageId,
|
|
albumName: albumName,
|
|
isSuppressedFromFeed: isSuppressedFromFeed
|
|
};
|
|
return this.collections.teamMediaGroups.exec('facebookShareTeamMediaGroup', params).pop().callback(callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/teamMediumComments.coffee", function(exports, require, module) {
|
|
exports.loadTeamMediumComments = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTeamMediumComments', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('teamMediumComment', params, callback);
|
|
};
|
|
|
|
exports.createTeamMediumComment = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'teamMediumComment'
|
|
});
|
|
};
|
|
|
|
exports.saveTeamMediumComment = function(teamMediumComment, callback) {
|
|
if (!teamMediumComment) {
|
|
throw new TSArgsError('teamsnap.saveTeamMediumComment', '`teamMediumComment` must be provided');
|
|
}
|
|
if (!this.isItem(teamMediumComment, 'teamMediumComment')) {
|
|
throw new TSArgsError('teamsnap.saveTeamMediumComment', "`teamMediumComment.type` must be 'teamMediumComment'");
|
|
}
|
|
return this.saveItem(teamMediumComment, callback);
|
|
};
|
|
|
|
exports.deleteTeamMediumComment = function(teamMediumComment, callback) {
|
|
if (!teamMediumComment) {
|
|
throw new TSArgsError('teamsnap.deleteTeamMediumComment', '`teamMediumComment` must be provided');
|
|
}
|
|
return this.deleteItem(teamMediumComment, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/teamPhotos.coffee", function(exports, require, module) {
|
|
exports.loadTeamPhotos = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTeamPhotos', 'must provide a `teamId` or query parameters');
|
|
}
|
|
return this.loadItems('teamPhoto', params, callback);
|
|
};
|
|
|
|
exports.loadTeamPhoto = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
id: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTeamPhoto', 'must provide an `id` or query parameters');
|
|
}
|
|
return this.loadItem('teamPhoto', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/teamPublicSites.coffee", function(exports, require, module) {
|
|
exports.loadTeamPublicSites = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTeamPublicSites', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('teamPublicSite', params, callback);
|
|
};
|
|
|
|
exports.loadTeamPublicSite = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTeamPublicSite', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItem('teamPublicSite', params, callback);
|
|
};
|
|
|
|
exports.saveTeamPublicSite = function(teamPublicSite, callback) {
|
|
if (!teamPublicSite) {
|
|
throw new TSArgsError('teamsnap.saveTeamPublicSite', "`teamPublicSite` must be provided");
|
|
}
|
|
if (!this.isItem(teamPublicSite, 'teamPublicSite')) {
|
|
throw new TSArgsError('teamsnap.saveTeamPublicSite', "`teamPublicSite.type` must be 'teamPublicSite'");
|
|
}
|
|
return this.saveItem(teamPublicSite, callback);
|
|
};
|
|
|
|
exports.uploadTeamPublicPhoto = function(teamPublicSiteId, file, callback) {
|
|
var params;
|
|
if (this.isItem(teamPublicSiteId, 'teamPublicSite')) {
|
|
teamPublicSiteId = teamPublicSite.id;
|
|
}
|
|
if (typeof FormData === 'undefined') {
|
|
this.reject('Your browser does not support the new file upload APIs.', 'file', callback);
|
|
}
|
|
if (!this.isId(teamPublicSiteId)) {
|
|
throw new TSArgsError('teamsnap.uploadTeamPublicPhoto', 'must include `teamPublicSiteId`');
|
|
}
|
|
if (!(file instanceof File)) {
|
|
throw new TSArgsError('teamsnap.uploadTeamPublicPhoto', 'must include `file` as type File');
|
|
}
|
|
params = {
|
|
teamPublicSiteId: teamPublicSiteId,
|
|
file: file
|
|
};
|
|
return this.collections.teamPublicSites.exec('uploadTeamPublicPhoto', params).pop().callback(callback);
|
|
};
|
|
|
|
exports.deleteTeamPublicPhoto = function(teamPublicSiteId, callback) {
|
|
var params;
|
|
if (!teamPublicSiteId) {
|
|
throw new TSArgsError('teamsnap.deleteTeamPublicPhoto', "`teamPublicSiteId` must be provided");
|
|
}
|
|
if (this.isItem(teamPublicSiteId, 'teamPublicSite')) {
|
|
teamPublicSiteId = teamPublicSite.id;
|
|
}
|
|
if (!this.isId(teamPublicSiteId)) {
|
|
throw new TSArgsError('teamsnap.deleteTeamPublicPhoto', "`teamPublicSiteId` must be a valid id");
|
|
}
|
|
params = {
|
|
teamPublicSiteId: teamPublicSiteId
|
|
};
|
|
return this.collections.teamPublicSites.exec('removeTeamPublicPhoto', params).callback(callback);
|
|
};
|
|
|
|
exports.validateSubdomain = function(subdomain, callback) {
|
|
var params;
|
|
if (!subdomain) {
|
|
throw new TSArgsError('teamsnap.validateSubdomain', "`subdomain` must be provided");
|
|
}
|
|
params = {
|
|
subdomain: subdomain
|
|
};
|
|
return this.collections.teamPublicSites.exec('validateSubdomain', params).callback(callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/teamStatistics.coffee", function(exports, require, module) {
|
|
exports.loadTeamStatistics = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTeamStatistics', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('teamStatistic', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/teams.coffee", function(exports, require, module) {
|
|
var cleanArray;
|
|
|
|
exports.loadTeams = function(params, callback) {
|
|
if (params == null) {
|
|
params = {};
|
|
}
|
|
if (typeof params === 'function') {
|
|
callback = params;
|
|
params = {};
|
|
}
|
|
if (Object.keys(params).length) {
|
|
return this.loadItems('team', params, callback);
|
|
} else {
|
|
return this.loadMe().then((function(_this) {
|
|
return function(me) {
|
|
params.userId = me.id;
|
|
return _this.loadItems('team', params, callback);
|
|
};
|
|
})(this));
|
|
}
|
|
};
|
|
|
|
exports.loadTeam = function(teamId, callback) {
|
|
if (!this.isId(teamId)) {
|
|
throw new TSArgsError('teamsnap.loadTeam', 'teamId must be provided');
|
|
}
|
|
return this.loadItem('team', {
|
|
teamId: teamId
|
|
}, callback);
|
|
};
|
|
|
|
exports.createTeam = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'team',
|
|
name: ''
|
|
});
|
|
};
|
|
|
|
exports.saveTeam = function(team, callback) {
|
|
var ref;
|
|
if (!team) {
|
|
throw new TSArgsError('teamsnap.saveTeam', "`team` must be provided");
|
|
}
|
|
if (!this.isItem(team, 'team')) {
|
|
throw new TSArgsError('teamsnap.saveTeam', "`type` must be 'team'");
|
|
}
|
|
if (!((ref = team.name) != null ? ref.trim() : void 0)) {
|
|
return this.reject('You must provide a name for the team.', 'name', callback);
|
|
}
|
|
return this.saveItem(team, callback);
|
|
};
|
|
|
|
exports.deleteTeam = function(team, callback) {
|
|
if (!team) {
|
|
throw new TSArgsError('teamsnap.deleteTeam', '`team` must be provided');
|
|
}
|
|
return this.deleteItem(team, callback);
|
|
};
|
|
|
|
exports.bulkLoad = function(teamId, types, callback) {
|
|
var key, loadParams, params, value;
|
|
if (typeof teamId === 'object' && !Array.isArray(teamId)) {
|
|
loadParams = teamId;
|
|
teamId = loadParams.teamId;
|
|
types = loadParams.types;
|
|
}
|
|
if (!(this.isId(teamId) || (Array.isArray(teamId) && this.isId(teamId[0])))) {
|
|
throw new TSArgsError('teamsnap.bulkLoad', 'teamId must be provided');
|
|
if (typeof types === 'function') {
|
|
callback = types;
|
|
types = null;
|
|
}
|
|
}
|
|
if (!Array.isArray(types)) {
|
|
types = this.getTeamTypes();
|
|
types.splice(types.indexOf('availability'), 1);
|
|
}
|
|
params = {
|
|
teamId: teamId,
|
|
types: types.map(this.underscoreType).join(',')
|
|
};
|
|
if (loadParams != null) {
|
|
if (loadParams.scopeTo != null) {
|
|
params.scopeTo = this.underscoreType(loadParams.scopeTo);
|
|
}
|
|
for (key in loadParams) {
|
|
value = loadParams[key];
|
|
if (key.indexOf('__') !== -1) {
|
|
params[key] = value;
|
|
}
|
|
}
|
|
}
|
|
return this.collections.root.queryItems('bulkLoad', params, callback);
|
|
};
|
|
|
|
exports.invite = function(options) {
|
|
if (options == null) {
|
|
options = {};
|
|
}
|
|
cleanArray(options, 'memberId');
|
|
cleanArray(options, 'contactId');
|
|
if (!(options.memberId || options.contactId)) {
|
|
throw new TSArgsError('teamsnap.invite', 'options.memberId or options.contactId is required.');
|
|
}
|
|
if (!options.teamId) {
|
|
throw new TSArgsError('teamsnap.invite', 'options.teamId is required.');
|
|
}
|
|
if (!options.notifyAsMemberId) {
|
|
throw new TSArgsError('teamsnap.invite', 'options.notifyAsMemberId is required.');
|
|
}
|
|
return this.collections.teams.exec('invite', options);
|
|
};
|
|
|
|
exports.updateTimeZone = function(options) {
|
|
if (options == null) {
|
|
options = {};
|
|
}
|
|
if (!options.timeZone) {
|
|
throw new TSArgsError('teamsnap.updateTimeZone', 'options.timeZone is required.');
|
|
}
|
|
if (!options.teamId) {
|
|
throw new TSArgsError('teamsnap.updateTimeZone', 'options.teamId is required.');
|
|
}
|
|
if (!options.offsetTeamTimes) {
|
|
throw new TSArgsError('teamsnap.updateTimeZone', 'options.offsetTeamTimes is required');
|
|
}
|
|
return this.collections.teams.exec('updateTimeZone', options);
|
|
};
|
|
|
|
exports.resetStatistics = function(teamId, callback) {
|
|
var params;
|
|
if (!teamId) {
|
|
throw new TSArgsError('teamsnap.resetStatistics', "`teamId` must be provided");
|
|
}
|
|
if (this.isItem(teamId, 'teamId')) {
|
|
teamId = teamId.id;
|
|
}
|
|
if (!this.isId(teamId)) {
|
|
throw new TSArgsError('teamsnap.resetStatistics', "`teamId` must be a valid id");
|
|
}
|
|
params = {
|
|
teamId: teamId
|
|
};
|
|
return this.collections.teams.exec('resetStatistics', params).callback(callback);
|
|
};
|
|
|
|
exports.divisionLoadTeams = function(params, callback) {
|
|
if (!params.divisionId) {
|
|
throw new TSArgsError('teamsnap.divisionLoadTeams', "`divisionId` must be provided");
|
|
}
|
|
return this.collections.teams.queryItems('divisionSearch', params, callback);
|
|
};
|
|
|
|
cleanArray = function(obj, prop) {
|
|
var plural;
|
|
plural = prop + 's';
|
|
if (obj[plural]) {
|
|
obj[prop] = obj[plural];
|
|
delete obj[plural];
|
|
}
|
|
if ((obj[prop] != null) && !Array.isArray(obj[prop])) {
|
|
obj[prop] = [obj[prop]];
|
|
}
|
|
return obj;
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/teamsPaypalPreferences.coffee", function(exports, require, module) {
|
|
exports.loadTeamsPaypalPreferences = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTeamsPaypalPreferences', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('teamPaypalPreferences', params, callback);
|
|
};
|
|
|
|
exports.loadTeamPaypalPreferences = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTeamPaypalPreferences', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItem('teamPaypalPreferences', params, callback);
|
|
};
|
|
|
|
exports.saveTeamPaypalPreferences = function(teamPaypalPreferences, callback) {
|
|
if (!teamPaypalPreferences) {
|
|
throw new TSArgsError('teamsnap.saveTeamPaypalPreferences', "`teamPaypalPreferences` must be provided");
|
|
}
|
|
if (!this.isItem(teamPaypalPreferences, 'teamPaypalPreferences')) {
|
|
throw new TSArgsError('teamsnap.saveTeamPaypalPreferences', "`teamPaypalPreferences.type` must be 'teamPaypalPreferences'");
|
|
}
|
|
return this.saveItem(teamPaypalPreferences, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/teamsPreferences.coffee", function(exports, require, module) {
|
|
exports.ASSIGNMENTS_ENABLED_FOR_CODE = {
|
|
GamesAndEvents: 0,
|
|
Games: 1,
|
|
Events: 2
|
|
};
|
|
|
|
exports.loadTeamsPreferences = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTeamPreferences', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('teamPreferences', params, callback);
|
|
};
|
|
|
|
exports.loadTeamPreferences = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTeamPreferences', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItem('teamPreferences', params, callback);
|
|
};
|
|
|
|
exports.saveTeamPreferences = function(teamPreferences, callback) {
|
|
if (!teamPreferences) {
|
|
throw new TSArgsError('teamsnap.saveTeamPreferences', "`teamPreferences` must be provided");
|
|
}
|
|
if (!this.isItem(teamPreferences, 'teamPreferences')) {
|
|
throw new TSArgsError('teamsnap.saveTeamPreferences', "`teamPreferences.type` must be 'teamPreferences'");
|
|
}
|
|
return this.saveItem(teamPreferences, callback);
|
|
};
|
|
|
|
exports.uploadTeamPhoto = function(teamPreferencesId, file, callback) {
|
|
var params;
|
|
if (this.isItem(teamPreferencesId, 'teamPreferences')) {
|
|
teamPreferencesId = teamPreferencesId.id;
|
|
}
|
|
if (typeof FormData === 'undefined') {
|
|
this.reject('Your browser does not support the new file upload APIs.', 'file', callback);
|
|
}
|
|
if (!this.isId(teamPreferencesId)) {
|
|
throw new TSArgsError('teamsnap.uploadTeamPhoto', 'must include `teamPreferencesId`');
|
|
}
|
|
if (!(file instanceof File)) {
|
|
throw new TSArgsError('teamsnap.uploadTeamPhoto', 'must include `file` as type File');
|
|
}
|
|
params = {
|
|
teamPreferencesId: teamPreferencesId,
|
|
file: file
|
|
};
|
|
return this.collections.teamsPreferences.exec('uploadTeamPhoto', params).pop().callback(callback);
|
|
};
|
|
|
|
exports.deleteTeamPhoto = function(teamPreferencesId, callback) {
|
|
var params;
|
|
if (!teamPreferencesId) {
|
|
throw new TSArgsError('teamsnap.deleteTeamPhoto', "`teamPreferencesId` must be provided");
|
|
}
|
|
if (this.isItem(teamPreferencesId, 'teamPreferences')) {
|
|
teamPreferencesId = teamPreferences.id;
|
|
}
|
|
if (!this.isId(teamPreferencesId)) {
|
|
throw new TSArgsError('teamsnap.deleteTeamPhoto', "`teamPreferencesId` must be a valid id");
|
|
}
|
|
params = {
|
|
teamPreferencesId: teamPreferencesId
|
|
};
|
|
return this.collections.teamsPreferences.exec('removeTeamPhoto', params).callback(callback);
|
|
};
|
|
|
|
exports.uploadTeamLogo = function(teamPreferencesId, file, callback) {
|
|
var params;
|
|
if (this.isItem(teamPreferencesId, 'teamPreferences')) {
|
|
teamPreferencesId = teamPreferences.id;
|
|
}
|
|
if (typeof FormData === 'undefined') {
|
|
this.reject('Your browser does not support the new file upload APIs.', 'file', callback);
|
|
}
|
|
if (!this.isId(teamPreferencesId)) {
|
|
throw new TSArgsError('teamsnap.uploadTeamLogo', 'must include `teamPreferencesId`');
|
|
}
|
|
if (!(file instanceof File)) {
|
|
throw new TSArgsError('teamsnap.uploadTeamLogo', 'must include `file` as type File');
|
|
}
|
|
params = {
|
|
teamPreferencesId: teamPreferencesId,
|
|
file: file
|
|
};
|
|
return this.collections.teamsPreferences.exec('uploadTeamLogo', params).pop().callback(callback);
|
|
};
|
|
|
|
exports.deleteTeamLogo = function(teamPreferencesId, callback) {
|
|
var params;
|
|
if (!teamPreferencesId) {
|
|
throw new TSArgsError('teamsnap.deleteTeamLogo', "`teamPreferencesId` must be provided");
|
|
}
|
|
if (this.isItem(teamPreferencesId, 'teamPreferences')) {
|
|
teamPreferencesId = teamPreferences.id;
|
|
}
|
|
if (!this.isId(teamPreferencesId)) {
|
|
throw new TSArgsError('teamsnap.deleteTeamLogo', "`teamPreferencesId` must be a valid id");
|
|
}
|
|
params = {
|
|
teamPreferencesId: teamPreferencesId
|
|
};
|
|
return this.collections.teamsPreferences.exec('removeTeamLogo', params).callback(callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/teamsResults.coffee", function(exports, require, module) {
|
|
exports.loadTeamsResults = function(params, callback) {
|
|
if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTeamsResults', 'must provide query parameters');
|
|
}
|
|
return this.loadItems('teamResults', params, callback);
|
|
};
|
|
|
|
exports.loadTeamResults = function(teamId, callback) {
|
|
var params;
|
|
if (!this.isId(teamId)) {
|
|
throw new TSArgsError('teamsnap.loadTeamResults', 'must provide a teamId');
|
|
}
|
|
params = {
|
|
teamId: teamId
|
|
};
|
|
return this.loadItem('teamResults', params, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/trackedItemStatuses.coffee", function(exports, require, module) {
|
|
var key, ref, statuses, value;
|
|
|
|
exports.TRACKING = {
|
|
NONE: 0,
|
|
CHECK: 1,
|
|
X: 2
|
|
};
|
|
|
|
statuses = {};
|
|
|
|
ref = exports.TRACKING;
|
|
for (key in ref) {
|
|
value = ref[key];
|
|
statuses[value] = true;
|
|
}
|
|
|
|
exports.loadTrackedItemStatuses = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTrackedItemStatuses', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('trackedItemStatus', params, callback);
|
|
};
|
|
|
|
exports.saveTrackedItemStatus = function(trackedItemStatus, callback) {
|
|
if (!trackedItemStatus) {
|
|
throw new TSArgsError('teamsnap.saveTrackedItemStatus', "`trackedItemStatus` must be provided");
|
|
}
|
|
if (!this.isItem(trackedItemStatus, 'trackedItemStatus')) {
|
|
throw new TSArgsError('teamsnap.saveTrackedItemStatus', "`trackedItemStatus.type` must be 'trackedItemStatus'");
|
|
}
|
|
if (!statuses[trackedItemStatus.statusCode]) {
|
|
return this.reject('You must select a valid status', 'statusCode', callback);
|
|
}
|
|
return this.saveItem(trackedItemStatus, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/trackedItems.coffee", function(exports, require, module) {
|
|
exports.loadTrackedItems = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadTrackedItems', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('trackedItem', params, callback);
|
|
};
|
|
|
|
exports.createTrackedItem = function(data) {
|
|
return this.createItem(data, {
|
|
type: 'trackedItem',
|
|
name: ''
|
|
});
|
|
};
|
|
|
|
exports.saveTrackedItem = function(trackedItem, callback) {
|
|
var ref;
|
|
if (!trackedItem) {
|
|
throw new TSArgsError('teamsnap.saveTrackedItem', "`trackedItem` must be provided");
|
|
}
|
|
if (!this.isItem(trackedItem, 'trackedItem')) {
|
|
throw new TSArgsError('teamsnap.saveTrackedItem', "`trackedItem.type` must be 'trackedItem'");
|
|
}
|
|
if (!trackedItem.teamId) {
|
|
return this.reject('You must choose a team.', 'teamId', callback);
|
|
}
|
|
if (!((ref = trackedItem.name) != null ? ref.trim() : void 0)) {
|
|
return this.reject('You must provide a name for the tracked item.', 'name', callback);
|
|
}
|
|
return this.saveItem(trackedItem, callback);
|
|
};
|
|
|
|
exports.deleteTrackedItem = function(trackedItem, callback) {
|
|
if (!trackedItem) {
|
|
throw new TSArgsError('teamsnap.deleteTrackedItem', '`trackedItem` must be provided');
|
|
}
|
|
return this.deleteItem(trackedItem, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("collections/users.coffee", function(exports, require, module) {
|
|
exports.loadUsers = function(params, callback) {
|
|
if (this.isId(params)) {
|
|
params = {
|
|
teamId: params
|
|
};
|
|
} else if (!(params && typeof params === 'object')) {
|
|
throw new TSArgsError('teamsnap.loadUsers', 'must provide a teamId or query parameters');
|
|
}
|
|
return this.loadItems('user', params, callback);
|
|
};
|
|
|
|
exports.loadMe = function(callback) {
|
|
return this.collections.root.queryItem('me', callback);
|
|
};
|
|
|
|
exports.saveUser = function(user, callback) {
|
|
var ref;
|
|
if (!user) {
|
|
throw new TSArgsError('teamsnap.saveUser', "`user` must be provided");
|
|
}
|
|
if (!this.isItem(user, 'user')) {
|
|
throw new TSArgsError('teamsnap.saveUser', "`user.type` must be 'user'");
|
|
}
|
|
if (!((ref = user.email) != null ? ref.trim() : void 0)) {
|
|
return this.reject('You must provide an email for the user.', 'email', callback);
|
|
}
|
|
return this.saveItem(user, callback);
|
|
};
|
|
|
|
});
|
|
|
|
require.register("errors.coffee", function(exports, require, module) {
|
|
var TSArgsError, TSError, TSServerError, TSValidationError,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
TSError = (function(superClass) {
|
|
extend(TSError, superClass);
|
|
|
|
function TSError(message) {
|
|
TSError.__super__.constructor.call(this);
|
|
this.name = 'TeamSnapError';
|
|
this.message = message;
|
|
}
|
|
|
|
return TSError;
|
|
|
|
})(Error);
|
|
|
|
TSArgsError = (function(superClass) {
|
|
extend(TSArgsError, superClass);
|
|
|
|
function TSArgsError(method, msg) {
|
|
TSArgsError.__super__.constructor.call(this);
|
|
this.name = 'TeamSnapArgumentError';
|
|
this.message = "Failed to execute `" + method + "`: " + msg + ".";
|
|
}
|
|
|
|
return TSArgsError;
|
|
|
|
})(TypeError);
|
|
|
|
TSValidationError = (function(superClass) {
|
|
extend(TSValidationError, superClass);
|
|
|
|
function TSValidationError(message, field) {
|
|
TSValidationError.__super__.constructor.call(this);
|
|
this.name = 'TeamSnapValidationError';
|
|
this.message = message;
|
|
this.field = field;
|
|
}
|
|
|
|
return TSValidationError;
|
|
|
|
})(RangeError);
|
|
|
|
TSServerError = (function(superClass) {
|
|
extend(TSServerError, superClass);
|
|
|
|
function TSServerError(message) {
|
|
TSServerError.__super__.constructor.call(this);
|
|
this.name = 'TeamSnapServerError';
|
|
this.message = message || 'An unknown error occurred on TeamSnap\'s server.';
|
|
}
|
|
|
|
TSServerError.create = function(message, jqxhr) {
|
|
return new TSServerError(message, jqxhr);
|
|
};
|
|
|
|
return TSServerError;
|
|
|
|
})(Error);
|
|
|
|
global.TSError = TSError;
|
|
|
|
global.TSArgsError = TSArgsError;
|
|
|
|
global.TSValidationError = TSValidationError;
|
|
|
|
global.TSServerError = TSServerError;
|
|
|
|
});
|
|
|
|
require.register("linking.coffee", function(exports, require, module) {
|
|
var linkItem, linkItemWith, linkItems, types, unlinkItem, unlinkItemFrom, unlinkItems, unlinkItemsFrom;
|
|
|
|
types = require('./types');
|
|
|
|
linkItems = function(items, lookup) {
|
|
if (lookup == null) {
|
|
lookup = {};
|
|
}
|
|
if (!items) {
|
|
return;
|
|
}
|
|
if (Array.isArray(items)) {
|
|
items.forEach(function(item) {
|
|
if (item.href) {
|
|
return lookup[item.href] = item;
|
|
}
|
|
});
|
|
items.forEach(function(item) {
|
|
return linkItem(item, lookup);
|
|
});
|
|
} else {
|
|
if (items.href) {
|
|
lookup[items.href] = items;
|
|
}
|
|
linkItem(items, lookup);
|
|
}
|
|
return items;
|
|
};
|
|
|
|
unlinkItems = function(items, lookup) {
|
|
if (lookup == null) {
|
|
lookup = {};
|
|
}
|
|
if (!items) {
|
|
return;
|
|
}
|
|
if (Array.isArray(items)) {
|
|
items.forEach(function(item) {
|
|
return unlinkItem(item, lookup);
|
|
});
|
|
} else {
|
|
unlinkItem(items, lookup);
|
|
}
|
|
return items;
|
|
};
|
|
|
|
linkItem = function(item, lookup) {
|
|
if (!lookup) {
|
|
throw new TSArgsError('linkItem', 'lookup must be provided');
|
|
}
|
|
if (item.href) {
|
|
lookup[item.href] = item;
|
|
}
|
|
return item.links.each(function(rel, href) {
|
|
var related;
|
|
if (types.isPluralType(rel)) {
|
|
if (!item[rel]) {
|
|
return item[rel] = [];
|
|
}
|
|
} else {
|
|
if (!(related = lookup[href])) {
|
|
return;
|
|
}
|
|
item[rel] = related;
|
|
return linkItemWith(item, related);
|
|
}
|
|
});
|
|
};
|
|
|
|
linkItemWith = function(item, other) {
|
|
var plural;
|
|
plural = types.getPluralType(item.type);
|
|
if (plural && other.links.has(plural)) {
|
|
if (!other[plural]) {
|
|
other[plural] = [];
|
|
}
|
|
if (other[plural].indexOf(item) === -1) {
|
|
return other[plural].push(item);
|
|
}
|
|
} else {
|
|
return other.links.each(function(rel, href) {
|
|
if (href === item.href) {
|
|
return other[rel] = item;
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
unlinkItem = function(item, lookup) {
|
|
if (!item.href) {
|
|
return;
|
|
}
|
|
if (lookup[item.href] === item) {
|
|
delete lookup[item.href];
|
|
}
|
|
return item.links.each(function(rel, href) {
|
|
if (!item[rel]) {
|
|
return;
|
|
}
|
|
if (types.isPluralType(rel)) {
|
|
unlinkItemsFrom(item[rel], item);
|
|
} else {
|
|
unlinkItemFrom(item, item[rel]);
|
|
}
|
|
return delete item[rel];
|
|
});
|
|
};
|
|
|
|
unlinkItemFrom = function(item, other) {
|
|
var index, plural;
|
|
plural = types.getPluralType(item.type);
|
|
if (plural && other.links.has(plural) && other[plural]) {
|
|
index = other[plural].indexOf(item);
|
|
if (index !== -1) {
|
|
return other[plural].splice(index, 1);
|
|
}
|
|
} else {
|
|
return other.links.each(function(rel, href) {
|
|
if (other[rel] === item) {
|
|
return delete other[rel];
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
unlinkItemsFrom = function(items, from) {
|
|
return items.forEach(function(item) {
|
|
return item.links.each(function(rel, href) {
|
|
if (item[rel] === from) {
|
|
return delete item[rel];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
exports.linkItems = linkItems;
|
|
|
|
exports.unlinkItems = unlinkItems;
|
|
|
|
exports.linkItem = linkItem;
|
|
|
|
exports.linkItemWith = linkItemWith;
|
|
|
|
exports.unlinkItem = unlinkItem;
|
|
|
|
exports.unlinkItemFrom = unlinkItemFrom;
|
|
|
|
exports.unlinkItemsFrom = unlinkItemsFrom;
|
|
|
|
});
|
|
|
|
require.register("loadCollections.coffee", function(exports, require, module) {
|
|
var Collection, collectionsPromise, promises, types,
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
promises = require('./promises');
|
|
|
|
types = require('./types');
|
|
|
|
Collection = require('./model').Collection;
|
|
|
|
collectionsPromise = null;
|
|
|
|
module.exports = function(request, cachedCollections) {
|
|
if (!collectionsPromise || collectionsPromise.getStatus() === 'reject') {
|
|
collectionsPromise = request.get(teamsnap.apiUrl).then(function(xhr) {
|
|
var collections, key, loads, ref, ref1, ref2, ref3, root, rootTypeToRels, value;
|
|
collections = {};
|
|
collections.root = root = Collection.fromData(xhr.data);
|
|
if (cachedCollections && cachedCollections.root.version === root.version) {
|
|
collections = {};
|
|
for (key in cachedCollections) {
|
|
value = cachedCollections[key];
|
|
collections[key] = new Collection(value);
|
|
}
|
|
return collectionsPromise = promises.resolve(collections);
|
|
} else {
|
|
rootTypeToRels = {};
|
|
loads = [];
|
|
ref = collections.root.links;
|
|
for (key in ref) {
|
|
if (!hasProp.call(ref, key)) continue;
|
|
value = ref[key];
|
|
rootTypeToRels[value.href] = key;
|
|
}
|
|
if ((ref1 = collections.root) != null ? (ref2 = ref1.links) != null ? (ref3 = ref2.schemas) != null ? ref3.href : void 0 : void 0 : void 0) {
|
|
loads.push(request.get(collections.root.links.schemas.href).then(function(xhr) {
|
|
return xhr.data.forEach(function(collection) {
|
|
var rel;
|
|
rel = rootTypeToRels[collection.collection.href];
|
|
if (rel && rel !== "root") {
|
|
return collections[rel] = Collection.fromData(collection);
|
|
}
|
|
});
|
|
}));
|
|
} else {
|
|
types.getTypes().forEach(function(type) {
|
|
var rel;
|
|
rel = types.getPluralType(type);
|
|
if (root.links.has(rel)) {
|
|
return loads.push(request.get(root.links.href(rel)).then(function(xhr) {
|
|
return collections[rel] = Collection.fromData(xhr.data);
|
|
}));
|
|
}
|
|
});
|
|
}
|
|
return promises.when.apply(promises, loads).then(function() {
|
|
return collections;
|
|
});
|
|
}
|
|
});
|
|
}
|
|
return collectionsPromise;
|
|
};
|
|
|
|
module.exports.clear = function() {
|
|
return collectionsPromise = null;
|
|
};
|
|
|
|
});
|
|
|
|
require.register("model.coffee", function(exports, require, module) {
|
|
var Collection, File, Item, MetaList, ScopedCollection, camelize, copy, dateField, dateValue, promises, underscore,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
promises = require('./promises');
|
|
|
|
File = global.File || function() {};
|
|
|
|
Collection = (function() {
|
|
Collection.fromData = function(data) {
|
|
return new Collection().deserialize(data);
|
|
};
|
|
|
|
function Collection(data) {
|
|
if (data == null) {
|
|
data = {};
|
|
}
|
|
this.href = data.href;
|
|
this.links = new MetaList(data.links);
|
|
this.queries = new MetaList(data.queries);
|
|
this.commands = new MetaList(data.commands);
|
|
this.template = data.template || [];
|
|
if (data.version) {
|
|
this.version = data.version;
|
|
}
|
|
if (data.items) {
|
|
this.items = data.items;
|
|
}
|
|
}
|
|
|
|
Collection.prototype.deserialize = function(data) {
|
|
var ref, ref1;
|
|
if (data.collection) {
|
|
data = data.collection;
|
|
}
|
|
if (!data) {
|
|
return;
|
|
}
|
|
this.href = data.href;
|
|
this.links.deserialize(data.links);
|
|
this.queries.deserialize(data.queries);
|
|
this.commands.deserialize(data.commands);
|
|
if (data.version) {
|
|
this.version = data.version;
|
|
}
|
|
this.template = ((ref = data.template) != null ? ref.data : void 0) || [];
|
|
if ((ref1 = data.items) != null ? ref1.length : void 0) {
|
|
this.items = data.items;
|
|
}
|
|
return this;
|
|
};
|
|
|
|
return Collection;
|
|
|
|
})();
|
|
|
|
ScopedCollection = (function(superClass) {
|
|
extend(ScopedCollection, superClass);
|
|
|
|
ScopedCollection.fromData = function(request, data) {
|
|
return new ScopedCollection(request, new Collection().deserialize(data));
|
|
};
|
|
|
|
function ScopedCollection(_request, collection) {
|
|
this._request = _request;
|
|
this.href = collection.href;
|
|
this.links = collection.links;
|
|
this.queries = collection.queries;
|
|
this.commands = collection.commands;
|
|
this.template = collection.template;
|
|
this.version = collection.version;
|
|
if (collection.items) {
|
|
this.items = Item.fromArray(this._request, collection.items);
|
|
}
|
|
}
|
|
|
|
ScopedCollection.prototype.save = function(item, callback) {
|
|
var data, method;
|
|
if (!(item instanceof Item)) {
|
|
item = Item.create(this._request, item);
|
|
}
|
|
method = item.href ? 'put' : 'post';
|
|
data = item.serialize(this.template);
|
|
if (data.template.data.length === 0) {
|
|
return promises.resolve(item).callback(callback);
|
|
}
|
|
return this._request(method, item.href || this.href, data).then((function(_this) {
|
|
return function(xhr) {
|
|
var all, items, ref, ref1;
|
|
if ((items = (ref = xhr.data) != null ? (ref1 = ref.collection) != null ? ref1.items : void 0 : void 0)) {
|
|
if (items.length > 1) {
|
|
item.deserialize(items.shift());
|
|
all = Item.fromArray(_this._request, items);
|
|
all.unshift(item);
|
|
return all;
|
|
} else if (items.length) {
|
|
return item.deserialize(xhr.data);
|
|
}
|
|
}
|
|
};
|
|
})(this)).callback(callback);
|
|
};
|
|
|
|
ScopedCollection.prototype.loadItems = function(linkName, callback) {
|
|
return this.links.loadItems(this._request, linkName, callback);
|
|
};
|
|
|
|
ScopedCollection.prototype.loadItem = function(linkName, callback) {
|
|
return this.links.loadItem(this._request, linkName, callback);
|
|
};
|
|
|
|
ScopedCollection.prototype.queryItems = function(queryName, params, callback) {
|
|
return this.queries.loadItems(this._request, queryName, params, callback);
|
|
};
|
|
|
|
ScopedCollection.prototype.queryItem = function(queryName, params, callback) {
|
|
return this.queries.loadItem(this._request, queryName, params, callback);
|
|
};
|
|
|
|
ScopedCollection.prototype.exec = function(commandName, params, callback) {
|
|
return this.commands.exec(this._request, commandName, params, callback);
|
|
};
|
|
|
|
ScopedCollection.prototype.file = function(commandName, params, progress, callback) {
|
|
return this.commands.fileExec(this._request, commandName, params, progress, callback);
|
|
};
|
|
|
|
return ScopedCollection;
|
|
|
|
})(Collection);
|
|
|
|
Item = (function() {
|
|
Item.create = function(request, data) {
|
|
return new Item(request, data);
|
|
};
|
|
|
|
Item.fromArray = function(request, array) {
|
|
if (Array.isArray(array)) {
|
|
return array.map(function(data) {
|
|
return Item.fromData(request, data);
|
|
});
|
|
} else {
|
|
return array;
|
|
}
|
|
};
|
|
|
|
Item.fromData = function(request, data) {
|
|
if (data.collection || data.data) {
|
|
return this.create(request).deserialize(data);
|
|
} else {
|
|
return this.create(request, data);
|
|
}
|
|
};
|
|
|
|
function Item(_request, data) {
|
|
this._request = _request;
|
|
if (typeof data === 'string') {
|
|
this.href = data;
|
|
} else if (data && typeof data === 'object') {
|
|
copy(data, this);
|
|
}
|
|
if (!(this.links instanceof MetaList)) {
|
|
this.links = new MetaList(data != null ? data.links : void 0);
|
|
}
|
|
}
|
|
|
|
Item.prototype.deserialize = function(data) {
|
|
var i, len, prop, ref, ref1, value;
|
|
if (data != null ? data.collection : void 0) {
|
|
data = (ref = data.collection.items) != null ? ref[0] : void 0;
|
|
}
|
|
if (!data) {
|
|
return;
|
|
}
|
|
this.href = data.href;
|
|
this.links.deserialize(data.links);
|
|
ref1 = data.data;
|
|
for (i = 0, len = ref1.length; i < len; i++) {
|
|
prop = ref1[i];
|
|
value = prop.value;
|
|
if (prop.type === 'DateTime' && value) {
|
|
value = new Date(value);
|
|
}
|
|
if (prop.name === 'type') {
|
|
value = camelize(value);
|
|
}
|
|
this[camelize(prop.name)] = value;
|
|
}
|
|
return this;
|
|
};
|
|
|
|
Item.prototype.serialize = function(template) {
|
|
var fields, item;
|
|
if (!(template != null ? template.length : void 0)) {
|
|
throw new TSError('You must provide the collection\'s template');
|
|
}
|
|
fields = [];
|
|
item = this;
|
|
template.forEach(function(prop) {
|
|
var value;
|
|
value = item[camelize(prop.name)];
|
|
if (prop.name === 'type') {
|
|
value = underscore(value);
|
|
}
|
|
if (value !== void 0) {
|
|
return fields.push({
|
|
name: prop.name,
|
|
value: value
|
|
});
|
|
}
|
|
});
|
|
return {
|
|
template: {
|
|
data: fields
|
|
}
|
|
};
|
|
};
|
|
|
|
Item.prototype.loadItems = function(linkName, callback) {
|
|
return this.links.loadItems(this._request, linkName, callback);
|
|
};
|
|
|
|
Item.prototype.loadItem = function(linkName, callback) {
|
|
return this.links.loadItem(this._request, linkName, callback);
|
|
};
|
|
|
|
Item.prototype["delete"] = function(params, callback) {
|
|
var data, fields, key, value;
|
|
if (typeof params === 'function') {
|
|
callback = params;
|
|
params = null;
|
|
}
|
|
if (params) {
|
|
fields = [];
|
|
for (key in params) {
|
|
if (!hasProp.call(params, key)) continue;
|
|
value = params[key];
|
|
fields.push({
|
|
name: underscore(key),
|
|
value: value
|
|
});
|
|
}
|
|
data = {
|
|
template: {
|
|
data: fields
|
|
}
|
|
};
|
|
}
|
|
return this._request["delete"](this.href, data).callback(callback);
|
|
};
|
|
|
|
Item.prototype.copy = function(template) {
|
|
var obj;
|
|
obj = {};
|
|
if (template) {
|
|
template.forEach((function(_this) {
|
|
return function(prop) {
|
|
var camel;
|
|
camel = camelize(prop.name);
|
|
return obj[camel] = _this[camel];
|
|
};
|
|
})(this));
|
|
} else {
|
|
copy(this, obj);
|
|
}
|
|
delete obj.id;
|
|
delete obj.href;
|
|
obj.type = this.type;
|
|
obj.links = this.links.cloneEmpty();
|
|
return new Item(this._request, obj);
|
|
};
|
|
|
|
Item.prototype.toJSON = function() {
|
|
var obj;
|
|
obj = {};
|
|
Object.keys(this).forEach((function(_this) {
|
|
return function(key) {
|
|
var value;
|
|
value = _this[key];
|
|
if (typeof value === 'function' || key.charAt(0) === '_' || _this.links.has(key)) {
|
|
return;
|
|
}
|
|
return obj[key] = _this[key];
|
|
};
|
|
})(this));
|
|
return obj;
|
|
};
|
|
|
|
return Item;
|
|
|
|
})();
|
|
|
|
MetaList = (function() {
|
|
function MetaList(data) {
|
|
if (data) {
|
|
copy(data, this);
|
|
}
|
|
}
|
|
|
|
MetaList.prototype.deserialize = function(data) {
|
|
var entry, i, j, len, len1, link, linksToRemove, param, params, propName, ref, results;
|
|
if (!Array.isArray(data)) {
|
|
return;
|
|
}
|
|
linksToRemove = {};
|
|
Object.keys(this).forEach(function(link) {
|
|
return linksToRemove[link] = true;
|
|
});
|
|
for (i = 0, len = data.length; i < len; i++) {
|
|
entry = data[i];
|
|
params = {};
|
|
if (Array.isArray(entry.data)) {
|
|
ref = entry.data;
|
|
for (j = 0, len1 = ref.length; j < len1; j++) {
|
|
param = ref[j];
|
|
params[camelize(param.name)] = param.value;
|
|
}
|
|
}
|
|
propName = camelize(entry.rel);
|
|
this[propName] = {
|
|
href: entry.href,
|
|
params: params
|
|
};
|
|
delete linksToRemove[propName];
|
|
}
|
|
results = [];
|
|
for (link in linksToRemove) {
|
|
results.push(delete this[link]);
|
|
}
|
|
return results;
|
|
};
|
|
|
|
MetaList.prototype.has = function(rel) {
|
|
return this.hasOwnProperty(rel);
|
|
};
|
|
|
|
MetaList.prototype.href = function(rel) {
|
|
var ref;
|
|
return (ref = this[rel]) != null ? ref.href : void 0;
|
|
};
|
|
|
|
MetaList.prototype.each = function(iterator) {
|
|
var entry, ref, rel, results;
|
|
ref = this;
|
|
results = [];
|
|
for (rel in ref) {
|
|
if (!hasProp.call(ref, rel)) continue;
|
|
entry = ref[rel];
|
|
results.push(iterator(rel, entry.href, entry.params));
|
|
}
|
|
return results;
|
|
};
|
|
|
|
MetaList.prototype.loadItems = function(request, rel, params, callback) {
|
|
if (typeof params === 'function') {
|
|
callback = params;
|
|
params = void 0;
|
|
}
|
|
return this._request(request, 'get', rel, params, 'items').callback(callback);
|
|
};
|
|
|
|
MetaList.prototype.loadItem = function(request, rel, params, callback) {
|
|
if (typeof params === 'function') {
|
|
callback = params;
|
|
params = void 0;
|
|
}
|
|
return this._request(request, 'get', rel, params, 'item').callback(callback);
|
|
};
|
|
|
|
MetaList.prototype["delete"] = function(request, rel, callback) {
|
|
return this._request(request, 'delete', rel, void 0, 'item').callback(callback);
|
|
};
|
|
|
|
MetaList.prototype.exec = function(request, rel, params, callback) {
|
|
if (typeof params === 'function') {
|
|
callback = params;
|
|
params = void 0;
|
|
}
|
|
return this._request(request, 'post', rel, params, 'items').callback(callback);
|
|
};
|
|
|
|
MetaList.prototype.fileExec = function(request, rel, params, progress, callback) {
|
|
var progressHook;
|
|
if (typeof params === 'function') {
|
|
callback = progress;
|
|
progress = params;
|
|
params = void 0;
|
|
}
|
|
progressHook = function(xhr, data) {
|
|
if (data instanceof FormData) {
|
|
return xhr.upload.onprogress = function(e) {
|
|
if (e.lengthComputable) {
|
|
return progress({
|
|
loaded: e.loaded,
|
|
total: e.total
|
|
});
|
|
}
|
|
};
|
|
}
|
|
};
|
|
request.hook(progressHook);
|
|
return this._request(request, 'post', rel, params, 'items').callback(callback);
|
|
};
|
|
|
|
MetaList.prototype.cloneEmpty = function() {
|
|
var clone, entry, ref, rel;
|
|
clone = new MetaList();
|
|
ref = this;
|
|
for (rel in ref) {
|
|
if (!hasProp.call(ref, rel)) continue;
|
|
entry = ref[rel];
|
|
if (entry.href) {
|
|
clone[rel] = {
|
|
href: ''
|
|
};
|
|
}
|
|
}
|
|
return clone;
|
|
};
|
|
|
|
MetaList.prototype._request = function(request, method, rel, params, type) {
|
|
var data, entry, filteredOn, itemCollection, key, value;
|
|
if (!(entry = this[rel])) {
|
|
throw new TSError("Unable to find rel '" + rel + "'");
|
|
}
|
|
if (params) {
|
|
data = {};
|
|
for (key in params) {
|
|
if (!hasProp.call(params, key)) continue;
|
|
value = params[key];
|
|
if (value instanceof File) {
|
|
data = new FormData();
|
|
for (key in params) {
|
|
if (!hasProp.call(params, key)) continue;
|
|
value = params[key];
|
|
data.append(underscore(key), value);
|
|
}
|
|
break;
|
|
}
|
|
if (entry.params.hasOwnProperty(key)) {
|
|
data[underscore(key)] = value;
|
|
} else if (key.indexOf('__') !== -1) {
|
|
filteredOn = key.split('__');
|
|
itemCollection = teamsnap.getCollectionForItem(filteredOn[0]);
|
|
if (itemCollection.queries.search.params.hasOwnProperty(filteredOn[1])) {
|
|
data[underscore(key)] = value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return request(method, entry.href, data).then(function(xhr) {
|
|
var items, ref, ref1;
|
|
items = ((ref = xhr.data) != null ? (ref1 = ref.collection) != null ? ref1.items : void 0 : void 0) ? Item.fromArray(request, xhr.data.collection.items) : [];
|
|
if (type === 'item') {
|
|
return items.pop();
|
|
} else {
|
|
return items;
|
|
}
|
|
});
|
|
};
|
|
|
|
return MetaList;
|
|
|
|
})();
|
|
|
|
dateField = /(At|Date)$/;
|
|
|
|
dateValue = /^\d{4}-/;
|
|
|
|
copy = function(from, to) {
|
|
Object.keys(from).forEach(function(key) {
|
|
var value;
|
|
value = from[key];
|
|
if (typeof value === 'function' || key.charAt(0) === '_') {
|
|
return;
|
|
}
|
|
if (dateField.test(key) && dateValue.test(value)) {
|
|
value = new Date(value);
|
|
}
|
|
return to[key] = value;
|
|
});
|
|
return to;
|
|
};
|
|
|
|
camelize = function(str) {
|
|
return str.replace(/[-_]+(\w)/g, function(_, char) {
|
|
return char.toUpperCase();
|
|
});
|
|
};
|
|
|
|
underscore = function(str) {
|
|
return str.replace(/[A-Z]/g, function(char) {
|
|
return '_' + char.toLowerCase();
|
|
});
|
|
};
|
|
|
|
exports.Collection = Collection;
|
|
|
|
exports.ScopedCollection = ScopedCollection;
|
|
|
|
exports.Item = Item;
|
|
|
|
exports.MetaList = MetaList;
|
|
|
|
});
|
|
|
|
require.register("persistence.coffee", function(exports, require, module) {
|
|
var Item, MetaList, ScopedCollection, camelize, copy, linking, lookup, modifyModel, modifySDK, promises, ref, revertModel, revertSDK, revertWrapMethod, types, wrapMethod, wrapSave,
|
|
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
|
|
|
promises = require('./promises');
|
|
|
|
linking = require('./linking');
|
|
|
|
types = require('./types');
|
|
|
|
Item = require('./model').Item;
|
|
|
|
ref = require('./model'), ScopedCollection = ref.ScopedCollection, Item = ref.Item, MetaList = ref.MetaList;
|
|
|
|
lookup = null;
|
|
|
|
exports.enablePersistence = function(cachedItemData) {
|
|
var initialItems;
|
|
if (lookup) {
|
|
return;
|
|
}
|
|
if (!this.collections) {
|
|
throw new TSError('You must auth() and loadCollections() before enabling persistence.');
|
|
}
|
|
this.persistenceEnabled = true;
|
|
lookup = {};
|
|
modifyModel();
|
|
modifySDK(this);
|
|
initialItems = [];
|
|
initialItems.push.apply(initialItems, this.plans);
|
|
initialItems.push.apply(initialItems, this.smsGateways);
|
|
initialItems.push.apply(initialItems, this.sports);
|
|
initialItems.push.apply(initialItems, this.timeZones);
|
|
linking.linkItems(this.plans.concat(this.sports), lookup);
|
|
if (cachedItemData) {
|
|
return Item.fromArray(this.request, cachedItemData);
|
|
}
|
|
};
|
|
|
|
exports.disablePersistence = function() {
|
|
if (!lookup) {
|
|
return;
|
|
}
|
|
this.persistenceEnabled = false;
|
|
linking.unlinkItems(Object.keys(lookup).map(function(href) {
|
|
return lookup[href];
|
|
}), lookup);
|
|
lookup = null;
|
|
revertModel();
|
|
revertSDK(this);
|
|
return this;
|
|
};
|
|
|
|
exports.findItem = function(href) {
|
|
return lookup != null ? lookup[href] : void 0;
|
|
};
|
|
|
|
exports.getAllItems = function() {
|
|
return Object.keys(lookup).map(function(href) {
|
|
return lookup[href];
|
|
});
|
|
};
|
|
|
|
exports.unlinkTeam = function(team) {
|
|
var i, items, len, plural, ref1, ref2, teamType, users, value;
|
|
items = [team];
|
|
users = (ref1 = team.members) != null ? ref1.filter(function(member) {
|
|
return member.user;
|
|
}).map(function(member) {
|
|
return member.user;
|
|
}) : void 0;
|
|
ref2 = this.getTeamTypes();
|
|
for (i = 0, len = ref2.length; i < len; i++) {
|
|
teamType = ref2[i];
|
|
plural = this.getPluralType(teamType);
|
|
if ((value = team[plural]) && value.length) {
|
|
items.push.apply(items, value);
|
|
} else if ((value = team[teamType])) {
|
|
items.push(value);
|
|
}
|
|
}
|
|
return unlinkItems(items);
|
|
};
|
|
|
|
modifyModel = function() {
|
|
wrapMethod(Item, 'fromArray', function(fromArray) {
|
|
return function(request, array) {
|
|
var items;
|
|
items = fromArray.call(this, request, array);
|
|
return linking.linkItems(items, lookup).map(function(item) {
|
|
return item.saveState();
|
|
});
|
|
};
|
|
});
|
|
wrapMethod(ScopedCollection.prototype, 'save', function(save) {
|
|
return function(item, callback) {
|
|
return save.call(this, item).then(function(item) {
|
|
if (Array.isArray(item)) {
|
|
return item.map(function(item) {
|
|
linking.linkItem(item, lookup);
|
|
return item.saveState();
|
|
});
|
|
} else {
|
|
linking.linkItem(item, lookup);
|
|
return item.saveState();
|
|
}
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(Item.prototype, 'delete', function(deleteItem) {
|
|
return function(params, callback) {
|
|
var item;
|
|
item = this;
|
|
linking.unlinkItem(item, lookup);
|
|
return deleteItem.call(this, params).fail(function(err) {
|
|
linking.linkItem(item, lookup);
|
|
return err;
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(Item, 'create', function(create) {
|
|
return function(request, data) {
|
|
var item;
|
|
item = create.call(this, request, data);
|
|
linking.linkItem(item, lookup);
|
|
return item;
|
|
};
|
|
});
|
|
wrapMethod(Item.prototype, 'deserialize', function(deserialize) {
|
|
return function(data) {
|
|
var item, ref1;
|
|
if (data != null ? data.collection : void 0) {
|
|
data = (ref1 = data.collection.items) != null ? ref1[0] : void 0;
|
|
}
|
|
item = lookup[data.href] || this;
|
|
return deserialize.call(item, data);
|
|
};
|
|
});
|
|
wrapMethod(Item.prototype, 'serialize', function(serialize) {
|
|
return function(template) {
|
|
var body, state;
|
|
body = serialize.call(this, template);
|
|
if ((state = this._state)) {
|
|
body.template.data = body.template.data.filter(function(field) {
|
|
var isSame, oldValue, value;
|
|
oldValue = state[camelize(field.name)];
|
|
value = field.value;
|
|
if (field.name === 'type') {
|
|
value = camelize(value);
|
|
}
|
|
isSame = value === oldValue || (value && oldValue && value.valueOf() === oldValue.valueOf());
|
|
return !isSame;
|
|
});
|
|
}
|
|
return body;
|
|
};
|
|
});
|
|
Item.prototype.saveState = function() {
|
|
this._state = {
|
|
_undos: []
|
|
};
|
|
if (this.href) {
|
|
copy(this, this._state);
|
|
}
|
|
return this;
|
|
};
|
|
Item.prototype.rollback = function() {
|
|
this._state._undos.reverse().forEach(function(undo) {
|
|
return undo();
|
|
});
|
|
this._state._undos.length = 0;
|
|
return copy(this._state, this);
|
|
};
|
|
return Item.prototype.link = function(rel, item) {
|
|
var related, undos;
|
|
if (!this._state) {
|
|
this.saveState();
|
|
}
|
|
undos = this._state._undos;
|
|
if (this[rel]) {
|
|
related = this[rel];
|
|
linking.unlinkItemFrom(this, this[rel]);
|
|
undos.push((function(_this) {
|
|
return function() {
|
|
_this[rel] = related;
|
|
_this.links[rel].href = related.href;
|
|
_this[rel + 'Id'] = related.id;
|
|
return linking.linkItemWith(_this, related);
|
|
};
|
|
})(this));
|
|
}
|
|
this[rel] = item;
|
|
if (item) {
|
|
this[rel + 'Id'] = item.id;
|
|
this.links[rel].href = item.href;
|
|
linking.linkItemWith(this, item);
|
|
undos.push((function(_this) {
|
|
return function() {
|
|
delete _this[rel];
|
|
delete _this[rel + 'Id'];
|
|
return linking.unlinkItemFrom(_this, item);
|
|
};
|
|
})(this));
|
|
}
|
|
return this;
|
|
};
|
|
};
|
|
|
|
revertModel = function() {
|
|
revertWrapMethod(MetaList.prototype, '_request');
|
|
revertWrapMethod(ScopedCollection.prototype, 'save');
|
|
revertWrapMethod(Item.prototype, 'delete');
|
|
revertWrapMethod(Item, 'create');
|
|
revertWrapMethod(Item.prototype, 'deserialize');
|
|
revertWrapMethod(Item.prototype, 'serialize');
|
|
delete Item.prototype.saveState;
|
|
delete Item.prototype.rollback;
|
|
return delete Item.prototype.link;
|
|
};
|
|
|
|
modifySDK = function(sdk) {
|
|
wrapSave(sdk, 'saveMember', function(member) {
|
|
return promises.when(sdk.loadAvailabilities({
|
|
memberId: member.id
|
|
}), sdk.loadTrackedItemStatuses({
|
|
memberId: member.id
|
|
}), sdk.loadCustomData({
|
|
memberId: member.id
|
|
}), sdk.loadLeagueCustomData({
|
|
memberId: member.id
|
|
}), sdk.loadMemberPayments({
|
|
memberId: member.id
|
|
}), sdk.loadMemberBalances({
|
|
memberId: member.id
|
|
}), sdk.loadTeamFees({
|
|
teamId: member.teamId
|
|
}));
|
|
});
|
|
wrapMethod(sdk, 'deleteMember', function(deleteMember) {
|
|
return function(member, callback) {
|
|
var toRemove;
|
|
toRemove = [];
|
|
toRemove.push.apply(toRemove, member.assignments);
|
|
toRemove.push.apply(toRemove, member.availabilities);
|
|
member.contacts.forEach(function(contact) {
|
|
toRemove.push.apply(toRemove, contact.contactEmailAddresses);
|
|
toRemove.push.apply(toRemove, contact.contactPhoneNumbers);
|
|
return toRemove.push(contact);
|
|
});
|
|
toRemove.push.apply(toRemove, member.trackedItemStatuses);
|
|
toRemove.push.apply(toRemove, member.memberPayments);
|
|
toRemove.push.apply(toRemove, member.memberStatistics);
|
|
toRemove.push.apply(toRemove, member.statisticData);
|
|
toRemove.push.apply(toRemove, member.memberAssignments);
|
|
linking.unlinkItems(toRemove, lookup);
|
|
return deleteMember.call(this, member, callback).then(function(result) {
|
|
sdk.loadTeamFees(member.teamId);
|
|
sdk.loadStatisticAggregates(member.teamId);
|
|
return result;
|
|
}).fail(function(err) {
|
|
linking.linkItems(toRemove, lookup);
|
|
return err;
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'deleteContact', function(deleteContact) {
|
|
return function(contact, callback) {
|
|
var toRemove;
|
|
toRemove = [];
|
|
toRemove.push.apply(toRemove, contact.contactEmailAddresses);
|
|
toRemove.push.apply(toRemove, contact.contactPhoneNumbers);
|
|
linking.unlinkItems(toRemove, lookup);
|
|
return deleteContact.call(this, contact, callback).then(function(result) {
|
|
return sdk.loadMembers({
|
|
memberId: contact.memberId
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}).fail(function(err) {
|
|
linking.linkItems(toRemove, lookup);
|
|
return err;
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'saveMemberEmailAddress', function(saveMemberEmailAddress) {
|
|
return function(emailAddress, callback) {
|
|
return saveMemberEmailAddress.call(this, emailAddress, callback).then(function(result) {
|
|
return sdk.loadMembers({
|
|
id: emailAddress.memberId
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'deleteMemberEmailAddress', function(deleteMemberEmailAddress) {
|
|
return function(emailAddress, callback) {
|
|
return deleteMemberEmailAddress.call(this, emailAddress, callback).then(function(result) {
|
|
return sdk.loadMembers({
|
|
id: emailAddress.memberId
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'saveMemberPhoneNumber', function(saveMemberPhoneNumber) {
|
|
return function(phoneNumber, callback) {
|
|
return saveMemberPhoneNumber.call(this, phoneNumber, callback).then(function(result) {
|
|
return sdk.loadMembers({
|
|
id: phoneNumber.memberId
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'deleteMemberPhoneNumber', function(deleteMemberPhoneNumber) {
|
|
return function(phoneNumber, callback) {
|
|
return deleteMemberPhoneNumber.call(this, phoneNumber, callback).then(function(result) {
|
|
return sdk.loadMembers({
|
|
id: phoneNumber.memberId
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'saveContactEmailAddress', function(saveContactEmailAddress) {
|
|
return function(emailAddress, callback) {
|
|
return saveContactEmailAddress.call(this, emailAddress, callback).then(function(result) {
|
|
return sdk.loadMembers({
|
|
id: emailAddress.memberId
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'deleteContactEmailAddress', function(deleteContactEmailAddress) {
|
|
return function(emailAddress, callback) {
|
|
return deleteContactEmailAddress.call(this, emailAddress, callback).then(function(result) {
|
|
return sdk.loadMembers({
|
|
id: emailAddress.memberId
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'saveContactPhoneNumber', function(saveContactPhoneNumber) {
|
|
return function(phoneNumber, callback) {
|
|
return saveContactPhoneNumber.call(this, phoneNumber, callback).then(function(result) {
|
|
return sdk.loadMembers({
|
|
id: phoneNumber.memberId
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'deleteContactPhoneNumber', function(deleteContactPhoneNumber) {
|
|
return function(phoneNumber, callback) {
|
|
return deleteContactPhoneNumber.call(this, phoneNumber, callback).then(function(result) {
|
|
return sdk.loadMembers({
|
|
id: phoneNumber.memberId
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapSave(sdk, 'saveEvent', function(event) {
|
|
var ids;
|
|
ids = Array.isArray(event) ? (event.map(function(event) {
|
|
return event.id;
|
|
})).join(',') : event.id;
|
|
return sdk.loadAvailabilities({
|
|
eventId: ids
|
|
});
|
|
}, function(event) {
|
|
var e, firstEvent, ref1, ref2, repeatingEventIds, toRemove;
|
|
if (event.isGame) {
|
|
return promises.when(sdk.loadTeamResults(event.teamId), sdk.loadOpponentResults(event.opponentId), sdk.loadEventStatistics({
|
|
eventId: event.id
|
|
}));
|
|
} else if (Array.isArray(event)) {
|
|
repeatingEventIds = (function() {
|
|
var i, len, results;
|
|
results = [];
|
|
for (i = 0, len = event.length; i < len; i++) {
|
|
e = event[i];
|
|
results.push(e.id);
|
|
}
|
|
return results;
|
|
})();
|
|
firstEvent = event.shift();
|
|
toRemove = [];
|
|
if ((ref1 = firstEvent.team) != null) {
|
|
if ((ref2 = ref1.events) != null) {
|
|
ref2.forEach(function(e) {
|
|
if (e.repeatingUuid === firstEvent.repeatingUuid) {
|
|
return toRemove.push(e);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
toRemove = toRemove.filter(function(e) {
|
|
var ref3;
|
|
return ref3 = e.id, indexOf.call(repeatingEventIds, ref3) < 0;
|
|
});
|
|
return linking.unlinkItems(toRemove, lookup);
|
|
}
|
|
});
|
|
wrapMethod(sdk, 'deleteEvent', function(deleteEvent) {
|
|
return function(event, include, notify, notifyAs, callback) {
|
|
var events, ref1, ref2, startDate, toRemove, uuid;
|
|
events = [];
|
|
if (typeof include === 'string' && include !== sdk.EVENTS.NONE) {
|
|
uuid = event.repeatingUuid;
|
|
startDate = event.startDate;
|
|
if ((ref1 = event.team) != null) {
|
|
if ((ref2 = ref1.events) != null) {
|
|
ref2.forEach(function(event) {
|
|
if (event.repeatingUuid === uuid) {
|
|
return events.push(event);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
if (include === sdk.EVENTS.FUTURE) {
|
|
events = events.filter(function(event) {
|
|
return event.startDate >= startDate;
|
|
});
|
|
}
|
|
} else {
|
|
events.push(event);
|
|
}
|
|
toRemove = events.slice();
|
|
events.forEach(function(event) {
|
|
toRemove.push.apply(toRemove, event.assignments);
|
|
toRemove.push.apply(toRemove, event.availabilities);
|
|
return toRemove.push.apply(toRemove, event.eventStatistics);
|
|
});
|
|
event.assignments.forEach(function(assignment) {
|
|
if (assignment.memberAssignments.length) {
|
|
return assignment.memberAssignments.forEach(function(memberAssignment) {
|
|
return toRemove.push.apply(toRemove, memberAssignment);
|
|
});
|
|
}
|
|
});
|
|
linking.unlinkItems(toRemove, lookup);
|
|
return deleteEvent.call(this, event, include, notify, notifyAs, callback).then(function(result) {
|
|
if (event.isGame) {
|
|
return promises.when(sdk.loadTeamResults(event.teamId), sdk.loadOpponentResults(event.opponentId)).then(function() {
|
|
return result;
|
|
});
|
|
} else {
|
|
return result;
|
|
}
|
|
}, function(err) {
|
|
linking.linkItems(toRemove, lookup);
|
|
return err;
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapSave(sdk, 'saveTrackedItem', function(trackedItem) {
|
|
return sdk.loadTrackedItemStatuses({
|
|
trackedItemId: trackedItem.id
|
|
});
|
|
});
|
|
wrapMethod(sdk, 'deleteTrackedItem', function(deleteTrackedItem) {
|
|
return function(trackedItem, callback) {
|
|
var toRemove;
|
|
toRemove = trackedItem.trackedItemStatuses.slice();
|
|
linking.unlinkItems(toRemove, lookup);
|
|
return deleteTrackedItem.call(this, trackedItem).fail(function(err) {
|
|
linking.linkItems(toRemove, lookup);
|
|
return err;
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'deleteStatistic', function(deleteStatistic) {
|
|
return function(statistic, callback) {
|
|
var toRemove;
|
|
toRemove = statistic.statisticData.slice();
|
|
toRemove.push.apply(toRemove, statistic.eventStatistics);
|
|
toRemove.push.apply(toRemove, statistic.memberStatistics);
|
|
toRemove.push.apply(toRemove, statistic.teamStatistics);
|
|
toRemove.push.apply(toRemove, statistic.statisticAggregates);
|
|
linking.unlinkItems(toRemove, lookup);
|
|
return deleteStatistic.call(this, statistic).then(function(result) {
|
|
var bulkLoadTypes, statisticId, teamId;
|
|
teamId = statistic.teamId;
|
|
statisticId = result.id;
|
|
bulkLoadTypes = ['memberStatistic', 'teamStatistic', 'statisticAggregate', 'eventStatistic'];
|
|
return sdk.bulkLoad(teamId, bulkLoadTypes).then(function() {
|
|
return result;
|
|
});
|
|
}).fail(function(err) {
|
|
linking.linkItems(toRemove, lookup);
|
|
return err;
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'saveStatistic', function(saveStatistic) {
|
|
return function(statistic, callback) {
|
|
if ((statistic.statisticGroupId == null) && (statistic.statisticGroup != null)) {
|
|
linking.unlinkItems(statistic.statisticGroup, statistic);
|
|
}
|
|
return saveStatistic.call(this, statistic, callback).then(function(result) {
|
|
var bulkLoadTypes, statisticId, teamId;
|
|
teamId = statistic.teamId;
|
|
statisticId = result.id;
|
|
bulkLoadTypes = ['memberStatistic', 'teamStatistic', 'statisticAggregate', 'statistic', 'statisticGroup', 'eventStatistic'];
|
|
return sdk.bulkLoad(teamId, bulkLoadTypes).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'bulkSaveStatisticData', function(bulkSaveStatisticData) {
|
|
return function(templates, callback) {
|
|
return bulkSaveStatisticData.call(this, templates, callback).then(function(result) {
|
|
var bulkLoadTypes, teamId;
|
|
if ((result[0] != null) && (result[0].teamId != null)) {
|
|
teamId = result[0].teamId;
|
|
bulkLoadTypes = ['memberStatistic', 'statisticAggregate', 'eventStatistic'];
|
|
return sdk.bulkLoad(teamId, bulkLoadTypes).then(function() {
|
|
return result;
|
|
});
|
|
}
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'saveStatisticDatum', function(saveStatisticDatum) {
|
|
return function(statisticDatum, callback) {
|
|
return saveStatisticDatum.call(this, statisticDatum, callback).then(function(result) {
|
|
var bulkLoadTypes, statisticId, teamId;
|
|
teamId = result.teamId;
|
|
statisticId = result.statisticId;
|
|
bulkLoadTypes = ['memberStatistic', 'statisticAggregate', 'eventStatistic'];
|
|
return sdk.bulkLoad(teamId, bulkLoadTypes).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'bulkDeleteStatisticData', function(bulkDeleteStatisticData) {
|
|
return function(member, event, callback) {
|
|
var ref1, toRemove;
|
|
toRemove = [];
|
|
toRemove.push(event.eventStatistics);
|
|
if ((ref1 = member.statisticData) != null) {
|
|
ref1.forEach(function(statisticDatum) {
|
|
if (statisticDatum.event === event) {
|
|
return toRemove.push(statisticDatum);
|
|
}
|
|
});
|
|
}
|
|
linking.unlinkItems(toRemove, lookup);
|
|
return bulkDeleteStatisticData.call(this, member, event).then(function(result) {
|
|
var bulkLoadTypes, teamId;
|
|
teamId = member.teamId;
|
|
bulkLoadTypes = ['memberStatistic', 'statisticAggregate', 'eventStatistic'];
|
|
return sdk.bulkLoad(teamId, bulkLoadTypes).then(function() {
|
|
return result;
|
|
});
|
|
}).fail(function(err) {
|
|
linking.linkItems(toRemove, lookup);
|
|
return err;
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'saveMemberPayment', function(saveMemberPayment) {
|
|
return function(memberPayment, callback) {
|
|
return saveMemberPayment.call(this, memberPayment).then(function(result) {
|
|
var memberId, teamFeeId;
|
|
memberId = result.memberId;
|
|
teamFeeId = result.teamFeeId;
|
|
return promises.when(sdk.loadMemberBalances({
|
|
memberId: memberId
|
|
}), sdk.loadTeamFees({
|
|
id: teamFeeId
|
|
}), sdk.loadPaymentNotes({
|
|
memberPaymentId: memberPayment.id
|
|
})).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'saveTeamFee', function(saveTeamFee) {
|
|
return function(teamFee, callback) {
|
|
return saveTeamFee.call(this, teamFee).then(function(result) {
|
|
var teamId;
|
|
teamId = result.teamId;
|
|
return sdk.loadMemberBalances({
|
|
teamId: teamId
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'deleteTeamFee', function(deleteTeamFee) {
|
|
return function(teamFee, callback) {
|
|
return deleteTeamFee.call(this, teamFee).then(function(result) {
|
|
var teamId;
|
|
teamId = teamFee.teamId;
|
|
return sdk.loadMemberBalances({
|
|
teamId: teamId
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'assignMediaToGroup', function(assignMediaToGroup) {
|
|
return function(teamMediumIds, teamMediaGroup, callback) {
|
|
return assignMediaToGroup.call(this, teamMediumIds, teamMediaGroup).then(function(result) {
|
|
var bulkLoadTypes, teamId;
|
|
teamId = result[0].teamId;
|
|
bulkLoadTypes = ['teamMediaGroup', 'teamMedium'];
|
|
return sdk.bulkLoad(teamId, bulkLoadTypes).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'setMediumAsTeamPhoto', function(setMediumAsTeamPhoto) {
|
|
return function(teamMedium, callback) {
|
|
return setMediumAsTeamPhoto.call(this, teamMedium).then(function(result) {
|
|
var teamId;
|
|
teamId = result.teamId;
|
|
return sdk.loadTeamPreferences(teamId).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'setMediumAsMemberPhoto', function(setMediumAsMemberPhoto) {
|
|
return function(teamMedium, member, callback) {
|
|
return setMediumAsMemberPhoto.call(this, teamMedium, member).then(function(result) {
|
|
if (member.id != null) {
|
|
return sdk.loadMembers({
|
|
id: member.id
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'uploadTeamMedium', function(uploadTeamMedium) {
|
|
return function(teamMedium, progressCallback, callback) {
|
|
return uploadTeamMedium.call(this, teamMedium, progressCallback).then(function(result) {
|
|
return promises.when(sdk.loadTeam(teamMedium.teamId), sdk.loadTeamMediaGroups({
|
|
id: teamMedium.teamMediaGroupId
|
|
})).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'saveTeamMedium', function(saveTeamMedium) {
|
|
return function(teamMedium, callback) {
|
|
var ref1, teamMediaGroupIds;
|
|
teamMediaGroupIds = [teamMedium.teamMediaGroupId];
|
|
if ((((ref1 = teamMedium._state) != null ? ref1.teamMediaGroupId : void 0) != null) !== teamMedium.teamMediaGroupId) {
|
|
teamMediaGroupIds.push(teamMedium._state.teamMediaGroupId);
|
|
}
|
|
return saveTeamMedium.call(this, teamMedium).then(function(result) {
|
|
var teamId;
|
|
teamId = teamMedium.teamId;
|
|
return sdk.loadTeamMediaGroups({
|
|
id: teamMediaGroupIds
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'saveTeamVideoLink', function(saveTeamVideoLink) {
|
|
return function(teamMedium, callback) {
|
|
return saveTeamVideoLink.call(this, teamMedium).then(function(result) {
|
|
return sdk.loadTeamMediaGroups({
|
|
id: teamMedium.teamMediaGroupId
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'deleteTeamMedium', function(deleteTeamMedium) {
|
|
return function(teamMedium, callback) {
|
|
var toRemove;
|
|
toRemove = teamMedium.teamMediumComments.slice();
|
|
linking.unlinkItems(toRemove, lookup);
|
|
return deleteTeamMedium.call(this, teamMedium).then(function(result) {
|
|
return promises.when(sdk.loadTeam(teamMedium.teamId), sdk.loadTeamMediaGroups({
|
|
id: teamMedium.teamMediaGroupId
|
|
})).then(function() {
|
|
return result;
|
|
});
|
|
}, function(err) {
|
|
linking.linkItems(toRemove, lookup);
|
|
return err;
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'bulkDeleteTeamMedia', function(bulkDeleteTeamMedia) {
|
|
return function(teamMediumIds, teamId, callback) {
|
|
if (typeof teamId === 'function') {
|
|
callback = teamId;
|
|
}
|
|
return bulkDeleteTeamMedia.call(this, teamMediumIds, callback).then(function(result) {
|
|
if (typeof teamId === 'string' || typeof teamId === 'number') {
|
|
return promises.when(sdk.loadTeam(teamId), sdk.loadTeamMediaGroups({
|
|
teamId: teamId
|
|
})).then(function() {
|
|
return result;
|
|
});
|
|
} else {
|
|
return result;
|
|
}
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'reorderTeamMedia', function(reorderTeamMedia) {
|
|
return function(teamId, teamMediaIds, teamMediaGroupId, callback) {
|
|
var params;
|
|
params = {
|
|
teamId: teamId
|
|
};
|
|
if (typeof teamMediaGroupId === 'function') {
|
|
callback = teamMediaGroupId;
|
|
}
|
|
if (typeof teamMediaGroupId === 'string' || typeof teamMediaGroupId === 'number') {
|
|
params = {
|
|
id: teamMediaGroupId
|
|
};
|
|
}
|
|
return reorderTeamMedia.call(this, teamId, teamMediaIds).then(function(result) {
|
|
return sdk.loadTeamMediaGroups(params).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'deleteTeam', function(deleteTeam) {
|
|
return function(team, callback) {
|
|
var toRemove;
|
|
toRemove = [];
|
|
team.links.each(function(rel) {
|
|
var value;
|
|
value = team[name];
|
|
if (types.getType(rel) && rel !== 'sport' && rel !== 'plan') {
|
|
if (Array.isArray(value)) {
|
|
return toRemove.push.apply(toRemove, value);
|
|
} else {
|
|
return toRemove.push(value);
|
|
}
|
|
}
|
|
});
|
|
return deleteTeam.call(this, team).then(function(result) {
|
|
linking.unlinkItems(toRemove, lookup);
|
|
return result;
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'deleteForumTopic', function(deleteForumTopic) {
|
|
return function(topic, callback) {
|
|
var toRemove;
|
|
toRemove = [];
|
|
toRemove.push.apply(toRemove, topic.forumPosts);
|
|
linking.unlinkItems(toRemove, lookup);
|
|
return deleteForumTopic.call(this, topic, callback).fail(function(err) {
|
|
linking.linkItems(toRemove, lookup);
|
|
return err;
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'invite', function(invite) {
|
|
return function(options, callback) {
|
|
return invite.call(this, options).then(function(result) {
|
|
var contactId, memberId;
|
|
if (options.hasOwnProperty('memberId')) {
|
|
memberId = options.memberId;
|
|
return sdk.loadMemberEmailAddresses({
|
|
memberId: memberId
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
} else if (options.hasOwnProperty('contactId')) {
|
|
contactId = options.contactId;
|
|
return sdk.loadContactEmailAddresses({
|
|
contactId: contactId
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'memberPaymentTransaction', function(memberPaymentTransaction) {
|
|
return function(memberPaymentId, amount, note, callback) {
|
|
return memberPaymentTransaction.call(this, memberPaymentId, amount, note).then(function(result) {
|
|
var memberId, teamFeeId;
|
|
memberId = result.memberId;
|
|
teamFeeId = result.teamFeeId;
|
|
return promises.when(sdk.loadMemberBalances({
|
|
memberId: memberId
|
|
}), sdk.loadTeamFees({
|
|
id: teamFeeId
|
|
}), sdk.loadPaymentNotes({
|
|
memberPaymentId: memberPaymentId
|
|
})).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'importMembersFromTeam', function(importMembersFromTeam) {
|
|
return function(memberIds, teamId, sendInvites, callback) {
|
|
return importMembersFromTeam.call(this, memberIds, teamId, sendInvites).then(function(result) {
|
|
memberIds = result.map(function(member) {
|
|
return member.id;
|
|
});
|
|
return promises.when(sdk.loadMembers({
|
|
id: memberIds
|
|
}), sdk.loadContacts({
|
|
memberId: memberIds
|
|
}), sdk.loadMemberEmailAddresses({
|
|
memberId: memberIds
|
|
}), sdk.loadContactEmailAddresses({
|
|
memberId: memberIds
|
|
}), sdk.loadMemberPhoneNumbers({
|
|
memberId: memberIds
|
|
}), sdk.loadContactPhoneNumbers({
|
|
memberId: memberIds
|
|
})).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'saveBroadcastAlert', function(saveBroadcastAlert) {
|
|
return function(broadcastAlert, callback) {
|
|
return saveBroadcastAlert.call(this, broadcastAlert).then(function(result) {
|
|
var params;
|
|
if ((result.member != null) || (result.divisionMember != null)) {
|
|
params = {
|
|
memberId: result.memberId
|
|
};
|
|
} else {
|
|
params = {
|
|
contactId: result.contactId
|
|
};
|
|
}
|
|
sdk.loadMessageData(params);
|
|
return sdk.loadMessages({
|
|
messageSourceId: result.id
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'saveBroadcastEmail', function(saveBroadcastEmail) {
|
|
return function(broadcastEmail, callback) {
|
|
return saveBroadcastEmail.call(this, broadcastEmail).then(function(result) {
|
|
var params;
|
|
if ((result.member != null) || (result.divisionMember != null)) {
|
|
params = {
|
|
memberId: result.memberId
|
|
};
|
|
} else {
|
|
params = {
|
|
contactId: result.contactId
|
|
};
|
|
}
|
|
sdk.loadMessageData(params);
|
|
return sdk.loadMessages({
|
|
messageSourceId: result.id
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'saveAssignment', function(saveAssignment) {
|
|
return function(assignment, callback) {
|
|
return saveAssignment.call(this, assignment, callback).then(function(result) {
|
|
return sdk.loadMemberAssignments({
|
|
assignmentId: result.id
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'deleteAssignment', function(deleteAssignment) {
|
|
return function(assignment, callback) {
|
|
var toRemove;
|
|
if (assignment.memberAssignments.length) {
|
|
toRemove = assignment.memberAssignments;
|
|
linking.unlinkItems(toRemove, lookup);
|
|
}
|
|
return deleteAssignment.call(this, assignment).then(function(result) {
|
|
return sdk.loadEvents({
|
|
eventId: assignment.eventId
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'saveMemberAssignment', function(saveMemberAssignment) {
|
|
return function(memberAssignment, callback) {
|
|
return saveMemberAssignment.call(this, memberAssignment).then(function(result) {
|
|
return sdk.loadAssignments({
|
|
id: result.assignmentId
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'deleteMemberAssignment', function(deleteMemberAssignment) {
|
|
return function(memberAssignment, callback) {
|
|
return deleteMemberAssignment.call(this, memberAssignment, callback).then(function(result) {
|
|
return sdk.loadAssignments({
|
|
id: memberAssignment.assignmentId
|
|
}).then(function(assignment) {
|
|
assignment[0].member = null;
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'markMessageAsRead', function(markMessageAsRead) {
|
|
return function(messageId, callback) {
|
|
return markMessageAsRead.call(this, messageId, callback).then(function(result) {
|
|
var params;
|
|
if ((result.member != null) || (result.divisionMember != null)) {
|
|
params = {
|
|
memberId: result.memberId
|
|
};
|
|
} else {
|
|
params = {
|
|
contactId: result.contactId
|
|
};
|
|
}
|
|
params.messageType = 'alert,email';
|
|
sdk.loadMessages({
|
|
id: result.messageId
|
|
});
|
|
return sdk.loadMessageData(params);
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'bulkDeleteMessages', function(bulkDeleteMessages) {
|
|
return function(messages, callback) {
|
|
var contactId, memberId, teamId, toRemove;
|
|
if (Array.isArray(messages) && messages.length && this.isItem(messages[0], 'message')) {
|
|
toRemove = messages;
|
|
} else if (typeof messages === 'object' && this.isItem(messages, 'message')) {
|
|
toRemove = [messages];
|
|
}
|
|
if (toRemove != null) {
|
|
if (toRemove[0].contactId != null) {
|
|
contactId = toRemove[0].contactId;
|
|
} else if (toRemove[0].memberId != null) {
|
|
memberId = toRemove[0].memberId;
|
|
}
|
|
teamId = toRemove[0].teamId;
|
|
linking.unlinkItems(toRemove, lookup);
|
|
}
|
|
return bulkDeleteMessages.call(this, messages).then(function(result) {
|
|
var params;
|
|
if (toRemove != null) {
|
|
params = {};
|
|
if (contactId != null) {
|
|
params.contactId = contactId;
|
|
} else if (memberId != null) {
|
|
params.memberId = memberId;
|
|
}
|
|
params.messageType = 'alert,email';
|
|
params.teamId = teamId;
|
|
return sdk.loadMessageData(params).then(function(result) {
|
|
return result;
|
|
}).fail(function(err) {
|
|
return err;
|
|
});
|
|
} else {
|
|
return result;
|
|
}
|
|
}).fail(function(err) {
|
|
if (toRemove != null) {
|
|
linking.linkItems(toRemove, lookup);
|
|
}
|
|
return err;
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
wrapMethod(sdk, 'createBulkAssignments', function(createBulkAssignments) {
|
|
return function(eventSet, description, teamId, createAsMemberId, callback) {
|
|
return createBulkAssignments.call(this, eventSet, description, teamId, createAsMemberId, callback).then(function(result) {
|
|
var assignmentIds;
|
|
assignmentIds = result.map(function(assignment) {
|
|
return assignment.id;
|
|
});
|
|
return sdk.loadAssignments({
|
|
id: assignmentIds
|
|
}).then(function() {
|
|
return result;
|
|
});
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
return wrapMethod(sdk, 'bulkDeleteMembers', function(bulkDeleteMembers) {
|
|
return function(members, callback) {
|
|
var toRemove;
|
|
toRemove = [];
|
|
members.forEach(function(member) {
|
|
toRemove.push.apply(toRemove, member.assignments);
|
|
toRemove.push.apply(toRemove, member.availabilities);
|
|
member.contacts.forEach(function(contact) {
|
|
toRemove.push.apply(toRemove, contact.contactEmailAddresses);
|
|
toRemove.push.apply(toRemove, contact.contactPhoneNumbers);
|
|
return toRemove.push(contact);
|
|
});
|
|
toRemove.push.apply(toRemove, member.trackedItemStatuses);
|
|
toRemove.push.apply(toRemove, member.memberPayments);
|
|
toRemove.push.apply(toRemove, member.memberStatistics);
|
|
toRemove.push.apply(toRemove, member.statisticData);
|
|
return toRemove.push.apply(toRemove, member.memberAssignments);
|
|
});
|
|
linking.unlinkItems(toRemove, lookup);
|
|
return bulkDeleteMembers.call(this, members, callback).then(function(result) {
|
|
return result;
|
|
}).fail(function(err) {
|
|
linking.linkItems(toRemove, lookup);
|
|
return err;
|
|
}).callback(callback);
|
|
};
|
|
});
|
|
};
|
|
|
|
revertSDK = function(sdk) {
|
|
revertWrapMethod(sdk, 'saveMember');
|
|
revertWrapMethod(sdk, 'deleteMember');
|
|
revertWrapMethod(sdk, 'deleteContact');
|
|
revertWrapMethod(sdk, 'saveEvent');
|
|
revertWrapMethod(sdk, 'deleteEvent');
|
|
revertWrapMethod(sdk, 'saveTrackedItem');
|
|
revertWrapMethod(sdk, 'deleteTrackedItem');
|
|
return revertWrapMethod(sdk, 'deleteTeam');
|
|
};
|
|
|
|
wrapMethod = function(obj, methodName, newMethodProvider) {
|
|
var oldMethod;
|
|
oldMethod = obj[methodName];
|
|
obj[methodName] = newMethodProvider(oldMethod);
|
|
obj[methodName].oldMethod = oldMethod;
|
|
return obj;
|
|
};
|
|
|
|
revertWrapMethod = function(obj, methodName) {
|
|
var oldMethod;
|
|
oldMethod = obj[methodName].oldMethod;
|
|
return obj[methodName] = oldMethod;
|
|
};
|
|
|
|
wrapSave = function(sdk, saveMethodName, onSaveNew, onSaveEdit) {
|
|
return wrapMethod(sdk, saveMethodName, function(save) {
|
|
return function(item, callback) {
|
|
var savedItem;
|
|
if (item.id && onSaveEdit) {
|
|
savedItem = null;
|
|
return save.call(this, item).then(function(item) {
|
|
return savedItem = item;
|
|
}).then(onSaveEdit).then(function() {
|
|
return savedItem;
|
|
}).callback(callback);
|
|
} else if (!item.id && onSaveNew) {
|
|
savedItem = null;
|
|
return save.call(this, item).then(function(item) {
|
|
return savedItem = item;
|
|
}).then(onSaveNew).then(function() {
|
|
return savedItem;
|
|
}).callback(callback);
|
|
} else {
|
|
return save.call(this, item, callback);
|
|
}
|
|
};
|
|
});
|
|
};
|
|
|
|
copy = function(from, to) {
|
|
Object.keys(from).forEach(function(key) {
|
|
if (typeof value === 'function' || key.charAt(0) === '_') {
|
|
return;
|
|
}
|
|
return to[key] = from[key];
|
|
});
|
|
return to;
|
|
};
|
|
|
|
camelize = function(str) {
|
|
return str.replace(/[-_]+(\w)/g, function(_, char) {
|
|
return char.toUpperCase();
|
|
});
|
|
};
|
|
|
|
});
|
|
|
|
require.register("promises.coffee", function(exports, require, module) {
|
|
var Deferred, Promise, args, promises,
|
|
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
|
|
slice = [].slice,
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
promises = typeof exports !== 'undefined' ? exports : this;
|
|
|
|
Promise = (function() {
|
|
function Promise() {
|
|
this.call = bind(this.call, this);
|
|
}
|
|
|
|
Promise.prototype.then = function(resolvedHandler, rejectedHandler, progressHandler, cancelHandler) {
|
|
throw new TypeError('The Promise base class is abstract, this function is overwritten by the promise\'s deferred object');
|
|
};
|
|
|
|
Promise.prototype.callback = function(callback) {
|
|
if (callback && typeof callback === 'function') {
|
|
this.then(function() {
|
|
var results;
|
|
results = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
return callback.apply(null, [null].concat(slice.call(results)));
|
|
}, function(err) {
|
|
return callback(err);
|
|
});
|
|
}
|
|
return this;
|
|
};
|
|
|
|
Promise.prototype.resolved = function(handler) {
|
|
return this.then(handler);
|
|
};
|
|
|
|
Promise.prototype.done = function(handler) {
|
|
return this.then(handler);
|
|
};
|
|
|
|
Promise.prototype.rejected = function(handler) {
|
|
return this.then(null, handler);
|
|
};
|
|
|
|
Promise.prototype.fail = function(handler) {
|
|
return this.then(null, handler);
|
|
};
|
|
|
|
Promise.prototype.always = function(handler) {
|
|
var rejectedHandler, resolvedHandler;
|
|
resolvedHandler = function(res) {
|
|
return handler(null, res);
|
|
};
|
|
rejectedHandler = function(err) {
|
|
return handler(err);
|
|
};
|
|
return this.then(resolvedHandler, rejectedHandler);
|
|
};
|
|
|
|
Promise.prototype.progress = function(handler) {
|
|
return this.then(null, null, handler);
|
|
};
|
|
|
|
Promise.prototype.canceled = function(handler) {
|
|
return this.then(null, null, null, handler);
|
|
};
|
|
|
|
Promise.prototype.apply = function(handler, context) {
|
|
return this.then(function(result) {
|
|
if ((result instanceof Array)(handler.apply(context || this, result))) {
|
|
|
|
} else {
|
|
return handler.call(context || this, result);
|
|
}
|
|
});
|
|
};
|
|
|
|
Promise.prototype.cancel = function() {
|
|
throw new TypeError('The Promise base class is abstract, this function is overwritten by the promise\'s deferred object');
|
|
};
|
|
|
|
Promise.prototype.get = function(propertyName) {
|
|
return this.then(function(object) {
|
|
return object != null ? object[propertyName] : void 0;
|
|
});
|
|
};
|
|
|
|
Promise.prototype.set = function(propertyName, value) {
|
|
return this.then(function(object) {
|
|
if (object != null) {
|
|
object[propertyName] = value;
|
|
}
|
|
return object;
|
|
});
|
|
};
|
|
|
|
Promise.prototype.put = function(propertyName, value) {
|
|
return this.then(function(object) {
|
|
return object != null ? object[propertyName] = value : void 0;
|
|
});
|
|
};
|
|
|
|
Promise.prototype.run = function() {
|
|
var functionName, params;
|
|
functionName = arguments[0], params = 2 <= arguments.length ? slice.call(arguments, 1) : [];
|
|
return this.then(function(object) {
|
|
if (object != null) {
|
|
object[functionName].apply(object, params);
|
|
}
|
|
return object;
|
|
});
|
|
};
|
|
|
|
Promise.prototype.call = function() {
|
|
var functionName, params;
|
|
functionName = arguments[0], params = 2 <= arguments.length ? slice.call(arguments, 1) : [];
|
|
return this.then(function(object) {
|
|
return object[functionName].apply(object, params);
|
|
});
|
|
};
|
|
|
|
return Promise;
|
|
|
|
})();
|
|
|
|
['pop', 'shift', 'splice', 'filter', 'every', 'map', 'some'].forEach(function(method) {
|
|
return Promise.prototype[method] = function() {
|
|
var args;
|
|
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
return this.then(function(object) {
|
|
return object != null ? typeof object[method] === "function" ? object[method].apply(object, args) : void 0 : void 0;
|
|
});
|
|
};
|
|
});
|
|
|
|
['push', 'reverse', 'sort', 'unshift', 'forEach'].forEach(function(method) {
|
|
return Promise.prototype[method] = function() {
|
|
var args;
|
|
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
return this.then(function(object) {
|
|
if (object instanceof Array) {
|
|
object[method].apply(object, args);
|
|
}
|
|
return object;
|
|
});
|
|
};
|
|
});
|
|
|
|
Promise.extend = function(methods) {
|
|
var SubPromise, name, value;
|
|
SubPromise = function() {};
|
|
SubPromise.extend = this.extend;
|
|
SubPromise.prototype = new this();
|
|
if (methods) {
|
|
for (name in methods) {
|
|
if (!hasProp.call(methods, name)) continue;
|
|
value = methods[name];
|
|
SubPromise.prototype[name] = value;
|
|
}
|
|
}
|
|
return SubPromise;
|
|
};
|
|
|
|
promises.when = function() {
|
|
var alwaysCallback, count, createCallback, deferred, i, len, name, obj, params, rejected, rejectedCallback, resolvedCallback;
|
|
params = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
deferred = promises.defer();
|
|
count = params.length;
|
|
rejected = false;
|
|
resolvedCallback = function() {};
|
|
rejectedCallback = function(value) {
|
|
rejected = true;
|
|
return value;
|
|
};
|
|
createCallback = function(index) {
|
|
return function() {
|
|
var results;
|
|
results = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
params[index] = results.length > 1 ? results : results[0];
|
|
if (--count === 0) {
|
|
if (rejected) {
|
|
return deferred.reject.apply(deferred, params);
|
|
} else {
|
|
return deferred.resolve.apply(deferred, params);
|
|
}
|
|
}
|
|
};
|
|
};
|
|
for (name = i = 0, len = params.length; i < len; name = ++i) {
|
|
obj = params[name];
|
|
if (obj && typeof obj.then === 'function') {
|
|
alwaysCallback = createCallback(name);
|
|
obj.then(resolvedCallback, rejectedCallback);
|
|
obj.then(alwaysCallback, alwaysCallback);
|
|
} else {
|
|
--count;
|
|
}
|
|
}
|
|
if (count === 0) {
|
|
deferred.resolve.apply(deferred, params);
|
|
}
|
|
return deferred.promise;
|
|
};
|
|
|
|
args = function() {
|
|
var params;
|
|
params = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
params.isArgs = true;
|
|
return params;
|
|
};
|
|
|
|
Deferred = (function() {
|
|
function Deferred(promise) {
|
|
if (promise == null) {
|
|
promise = new promises.Promise;
|
|
}
|
|
this.progress = bind(this.progress, this);
|
|
this.cancel = bind(this.cancel, this);
|
|
this.reject = bind(this.reject, this);
|
|
this.resolve = bind(this.resolve, this);
|
|
this.finished = bind(this.finished, this);
|
|
this.then = bind(this.then, this);
|
|
this.promise = promise;
|
|
this.status = 'pending';
|
|
this.progressHandlers = [];
|
|
this.handlers = [];
|
|
promise.then = this.then;
|
|
promise.cancel = this.cancel;
|
|
promise.getStatus = (function(_this) {
|
|
return function() {
|
|
return _this.status;
|
|
};
|
|
})(this);
|
|
}
|
|
|
|
Deferred.prototype.then = function(resolvedHandler, rejectedHandler, progressHandler, canceledHandler) {
|
|
var deferred, handler, i, len, method, nextDeferred, nextResult;
|
|
for (i = 0, len = arguments.length; i < len; i++) {
|
|
handler = arguments[i];
|
|
if ((handler != null) && typeof handler !== 'function') {
|
|
throw new Error('Promise handlers must be functions');
|
|
}
|
|
}
|
|
if (progressHandler) {
|
|
this.progressHandlers.push(progressHandler);
|
|
}
|
|
nextDeferred = promises.defer();
|
|
nextDeferred.promise.prev = this.promise;
|
|
this._addHandler(resolvedHandler, rejectedHandler, canceledHandler).nextDeferred = nextDeferred;
|
|
if (this.finished()) {
|
|
handler = this.handlers.pop();
|
|
method = handler[this.status];
|
|
deferred = handler.nextDeferred;
|
|
if (!method) {
|
|
deferred[this.status].apply(deferred, this.results);
|
|
} else {
|
|
nextResult = method.apply(null, this.results);
|
|
if (nextResult && typeof nextResult.then === 'function') {
|
|
nextResult.then(deferred.resolve, deferred.reject);
|
|
} else {
|
|
deferred[this.status](nextResult);
|
|
}
|
|
}
|
|
}
|
|
return nextDeferred.promise;
|
|
};
|
|
|
|
Deferred.prototype.finished = function() {
|
|
return this.status !== 'pending';
|
|
};
|
|
|
|
Deferred.prototype.resolve = function() {
|
|
var deferred, handler, method, nextResult, ref, results;
|
|
results = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
if (this.status !== 'pending') {
|
|
return;
|
|
}
|
|
if ((ref = results[0]) != null ? ref.isArgs : void 0) {
|
|
results = results[0];
|
|
}
|
|
clearTimeout(this._timeout);
|
|
this.status = 'resolve';
|
|
this.results = results;
|
|
while ((handler = this.handlers.shift())) {
|
|
method = handler[this.status];
|
|
deferred = handler.nextDeferred;
|
|
if (!method) {
|
|
deferred[this.status].apply(deferred, this.results);
|
|
} else {
|
|
nextResult = method.apply(null, this.results);
|
|
if (nextResult && typeof nextResult.then === 'function') {
|
|
nextResult.then(deferred.resolve, deferred.reject);
|
|
} else {
|
|
deferred[this.status](nextResult);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
Deferred.prototype.reject = function() {
|
|
var deferred, handler, method, nextResult, ref, results;
|
|
results = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
if (this.status !== 'pending') {
|
|
return;
|
|
}
|
|
if ((ref = results[0]) != null ? ref.isArgs : void 0) {
|
|
results = results[0];
|
|
}
|
|
clearTimeout(this._timeout);
|
|
this.status = 'reject';
|
|
this.results = results;
|
|
while ((handler = this.handlers.shift())) {
|
|
method = handler[this.status];
|
|
deferred = handler.nextDeferred;
|
|
if (!method) {
|
|
deferred[this.status].apply(deferred, this.results);
|
|
} else {
|
|
nextResult = method.apply(null, this.results);
|
|
if (nextResult && typeof nextResult.then === 'function') {
|
|
nextResult.then(deferred.resolve, deferred.reject);
|
|
} else {
|
|
deferred[this.status](nextResult);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
Deferred.prototype.cancel = function() {
|
|
var deferred, handler, method, nextResult, ref, ref1, results;
|
|
results = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
if (this.status !== 'pending') {
|
|
return;
|
|
}
|
|
if ((ref = results[0]) != null ? ref.isArgs : void 0) {
|
|
results = results[0];
|
|
}
|
|
clearTimeout(this._timeout);
|
|
this.status = 'cancel';
|
|
this.results = results;
|
|
while ((handler = this.handlers.shift())) {
|
|
method = handler[this.status];
|
|
deferred = handler.nextDeferred;
|
|
if (!method) {
|
|
deferred[this.status].apply(deferred, this.results);
|
|
} else {
|
|
nextResult = method.apply(null, this.results);
|
|
if (nextResult && typeof nextResult.then === 'function') {
|
|
nextResult.then(deferred.resolve, deferred.reject);
|
|
} else {
|
|
deferred[this.status](nextResult);
|
|
}
|
|
}
|
|
}
|
|
if ((ref1 = this.promise.prev) != null) {
|
|
ref1.cancel();
|
|
}
|
|
};
|
|
|
|
Deferred.prototype.progress = function() {
|
|
var i, len, params, progress, ref, results1;
|
|
params = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
ref = this.progressHandlers;
|
|
results1 = [];
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
progress = ref[i];
|
|
results1.push(progress.apply(null, params));
|
|
}
|
|
return results1;
|
|
};
|
|
|
|
Deferred.prototype.timeout = function(milliseconds, error) {
|
|
clearTimeout(this._timeout);
|
|
return this._timeout = setTimeout((function(_this) {
|
|
return function() {
|
|
return _this.reject(error != null ? error : new Error('Operation timed out'));
|
|
};
|
|
})(this), milliseconds);
|
|
};
|
|
|
|
Deferred.prototype.reset = function() {
|
|
this.status = 'pending';
|
|
this.progressHandlers = [];
|
|
return this.handlers = [];
|
|
};
|
|
|
|
Deferred.prototype._addHandler = function(resolvedHandler, rejectedHandler, canceledHandler) {
|
|
var handler;
|
|
handler = {
|
|
resolve: resolvedHandler,
|
|
reject: rejectedHandler,
|
|
cancel: canceledHandler
|
|
};
|
|
this.handlers.push(handler);
|
|
return handler;
|
|
};
|
|
|
|
return Deferred;
|
|
|
|
})();
|
|
|
|
promises.Deferred = Deferred;
|
|
|
|
promises.Promise = Promise;
|
|
|
|
promises.args = args;
|
|
|
|
promises.defer = function(promise) {
|
|
return new promises.Deferred(promise);
|
|
};
|
|
|
|
promises.wrap = function(method, PromiseClass) {
|
|
return function() {
|
|
var args, callback, deferred, promise;
|
|
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
promise = PromiseClass ? new PromiseClass() : void 0;
|
|
deferred = promises.defer(promise);
|
|
if (typeof args[args.length - 1] === 'function') {
|
|
callback = args.pop();
|
|
}
|
|
args.push(function(err, result) {
|
|
var extras;
|
|
extras = Array.prototype.slice.call(arguments, 2);
|
|
if (callback) {
|
|
callback.apply(null, [err, result].concat(slice.call(extras)));
|
|
}
|
|
if (err) {
|
|
return deferred.reject(err);
|
|
} else {
|
|
return deferred.resolve.apply(deferred, [result].concat(slice.call(extras)));
|
|
}
|
|
});
|
|
method.apply(this, args);
|
|
return deferred.promise;
|
|
};
|
|
};
|
|
|
|
promises.resolve = function() {
|
|
var args, deferred;
|
|
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
deferred = promises.defer();
|
|
deferred.resolve.apply(deferred, args);
|
|
return deferred.promise;
|
|
};
|
|
|
|
promises.reject = function() {
|
|
var args, deferred;
|
|
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
|
|
deferred = promises.defer();
|
|
deferred.reject.apply(deferred, args);
|
|
return deferred.promise;
|
|
};
|
|
|
|
});
|
|
|
|
require.register("request.coffee", function(exports, require, module) {
|
|
var FormData, RequestError, createRequest, promises, sendRequest, unloading,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
if (typeof XMLHttpRequest === 'undefined') {
|
|
global.XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
|
|
}
|
|
|
|
FormData = global.FormData || function() {};
|
|
|
|
promises = require('./promises');
|
|
|
|
sendRequest = function(method, url, data, hooks, callback) {
|
|
var deferred, hook, i, key, len, query, value, xhr;
|
|
if (data && method.toUpperCase() === 'GET') {
|
|
query = [];
|
|
for (key in data) {
|
|
value = data[key];
|
|
query.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
|
|
}
|
|
if (query.length) {
|
|
url += url.indexOf('?') === -1 ? '?' : '&';
|
|
url += query.join('&');
|
|
}
|
|
} else if (typeof data === 'object' && !(data instanceof FormData)) {
|
|
data = JSON.stringify(data);
|
|
}
|
|
xhr = new XMLHttpRequest();
|
|
xhr.open(method.toUpperCase(), url);
|
|
if (hooks) {
|
|
for (i = 0, len = hooks.length; i < len; i++) {
|
|
hook = hooks[i];
|
|
hook(xhr, data);
|
|
}
|
|
}
|
|
deferred = promises.defer();
|
|
xhr.onreadystatechange = function() {
|
|
var errorMsg, ref, ref1, ref2;
|
|
switch (xhr.readyState) {
|
|
case 3:
|
|
return deferred.progress(xhr);
|
|
case 4:
|
|
try {
|
|
xhr.data = JSON.parse(xhr.responseText);
|
|
} catch (error) {
|
|
xhr.data = null;
|
|
}
|
|
if (xhr.status >= 400) {
|
|
errorMsg = ((ref = xhr.data) != null ? (ref1 = ref.collection) != null ? (ref2 = ref1.error) != null ? ref2.message : void 0 : void 0 : void 0) || '';
|
|
}
|
|
if (xhr.status === 0) {
|
|
if (unloading) {
|
|
return promises.defer().promise;
|
|
}
|
|
return deferred.reject(new RequestError(RequestError.CONNECTION_ERROR, 'Could not connect to the server'), xhr, errorMsg);
|
|
} else if (xhr.status >= 500) {
|
|
if (global.console) {
|
|
console.error("TeamSnap API error: " + errorMsg);
|
|
}
|
|
return deferred.reject(new RequestError(RequestError.SERVER_ERROR, 'Error with the server'), xhr, errorMsg);
|
|
} else if (xhr.status > 400) {
|
|
return deferred.reject(new RequestError(RequestError.CLIENT_ERROR, 'There was an error with the request'), xhr, errorMsg);
|
|
} else if (xhr.status === 400) {
|
|
return deferred.reject(new RequestError(RequestError.VALIDATION_ERROR, errorMsg || 'The data was invalid'), xhr);
|
|
} else {
|
|
return deferred.resolve(xhr);
|
|
}
|
|
}
|
|
};
|
|
xhr.send(data || null);
|
|
return deferred.promise.callback(callback);
|
|
};
|
|
|
|
createRequest = function(hooks) {
|
|
var request;
|
|
if (hooks == null) {
|
|
hooks = [];
|
|
}
|
|
request = function(method, url, data, callback) {
|
|
if (typeof data === 'function') {
|
|
callback = data;
|
|
data = null;
|
|
}
|
|
return sendRequest(method, url, data, hooks, callback);
|
|
};
|
|
request.get = function(url, params, callback) {
|
|
return request('get', url, params, callback);
|
|
};
|
|
request.post = function(url, params, callback) {
|
|
return request('post', url, params, callback);
|
|
};
|
|
request.put = function(url, params, callback) {
|
|
return request('put', url, params, callback);
|
|
};
|
|
request["delete"] = function(url, params, callback) {
|
|
return request('delete', url, params, callback);
|
|
};
|
|
request.create = function() {
|
|
return createRequest();
|
|
};
|
|
request.clone = function() {
|
|
return createRequest(hooks.slice());
|
|
};
|
|
request.reset = function() {
|
|
hooks = [];
|
|
return this;
|
|
};
|
|
request.hook = function(hook) {
|
|
hooks.push(hook);
|
|
return this;
|
|
};
|
|
request.removeHook = function(hook) {
|
|
var index;
|
|
index = hooks.indexOf(hook);
|
|
if (index !== -1) {
|
|
hooks.splice(index, 1);
|
|
}
|
|
return this;
|
|
};
|
|
return request;
|
|
};
|
|
|
|
module.exports = createRequest();
|
|
|
|
RequestError = (function(superClass) {
|
|
extend(RequestError, superClass);
|
|
|
|
RequestError.CONNECTION_ERROR = 1;
|
|
|
|
RequestError.SERVER_ERROR = 2;
|
|
|
|
RequestError.CLIENT_ERROR = 3;
|
|
|
|
RequestError.VALIDATION_ERROR = 4;
|
|
|
|
function RequestError(code, message) {
|
|
this.code = code;
|
|
this.message = message;
|
|
RequestError.__super__.constructor.call(this);
|
|
this.name = 'RequestError';
|
|
}
|
|
|
|
return RequestError;
|
|
|
|
})(Error);
|
|
|
|
if (typeof window !== 'undefined') {
|
|
unloading = false;
|
|
window.addEventListener('beforeunload', function() {
|
|
unloading = true;
|
|
});
|
|
}
|
|
|
|
});
|
|
|
|
;require.register("sdk.coffee", function(exports, require, module) {
|
|
var Item, ScopedCollection, TeamSnap, add, linking, loadCollections, mergeDefaults, promises, ref, urlExp,
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
TeamSnap = require('./teamsnap').TeamSnap;
|
|
|
|
promises = require('./promises');
|
|
|
|
loadCollections = require('./loadCollections');
|
|
|
|
ref = require('./model'), Item = ref.Item, ScopedCollection = ref.ScopedCollection;
|
|
|
|
urlExp = /^https?:\/\//;
|
|
|
|
TeamSnap.prototype.loadCollections = function(cachedCollections, callback) {
|
|
if (typeof cachedCollections === 'function') {
|
|
callback = cachedCollections;
|
|
cachedCollections = null;
|
|
}
|
|
return loadCollections(this.request, cachedCollections).then((function(_this) {
|
|
return function(colls) {
|
|
var ref1, ref2, ref3, ref4;
|
|
_this.collections = {};
|
|
Object.keys(colls).forEach(function(name) {
|
|
return _this.collections[name] = new ScopedCollection(_this.request, colls[name]);
|
|
});
|
|
_this.apiVersion = colls.root.version;
|
|
_this.plans = Item.fromArray(_this.request, ((ref1 = colls.plans.items) != null ? ref1.slice() : void 0) || []);
|
|
_this.smsGateways = Item.fromArray(_this.request, ((ref2 = colls.smsGateways.items) != null ? ref2.slice() : void 0) || []);
|
|
_this.sports = Item.fromArray(_this.request, ((ref3 = colls.sports.items) != null ? ref3.slice() : void 0) || []);
|
|
_this.timeZones = Item.fromArray(_this.request, ((ref4 = colls.timeZones.items) != null ? ref4.slice() : void 0) || []);
|
|
return _this;
|
|
};
|
|
})(this)).callback(callback);
|
|
};
|
|
|
|
TeamSnap.prototype.reloadCollections = function(callback) {
|
|
loadCollections.clear();
|
|
return this.loadCollections(callback);
|
|
};
|
|
|
|
TeamSnap.prototype.loadItems = function(type, params, callback) {
|
|
var collection;
|
|
if (!this.hasType(type)) {
|
|
throw new TSArgsError('teamsnap.load*', 'must provide a valid `type`');
|
|
}
|
|
collection = this.getCollectionForItem(type);
|
|
return collection.queryItems('search', params, callback);
|
|
};
|
|
|
|
TeamSnap.prototype.loadItem = function(type, params, callback) {
|
|
var collection;
|
|
if (!this.hasType(type)) {
|
|
throw new TSArgsError('teamsnap.load*', 'must provide a valid `type`');
|
|
}
|
|
collection = this.getCollectionForItem(type);
|
|
return collection.queryItem('search', params, callback);
|
|
};
|
|
|
|
TeamSnap.prototype.createItem = function(properties, defaults) {
|
|
var collection;
|
|
if (!properties) {
|
|
properties = defaults;
|
|
defaults = null;
|
|
}
|
|
if (defaults) {
|
|
properties = mergeDefaults(properties, defaults);
|
|
}
|
|
if (!this.isItem(properties)) {
|
|
throw new TSArgsError('teamsnap.create*', 'must include a valid `type`');
|
|
}
|
|
if (!properties.links) {
|
|
collection = this.getCollectionForItem(properties.type);
|
|
properties.links = collection.links.cloneEmpty();
|
|
}
|
|
return Item.create(this.request, properties);
|
|
};
|
|
|
|
TeamSnap.prototype.saveItem = function(item, callback) {
|
|
var collection;
|
|
if (!this.isItem(item)) {
|
|
throw new TSArgsError('teamsnap.save*', 'must include a valid `type`');
|
|
}
|
|
collection = this.getCollectionForItem(item);
|
|
return collection.save(item, callback);
|
|
};
|
|
|
|
TeamSnap.prototype.deleteItem = function(item, params, callback) {
|
|
if (typeof item === 'string' && urlExp.test(item)) {
|
|
item = {
|
|
href: item
|
|
};
|
|
}
|
|
if (!(typeof (item != null ? item.href : void 0) === 'string' && urlExp.test(item.href))) {
|
|
throw new TSArgsError('teamsnap.delete*', 'item must have a valid href to delete');
|
|
}
|
|
if (!(item instanceof Item)) {
|
|
item = Item.create(this.request, item);
|
|
}
|
|
return item["delete"](params, callback);
|
|
};
|
|
|
|
TeamSnap.prototype.copyItem = function(item) {
|
|
var collection;
|
|
collection = this.getCollectionForItem(item);
|
|
return item.copy(collection.template);
|
|
};
|
|
|
|
TeamSnap.prototype.getNameSort = function() {
|
|
return function(itemA, itemB) {
|
|
var valueA, valueB;
|
|
if (itemA.type !== itemB.type) {
|
|
valueA = itemA.type;
|
|
valueB = itemB.type;
|
|
} else if (typeof itemA.name === 'string' && typeof itemB.name === 'string') {
|
|
valueA = itemA.name.toLowerCase();
|
|
valueB = itemB.name.toLowerCase();
|
|
} else {
|
|
if (itemA.createdAt && itemB.createdAt) {
|
|
valueA = itemA.createdAt;
|
|
valueB = itemB.createdAt;
|
|
} else {
|
|
valueA = itemA.id;
|
|
valueB = itemB.id;
|
|
}
|
|
}
|
|
if (typeof (valueA != null ? valueA.localeCompare : void 0) === 'function') {
|
|
return valueA.localeCompare(valueB);
|
|
} else {
|
|
if (valueA === valueB) {
|
|
return 0;
|
|
} else if (!valueA && valueB) {
|
|
return 1;
|
|
} else if (valueA && !valueB) {
|
|
return -1;
|
|
} else if (valueA > valueB) {
|
|
return 1;
|
|
} else if (valueA < valueB) {
|
|
return -1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
TeamSnap.prototype.getDefaultSort = function() {
|
|
return function(itemA, itemB) {
|
|
var valueA, valueB;
|
|
if (itemA.type !== itemB.type) {
|
|
valueA = itemA.type;
|
|
valueB = itemB.type;
|
|
} else {
|
|
if (itemA.createdAt && itemB.createdAt) {
|
|
valueA = itemA.createdAt;
|
|
valueB = itemB.createdAt;
|
|
} else {
|
|
valueA = itemA.id;
|
|
valueB = itemB.id;
|
|
}
|
|
}
|
|
if (typeof (valueA != null ? valueA.localeCompare : void 0) === 'function') {
|
|
return valueA.localeCompare(valueB);
|
|
} else {
|
|
if (valueA === valueB) {
|
|
return 0;
|
|
} else if (!valueA && valueB) {
|
|
return 1;
|
|
} else if (valueA && !valueB) {
|
|
return -1;
|
|
} else if (valueA > valueB) {
|
|
return 1;
|
|
} else if (valueA < valueB) {
|
|
return -1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
TeamSnap.prototype.getCollectionForItem = function(item) {
|
|
var collectionName, type;
|
|
if (!this.collections) {
|
|
throw new TSError('You must auth() and loadCollections() before using any load*, save*, create*, or delete* methods.');
|
|
}
|
|
type = typeof item === 'string' ? item : item.type;
|
|
collectionName = this.getPluralType(type);
|
|
return this.collections[collectionName];
|
|
};
|
|
|
|
TeamSnap.prototype.isId = function(value) {
|
|
return typeof value === 'string' || typeof value === 'number';
|
|
};
|
|
|
|
TeamSnap.prototype.isItem = function(value, type) {
|
|
return this.hasType(value != null ? value.type : void 0) && (!type || value.type === type);
|
|
};
|
|
|
|
TeamSnap.prototype.reject = function(msg, field, callback) {
|
|
return promises.reject(new TSValidationError(msg, field)).callback(callback);
|
|
};
|
|
|
|
add = function(module) {
|
|
var key, results, value;
|
|
results = [];
|
|
for (key in module) {
|
|
value = module[key];
|
|
results.push(TeamSnap.prototype[key] = value);
|
|
}
|
|
return results;
|
|
};
|
|
|
|
add(require('./types'));
|
|
|
|
linking = require('./linking');
|
|
|
|
TeamSnap.prototype.linkItems = linking.linkItems;
|
|
|
|
TeamSnap.prototype.unlinkItems = linking.unlinkItems;
|
|
|
|
add(require('./persistence'));
|
|
|
|
add(require('./collections/teams'));
|
|
|
|
add(require('./collections/assignments'));
|
|
|
|
add(require('./collections/availabilities'));
|
|
|
|
add(require('./collections/broadcastAlerts'));
|
|
|
|
add(require('./collections/broadcastEmails'));
|
|
|
|
add(require('./collections/broadcastEmailAttachments'));
|
|
|
|
add(require('./collections/contactEmailAddresses'));
|
|
|
|
add(require('./collections/contactPhoneNumbers'));
|
|
|
|
add(require('./collections/contacts'));
|
|
|
|
add(require('./collections/customData'));
|
|
|
|
add(require('./collections/customFields'));
|
|
|
|
add(require('./collections/leagueCustomData'));
|
|
|
|
add(require('./collections/leagueCustomFields'));
|
|
|
|
add(require('./collections/divisionEvents'));
|
|
|
|
add(require('./collections/divisionLocations'));
|
|
|
|
add(require('./collections/divisionMembers'));
|
|
|
|
add(require('./collections/divisionMembersPreferences'));
|
|
|
|
add(require('./collections/divisionTeamStandings'));
|
|
|
|
add(require('./collections/divisions'));
|
|
|
|
add(require('./collections/divisionsPreferences'));
|
|
|
|
add(require('./collections/events'));
|
|
|
|
add(require('./collections/eventStatistics'));
|
|
|
|
add(require('./collections/facebookPages'));
|
|
|
|
add(require('./collections/forumPosts'));
|
|
|
|
add(require('./collections/forumSubscriptions'));
|
|
|
|
add(require('./collections/forumTopics'));
|
|
|
|
add(require('./collections/leagueRegistrantDocuments'));
|
|
|
|
add(require('./collections/locations'));
|
|
|
|
add(require('./collections/memberAssignments'));
|
|
|
|
add(require('./collections/memberBalances'));
|
|
|
|
add(require('./collections/memberEmailAddresses'));
|
|
|
|
add(require('./collections/memberFiles'));
|
|
|
|
add(require('./collections/memberLinks'));
|
|
|
|
add(require('./collections/memberPayments'));
|
|
|
|
add(require('./collections/memberPhoneNumbers'));
|
|
|
|
add(require('./collections/memberPhotos'));
|
|
|
|
add(require('./collections/membersPreferences'));
|
|
|
|
add(require('./collections/memberStatistics'));
|
|
|
|
add(require('./collections/memberRegistrationSignups'));
|
|
|
|
add(require('./collections/members'));
|
|
|
|
add(require('./collections/messageData'));
|
|
|
|
add(require('./collections/messages'));
|
|
|
|
add(require('./collections/opponents'));
|
|
|
|
add(require('./collections/opponentsResults'));
|
|
|
|
add(require('./collections/paymentNotes'));
|
|
|
|
add(require('./collections/plans'));
|
|
|
|
add(require('./collections/sponsors'));
|
|
|
|
add(require('./collections/sports'));
|
|
|
|
add(require('./collections/registrationForms'));
|
|
|
|
add(require('./collections/statisticAggregates'));
|
|
|
|
add(require('./collections/statistics'));
|
|
|
|
add(require('./collections/statisticData'));
|
|
|
|
add(require('./collections/statisticGroups'));
|
|
|
|
add(require('./collections/teamFees'));
|
|
|
|
add(require('./collections/teamMedia'));
|
|
|
|
add(require('./collections/teamMediumComments'));
|
|
|
|
add(require('./collections/teamMediaGroups'));
|
|
|
|
add(require('./collections/teamPublicSites'));
|
|
|
|
add(require('./collections/teamsPaypalPreferences'));
|
|
|
|
add(require('./collections/teamPhotos'));
|
|
|
|
add(require('./collections/teamsPreferences'));
|
|
|
|
add(require('./collections/teamsResults'));
|
|
|
|
add(require('./collections/teamStatistics'));
|
|
|
|
add(require('./collections/trackedItems'));
|
|
|
|
add(require('./collections/trackedItemStatuses'));
|
|
|
|
add(require('./collections/users'));
|
|
|
|
mergeDefaults = function(properties, defaults) {
|
|
var key, obj, value;
|
|
obj = {};
|
|
for (key in properties) {
|
|
if (!hasProp.call(properties, key)) continue;
|
|
value = properties[key];
|
|
if (!(typeof value === 'function' || key.charAt(0) === '_')) {
|
|
obj[key] = value;
|
|
}
|
|
}
|
|
for (key in defaults) {
|
|
if (!hasProp.call(defaults, key)) continue;
|
|
value = defaults[key];
|
|
if (!(typeof value === 'function' || properties.hasOwnProperty(key))) {
|
|
obj[key] = value;
|
|
}
|
|
}
|
|
return obj;
|
|
};
|
|
|
|
});
|
|
|
|
require.register("teamsnap.coffee", function(exports, require, module) {
|
|
var Collection, Item, TeamSnap, promises, ref;
|
|
|
|
promises = require('./promises');
|
|
|
|
ref = require('./model'), Collection = ref.Collection, Item = ref.Item;
|
|
|
|
require('./errors');
|
|
|
|
TeamSnap = (function() {
|
|
TeamSnap.prototype.version = '1.24.0';
|
|
|
|
TeamSnap.prototype.promises = promises;
|
|
|
|
TeamSnap.prototype.when = promises.when;
|
|
|
|
TeamSnap.prototype.TeamSnap = TeamSnap;
|
|
|
|
TeamSnap.prototype.Collection = Collection;
|
|
|
|
TeamSnap.prototype.Item = Item;
|
|
|
|
function TeamSnap(apiUrl, authUrl) {
|
|
this.apiUrl = apiUrl != null ? apiUrl : 'https://apiv3.teamsnap.com';
|
|
this.authUrl = authUrl != null ? authUrl : 'https://auth.teamsnap.com';
|
|
}
|
|
|
|
return TeamSnap;
|
|
|
|
})();
|
|
|
|
module.exports = new TeamSnap();
|
|
|
|
require('./auth');
|
|
|
|
require('./sdk');
|
|
|
|
if (!String.prototype.trim) {
|
|
String.prototype.trim = function() {
|
|
return this.replace(/^\s+|\s+$/g, '');
|
|
};
|
|
}
|
|
|
|
});
|
|
|
|
;require.register("types.coffee", function(exports, require, module) {
|
|
var i, len, plural, pluralLookup, singularLookup, teamTypes, teamsnap, type, typeLookup, types;
|
|
|
|
teamsnap = exports;
|
|
|
|
types = ['user', 'assignment', 'availability', 'broadcastAlert', 'broadcastEmail', 'broadcastEmailAttachment', 'contact', 'contactEmailAddress', 'contactPhoneNumber', 'customDatum', 'customField', 'leagueCustomDatum', 'leagueCustomField', 'divisionContact', 'divisionContactEmailAddress', 'divisionContactPhoneNumber', 'divisionEvent', 'divisionLocation', 'divisionMember', 'divisionMemberEmailAddress', 'divisionMemberPhoneNumber', 'divisionMemberPreferences', 'divisionTeamStanding', 'divisionPreferences', 'division', 'event', 'eventStatistic', 'facebookPage', 'forumPost', 'forumSubscription', 'forumTopic', 'leagueRegistrantDocument', 'location', 'member', 'memberAssignment', 'memberBalance', 'memberEmailAddress', 'memberFile', 'memberLink', 'memberPayment', 'memberPhoneNumber', 'memberPhoto', 'memberPreferences', 'memberStatistic', 'memberRegistrationSignup', 'message', 'messageDatum', 'opponent', 'opponentResults', 'paymentNote', 'plan', 'registrationForm', 'smsGateway', 'sponsor', 'statistic', 'statisticAggregate', 'statisticDatum', 'statisticGroup', 'sport', 'team', 'teamFee', 'teamMedium', 'teamMediumComment', 'teamMediaGroup', 'teamPaypalPreferences', 'teamPhoto', 'teamPreferences', 'teamPublicSite', 'teamResults', 'teamStatistic', 'timeZone', 'trackedItem', 'trackedItemStatus'];
|
|
|
|
teamTypes = types.slice();
|
|
|
|
teamTypes.remove = function(type) {
|
|
var index;
|
|
index = this.indexOf(type);
|
|
if (index !== -1) {
|
|
this.splice(index, 1);
|
|
}
|
|
return this;
|
|
};
|
|
|
|
teamTypes.remove('user').remove('plan').remove('smsGateway').remove('sport').remove('timeZone');
|
|
|
|
typeLookup = {};
|
|
|
|
singularLookup = {};
|
|
|
|
pluralLookup = {
|
|
memberPreferences: 'membersPreferences',
|
|
divisionMemberPreferences: 'divisionMembersPreferences',
|
|
divisionPreferences: 'divisionsPreferences',
|
|
opponentResults: 'opponentsResults',
|
|
statisticDatum: 'statisticData',
|
|
messageDatum: 'messageData',
|
|
teamMedium: 'teamMedia',
|
|
teamPaypalPreferences: 'teamsPaypalPreferences',
|
|
teamPreferences: 'teamsPreferences',
|
|
teamResults: 'teamsResults',
|
|
customDatum: 'customData',
|
|
leagueCustomDatum: 'leagueCustomData',
|
|
smsGateway: 'smsGateways'
|
|
};
|
|
|
|
for (i = 0, len = types.length; i < len; i++) {
|
|
type = types[i];
|
|
plural = pluralLookup[type] || (function() {
|
|
switch (type.slice(-1)) {
|
|
case 'y':
|
|
return type.slice(0, -1) + 'ies';
|
|
case 's':
|
|
return type + 'es';
|
|
default:
|
|
return type + 's';
|
|
}
|
|
})();
|
|
typeLookup[type] = type;
|
|
typeLookup[plural] = type;
|
|
singularLookup[plural] = type;
|
|
pluralLookup[type] = plural;
|
|
}
|
|
|
|
teamsnap.isPluralType = function(name) {
|
|
return singularLookup.hasOwnProperty(name);
|
|
};
|
|
|
|
teamsnap.isSingularType = function(name) {
|
|
return pluralLookup.hasOwnProperty(name);
|
|
};
|
|
|
|
teamsnap.hasType = function(type) {
|
|
return typeLookup[type] !== void 0;
|
|
};
|
|
|
|
teamsnap.getTypes = function() {
|
|
return types.slice();
|
|
};
|
|
|
|
teamsnap.getTeamTypes = function() {
|
|
return teamTypes.slice();
|
|
};
|
|
|
|
teamsnap.getPluralType = function(name) {
|
|
return pluralLookup[name];
|
|
};
|
|
|
|
teamsnap.getSingularType = function(name) {
|
|
return singularLookup[name];
|
|
};
|
|
|
|
teamsnap.getType = function(name) {
|
|
return typeLookup[name];
|
|
};
|
|
|
|
teamsnap.camelcaseType = function(type) {
|
|
return type.replace(/[-_]+(\w)/g, function(_, char) {
|
|
return char.toUpperCase();
|
|
});
|
|
};
|
|
|
|
teamsnap.underscoreType = function(type) {
|
|
return type.replace(/[A-Z]/g, function(char) {
|
|
return '_' + char.toLowerCase();
|
|
});
|
|
};
|
|
|
|
});
|
|
|
|
|
|
global['teamsnap'] = require('teamsnap');
|
|
})(); |