Mercurial > repos > jankanis > blast2html
diff NCBI Blast reference example_files/results.js @ 31:344cd76f6fd2
rename NCBI reference example
author | Jan Kanis <jan.code@jankanis.nl> |
---|---|
date | Thu, 15 May 2014 16:59:18 +0200 |
parents | Blast output page example_files/results.js@bad241dc701f |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/NCBI Blast reference example_files/results.js Thu May 15 16:59:18 2014 +0200 @@ -0,0 +1,649 @@ +// JScript source code + +//Display Reformat page button only after the whole page is loaded + +function ReformatPageEvent() +{ + var refPageLink = document.getElementById("refPage"); + + //alert(refPageLink); + //alert(refPageLink.getAttribute("submitForm")); + var submitForm = refPageLink.getAttribute("submitForm"); + alert(submitForm); + if(refPageLink && submitForm) { + utils.addEvent(refPageLink, + "click", + function() { + document.getElementById(submitForm).submit(); + }, + false); + } +} + + +function SubmitEvent(linkID) +{ + + var link = document.getElementById(linkID); + //alert(link.getAttribute("submitForm")); + var submitForm = link.getAttribute("submitForm"); + if(link && submitForm) { + utils.addEvent(link, + "click", + function() { + document.getElementById(submitForm).submit(); + }, + false); + } +} + + +function SubmitEventSave(linkID) +{ + + var link = document.getElementById(linkID); + //alert(link.getAttribute("submitForm")); + var submitForm = link.getAttribute("submitForm"); + if(link && submitForm) { + utils.addEvent(link, + "click", + function() { + //$(submitForm).CMD.value = "GetSaved"; + document.getElementById(submitForm).submit(); + }, + false); + } +} + + + + +//This function creates submit form event on click +//form submitted is defined in submitForm attribute +//It also copies params from forms[0] (search paramateres) created by formatter +function SubmitEventNew(linkID) +{ + + var link = document.getElementById(linkID); + //alert(link.getAttribute("submitForm")); + if(!link) return; + var submitForm = link.getAttribute("submitForm"); + if(link && submitForm) { + utils.addEvent(link, + "click", + function() { + document.forms[0].CMD.value = ""; + if(document.forms[0].PAGE_TYPE) { + document.forms[0].PAGE_TYPE.value = ""; + } + var s = document.forms[0].innerHTML; + var form = $(submitForm); + form.innerHTML = s + form.innerHTML; + form.submit(); + }, + false); + } +} + +function GetResults() +{ + form = $("results"); + form.QUERY_INDEX.value = $("queryList")[$("queryList").selectedIndex].value; + form.submit(); +} + +function isIdIn(id, idArray){ + var idSeen=false; + + for(i=0; i<idArray.length; i++){ + if(id==idArray[i]){ + idSeen=true; + break; + } + } + return idSeen; +} + +function GetSelectedSeqString(formName) +{ + var selSeqs = ""; + var idArray=new Array(); + forms = document.getElementsByName(formName); + for(var j=0; j < forms.length; j++){ + for(var i=0; i < forms[j].elements.length; i++){ + var theElem=forms[j].elements[i]; + if(theElem.type=="checkbox"&&theElem.name=="getSeqGi"&&theElem.checked){ + if(!isIdIn(theElem.value, idArray)){ + idArray[idArray.length]=theElem.value; + } + } + } + } + selSeqs = idArray.join(); + return selSeqs; +} + +function ViewSelectedSeqs(e) +{ + var submitForm = $("submitterTop"); + var targetForm = submitForm.getAttribute("seqsForm"); + $("selSeqs").value = GetSelectedSeqString(targetForm); + submitForm.submit(); + utils.preventDefault(e); +} + + +function ViewSelectedSeqTree() +{ + var submitForm = $("treesubmitterTop"); + var targetForm = submitForm.getAttribute("seqsForm"); + $("seqSet").value = GetSelectedSeqString(targetForm); + $("scrWidth").value = screen.width; + $("scrHeight").value = screen.height; + submitForm.submit(); +} + +function ViewTree(linkID) { + link = document.getElementById(linkID); + var target = link.target; + winRef = window.open(link.href + "&screenWidth=" + screen.width + "&screenHeight=" + screen.height, target); +} + +function ViewSelectedSeqMultiAlign() +{ + var submitForm = $("multisubmitterTop"); + var targetForm = submitForm.getAttribute("seqsForm"); + $("seqSetM").value = GetSelectedSeqString(targetForm); + submitForm.submit(); +} + + + +function selectAllSeqs() +{ + var formName = this.getAttribute("seqsForm"); + forms = document.getElementsByName(formName); + for(var j=0; j < forms.length; j++){ + for(var i=0; i < forms[j].elements.length; i++){ + //for(var i=0; i < document.forms[formName].elements.length; i++){ + var theElem=forms[j].elements[i]; + if(theElem.type=="checkbox"&&theElem.name=="getSeqGi"){ + theElem.checked=this.checked; + } + } + } + links = document.getElementsByName("selectAll"); + for(var i=0; i < links.length;i++) { + if(links[i] != this) links[i].checked = this.checked; + } +} + + +function InitSeqAlignLinks() +{ + var links = document.getElementsByName("getSeqs"); + for(var i=0; i < links.length;i++) { + utils.addEvent(links[i],"click",ViewSelectedSeqs,false); + } + links = document.getElementsByName("treeView"); + for(var i=0; i < links.length;i++) { + utils.addEvent(links[i],"click",ViewSelectedSeqTree,false); + } + links = document.getElementsByName("mltiAln"); + for(var i=0; i < links.length;i++) { + utils.addEvent(links[i],"click",ViewSelectedSeqMultiAlign,false); + } + links = document.getElementsByName("selectAll"); + for(var i=0; i < links.length;i++) { + utils.addEvent(links[i],"click",selectAllSeqs,false); + } + + if($("showAlign")) + utils.addEvent($("showAlign"),"click",showHideLinks,false); +} + +function InitDownLoad() +{ + var deltaBlast = ($("diThresh") && $("diThresh").value != "") ? true : false; + if (!deltaBlast && ($("stepNumber").value == "" || $("stepNumber").value < 2)) { + utils.addClass($("dnPSSMPar"),"hidden"); + } +} +function Reformat() +{ + if(utils.hasClass($("FormatForm").FORMAT_ORGANISM,"orgHint")) $("FormatForm").FORMAT_ORGANISM.value = ""; + + $("FormatForm").submit(); +} +function InitCustomButton(bn) +{ + utils.addEvent(bn, "mouseover", function() {this.src = this.getAttribute("mouseovImg");}, false); + utils.addEvent(bn, "mouseout", function() {this.src = this.getAttribute("mouseoutImg");}, false); + utils.addEvent(bn, "mousedown", function() {this.src = this.getAttribute("mousedownImg");}, false); + utils.addEvent(bn, "mouseup", function() {this.src = this.getAttribute("mouseupImg");}, false); +} + +function InitAllCustomButtons() +{ + if($("go")) InitCustomButton($("go")); + if($("dn")) InitCustomButton($("dn")); + if($("onPageReformat")) InitCustomButton($("onPageReformat")); +} +function showHideLinks() +{ + var links = document.getElementsByName("selectAll"); + for(var i=0; i < links.length;i++) { + //This is done since IE does not recognize getElementsByName for span elem + var allLinks = utils.getParent(links[i]); + var removeClass,addClass; + if(utils.hasClass(allLinks,"shownInl")) { + removeClass="shownInl"; + addClass="hidden"; + } + else { + removeClass="hidden"; + addClass="shownInl"; + } + utils.removeClass(allLinks,removeClass); + utils.addClass(allLinks,addClass); + } +} +/*remove this function */ +function InitHelpLinks() +{ + for(var i=1; i <= 11;i++) { + InitToggleEvent($("hlp" + i)); + } +} +//This function is used for collapsible deflines onmouseover="showInfo(this)" +//Initialized in showdefline.cpp +function showInfo(elem) +{ + var targetElem = $("info_" + elem.id); + if(!targetElem) return; + if(elem.getAttribute("init") == "on") return; + + Toggle.addTarget(elem, targetElem); + elem.setAttribute("init","on"); +} + +function InitPsiBlast() +{ + //utils.addEvent($("ttt"),"keyup",SetHitlistSize,false); + var hts = document.getElementsByName("HITLIST_SIZE"); + for(var i=0; i < hts.length;i++) { + utils.addEvent(hts[i],"keyup",SetHitlistSize,false); + } + if($("psiInp")) { + var numSubsets = $("psiInp").getAttribute("numSubsets"); + for(var i=1; i <= numSubsets;i++) { + if ($("alnPos" + i)) InitToggleEvent($("alnPos" + i)); + if ($("deflnG" + i)) InitToggleEvent($("deflnG" + i)); + if ($("deflnB" + i)) InitToggleEvent($("deflnB" + i)); + } + } +} + +function SetHitlistSize() +{ + var hts = document.getElementsByName("HITLIST_SIZE"); + for(var i=0; i < hts.length;i++) { + if(this != hts[i]) { + hts[i].value = this.value; + } + } +} +function InitToggleEvent(toggleNode) +{ + if(toggleNode) { + var srcid = toggleNode.getAttribute("toggle"); + if(srcid) Toggle.addTarget(srcid, toggleNode); + } +} + +function InitIFrameLinks() +{ + CheckIframe($("RSIFrameNoRes"),"prlink"); + CheckIframe($("RSIFrameDesc"),"prlink"); + CheckIframe($("RSIFrameAln"),"prlink"); +} + +function CheckIframe(iframe,contentElemID) +{ + if(!iframe) return; + + var iframeDoc; + + if(iframe.contentDocument) {//Firefox + iframeDoc = iframe.contentDocument; + } + else if (iframe.contentWindow) {//IE + iframeDoc = iframe.contentWindow.document; + } + else if(iframe.document) { + iframeDoc = iframe.document; + } + if(iframeDoc){ + if(iframeDoc.getElementById(contentElemID)) { + utils.addClass(iframe,"shown"); + utils.removeClass(iframe,"hidden"); + } + } +} + + +function InitHitMatrix() +{ + if($("bl2seImg")) { + + utils.addEvent($("hitmtImg"),"load", + function() { + utils.addClass($("bl2seImg"),"shown"); + utils.removeClass($("bl2seImg"),"hidden"); + + }, + false); + utils.addEvent($("showHitMatrix"),"click", + function() { + $("hitmtImg").src= $("hitmtImg").getAttribute("imgsrc"); + if(utils.hasClass($("htmb"),"shown")) { + utils.addClass($("htmb"),"hidden"); + utils.removeClass($("htmb"),"shown"); + } + else { + utils.addClass($("htmb"),"shown"); + utils.removeClass($("htmb"),"hidden"); + } + }, + false); + + if($("blastSpec") && $("blastSpec").value=="GlobalAln") { + $("hitmtImg").src= $("hitmtImg").getAttribute("imgsrc"); + } + } +} + + + + + +function SetFormSubmitEvent() +{ + var el = $("refPage"); + if(el) { + SubmitEventNew("refPage"); + } + SubmitEventNew("frmPage"); + el = $("searchOptions"); + if(el) { + SubmitEventNew("searchOptions"); + } + el = $("saveSearchOptions"); + if(el) { + SubmitEventNew("saveSearchOptions"); + } + //SubmitEventNew("breadCrSearchOptions"); + list = $("queryList"); + if(list) { + utils.addEvent(list,"change",GetResults,false); + } + + list = $("go"); + if(list) { + utils.addEvent(list,"click",GetResults,false); + } + + + list= $("onPageReformat"); + if(list) { + utils.addEvent(list,"click",Reformat,false); + } + + if ($("cddResults") && $("statInfo")) { + jQuery($("cddResults")).ncbitoggler('toggle'); + } + //New design still uses toggle + if ($("showCDD")) { + InitToggleEvent($("cddInfo")); + } + InitToggleEvent($("refInfo")); + InitToggleEvent($("resStat")); + InitToggleEvent($("dbDetails")); + InitToggleEvent($("graphicInfo")); + InitToggleEvent($("descrInfo")); + InitToggleEvent($("alignInfo")); + InitToggleEvent($("ovrInfo")); + InitToggleEvent($("queryInfo")); + InitToggleEvent($("hitMatrixInfo")); + InitToggleEvent($("bl2ovrInfo")); + //Init only for PSI blastfse + if($("prevRID")) InitPsiBlast(); + InitSeqAlignLinks(); + InitAllCustomButtons(); + if($("dnPSSMPar")) InitDownLoad(); + InitHitMatrix(); + if($("noRes")) { + if($("hitCvs")) utils.addClass($("hitCvs"),"hidden"); + if($("hitText")) utils.addClass($("hitText"),"hidden"); + } + InitIFrameLinks(); + showDbDetails(); //fill behind the scene + if ($("showDetails") && utils.hasClass($("showDetails"), "shown")) { + utils.addEvent($("showDetails"), "click", showDbDetails, false); + } + initContentWidth(); +} + +function initContentWidth() { + var lineLengthElem = $("FormatForm").LINE_LENGTH; + if (lineLengthElem) { + var lineLength = parseInt(lineLengthElem[lineLengthElem.selectedIndex].value); + if (parseInt(lineLengthElem.getAttribute("defval")) == lineLength) return; + + var charWidth = (navigator.userAgent.match(/ie/i)) ? 8 : 7; + var minWidth = (lineLength + parseInt(17)) * charWidth; + + + var alignView = $("FormatForm").ALIGNMENT_VIEW; + var formatType = $("FormatForm").FORMAT_TYPE; + var queryAnch = formatType[formatType.selectedIndex].value == "HTML" && (alignView[alignView.selectedIndex].value != "Pairwise" && alignView[alignView.selectedIndex].value != "PairwiseWithIdentities"); + + var addWidth = ($("FormatForm").OLD_VIEW.checked || queryAnch) ? 250 : 350; + + minWidth = minWidth + parseInt(addWidth) + "px"; + jQuery($("content")).css("min-width", minWidth); + } + +} + + + + + +function ShowHideAlnDeflines(alnID, checkbx) { + var dflTableID = "dln_" + alnID; + if ($(dflTableID)) { + var rmClass, addClass; + if (checkbx.checked) { + rmClass = "hidden"; + addClass = "shown"; + } + else { + rmClass = "shown"; + addClass = "hidden"; + } + var elems = $C(rmClass, "class", $(dflTableID), "tr"); + if (elems) { + //alert(elems.length); + for (var i = 0; i < elems.length; i++) { + utils.removeClass(elems[i], rmClass); + utils.addClass(elems[i], addClass); + } + } + } +} + +function SortAln(e, sortLink, sortItem) { + var p = utils.getParent(sortLink); + var p = utils.getParent(p); + p_TD = utils.getParent(p); + p_TR = utils.getParent(p_TD); + if (utils.hasClass(p_TR, "dflnAln")) { + p_TD.innerHTML = "Reading seqaligns..."; + var gi = p_TD.id.substr(2); + var rid = p_TD.getAttribute("rid"); + getAlignSort(rid, gi, p_TD, sortItem); + e = e || window.event; + utils.preventDefault(e); + return; + } + var links = document.getElementsByName("alnSort"); + if (links.length >= sortItem) { + var href = links[sortItem].href.replace(new RegExp("selectAllTop.*(&|$)"), ""); + var hrefLn = sortLink.href.replace(new RegExp(".*#"), ""); + sortLink.href = href + hrefLn; + } +} + + + +var fullArr; +var numDbs; +function showDbDetails(e,dbSetIndex) +{ + if (!($("dbPlusSpecies"))) return; //No org display + if ($("dbPlusSpecies").getAttribute("init") == "on" && dbSetIndex == null) return; + $("dbPlusSpecies").setAttribute("init", "on"); + + dbInfoUrl = "getDBInfo.cgi"; + var rp = new RemoteDataProvider(dbInfoUrl); + rp.minArr = 10; + + if (!fullArr) { + var arr = $("results").DATABASE.value.split(" "); + numDbs = arr.length; + if (arr.length > rp.minArr) { + fullArr = new Array(); + while (arr.length > 1) { + var arrNew = arr.splice(0, rp.minArr); //does not include stopindex + fullArr.push(arrNew); + } + if (!dbSetIndex) dbSetIndex = 0; + } + } + + rp.onSuccess = function(obj) { + var navDB = document.createElement("div"); + if (fullArr) { + var prevLink, nextLink, firstLink, lastLink; + if (this.currDbSetIndex >= 1) { + var firstStart = 1; + var firstEnd = firstStart + fullArr[0].length - 1; + firstLink = document.createElement("a"); + jQuery(firstLink).attr("href", "#"); + jQuery(firstLink).attr("id", "firstDbSet"); + jQuery(firstLink).attr("onclick", "showDbDetails(event,0);"); + jQuery(firstLink).attr("title", "Databases " + firstStart + "-" + firstEnd); + jQuery(firstLink).html("First " + this.minArr + " dbs"); + + } + if (this.currDbSetIndex >= 1) { + var prevStart = (this.currDbSetIndex - 1) * this.minArr + 1; + var prevEnd = prevStart + fullArr[this.currDbSetIndex - 1].length - 1; + prevLink = document.createElement("a"); + jQuery(prevLink).attr("href", "#"); + jQuery(prevLink).attr("id", "prevDbSet"); + jQuery(prevLink).attr("onclick", "showDbDetails(event," + (this.currDbSetIndex - 1) + ");"); + jQuery(prevLink).attr("title", "Databases " + prevStart + "-" + prevEnd); + jQuery(prevLink).html("Prev " + this.minArr + " dbs"); + } + + if (this.currDbSetIndex < fullArr.length - 1) { + var nextStart = (this.currDbSetIndex + 1) * this.minArr + 1; + var nextEnd = nextStart + fullArr[this.currDbSetIndex + 1].length - 1; + nextLink = document.createElement("a"); + jQuery(nextLink).attr("href", "#"); + jQuery(nextLink).attr("id", "nextDbSet"); + jQuery(nextLink).attr("onclick", "showDbDetails(event," + (this.currDbSetIndex + 1) + ");"); + jQuery(nextLink).attr("title", "Databases " + nextStart + "-" + nextEnd); + jQuery(nextLink).html("Next " + this.minArr + " dbs"); + } + if (this.currDbSetIndex < fullArr.length - 1) { + var lastInd = fullArr.length - 1; + var lastStart = numDbs - fullArr[lastInd].length; + var lastEnd = numDbs; + lastLink = document.createElement("a"); + jQuery(lastLink).attr("href", "#"); + jQuery(lastLink).attr("id", "lastDbSet"); + jQuery(lastLink).attr("onclick", "showDbDetails(event," + lastInd + ");"); + jQuery(lastLink).attr("title", "Databases " + lastStart + "-" + lastEnd); + jQuery(lastLink).html("Last " + this.minArr + " dbs"); + } + + + jQuery(navDB).attr("id", "addDbSet"); + if (firstLink) jQuery(navDB).append(firstLink); + if (prevLink) jQuery(navDB).append(prevLink); + if (lastLink) jQuery(navDB).append(lastLink); + if (nextLink) jQuery(navDB).append(nextLink); + } + + jQuery($("dbPlusSpecies")).html(navDB); + jQuery(navDB).after(obj.responseText); + if (fullArr) { + var cap = jQuery($("dbSpecies")).find("caption"); + if (cap) { + var currStart = (this.currDbSetIndex) * this.minArr + 1; + var currEnd = currStart + fullArr[this.currDbSetIndex].length - 1; + var capText = cap.html() + "<div class=\"cpAdd\"> Databases " + currStart + "-" + currEnd; + cap.html(capText); + } + } + }; + rp.onError = function(obj) { + $("dbPlusSpecies").innerHTML += "error, requests:" + this.iActiveRequests + " status:" + obj.status; + } + var dbs; + if (fullArr) { + rp.currDbSetIndex = dbSetIndex; + var currArr = fullArr[dbSetIndex]; + dbs = currArr.join(","); + } + else { + dbs = $("results").DATABASE.value.replace(/ /g, ","); + } + + rp.Request("CMD=getDBOrg&DATABASE=" + dbs, "POST"); + if(e) utils.preventDefault(e); +} + +function synchronizeCheck(id, formName, inputName, isChecked) { + + for (var i = 0; i < document.forms[formName].elements.length; i++) { + var theElem = document.forms[formName].elements[i]; + if (theElem.type == "checkbox" && theElem.name == inputName && id == theElem.value) { + theElem.checked = isChecked; + + } + } + +} + +utils.addEvent(window, + "load", SetFormSubmitEvent, + false); + + +/* If user agent has "safari" in it, include safari-specific stylesheet. */ +if (navigator.userAgent.match(/safari/i) || navigator.userAgent.match(/opera/i)) { +document.write("<link rel='stylesheet' type='text/css' href='css/safari-descriptions.css' media='screen'/>"); +} +if (navigator.userAgent.match(/opera/i)) { +document.write("<link rel='stylesheet' type='text/css' href='css/opera-descriptions.css' media='screen'/>"); +} +if (navigator.userAgent.match(/firefox/i) || navigator.userAgent.match(/safari/i)) { +document.write("<link rel='stylesheet' type='text/css' href='css/firefox-descriptions.css' media='screen'/>"); +} + + +