/*global define */ define(['jquery', 'underscore', 'backbone', 'text!templates/registerCitation.html'], function($, _, Backbone, RegisterCitationTemplate) { 'use strict'; /** * @class RegisterCitationView * @classdesc A simple form for a user to input a DOI that cites or uses a dataset in DataONE. * When the form is submitted, the citation is registered with the DataONE Metrics service. * @classcategory Views * @screenshot RegisterCitationView.png * @extends Backbone.View */ var RegisterCitationView = Backbone.View.extend( /** @lends RegisterCitationView.prototype */ { id: 'citation-modal', className: 'modal fade hide', /** * The URL to save the citation to * @type {string} */ citationsUrl: MetacatUI.appModel.get("dataoneCitationsUrl"), template: _.template(RegisterCitationTemplate), successFooterTemplate: _.template(""), /** * The message to display the citation is successfully submitted * @type {string} */ successMessage: 'Thank you! Your citation has been successfully submitted. ' + 'It may take up to 24 hours to see the citation on the dataset page.', /** * The message to display the citation has failed to submit * @type {string} */ errorMessage: 'Sorry! We encountered an error while registering that citation. Please try ' + 'again or try emailing us the citation.', events: { 'hidden' : 'teardown', 'click .btn-register-citation' : 'registerCitation' }, initialize: function(options) { _.bindAll(this, 'show', 'teardown', 'render'); if((typeof options == "undefined")){ var options = {}; } this.pid = options.pid; }, /** * Shows this view on the page. */ show: function() { this.$el.modal('show'); }, /** * Hides and removes this view from the page. */ teardown: function() { this.$el.modal('hide'); this.$el.data('modal', null); this.remove(); }, /** * Renders the submission form and creates a Bootstrap modal for this view */ render: function() { this.$el.html(this.template()); this.$el.modal({show:false}); // dont show modal on instantiation return this; }, /** * Get inputs from the modal and sends it to the DataONE Metrics Service */ registerCitation: function() { // get the input values var publicationIdentifier = this.$("#publication-identifier").val(); var citationType = this.$("#citationTypeCustomSelect").val(); var relation_type = null; // If the user has not selected a valid if (citationType != 0) { relation_type = citationType == 1 ? "isCitedBy" : "isReferencedBy"; } else { relation_type = "isCitedBy"; } // get the form data before replacing everything with the loading icon! var formData = {}; formData["request_type"] = "dataset"; formData["metadata"] = new Array(); var citationRegisterObject = {}; citationRegisterObject["target_id"] = this.pid; citationRegisterObject["source_id"] = publicationIdentifier; citationRegisterObject["relation_type"] = relation_type; formData["metadata"].push(citationRegisterObject); // ajax call to submit the given form and then render the results in the content area var viewRef = this; var requestSettings = { type: "POST", url: this.citationsUrl, contentType: false, processData: false, data: JSON.stringify(formData), dataType: "json", success: function(data, textStatus, jqXHR) { MetacatUI.appView.showAlert(viewRef.successMessage, "alert-success", viewRef.$(".modal-body"), null, { includeEmail: false, replaceContents: true }); viewRef.$(".modal-footer").html(viewRef.successFooterTemplate()); }, error: function(){ MetacatUI.appView.showAlert(viewRef.errorMessage, "alert-error", viewRef.$(".modal-body"), null, { includeEmail: true, replaceContents: true }); } } $.ajax(_.extend(requestSettings, MetacatUI.appUserModel.createAjaxSettings())); } }); return RegisterCitationView; });