/**
 * 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);
    }
}
Exemple #2
0
 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
        });
    });
};
Exemple #8
0
 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);
     }
 },
Exemple #10
0
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;
};
Exemple #11
0
        $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){
Exemple #12
0
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);
    });
};
Exemple #13
0
 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});
     });
 };
Exemple #16
0
 self.createProject = function() {
     $osf.postJSON(
         CREATE_URL,
         self.serialize()
     ).done(
         self.createSuccess
     ).fail(
         self.createFailure
     );
 };
Exemple #17
0
CommentModel.prototype.submitUnreportAbuse = function() {
    var self = this;
    osfHelpers.postJSON(
        nodeApiUrl + 'comment/' + self.id() + '/unreport/',
        {}
    ).done(function() {
        self.isAbuse(false);
    }).fail(function() {
        self.unreporting(false);
    });
};
Exemple #18
0
 callback: function(result) {
     if (result) {
         osfHelpers.postJSON(
             URLS[urlKey],
             {permissions: permissions}
         ).done(function() {
             window.location.reload();
         }).fail(
             osfHelpers.handleJSONError
         );
     }
 }
Exemple #19
0
 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
         });
     });
 },
Exemple #20
0
 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);
     });
 };
Exemple #21
0
    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);
        });
    });
Exemple #22
0
 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)
     );
 },
Exemple #23
0
 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);
     });
 };
Exemple #24
0
 $('#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.');
     });
 });
Exemple #25
0
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.');
    });
};
Exemple #26
0
 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);
     });
 },
Exemple #27
0
    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);
        }
    },
Exemple #28
0
    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)
                }]
            });
        });
    };
Exemple #29
0
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;
};
Exemple #30
0
        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.');
                });
            }
        },