From 5c124bddab4d28e849809708efb359dbf5ae94e0 Mon Sep 17 00:00:00 2001 From: robyngit Date: Mon, 14 Oct 2024 14:34:37 -0400 Subject: [PATCH] Fetch citation info for canonical datasets using the new CrossRef model Issue #2541 --- src/js/models/CitationModel.js | 7 ++++++ src/js/models/CrossRefModel.js | 1 + src/js/views/CanonicalDatasetHandlerView.js | 26 ++++++++++++++------- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/js/models/CitationModel.js b/src/js/models/CitationModel.js index 22947ff33..d9eb6163f 100644 --- a/src/js/models/CitationModel.js +++ b/src/js/models/CitationModel.js @@ -1125,6 +1125,13 @@ define(["underscore", "backbone"], (_, Backbone) => { } return ""; }, + + /** Set the model back to its defaults */ + reset() { + this.clear({ silent: true }); + this.set(this.defaults(), { silent: true }); + this.trigger("change"); + }, }, ); diff --git a/src/js/models/CrossRefModel.js b/src/js/models/CrossRefModel.js index fc4d2141e..7060399b4 100644 --- a/src/js/models/CrossRefModel.js +++ b/src/js/models/CrossRefModel.js @@ -53,6 +53,7 @@ define(["backbone"], (Backbone) => { const cachedResponse = this.getCachedResponse(doi); if (cachedResponse) { this.set(cachedResponse); + this.trigger("sync"); return; } diff --git a/src/js/views/CanonicalDatasetHandlerView.js b/src/js/views/CanonicalDatasetHandlerView.js index 10184bbe2..2ac3a096d 100644 --- a/src/js/views/CanonicalDatasetHandlerView.js +++ b/src/js/views/CanonicalDatasetHandlerView.js @@ -1,4 +1,8 @@ -define(["backbone", "models/CitationModel"], (Backbone, CitationModel) => { +define(["backbone", "models/CitationModel", "models/CrossRefModel"], ( + Backbone, + CitationModel, + CrossRefModel, +) => { // The "Type" property of the annotation view const ANNO_VIEW_TYPE = "AnnotationView"; // The URI for the schema.org:sameAs annotation @@ -101,6 +105,7 @@ define(["backbone", "models/CitationModel"], (Backbone, CitationModel) => { */ initialize(options) { this.metadataView = options?.metadataView; + this.citationModel = new CitationModel(); if (!this.metadataView) { throw new Error( "The CanonicalDatasetHandlerView requires a MetadataView instance.", @@ -130,6 +135,7 @@ define(["backbone", "models/CitationModel"], (Backbone, CitationModel) => { this.fieldItem?.remove(); this.infoIcon?.remove(); this.showAnnotations(); + this.citationModel.reset(); }, /** @@ -191,9 +197,14 @@ define(["backbone", "models/CitationModel"], (Backbone, CitationModel) => { * this information in a CitationModel instance. */ getCitationInfo() { - // TODO: Get citation info from the canonical dataset - // what API can we use to get this info? - // this.citationModel = new CitationModel({}); + const view = this; + this.crossRef = new CrossRefModel({ + doi: this.canonicalUri, + }); + this.listenToOnce(this.crossRef, "sync", () => { + view.citationModel.setSourceModel(this.crossRef); + }); + this.crossRef.fetch(); }, /** @@ -264,6 +275,7 @@ define(["backbone", "models/CitationModel"], (Backbone, CitationModel) => { * current dataset. */ modifyCitationModal() { + const view = this; // The CitationModalView is recreated each time it is shown. const citationModalView = this.metadataView[CITATION_MODAL_PROP]; this.listenToOnce(citationModalView, "rendered", () => { @@ -277,11 +289,7 @@ define(["backbone", "models/CitationModel"], (Backbone, CitationModel) => { const headingOriginal = document.createElement("h5"); headingOriginal.textContent = CITATION_TITLE_CANONICAL; citationModalView.citationContainer.append(headingOriginal); - - const testCitationModel = new CitationModel({ - // TODO: Add citation info for the canonical dataset - }); - citationModalView.insertCitation(testCitationModel); + citationModalView.insertCitation(view.citationModel); }); },