aboutsummaryrefslogtreecommitdiff
path: root/uploader/static/js/pubmed.js
blob: 9afd4c333dfc501a183748400812240c8924a12e (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
var extract_details = (pubmed_id, details) => {
    var months = {
        "jan": "January",
        "feb": "February",
        "mar": "March",
        "apr": "April",
        "may": "May",
        "jun": "June",
        "jul": "July",
        "aug": "August",
        "sep": "September",
        "oct": "October",
        "nov": "November",
        "dec": "December"
    };
    var _date = details[pubmed_id].pubdate.split(" ");
    return {
        "authors": details[pubmed_id].authors.map((authobj) => {
            return authobj.name;
        }),
        "title": details[pubmed_id].title,
        "journal": details[pubmed_id].fulljournalname,
        "volume": details[pubmed_id].volume,
        "pages": details[pubmed_id].pages,
        "month": _date.length > 1 ? months[_date[1].toLowerCase()] : "jan",
        "year": _date[0],
    };
};

var update_publication_details = (details) => {
    Object.entries(details).forEach((entry) => {;
                                                switch(entry[0]) {
                                                case "authors":
                                                    $("#txt-publication-authors").val(entry[1].join(", "));
                                                    break;
                                                case "month":
                                                    $("#select-publication-month")
                                                        .children("option")
                                                        .each((index, child) => {
                                                            console.debug(entry[1].toLowerCase());
                                                            child.selected = child.value == entry[1].toLowerCase();
                                                        });
                                                default:
                                                    $("#txt-publication-" + entry[0]).val(entry[1]);
                                                    break;
                                                }
                                               });
};

var fetch_publication_abstract = (pubmed_id, pub_details) => {
    $.ajax("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi",
           {
               "method": "GET",
               "data": {
                   "db": "pubmed",
                   "id": pubmed_id,
                   "rettype": "abstract",
                   "retmode": "xml"
               },
               "success": (data, textStatus, jqXHR) => {
                   update_publication_details({
                       ...pub_details,
                       ...{
                           "abstract": Array.from(data
                                                  .getElementsByTagName(
                                                      "Abstract")[0]
                                                  .children)
                               .map((elt) => {return elt.textContent.trim();})
                               .join("\r\n")
                       }});
               },
               "error": (jqXHR, textStatus, errorThrown) => {},
               "complete": (jqXHR, textStatus) => {},
               "dataType": "xml"
           });
};

var fetch_publication_details = (pubmed_id, complete_thunks) => {
    error_display = $("#search-pubmed-id-error");
    error_display.text("");
    add_class(error_display, "visually-hidden");
    $.ajax("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi",
           {
               "method": "GET",
               "data": {"db": "pubmed", "id": pubmed_id, "format": "json"},
               "success": (data, textStatus, jqXHR) => {
                   // process and update publication details
                   hasError = (
                       Object.hasOwn(data, "error") ||
                           Object.hasOwn(data.result[pubmed_id], "error"));
                   if(hasError) {
                       error_display.text(
                           "There was an error fetching a publication with " +
                               "the given PubMed ID! The error received " +
                               "was: '" + (
                                   data.error ||
                                       data.result[pubmed_id].error) +
                               "'. Please check ID you provided and try " +
                               "again.");
                       remove_class(error_display, "visually-hidden");
                   } else {
                       fetch_publication_abstract(
                           pubmed_id,
                           extract_details(pubmed_id, data.result));
                   }
               },
               "error": (jqXHR, textStatus, errorThrown) => {},
               "complete": () => {
                   complete_thunks.forEach((thunk) => {thunk()});
               },
               "dataType": "json"
           });
};