source: other-projects/bib-stinky/trunk/nodejs-server/public/doi-stinky.user.js@ 36349

Last change on this file since 36349 was 36349, checked in by davidb, 21 months ago

Callback method added in that determines where there are DOI records for both CrossRef and Core

File size: 4.9 KB
Line 
1// ==UserScript==
2// @name Bib Stinky
3// @namespace http://bibstinky.sowemustthink.space/
4// @version 0.1
5// @description Helps identify when metadata stored by a publication provider or agregator might be a bit 'off'
6// @author David Bainbridge
7// @author Dave Nichols
8// @author Mike Twidale
9// @require https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js
10// @match https://www.cs.waikato.ac.nz/*
11// @match https://search.crossref.org/*
12// @grant GM_xmlhttpRequest
13// @connect bibstinky.sowemustthink.space
14// @connect bib-stinky.so-we-must-think.space
15// ==/UserScript==
16
17//alert("Testing, Testing!");
18
19(function() {
20 'use strict';
21
22 var $ = window.jQuery;
23
24 function createCrossCheckDOICallack(doi)
25 {
26 return function(responseDetails) {
27 var returned_json_str = responseDetails.responseText;
28 //console.log(returned_json_str);
29 var doi_rec = JSON.parse(returned_json_str);
30
31 var totalHits = doi_rec.totalHits;
32 if (doi_rec.totalHits == 0) {
33 // Remove it
34 var doi_id = "doistinky-" + doi.replaceAll("/","SLASH");
35 console.log("No match found in Core => remove DOI " + doi);
36 //console.log("Removing: id=" + doi_id);
37 $('#'+doi_id).remove();
38 }
39 else if (totalHits == 1) {
40 var result = doi_rec.results[0];
41 console.log("Match found in Core for DOI " + doi + " => Investigate Title = " + result.title);
42 }
43 else {
44 console.error("Error: API returned more than one DOI metadata record for doi: " + doi);
45 }
46 }
47 }
48
49 function crossCheckDOIs(doi_list,doi_href_list)
50 {
51 console.log("Cross-checking #" + doi_list.length + " DOIs");
52
53 for (var i=0; i<doi_list.length; i++) {
54 var doi = doi_list[i];
55 var encoded_doi = encodeURIComponent(doi);
56
57 var crossCheckDOICallback = createCrossCheckDOICallack(doi);
58
59 console.log("cross-checking doi: " + doi);
60 GM_xmlhttpRequest ( {
61 method: 'GET',
62 url: 'https://bibstinky.sowemustthink.space/api/get-doi?coreDOI='+encoded_doi,
63 onload: crossCheckDOICallback
64 });
65
66 }
67 }
68
69
70 var doi_list = [];
71 var doi_href_list = [];
72
73 var doi_pattern = /^http(?:s)?:\/\/doi.org\/(.*)$/i;
74
75 $('a').each(function() {
76 var href=$(this).attr('href');
77 var doi_pattern_matches = doi_pattern.exec(href);
78 if (doi_pattern_matches != null) {
79 var doi_id = doi_pattern_matches[1];
80 doi_list.push(doi_id);
81 doi_href_list.push(href);
82 }
83 });
84
85 // console.log(doi_list);
86
87 var elmWrapperDiv = document.createElement('div');
88 elmWrapperDiv.id = "doiStinkyBar";
89
90 $(document).ready(function() {
91 //console.log("Adding in <div> to display DOI Stinky bar at top:");
92 elmWrapperDiv.style.width = '100%';
93 //elmWrapperDiv.style.textAlign = 'center';
94 elmWrapperDiv.style.fontFamily = 'sans-serif';
95 elmWrapperDiv.style.backgroundColor = 'wheat';
96
97 elmWrapperDiv.style.zIndex = '25';
98 elmWrapperDiv.style.position = 'fixed';
99
100 document.body.insertBefore(elmWrapperDiv, document.body.firstChild);
101
102 GM_xmlhttpRequest ( {
103 method: 'GET',
104 url: 'https://bibstinky.sowemustthink.space/doi-stinky-bar.html',
105 onload: function (responseDetails) {
106
107 var returned_html_str = responseDetails.responseText;
108 var body_str = returned_html_str.substring(returned_html_str.indexOf("<body>")+6,returned_html_str.indexOf("</body>"))
109 //console.log("returned body = " + body_str.substring (0) + '...');
110
111 var body = $.parseHTML(body_str);
112 $("#doiStinkyBar").append(body);
113
114 if (doi_list.length > 0) {
115 if (doi_list.length == 1) {
116 $('#doiStinkyInfo').html("Cross-checking extracted DOI:");
117 }
118 else {
119 $('#doiStinkyInfo').html("Cross-checking extracted DOIs:");
120 }
121 var $doi_list_div = $('<div>');
122
123 for (var i=0; i<doi_list.length; i++) {
124 var doi = doi_list[i];
125 var doi_id = doi.replaceAll("/","SLASH");
126 var $a_tag = $('<a>');
127 $a_tag.attr("id","doistinky-"+ doi_id);
128 $a_tag.attr("href","https://doi.org/"+doi);
129 $a_tag.append(doi);
130
131 if (i>0) {
132 $doi_list_div.append(", ");
133 }
134 $doi_list_div.append($a_tag);
135
136 }
137 $('#doiStinkyInfo').append($doi_list_div);
138
139 crossCheckDOIs(doi_list,doi_href_list);
140
141 }
142 else {
143 $('#doiStinkyInfo').append("No DOIs detected on the page");
144 }
145
146 }
147 } );
148});
149
150})();
Note: See TracBrowser for help on using the repository browser.