ncbo/bioportal_web_ui

View on GitHub
public/widgets/minified/jquery.ncbo.tree.min.js

Summary

Maintainability
A
0 mins
Test Coverage
(function(a){a.fn.NCBOTree=function(b){var d;var c="roots";d={autoclose:false,beforeExpand:false,afterExpand:false,afterExpandError:false,afterSelect:false,afterJumpToClass:false,timeout:999999,treeClass:"ncboTree",autocompleteClass:"ncboAutocomplete",width:350,ncboAPIURL:"http://data.bioontology.org",ncboUIURL:"http://bioportal.bioontology.org",apikey:null,ontology:null,startingClass:null,startingRoot:c,defaultRoot:c};d=a.extend(d,b);if(d.apikey==null){throw new Error("You must provide an API Key for NCBO Tree Widget to operate")}if(d.ontology==null){throw new Error("You must provide an ontology id for NCBO Tree Widget to operate")}setupTree=function(e,j){var i=e;var n=a("<ul>").append(a("<li>").addClass("root"));var h=j;var k=a(".root",n);var g=false;n.css("width",h.width);i.html("");var l=(h.startingRoot==h.defaultRoot)?null:h.startingRoot;var f=a("<div>").addClass(h.autocompleteClass).addClass("ncboTree");var m=a("<input>").addClass(h.autocompleteClass).css("width",h.width).attr("placeholder","Search for class...");f.append(m);m.NCBOAutocomplete({url:h.ncboAPIURL+"/search",searchParameter:"q",resultAttribute:"collection",property:"prefLabel",searchTextSuffix:"*",searchFromRoot:l,onSelect:function(p,o){n.jumpToClass(p["@id"]);o.val("")},minCharacters:3,additionalParameters:{apikey:h.apikey,no_context:true,ontologies:h.ontology}});i.append(f);i.append(n);n.addClass(h.treeClass);n.formatNodes=function(o){var q=a("<span>");var p=a("<ul>");o.sort(function(s,r){var u=s.prefLabel.toLowerCase();var t=r.prefLabel.toLowerCase();return((u<t)?-1:((u>t)?1:0))});a.each(o,function(v,s){var y=a("<li>");var x=a("<a>").attr("href",n.determineHTTPS(s.links.self)).html(s.prefLabel);x.attr("data-id",encodeURIComponent(s["@id"]));p.append(y.append(x));var t=typeof s.children!=="undefined"&&s.childrenCount>0&&s.children.length==0;if(s.childrenCount>0&&typeof s.children==="undefined"||t){var w=a("<ul>").addClass("ajax");var z=a("<li>");var r=a("<a>").attr("href",s.links.children);y.append(w.append(z.append(r)))}else{if(typeof s.children!=="undefined"&&s.children.length>0){var u=n.formatNodes(s.children);y.attr("class","folder-open");y.append(u)}}});q.append(p);return q.html()};n.findRootNode=function(q){var s=(h.startingRoot==h.defaultRoot)?null:h.startingRoot;if(s==null){return q}var p=false;var o=q;while(o.length>0||p==false){var r=o.shift();if(r["@id"]==s){p=[r]}else{if(typeof r.children!=="undefined"&&r.children.length>0){o=o.concat(r.children)}}}return p};n.jumpToClass=function(o,p){k.html(a("<span>").html("Loading...").css("font-size","smaller"));a.ajax({url:n.determineHTTPS(h.ncboAPIURL)+"/ontologies/"+h.ontology+"/classes/"+encodeURIComponent(o)+"/tree",data:{apikey:h.apikey,include:"prefLabel,childrenCount",no_context:true},contentType:"json",crossDomain:true,success:function(q){q=n.findRootNode(q);k.html(n.formatNodes(q));n.setTreeNodes(k,false);if(typeof p=="function"){p()}n.selectClass(o);if(typeof h.afterJumpToClass=="function"){h.afterJumpToClass(o)}i.trigger("afterJumpToClass",o)}})};n.selectClass=function(o){var p=a(a(this).find("a[data-id='"+encodeURIComponent(o)+"']"));a(n.find("a.active")[0]).removeClass("active");p.addClass("active")};n.closeNearby=function(o){a(o).siblings().filter(".folder-open, .folder-open-last").each(function(){var p=a(">ul",this);var q=this.className;this.className=q.replace("open","close");p.hide()})};n.nodeToggle=function(p){var o=a(">ul",p);if(o.is(":visible")){p.className=p.className.replace("open","close");o.hide()}else{p.className=p.className.replace("close","open");o.show();if(h.autoclose){n.closeNearby(p)}if(o.is(".ajax")){n.setAjaxNodes(o,p.id)}}};n.setAjaxNodes=function(r,s,o,p){if(typeof h.beforeExpand=="function"){h.beforeExpand(r)}i.trigger("beforeExpand",r);var q=a.trim(a("a",r).attr("href"));if(q){a.ajax({type:"GET",url:q,data:{apikey:h.apikey,include:"prefLabel,childrenCount",no_context:true},crossDomain:true,contentType:"json",timeout:h.timeout,success:function(u){var t=n.formatNodes(u.collection);r.removeAttr("class");r.html(t);a.extend(r,{url:q});n.setTreeNodes(r,true);if(typeof h.afterExpand=="function"){h.afterExpand(r)}i.trigger("afterExpand",r);if(typeof o=="function"){o(r)}},error:function(t){if(typeof h.afterExpandError=="function"){h.afterExpandError(r)}if(typeof p=="function"){p(r)}i.trigger("afterExpandError",r)}})}};n.setTreeNodes=function(p,o){p=o?p.parent():p;a("li>a",p).addClass("text").bind("selectstart",function(){return false}).click(function(){var q=a(this).parent();var r=a(this);a(".active",n).attr("class","text");if(this.className=="text"){this.className="active"}if(typeof h.afterSelect=="function"){h.afterSelect(decodeURIComponent(r.data("id")),r.text(),r)}i.trigger("afterSelect",[decodeURIComponent(r.data("id")),r.text(),r]);return false}).bind("contextmenu",function(){a(".active",n).attr("class","text");if(this.className=="text"){this.className="active"}if(typeof h.afterContextMenu=="function"){h.afterContextMenu(parent)}return false}).mousedown(function(r){g=true;cloneNode=a(this).parent().clone();var q=a(this).parent();return false});a("li",p).each(function(u){var v=this.className;var s=false;var r=false;var q=this;var t=a(">ul",this);if(t.size()>0){var w="folder-";if(v&&v.indexOf("open")>=0){w=w+"open";s=true}else{w=w+"close"}this.className=w+(a(this).is(":last-child")?"-last":"");if(!s||v.indexOf("ajax")>=0){t.hide()}n.setTrigger(this)}else{var w="doc";this.className=w+(a(this).is(":last-child")?"-last":"")}}).before('<li class="line">&nbsp;</li>').filter(":last-child").after('<li class="line-last"></li>')};n.setTrigger=function(p){a(">a",p).before('<img class="trigger" src="data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" border=0>');var o=a(">.trigger",p);o.click(function(q){n.nodeToggle(p)})};n.checkNodeIsLast=function(o){if(o.className.indexOf("last")>=0){o.className=o.className.replace("-last","")}};n.checkLineIsLast=function(o){if(o.className.indexOf("last")>=0){var p=a(o).prev();if(p.size()>0){p[0].className=p[0].className.replace("-last","")}dragNode_source[0].className+="-last"}};n.convertToFolder=function(o){o[0].className=o[0].className.replace("doc","folder-open");o.append('<ul><li class="line-last"></li></ul>');n.setTrigger(o[0]);n.setEventLine(a(".line, .line-last",o))};n.convertToDoc=function(o){a(">ul",o).remove();a("img",o).remove();o[0].className=o[0].className.replace(/folder-(open|close)/gi,"doc")};n.addNode=function(s,q,o,r){var p=a('<li><ul><li id="'+s+'"><a href="'+o+'">'+q+"</a></li></ul></li>");n.setTreeNodes(p);dragNode_destination=n.getSelected();dragNode_source=a(".doc-last",p);n.moveNodeToFolder(dragNode_destination);p.remove();if(typeof(r)=="function"){r(dragNode_destination,dragNode_source)}};n.delNode=function(o){dragNode_source=n.getSelected();n.checkNodeIsLast(dragNode_source[0]);dragNode_source.prev().remove();dragNode_source.remove();if(typeof(o)=="function"){o(dragNode_destination)}};n.determineHTTPS=function(o){return o.replace("http:",("https:"==document.location.protocol?"https:":"http:"))};n.init=function(){if(h.startingClass!==null){n.jumpToClass(h.startingClass);h.startingClass=null}else{k.html(a("<span>").html("Loading...").css("font-size","smaller"));a.ajax({url:n.determineHTTPS(h.ncboAPIURL)+"/ontologies/"+h.ontology+"/classes/"+encodeURIComponent(h.startingRoot),data:{apikey:h.apikey,include:"prefLabel,childrenCount",no_context:true},contentType:"json",crossDomain:true,success:function(o){o=a.map([o],function(p){return p});k.html(n.formatNodes(o));n.setTreeNodes(k,false)}})}};return n};return this.each(function(){var e=a(this);a.extend(this,{selectedClass:function(){var f=a(a(this).find("a.active")[0]);if(f.length==0){return null}else{return{id:decodeURIComponent(f.data("id")),prefLabel:f.html(),URL:f.attr("href")}}},selectClass:function(f){var g=a(a(this).find("a[data-id='"+encodeURIComponent(f)+"']"));a(a(this).find("a.active")[0]).removeClass("active");g.addClass("active")},jumpToClass:function(f,g){TREE.jumpToClass(f,g)},changeOntology:function(f){var g=a("<ul>").append(a("<li>").addClass("root"));setupTree($TREE_CONTAINER,g,d);d.ontology=f;TREE.init()}});a.ajax({url:d.ncboUIURL.replace("http:",("https:"==document.location.protocol?"https:":"http:"))+"/widgets/jquery.ncbo.autocomplete.js",type:"GET",crossDomain:true,dataType:"script",success:function(){var f=setupTree(e,d);f.init()}})})}}(jQuery));