// e.g. at http://www.oxfordjournals.org/nar/database/subcat/6/26 for PPI databases but applicable to all others dblist = document.querySelectorAll('.listpaper a'); dbarr = []; for (d=0;d<dblist.length;d++) { dbarr.push([dblist[d].innerHTML.replace(/^\s|\s$/g,''),dblist[d].href]) } function DBentry(name,URL,entryURL,description,ref,abstractURL,email) { this.name = name; this.url = URL; this.entryurl = entryURL, this.desc = description; this.ref = ref; this.absurl = abstractURL; this.email = email; } dbdb = new Array(dbarr.length); for (i=0;i<dbdb.length;i++) { dbdb[i] = new DBentry(dbarr[i][0],undefined,dbarr[i][1],undefined,undefined,undefined,undefined) } dbarr.forEach(function(entry, i){ "use strict"; var dbxhr = new XMLHttpRequest(); dbxhr.open("GET",dbdb[i].entryurl,true); dbxhr.send(); dbxhr.onreadystatechange = function(){ if (dbxhr.readyState === 4 && dbxhr.status==200){ var imgs = dbxhr.response.match(/<img.*?>/g); var fixDoc = dbxhr.response; var f = 0; for (f=0;f<imgs.length;f++) { var fixDoc = fixDoc.replace(imgs[f],imgs[f].replace('>','/>')); } var parser = new DOMParser(); var dbinfo = parser.parseFromString(fixDoc,"text/xml"); // parsing a page if (dbinfo.querySelectorAll('div.bodytext a').length>0) { dbdb[i].url = dbinfo.querySelector('div.bodytext a').href; } else dbdb[i].url = null; try { dbdb[i].email = dbinfo.querySelector('div.bodytext span.subhead + a').innerText; } catch (e) { dbdb[i].email = null; } var abst = dbinfo.querySelector('input[type=hidden][name=category] ~ div.bodytext'); try { if (abst.children[0].tagName == 'BR') { dbdb[i].absurl = null; } else dbdb[i].absurl = abst.querySelector('a').href; } catch (e) { dbdb[i].absurl = null; } var summaries = dbinfo.querySelectorAll('h3.summary'); var s = 0; for (s=0;s<summaries.length;s++) { if (summaries[s].innerHTML.indexOf('Database Description')>-1) { dbdb[i].desc = dbinfo.querySelector('h3:nth-of-type('+(1+s)+') + .bodytext').innerText.replace(/\s\s/g,'') } if (summaries[s].innerHTML.indexOf('References')>-1) { dbdb[i].ref = dbinfo.querySelector('h3:nth-of-type('+(1+s)+') + .bodytext').innerText.replace(/\s\s/g,''); } else dbdb[i].ref = null; } // end parsing page } } },i)