diff --git a/bigscape.py b/bigscape.py index e575d930107f66deccd66241e6dc64c657fab111..1968732f50d234990ff1eb1c2adb0376badfd6a7 100644 --- a/bigscape.py +++ b/bigscape.py @@ -1148,6 +1148,7 @@ def clusterJsonBatch(bgcs, outputFileBase,matrix,cutoffs=[1.0],damping=0.8,clust bgc2simIdx = dict(zip(bgcs, range(len(bgcs)))) pfam_domain_categories = os.path.join(os.path.dirname(os.path.realpath(__file__)), "Pfam-A.clans.tsv") pfam_descrs = generatePfamDescriptionsMatrix(pfam_domain_categories) + pfam_colors = generatePfamColorsMatrix(os.path.join(os.path.dirname(os.path.realpath(__file__)), "domains_color_file.tsv")) # Get info on all BGCs to export to .js for visualization bs_data = [] @@ -1200,16 +1201,13 @@ def clusterJsonBatch(bgcs, outputFileBase,matrix,cutoffs=[1.0],damping=0.8,clust entry = line.split('\t') orf = entry[-1].strip().split(':')[0] pfamID = entry[5].split('.')[0] - pfamDescr = pfam_descrs.get(pfamID,None) - if pfamDescr: - orfDict[orf]["domains"].append({'code': '{} : {}'.format(pfamID,pfamDescr),'start':int(entry[3]),'end':int(entry[4]),'bitscore': float(entry[1])}) - else: - orfDict[orf]["domains"].append({'code': entry[5], 'start': int(entry[3]), 'end': int(entry[4]), 'bitscore': float(entry[1])}) + orfDict[orf]["domains"].append({'code': pfamID, 'start': int(entry[3]), 'end': int(entry[4]), 'bitscore': float(entry[1])}) bgcJsonDict[bgcName]['orfs'] = list(orfDict.values()) bs_data = [bgcJsonDict[clusterNames[int(bgc)]] for bgc in bgcs] ## Write html output folder structure (and update bigscape_classes.js) for this module ## Write {modulename}/bgcs.js + ## Write js/pfams.js assert htmlFolder != None module_name = outputFileBase.split(os.path.sep)[-1] module_html_path = os.path.join(html_folder, "networks", module_name) @@ -1217,6 +1215,16 @@ def clusterJsonBatch(bgcs, outputFileBase,matrix,cutoffs=[1.0],damping=0.8,clust with open(os.path.join(module_html_path, "bs_data.js"), "w") as bs_data_js: bs_data_js.write("var bs_data={};\n".format(json.dumps(bs_data, indent=4, separators=(',', ':'), sort_keys=True))) add_to_bigscape_classes_js(module_name, className, ["cutoff{:4.2f}".format(cutoff) for cutoff in cutoffs], htmlFolder) + with open(os.path.join(html_folder, "js", "pfams.js"), "w") as pfams_js: + pfam_json = {} + for pfam_code in pfam_colors: + pfam_obj = {} + pfam_obj["col"] = pfam_colors[pfam_code] + pfam_obj["desc"] = "" + if pfam_code in pfam_descrs: + pfam_obj["desc"] = pfam_descrs[pfam_code] + pfam_json[pfam_code] = pfam_obj + pfams_js.write("var pfams={};\n".format(json.dumps(pfam_json, indent=4, separators=(',', ':'), sort_keys=True))) for cutoff in cutoffs: simMatrix = lil_matrix((len(bgcs), len(bgcs)), dtype=np.float32) diff --git a/functions.py b/functions.py index 8f25d9d763c8fb000a3688be79975b7c2e8a0147..85c29b6bc49f1acd272314a5315520bfca5d0e48 100644 --- a/functions.py +++ b/functions.py @@ -541,6 +541,30 @@ def generatePfamDescriptionsMatrix(pfam_domain_categories): return pfam_descriptions +def generatePfamColorsMatrix(pfam_domain_colors): + ''' + + :param pfam_domain_colors: tab-delimited file + :return: dictionary with pfam ID as key and rgb colors as value + ''' + pfam_colors = {} + + if os.path.isfile(pfam_domain_colors): + print(" Found file with Pfam domain colors") + with open(pfam_domain_colors, "r") as cat_handle: + for line in cat_handle: + # handle comments and empty lines + if line[0] != "#" and line.strip(): + row = line.strip().split("\t") + domain = row[0] + rgb = row[-1] + pfam_colors[domain] = rgb + else: + print(" File pfam_domain_colors was NOT found") + + return pfam_colors + + def copy_html_template(html_folder): if (os.path.isdir(html_folder)): shutil.rmtree(html_folder) diff --git a/html_template/js/arrower.js b/html_template/js/arrower.js index 39cdfa93a02ce7f465c309e2f726c4cba6f58175..aafabb9e3e8b35078654531671b6f953ec4284ea 100755 --- a/html_template/js/arrower.js +++ b/html_template/js/arrower.js @@ -1,296 +1,308 @@ /* Copyright 2017 Satria Kautsar */ var Arrower = { - version: "0.0.0", - required: [ - "jquery", - "svg.js" - ], - tooltip_id: "arrower-tooltip-1234567890" + version: "0.0.0", + required: [ + "jquery", + "svg.js", + "pfams.js" + ], + tooltip_id: "arrower-tooltip-1234567890" }; +if (pfams === undefined) { +pfams = {}; +} Arrower.drawClusterSVG = (function(cluster, height = 40) { - var container = document.createElement("div"); - var draw = SVG(container).size('100%', height).group(); - var scale = (function(val) { return parseInt(val / (1000 / height)); }) +var container = document.createElement("div"); +var draw = SVG(container).size('100%', height).group(); +var scale = (function(val) { return parseInt(val / (1000 / height)); }) - // draw line - draw.line(0, parseInt(height / 2), scale(cluster.end - cluster.start), parseInt(height / 2)).stroke({width: 1}); - var width = scale(cluster.end - cluster.start); - - if (cluster.hasOwnProperty("orfs")) { - // draw arrows - for (var i in cluster.orfs) { - var orf = cluster.orfs[i]; - var orf_color = "white";//"gray"; - if (orf.hasOwnProperty("color")) { - orf_color = orf.color; - } - var pol = draw.polygon(Arrower.toPointString(Arrower.getArrowPoints(orf, cluster, height, scale))) - .fill(orf_color) - .stroke({width: 1}) - .addClass("arrower-orf"); - $(pol.node).mouseover({orf: orf}, function(handler){ - var start = handler.data.orf.start; - var end = handler.data.orf.end; - Arrower.showToolTip("ORF: " + handler.data.orf.id + "<br/>" + start + " - " + end, handler); - $(handler.target).css("stroke-width", "3px"); - $(handler.target).css("stroke", "red"); - handler.stopPropagation(); - }); - $(pol.node).mouseleave(function(handler){ - $(handler.target).css("stroke-width", "1px"); - $(handler.target).css("stroke", "black"); - $("#" + Arrower.tooltip_id).css("display", "none"); - }); +// draw line +draw.line(0, parseInt(height / 2), scale(cluster.end - cluster.start), parseInt(height / 2)).stroke({width: 1}); +var width = scale(cluster.end - cluster.start); - if (orf.hasOwnProperty("domains")) { - // draw domains - for (var j in orf.domains) { - var domain = orf.domains[j]; - var color = "gray"; - if (domain.hasOwnProperty("color")) { - color = domain.color; - } - var dom = draw.polygon(Arrower.toPointString(Arrower.getDomainPoints(domain, orf, cluster, height, scale))) - .fill(color) - .stroke({width: 1}) - .addClass("arrower-domain"); - $(dom.node).mouseover({domain: domain}, function(handler){ - var start = handler.data.domain.start; - var end = handler.data.domain.end; - Arrower.showToolTip("Domain: " + handler.data.domain.code + " (" + domain.bitscore + ")" + "<br/>" + start + " - " + end, handler); - $(handler.target).css("stroke-width", "3px"); - $(handler.target).css("stroke", "red"); - handler.stopPropagation(); - }); - $(dom.node).mouseleave(function(handler){ - $(handler.target).css("stroke-width", "1px"); - $(handler.target).css("stroke", "black"); - $("#" + Arrower.tooltip_id).css("display", "none"); - }); +if (cluster.hasOwnProperty("orfs")) { + // draw arrows + for (var i in cluster.orfs) { + var orf = cluster.orfs[i]; + var orf_color = "white";//"gray"; + if (orf.hasOwnProperty("color")) { + orf_color = orf.color; + } + var pol = draw.polygon(Arrower.toPointString(Arrower.getArrowPoints(orf, cluster, height, scale))) + .fill(orf_color) + .stroke({width: 1}) + .addClass("arrower-orf"); + $(pol.node).mouseover({orf: orf}, function(handler){ + var start = handler.data.orf.start; + var end = handler.data.orf.end; + Arrower.showToolTip("ORF: " + handler.data.orf.id + "<br/>" + start + " - " + end, handler); + $(handler.target).css("stroke-width", "3px"); + $(handler.target).css("stroke", "red"); + handler.stopPropagation(); + }); + $(pol.node).mouseleave(function(handler){ + $(handler.target).css("stroke-width", "1px"); + $(handler.target).css("stroke", "black"); + $("#" + Arrower.tooltip_id).css("display", "none"); + }); + + if (orf.hasOwnProperty("domains")) { + // draw domains + for (var j in orf.domains) { + var domain = orf.domains[j]; + var color = "gray"; + if (domain.hasOwnProperty("color")) { + color = domain.color; + } else if (pfams.hasOwnProperty(domain.code)) { + color = "rgb(" + pfams[domain.code]["col"] + ")"; } + var dom = draw.polygon(Arrower.toPointString(Arrower.getDomainPoints(domain, orf, cluster, height, scale))) + .fill(color) + .stroke({width: 1}) + .addClass("arrower-domain"); + $(dom.node).mouseover({domain: domain}, function(handler){ + var start = handler.data.domain.start; + var end = handler.data.domain.end; + var dom_desc = ""; + if (handler.data.domain.hasOwnProperty("desc")) { + dom_desc = handler.data.domain.color; + } else if (pfams.hasOwnProperty(handler.data.domain.code)) { + dom_desc = pfams[handler.data.domain.code]["desc"]; + } + Arrower.showToolTip("Domain: " + handler.data.domain.code + " " + dom_desc + " (" + handler.data.domain.bitscore + ")" + "<br/>" + start + " - " + end, handler); + $(handler.target).css("stroke-width", "3px"); + $(handler.target).css("stroke", "red"); + handler.stopPropagation(); + }); + $(dom.node).mouseleave(function(handler){ + $(handler.target).css("stroke-width", "1px"); + $(handler.target).css("stroke", "black"); + $("#" + Arrower.tooltip_id).css("display", "none"); + }); } } } +} - $(draw.node).parent().mouseover({domain: domain}, function(handler){ - var bgc_desc = "<b>BGC: " + cluster.id + "</b>"; - if (cluster.hasOwnProperty("desc")) { - bgc_desc += "<br /> " + cluster["desc"]; - } - Arrower.showToolTip(bgc_desc, handler); - }); - $(draw.node).parent().mouseleave(function(handler){ - $("#" + Arrower.tooltip_id).css("display", "none"); - }); +$(draw.node).parent().mouseover({domain: domain}, function(handler){ + var bgc_desc = "<b>BGC: " + cluster.id + "</b>"; + if (cluster.hasOwnProperty("desc")) { + bgc_desc += "<br /> " + cluster["desc"]; + } + Arrower.showToolTip(bgc_desc, handler); +}); +$(draw.node).parent().mouseleave(function(handler){ + $("#" + Arrower.tooltip_id).css("display", "none"); +}); - $(container).find("svg").attr("width", width + "px"); - return $(container).find("svg")[0]; +$(container).find("svg").attr("width", width + "px"); +return $(container).find("svg")[0]; }); Arrower.getOrfPoints = (function(orf, cluster, height, scale){ - var x_points = [ - scale(orf.start), - (orf.strand === 0) ? - (scale(orf.start) + scale(orf.end - orf.start)) - : ((scale(orf.end - orf.start) > (height / 2)) ? - (scale(orf.start) + Math.max(scale(orf.end - orf.start - ((orf.end - orf.start) / 4)), (scale(orf.end - orf.start) - parseInt(height / 2)))) - : scale(orf.start)), +var x_points = [ + scale(orf.start), + (orf.strand === 0) ? (scale(orf.start) + scale(orf.end - orf.start)) - ]; - var y_points = [ - (orf.strand === 0) ? - ((height / 2) - (height / 3)) - : ((height / 2) - (height / 3)) - (height / 5), - ((height / 2) - (height / 3)), - (height / 2), - ((height / 2) + (height / 3)), - (orf.strand === 0) ? - ((height / 2) + (height / 3)) - : ((height / 2) + (height / 3)) + (height / 5) - ]; + : ((scale(orf.end - orf.start) > (height / 2)) ? + (scale(orf.start) + Math.max(scale(orf.end - orf.start - ((orf.end - orf.start) / 4)), (scale(orf.end - orf.start) - parseInt(height / 2)))) + : scale(orf.start)), + (scale(orf.start) + scale(orf.end - orf.start)) +]; +var y_points = [ + (orf.strand === 0) ? + ((height / 2) - (height / 3)) + : ((height / 2) - (height / 3)) - (height / 5), + ((height / 2) - (height / 3)), + (height / 2), + ((height / 2) + (height / 3)), + (orf.strand === 0) ? + ((height / 2) + (height / 3)) + : ((height / 2) + (height / 3)) + (height / 5) +]; - return { x: x_points, y: y_points }; +return { x: x_points, y: y_points }; }); Arrower.getArrowPoints = (function(orf, cluster, height, scale) { - var points = []; - var pts = Arrower.getOrfPoints(orf, cluster, height, scale); +var points = []; +var pts = Arrower.getOrfPoints(orf, cluster, height, scale); - points.push({ // blunt start - x: pts.x[0], - y: pts.y[1] - }); - points.push({ // junction top - x: pts.x[1], - y: pts.y[1] - }); - points.push({ // junction top-top - x: pts.x[1], - y: pts.y[0] - }); - points.push({ // pointy end - x: pts.x[2], - y: pts.y[2] - }); - points.push({ // junction bottom-bottom - x: pts.x[1], - y: pts.y[4] - }); - points.push({ // junction bottom - x: pts.x[1], - y: pts.y[3] - }); - points.push({ // blunt end - x: pts.x[0], - y: pts.y[3] - }); +points.push({ // blunt start + x: pts.x[0], + y: pts.y[1] +}); +points.push({ // junction top + x: pts.x[1], + y: pts.y[1] +}); +points.push({ // junction top-top + x: pts.x[1], + y: pts.y[0] +}); +points.push({ // pointy end + x: pts.x[2], + y: pts.y[2] +}); +points.push({ // junction bottom-bottom + x: pts.x[1], + y: pts.y[4] +}); +points.push({ // junction bottom + x: pts.x[1], + y: pts.y[3] +}); +points.push({ // blunt end + x: pts.x[0], + y: pts.y[3] +}); - if (orf.strand < 0) { - points = Arrower.flipHorizontal(points, scale(orf.start), (scale(orf.start) + scale(orf.end - orf.start))); - } +if (orf.strand < 0) { + points = Arrower.flipHorizontal(points, scale(orf.start), (scale(orf.start) + scale(orf.end - orf.start))); +} - return points; +return points; }); Arrower.getDomainPoints = (function(domain, orf, cluster, height, scale) { - var points = []; - var arrow_pts = Arrower.getArrowPoints(orf, cluster, height, scale); - if (orf.strand < 0) { - arrow_pts = Arrower.flipHorizontal(arrow_pts, scale(orf.start), (scale(orf.start) + scale(orf.end - orf.start))); - } - arrow_pts.splice(3, 0, arrow_pts[3]); // convert into bluntish-end arrow - var domain_x = { - start: (scale(orf.start) + scale(domain.start * 3)), - end: (scale(orf.start) + scale(domain.end * 3)) - }; +var points = []; +var arrow_pts = Arrower.getArrowPoints(orf, cluster, height, scale); +if (orf.strand < 0) { + arrow_pts = Arrower.flipHorizontal(arrow_pts, scale(orf.start), (scale(orf.start) + scale(orf.end - orf.start))); +} +arrow_pts.splice(3, 0, arrow_pts[3]); // convert into bluntish-end arrow +var domain_x = { + start: (scale(orf.start) + scale(domain.start * 3)), + end: (scale(orf.start) + scale(domain.end * 3)) +}; - var getY = function(x) { - var m = Math.abs(arrow_pts[5].y - arrow_pts[4].y) / Math.abs(arrow_pts[5].x - arrow_pts[4].x); - return (m * (x - arrow_pts[4].x)); - } +var getY = function(x) { + var m = Math.abs(arrow_pts[5].y - arrow_pts[4].y) / Math.abs(arrow_pts[5].x - arrow_pts[4].x); + return (m * (x - arrow_pts[4].x)); +} - for (var i in arrow_pts) { - var apt = arrow_pts[i]; - var new_point = {}; - new_point.x = apt.x < domain_x.start ? domain_x.start : (apt.x > domain_x.end ? domain_x.end : apt.x); - new_point.y = (new_point.x < arrow_pts[1].x) ? - Math.min(Math.max(apt.y, arrow_pts[0].y), arrow_pts[7].y) - :((new_point.x == arrow_pts[1].x) ? - apt.y - :(i < 4 ? - (arrow_pts[3].y + getY(new_point.x)) - :(arrow_pts[3].y - getY(new_point.x)))); - points.push(new_point); - } +for (var i in arrow_pts) { + var apt = arrow_pts[i]; + var new_point = {}; + new_point.x = apt.x < domain_x.start ? domain_x.start : (apt.x > domain_x.end ? domain_x.end : apt.x); + new_point.y = (new_point.x < arrow_pts[1].x) ? + Math.min(Math.max(apt.y, arrow_pts[0].y), arrow_pts[7].y) + :((new_point.x == arrow_pts[1].x) ? + apt.y + :(i < 4 ? + (arrow_pts[3].y + getY(new_point.x)) + :(arrow_pts[3].y - getY(new_point.x)))); + points.push(new_point); +} - if (orf.strand < 0) { - points = Arrower.flipHorizontal(points, scale(orf.start), (scale(orf.start) + scale(orf.end - orf.start))); - } +if (orf.strand < 0) { + points = Arrower.flipHorizontal(points, scale(orf.start), (scale(orf.start) + scale(orf.end - orf.start))); +} - return points; +return points; }); Arrower.flipHorizontal = (function(points, leftBound, rightBound) { - var new_points = []; +var new_points = []; - for(var i in points) { - var point = points[i]; - if ((point.x < leftBound) || (point.x > rightBound)) { - throw "Error flipping points"; - } - new_points.push({ x: rightBound - (point.x - leftBound), y: point.y }); +for(var i in points) { + var point = points[i]; + if ((point.x < leftBound) || (point.x > rightBound)) { + throw "Error flipping points"; } + new_points.push({ x: rightBound - (point.x - leftBound), y: point.y }); +} - return new_points; +return new_points; }); Arrower.toPointString = (function(points) { - points_string = ""; +points_string = ""; - for(var i in points) { - var point = points[i]; - if (i > 0) { - points_string += ", "; - } - points_string += parseInt(point.x) + "," + parseInt(point.y); +for(var i in points) { + var point = points[i]; + if (i > 0) { + points_string += ", "; } + points_string += parseInt(point.x) + "," + parseInt(point.y); +} - return points_string; +return points_string; }); Arrower.getRandomCluster = (function() { - function random(min, max) { - min = Math.ceil(min); - max = Math.floor(max); - return Math.floor(Math.random() * (max - min)) + min; - } - var cl_start = 23000; - var cl_end = 23000 + random(5000, 50000); +function random(min, max) { + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min)) + min; +} +var cl_start = 23000; +var cl_end = 23000 + random(5000, 50000); - var orfs = []; - var num_orfs = random(5, 20); - for (var i = 0; i < num_orfs; i++) { - var pos1 = random(i * ((cl_end - cl_start) / num_orfs), (i + 1) * ((cl_end - cl_start) / num_orfs)); - var pos2 = random(i * ((cl_end - cl_start) / num_orfs), (i + 1) * ((cl_end - cl_start) / num_orfs)); - if (Math.abs(pos1 - pos2) < 200) { - continue; - } - var orf_start = Math.min(pos1, pos2); - var orf_end = Math.max(pos1, pos2); - var orf_strand = Math.random() > 0.5? 1 : -1;//random(-1, 2); - var orf_type = Math.random() > 0.5? "biosynthetic" : "others"; - var orf_domains = []; - var num_domains = random(0, 4); - for (var j = 0; j < num_domains; j++) { - var dpos1 = random(j * ((orf_end - orf_start) / num_domains), (j + 1) * ((orf_end - orf_start) / num_domains)); - var dpos2 = random(j * ((orf_end - orf_start) / num_domains), (j + 1) * ((orf_end - orf_start) / num_domains)); - var dom_start = Math.min(dpos1, dpos2); - var dom_end = Math.max(dpos1, dpos2); - orf_domains.push({ - code: "RAND_DOM_" + i + "_" + j, - start: dom_start, - end: dom_end, - bitscore: random(30, 300), - color: "rgb(" + random(0, 256) + "," + random(0, 256) + "," + random(0, 256) + ")", - }); - } - orfs.push({ - id: "RAND_ORF_" + i, - desc: "Randomly generated ORF", - start: orf_start, - end: orf_end, - strand: orf_strand, - domains: orf_domains +var orfs = []; +var num_orfs = random(5, 20); +for (var i = 0; i < num_orfs; i++) { + var pos1 = random(i * ((cl_end - cl_start) / num_orfs), (i + 1) * ((cl_end - cl_start) / num_orfs)); + var pos2 = random(i * ((cl_end - cl_start) / num_orfs), (i + 1) * ((cl_end - cl_start) / num_orfs)); + if (Math.abs(pos1 - pos2) < 200) { + continue; + } + var orf_start = Math.min(pos1, pos2); + var orf_end = Math.max(pos1, pos2); + var orf_strand = Math.random() > 0.5? 1 : -1;//random(-1, 2); + var orf_type = Math.random() > 0.5? "biosynthetic" : "others"; + var orf_domains = []; + var num_domains = random(0, 4); + for (var j = 0; j < num_domains; j++) { + var dpos1 = random(j * ((orf_end - orf_start) / num_domains), (j + 1) * ((orf_end - orf_start) / num_domains)); + var dpos2 = random(j * ((orf_end - orf_start) / num_domains), (j + 1) * ((orf_end - orf_start) / num_domains)); + var dom_start = Math.min(dpos1, dpos2); + var dom_end = Math.max(dpos1, dpos2); + orf_domains.push({ + code: "RAND_DOM_" + i + "_" + j, + start: dom_start, + end: dom_end, + bitscore: random(30, 300), + color: "rgb(" + random(0, 256) + "," + random(0, 256) + "," + random(0, 256) + ")", }); } + orfs.push({ + id: "RAND_ORF_" + i, + desc: "Randomly generated ORF", + start: orf_start, + end: orf_end, + strand: orf_strand, + domains: orf_domains + }); +} - var cluster = { start: cl_start, end: cl_end, orfs: orfs, desc: 'Randomly generated Cluster'}; - return cluster; +var cluster = { start: cl_start, end: cl_end, orfs: orfs, desc: 'Randomly generated Cluster'}; +return cluster; }); Arrower.drawRandomClusterSVG = (function(cluster) { - return Arrower.drawClusterSVG(Arrower.getRandomCluster()); +return Arrower.drawClusterSVG(Arrower.getRandomCluster()); }); Arrower.showToolTip = (function(html, handler){ - var divTooltip = $("#" + Arrower.tooltip_id); - if (divTooltip.length < 1) { - divTooltip = $("<div id='" + Arrower.tooltip_id + "'>"); - divTooltip.css("background-color", "white"); - divTooltip.css("border", "1px solid black"); - divTooltip.css("color", "black"); - divTooltip.css("font-size", "small"); - divTooltip.css("padding", "0 5px"); - divTooltip.css("pointer-events", "none"); - divTooltip.css("position", "fixed"); - divTooltip.appendTo($(document.body)); - } - divTooltip.html(html); - divTooltip.css("cursor", "default"); - divTooltip.css("top", handler.pageY + "px"); - divTooltip.css("left", handler.pageX + "px"); - divTooltip.css("display", "block"); +var divTooltip = $("#" + Arrower.tooltip_id); +if (divTooltip.length < 1) { + divTooltip = $("<div id='" + Arrower.tooltip_id + "'>"); + divTooltip.css("background-color", "white"); + divTooltip.css("border", "1px solid black"); + divTooltip.css("color", "black"); + divTooltip.css("font-size", "small"); + divTooltip.css("padding", "0 5px"); + divTooltip.css("pointer-events", "none"); + divTooltip.css("position", "fixed"); + divTooltip.appendTo($(document.body)); +} +divTooltip.html(html); +divTooltip.css("cursor", "default"); +divTooltip.css("top", handler.pageY + "px"); +divTooltip.css("left", handler.pageX + "px"); +divTooltip.css("display", "block"); }); diff --git a/html_template/networks/index_html b/html_template/networks/index_html index 37fd5f3c65303f757564db387b5d17716ef51d83..75ce78996c97dfbedf79d9d9ed2928b680b1badd 100644 --- a/html_template/networks/index_html +++ b/html_template/networks/index_html @@ -1,10 +1,10 @@ <!DOCTYPE html> <html> <head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <meta http-equiv='cache-control' content='no-cache'> - <meta http-equiv='expires' content='0'> - <meta http-equiv='pragma' content='no-cache'> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <meta http-equiv='cache-control' content='no-cache'> + <meta http-equiv='expires' content='0'> + <meta http-equiv='pragma' content='no-cache'> <title>BiG-SCAPE Result</title> <link rel="stylesheet" type="text/css" href="../../../css/style.css"> </head> @@ -15,8 +15,9 @@ <script type="text/javascript" src="../../../js/jquery-3.2.1.min.js"></script> <script type="text/javascript" src="../../../js/vivagraph.js"></script> <script type="text/javascript" src="../../../js/svg.js"></script> - <script type="text/javascript" src="../../../js/arrower.js"></script> <script type="text/javascript" src="../../../js/fuse.min.js"></script> + <script type="text/javascript" src="../../../js/pfams.js"></script> + <script type="text/javascript" src="../../../js/arrower.js"></script> <script type="text/javascript" src="../../../js/bigscape.js"></script> <script type="text/javascript" src="../bs_data.js"></script> <script type="text/javascript" src="bs_networks.js"></script>