/** * Saves the expand state of a folder so that it can be loaded based on that state * @param {Object} item Node data * @param {Function} callback */ function saveExpandState(item, callback) { var collapseUrl, postAction, expandUrl; if (!item.apiURL) { return; } if (item.expand) { // turn to false collapseUrl = item.apiURL + 'collapse/'; postAction = $osf.postJSON(collapseUrl, {}); postAction.done(function () { item.expand = false; if (callback !== undefined) { callback(); } }).fail($osf.handleJSONError); } else { // turn to true expandUrl = item.apiURL + 'expand/'; postAction = $osf.postJSON(expandUrl, {}); postAction.done(function () { item.expand = false; if (callback !== undefined) { callback(); } }).fail($osf.handleJSONError); } }
bootbox.confirm(messages.beforeSubmitForApproval, function(result) { var url = self.urls.submit.replace('{draft_pk}', self.draft().pk); if (result) { var request = $osf.postJSON(url, { node: currentNode, auth: currentUser }); request.done(function() { bootbox.dialog({ message: messages.afterSubmitForApproval, title: 'Pre-Registration Prize Submission', buttons: { registrations: { label: 'Return to registrations page', className: 'btn-primary pull-right', callback: function() { window.location.assign(self.draft().urls.registrations); $osf.unblock(); } } } }); }); request.fail(function(xhr, status, error) { Raven.captureMessage('Could not submit draft registration', { extra: { url: url, textStatus: status, error: error } }); $osf.growl('Error submitting for review', language.submitForReviewFail); }); } });
$('#commentSettings').on('submit', function() { var $commentMsg = $('#configureCommentingMessage'); var $this = $(this); var commentLevel = $this.find('input[name="commentLevel"]:checked').val(); $osf.postJSON( ctx.node.urls.api + 'settings/comments/', {commentLevel: commentLevel} ).done(function() { $commentMsg.text('Successfully updated settings.'); $commentMsg.addClass('text-success'); if($osf.isSafari()){ //Safari can't update jquery style change before reloading. So delay is applied here setTimeout(function(){window.location.reload();}, 100); } else { window.location.reload(); } }).fail(function() { bootbox.alert({ message: 'Could not set commenting configuration. Please try again.', buttons:{ ok:{ label:'Close', className:'btn-default' } } }); }); return false; });
ViewModel.prototype.createCredentials = function() { var self = this; self.creatingCredentials(true); return $osf.postJSON( self.urls().create_auth, { secret_key: self.secretKey(), access_key: self.accessKey() } ).done(function(response) { self.creatingCredentials(false); self.changeMessage('Successfully added S3 credentials.', 'text-success'); self.updateFromData(response); }).fail(function(xhr, status, error) { self.creatingCredentials(false); var message = ''; var response = JSON.parse(xhr.responseText); if (response && response.message) { message = response.message; } self.changeMessage(message, 'text-danger'); Raven.captureMessage('Could not add S3 credentials', { url: self.urls().importAuth, textStatus: status, error: error }); }); };
ViewModel.prototype.setInfo = function() { var self = this; self.submitting(true); return $osf.postJSON( self.urls().set, ko.toJS({ dataverse: { alias: self.selectedDataverseAlias }, dataset: { doi: self.selectedDatasetDoi } }) ).done(function() { self.submitting(false); self.savedDataverseAlias(self.selectedDataverseAlias()); self.savedDataverseTitle(self.selectedDataverseTitle()); self.savedDatasetDoi(self.selectedDatasetDoi()); self.savedDatasetTitle(self.selectedDatasetTitle()); self.datasetWasFound(true); self.changeMessage(self.messages.setInfoSuccess, 'text-success'); }).fail(function(xhr, textStatus, error) { self.submitting(false); var errorMessage = (xhr.status === 410) ? self.messages.datasetDeaccessioned : (xhr.status === 406) ? self.messages.forbiddenCharacters : self.messages.setDatasetError; self.changeMessage(errorMessage, 'text-danger'); Raven.captureMessage('Could not authenticate with Dataverse', { extra: { url: self.urls().set, textStatus: textStatus, error: error } }); }); };
ViewModel.prototype.getDatasets = function() { var self = this; self.datasets([]); self.loadedDatasets(false); return $osf.postJSON( self.urls().getDatasets, ko.toJS({ alias: self.selectedDataverseAlias }) ).done(function(response) { // Don't update if another Dataverse has been selected if (response.alias === self.selectedDataverseAlias()) { self.datasets(response.datasets); self.loadedDatasets(true); self.selectedDatasetDoi(self.savedDatasetDoi()); self.findDataset(); } }).fail(function(xhr, status, error) { self.changeMessage(self.messages.getDatasetsError, 'text-danger'); Raven.captureMessage('Could not GET datasets', { extra: { url: self.urls().getDatasets, textStatus: status, error: error } }); }); };
ViewModel.prototype.sendAuth = function() { var self = this; // Selection should not be empty if( !self.selectedHost() ){ self.changeMessage("Please select a Dataverse repository.", 'text-danger'); return; } var url = self.urls().create; return $osf.postJSON( url, ko.toJS({ host: self.host, api_token: self.apiToken }) ).done(function() { self.clearModal(); $modal.modal('hide'); self.userHasAuth(true); self.importAuth(); }).fail(function(xhr, textStatus, error) { var errorMessage = (xhr.status === 401) ? self.messages.authInvalid : self.messages.authError; self.changeMessage(errorMessage, 'text-danger'); Raven.captureMessage('Could not authenticate with Dataverse', { url: url, textStatus: textStatus, error: error }); }); };
fetchResults: function() { var self = this; self.errorMsg(''); if (self.query()) { osfHelpers.postJSON( '/api/v1/search/node/', { query: self.query(), nodeId: nodeId, includePublic: self.includePublic(), page: self.currentPage() } ).done(function(result) { if (!result.nodes.length) { self.errorMsg('No results found.'); } self.results(result.nodes); self.currentPage(result.page); self.numberOfPages(result.pages); self.addNewPaginators(); }).fail( osfHelpers.handleJSONError ); } else { self.results([]); self.currentPage(0); self.totalPages(0); } },
callback: function(result) { if (result) { var request = $osf.postJSON(ctx.node.urls.api + 'settings/addons/', data); request.done(changeAddonSettingsSuccess); request.fail(changeAddonSettingsFailure); } },
Draft.prototype.register = function(url, data) { var self = this; $osf.block(); var request = $osf.postJSON(url, data); request .done(function(response) { if (response.status === 'initiated') { window.location.assign(response.urls.registrations); } }) .fail(function() { bootbox.alert({ title: 'Registration failed', message: language.registerFail, callback: function() { $osf.unblock(); if (self.urls.registrations) { window.location.assign(self.urls.registrations); } }, buttons: { ok: { label: 'Back to project', } } }); }) .always(function() { $osf.unblock(); }); return request; };
$osf.postJSON(url, jsonData).success(function(data) { //Clear out our variables self.tags([]); self.tagMaxCount(1); self.results.removeAll(); self.categories.removeAll(); data.results.forEach(function(result){ if(result.category === 'user'){ self.results.push(new User(result)); } else { if(typeof result.url !== 'undefined'){ result.wikiUrl = result.url+'wiki/'; result.filesUrl = result.url+'files/'; } self.results.push(result); } }); //Load our categories var categories = data.counts; $.each(categories, function(key, value){ if (value === null) { value = 0; } self.categories.push(new Category(key, value, data.typeAliases[key])); }); self.categories(self.categories().sort(self.sortCategories)); // If our category is named attempt to load its total else set it to the total total if (self.category().name !== undefined) { self.totalResults(data.counts[self.category().name] || 0); } else { self.totalResults(self.self.categories()[0].count); } // Load up our tags $.each(data.tags, function(key, value){ self.tags.push(new Tag(value)); self.tagMaxCount(Math.max(self.tagMaxCount(), value.doc_count)); }); self.searchStarted(true); if (validate) { self.validateSearch(); } if (!noPush) { self.pushState(); } $osf.postJSON('/api/v1/share/?count', jsonData).success(function(data) { self.categories.push(new Category('SHARE', data.count, 'SHARE')); }); }).fail(function(response){
NodeActions.reorderChildren = function(idList, elm) { $osf.postJSON( ctx.node.urls.api + 'reorder_components/', {new_list: idList} ).fail(function(response) { $(elm).sortable('cancel'); $osf.handleJSONError(response); }); };
onAddTag: function (tag) { var url = tagUrl; var request = $osf.postJSON(url, {'tag': tag }); request.fail(function (xhr, textStatus, error) { $osf.growl('Error', 'Could not add tag.'); Raven.captureMessage('Failed to add tag', { tag: tag, url: url, textStatus: textStatus, error: error }); }); },
onAddTag: function(tag){ var url = nodeApiUrl + 'tags/'; var data = {tag: tag}; var request = $osf.postJSON(url, data); request.fail(function(xhr, textStatus, error) { Raven.captureMessage('Failed to add tag', { tag: tag, url: url, textStatus: textStatus, error: error }); }); },
var submit = function() { var request = $osf.postJSON('/api/v1/settings/addons/', formData); request.done(function() { window.location.reload(); }); request.fail(function() { var msg = 'Sorry, we had trouble saving your settings. If this persists please contact <a href="mailto: support@osf.io">support@osf.io</a>'; bootbox.alert({title: 'Request failed', message: msg}); }); };
self.createProject = function() { $osf.postJSON( CREATE_URL, self.serialize() ).done( self.createSuccess ).fail( self.createFailure ); };
CommentModel.prototype.submitUnreportAbuse = function() { var self = this; osfHelpers.postJSON( nodeApiUrl + 'comment/' + self.id() + '/unreport/', {} ).done(function() { self.isAbuse(false); }).fail(function() { self.unreporting(false); }); };
callback: function(result) { if (result) { osfHelpers.postJSON( URLS[urlKey], {permissions: permissions} ).done(function() { window.location.reload(); }).fail( osfHelpers.handleJSONError ); } }
connectAccount : function() { var self = this; if( self.hasDefaultHosts() && !self.selectedHost() ){ if (self.useCustomHost()){ self.changeMessage('Please enter an ownCloud server.', 'text-danger'); } else { self.changeMessage('Please select an ownCloud server.', 'text-danger'); } return; } if ( !self.useCustomHost() && !self.username() && !self.password() ){ self.changeMessage('Please enter a username and password.', 'text-danger'); return; } if ( self.useCustomHost() && ( !self.customHost() || !self.username() || !self.password() ) ) { self.changeMessage('Please enter an ownCloud host and credentials.', 'text-danger'); return; } var url = self.urls().auth; return osfHelpers.postJSON( url, ko.toJS({ host: self.host, password: self.password, username: self.username }) ).done(function() { self.clearModal(); $modal.modal('hide'); self.updateAccounts().then(function() { try{ $osf.putJSON( self.urls().importAuth, { external_account_id: self.accounts()[0].id } ).done(self.onImportSuccess.bind(self) ).fail(self.onImportError.bind(self)); self.changeMessage(self.messages.connectAccountSuccess(), 'text-success', 3000); } catch(err){ self.changeMessage(self.messages.connectAccountDenied(), 'text-danger', 6000); } }); }).fail(function(xhr, textStatus, error) { var errorMessage = (xhr.status === 401) ? language.authInvalid : language.authError; self.changeMessage(errorMessage, 'text-danger'); Raven.captureMessage('Could not authenticate with ownCloud', { url: url, textStatus: textStatus, error: error }); }); },
self.addToDashboard = function() { self.inDashboard(true); var jsonData = { 'toNodeID': self.dashboard, 'pointerID': self._id }; osfHelpers.postJSON('/api/v1/pointer/', jsonData) .fail(function(data) { self.inDashboard(false); osfHelpers.handleJSONError(data); }); };
NodeActions.beforeTemplate('/project/new/' + ctx.node.id + '/beforeTemplate/', function () { $osf.block(); $osf.postJSON( '/api/v1/project/new/' + ctx.node.id + '/', {} ).done(function(response) { window.location = response.url; }).fail(function(response) { $osf.unblock(); $osf.handleJSONError(response); }); });
postInviteRequest: function (fullname, email) { var self = this; return $osf.postJSON( self.nodeApiUrl + 'invite_contributor/', { 'fullname': fullname, 'email': email } ).done( self.onInviteSuccess.bind(self) ).fail( self.onInviteError.bind(self) ); },
self.addToDashboard = function() { $('#addDashboardFolder').tooltip('hide'); self.inDashboard(true); var jsonData = { 'toNodeID': self.dashboard, 'pointerID': self._id }; $osf.postJSON('/api/v1/pointer/', jsonData) .fail(function(data) { self.inDashboard(false); $osf.handleJSONError(data); }); };
$('#newProject, #newProjectXS').click( function() { var title = $(this).parent().find('.new-project-title').val(); if (!title) { return; } $osf.postJSON('/api/v1/project/new/', { title: title, campaign: 'prereg' }).done(function(response) { window.location = response.projectUrl + 'registrations/?campaign=prereg'; }).fail(function() { $osf.growl('Project creation failed. Reload the page and try again.'); }); });
CommentModel.prototype.submitAbuse = function() { var self = this; osfHelpers.postJSON( nodeApiUrl + 'comment/' + self.id() + '/report/', { category: self.abuseCategory(), text: self.abuseText() } ).done(function() { self.isAbuse(true); }).fail(function() { self.errorMessage('Could not report abuse.'); }); };
submit: function() { var self = this; self.submitEnabled(false); var nodeIds = osfHelpers.mapByProperty(self.selection(), 'id'); osfHelpers.postJSON( nodeApiUrl + 'pointer/', { nodeIds: nodeIds } ).done(function() { window.location.reload(); }).fail(function(data) { self.submitEnabled(true); osfHelpers.handleJSONError(data); }); },
fetchResults: function() { var self = this; self.errorMsg(''); self.searchWarningMsg(''); if (self.query()) { self.results([]); // clears page for spinner self.loadingResults(true); // enables spinner osfHelpers.postJSON( '/api/v1/search/node/', { query: self.query(), nodeId: nodeId, includePublic: self.includePublic(), page: self.pageToGet() } ).done(function(result) { if (!result.nodes.length) { self.errorMsg('No results found.'); } else { result.nodes.forEach(function(each) { if (each.isRegistration) { each.dateRegistered = new osfHelpers.FormattableDate(each.dateRegistered); } else { each.dateCreated = new osfHelpers.FormattableDate(each.dateCreated); each.dateModified = new osfHelpers.FormattableDate(each.dateModified); } }); } self.results(result.nodes); self.currentPage(result.page); self.numberOfPages(result.pages); self.addNewPaginators(); }).fail(function(xhr) { self.searchWarningMsg(xhr.responseJSON && xhr.responseJSON.message_long); }).always( function (){ self.searchAllProjectsSubmitText(SEARCH_ALL_SUBMIT_TEXT); self.searchMyProjectsSubmitText(SEARCH_MY_PROJECTS_SUBMIT_TEXT); self.loadingResults(false); }); } else { self.results([]); self.currentPage(0); self.totalPages(0); self.searchAllProjectsSubmitText(SEARCH_ALL_SUBMIT_TEXT); self.searchMyProjectsSubmitText(SEARCH_MY_PROJECTS_SUBMIT_TEXT); } },
self.fetchNodes = function(q, cb) { $osf.postJSON( '/api/v1/search/node/', { includePublic: true, query: q, } ).done(function(data) { var results = []; var local = self.ownProjects(q); var fetched = self.loadNodes(data.nodes); // Filter against local projects so that duplicates are not shown fetched = fetched.filter(function(element) { for (var i = 0; i < local.length; i++) { if (element.id === local[i].id) { return false; } } return true; }); if (fetched.length > 0) { results.push({ text: 'Other Projects', children: fetched }); } if (local.length > 0) { results.push({ text: 'Your Projects', children: local }); } cb({results: results}); }).fail(function() { //Silently error by just returning your projects cb({ results: [{ text: 'Your Projects', children: self.ownProjects(q) }] }); }); };
Draft.prototype.register = function(url, data) { var self = this; $osf.block(); var request = $osf.postJSON(url, data); request .done(function(response) { if (response.status === 'initiated') { window.location.assign(response.urls.registrations); } }) .fail(function() { self.onRegisterFail(); }) .always($osf.unblock); return request; };
callback: function(result) { if(result) { // Block page $osf.block(); // Fork pointer $osf.postJSON( ctx.node.urls.api + 'pointer/fork/', {pointerId: pointerId} ).done(function() { window.location.reload(); }).fail(function() { $osf.unblock(); $osf.growl('Error','Could not fork link.'); }); } },