PageSourceSearch

https://long-read-tools.org/jsv3/function/tools.js?v5.0003

js long-read-tools.org collected 2026-10-03 21:24:53 UTC 19,994 bytes, 688 lines download raw bytes

1let masterData; // JSON data will store in this after intial load
2let masterCatData; // JSON data will store in this after intial load
3let masterTecData; // JSON data will store in this after intial load
4let fliterdthings;
5// load JSON data when page loading
6$(document).ready(function () {
7  const queryString = window.location.search;
8  const urlParams = new URLSearchParams(queryString);
9  // alert(window.location.hash)
10  $.getJSON("data/categories.json", function (data) {
11    masterCatData = data;
12    gearateOptionVals(masterCatData, "cat", function (optionHTML) {
13      $("#cat").append(optionHTML);
14      $("#cat").selectpicker();
15      cat = urlParams.get("cat");
16      cat && $("#cat").val(cat.split(","));
17      $("#cat").selectpicker("refresh");
18    });
19  });
20
21  $.getJSON("data/technologies.json", function (data) {
22    masterTecData = data;
23    gearateOptionVals(masterTecData, "tec", function (optionHTML) {
24      $("#tec").append(optionHTML);
25      $("#tec").selectpicker();
26      tec = urlParams.get("tec");
27      tec && $("#tec").val(tec.split(","));
28      $("#tec").selectpicker("refresh");
29    });
30  });
31
32  $.getJSON("data/tools.json", function (data) {
33    masterData = data;
34    let datalist = masterData;
35
36    let sortby = urlParams.get("sort");
37    if (sortby == null || sortby == "null" || sortby == "") {
38      (sortby = "Name"), $("#toolsortby").val(sortby);
39    } else {
40      $("#toolsortby").val(sortby);
41    }
42    //  sortby!='null' ? $("#toolsortby").val(sortby):($("#toolsortby").val("Name"))
43    sortTools(datalist, function (sortdata) {
44      if ($("#cat").val() != "" || $("#tec").val() != "") {
45        filterTools(sortdata, function (fliterdthings) {
46          createbodyMain(fliterdthings, sortby);
47        });
48      } else {
49        createbodyMain(sortdata, sortby);
50      }
51      createURL();
52    });
53  });
54});
55
56$("#btnReset").click(function () {
57  let sortby = $("#toolsortby").val();
58  $("#cat").val("");
59  $("#tec").val("");
60  $("#cat").selectpicker("refresh");
61  $("#tec").selectpicker("refresh");
62
63  sortTools(masterData, function (sortdata) {
64    if ($("#cat").val() != "" || $("#tec").val() != "") {
65      filterTools(sortdata, function (fliterdthings) {
66        createbodyMain(fliterdthings, sortby);
67      });
68    } else {
69      createbodyMain(sortdata, sortby);
70    }
71  });
72});
73// capture sort by select box changes
74$("#toolsortby").change(function () {
75  let datalist = masterData;
76  let sortby = $("#toolsortby").val();
77
78  sortTools(datalist, function (sortdata) {
79
80    if ($("#cat").val() != "" || $("#tec").val() != "") {
81      filterTools(sortdata, function (fliterdthings) {
82        createbodyMain(fliterdthings, sortby);
83      });
84    } else {
85      createbodyMain(sortdata, sortby);
86    }
87  });
88});
89
90function sortTools(datalist, callback) {
91  let sortby = $("#toolsortby").val();
92  if (sortby == "Citations") {
93    genCitationArry(datalist, function (citationdata) {
94      sortdata = citationdata;
95      sortdata.sort(sortByProperty(sortby));
96    });
97  } else {
98    sortdata = datalist.sort(sortByProperty(sortby));
99  }
100
101  callback(sortdata);
102}
103
104function filterTools(dataP, callback) {
105  let data = dataP
106  let catData = $("#cat").val();
107  let tecData = $("#tec").val();
108  if (catData.length) {
109    filterdArry = [];
110
111
112
113    $.each(data, function (key, objt) {
114      var success = catData.every(function (val) {
115        return objt.Categories.indexOf(val) !== -1;
116      });
117      success == true ? filterdArry.push(objt) : (null)
118
119    });
120    data = filterdArry
121  }
122
123  if (tecData.length) {
124    filterdArry = [];
125    $.each(data, function (key, objt) {
126      var success = tecData.every(function (val) {
127        return objt.Technologies.indexOf(val) !== -1;
128      });
129      success == true ? filterdArry.push(objt) : (null)
130    });
131    data = filterdArry
132  }
133
134  callback(data);
135}
136
137$("#filterBtn").click(function () {
138  let catData = $("#cat").val();
139  let tecData = $("#tec").val();
140  let sortby = $("#toolsortby").val();
141
142  if (catData != "" || tecData != "") {
143    let datalist = masterData;
144
145    sortTools(datalist, function (data) {
146      filterTools(data, function (fliterdthings) {
147        createbodyMain(fliterdthings, sortby);
148      });
149    });
150  }
151});
152
153//create response body
154function createbodyMain(data, sortby) {
155
156  $("#accordion").html("");
157  $("#accordion").append('<div class="row">');
158
159  if (data.length) {
160    if (sortby == "Name") {
161      $("#alfalist").show();
162      let letterHTML = ' <ul id="name-bookmarks" class="display-inline ui-alfa">';
163      let letterArray = genCharArray("A", "Z");
164      letterArray.push("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
165      // let i=0
166      for (let index = 0; index < letterArray.length; index++) {
167        var found_names = $.grep(data, function (v) {
168          return (
169            v.Name.charAt(0) == letterArray[index] ||
170            v.Name.charAt(0) == letterArray[index].toLowerCase()
171          );
172
173        });
174
175
176        if (found_names.length > 0) {
177          letterHTML +=
178            '<li class="letter-menuA"><a href="#anchor' +
179            removeSpecialChar(letterArray[index]) +
180            '">' +
181            letterArray[index] +
182            "</a></li>";
183
184          $("#accordion").append(
185            '<div class="col-lg-12 "> <span class="anc"  id="anchor' +
186            removeSpecialChar(letterArray[index]) +
187            '"></span><h6 class="anchor">' +
188            letterArray[index] +
189            "</h6></div>"
190          );
191          createBody(found_names, "");
192        }
193      }
194      letterHTML += "</ul>";
195      $("#alfalist").html("");
196      $("#alfalist").append(letterHTML);
197    } else {
198      $("#alfalist").hide();
199      createBody(data, "");
200    }
201  } else {
202    $("#alfalist").hide();
203    $("#accordion").append('<div class="col-lg-12"><div class="text-center">No results found - try alternative filtering criteria</div></div>');
204  }
205  $("#accordion").append("</div>");
206}
207
208//create collaps cards in to two coloums
209function createBody(data, body) {
210  ArryLength = data.length;
211  ArryLength % 2 == 0 ?
212    (oneSideCount = ArryLength / 2) :
213    (oneSideCount = (ArryLength + 1) / 2);
214  let count = 1;
215  let bodyleftFull = "";
216  let bodyleft = "";
217  let bodyRight = "";
218  cval = 1
219  $.each(data, function (key, val) {
220    bodyleftFull += '<div class="col-lg-6">' + genarateCollapsheading(
221      val,
222      (val["Name"] + key).replace(/\s/g, "")
223    ) + "</div>";
224
225    if (count++ % 2 != 0) {
226      bodyleft += genarateCollapsheading(
227        val,
228        (val["Name"] + key).replace(/\s/g, "")
229      );
230    } else {
231      bodyRight += genarateCollapsheading(
232        val,
233        (val["Name"] + key).replace(/\s/g, "")
234      );
235    }
236    cval++
237  });
238  // $("#accordion").append('<div class="col-lg-6">' + bodyleft + "</div>");
239  // $("#accordion").append('<div class="col-lg-6">' + bodyRight + "</div>");
240  $("#accordion").append(bodyleftFull);
241}
242
243//sort json data
244function sortByProperty(property) {
245  return function (a, b) {
246    if (property == "Name") {
247
248      if (createSortString(a[property]) > createSortString(b[property])) return 1;
249      else if (createSortString(a[property]) < createSortString(b[property])) return -1;
250
251    } else if (property == "Technologies") {
252      if (a[property].length > b[property].length) return 1;
253      else if (a[property].length < b[property].length) return -1;
254
255    } else if (property == "Citations") {
256      if (a[property] > b[property]) return -1;
257      else if (a[property] < b[property]) return 1;
258    }
259    return 0;
260  };
261}
262
263
264
265function createURL() {
266  let catData = $("#cat").val();
267  let tecData = $("#tec").val();
268  stringCat = catData.join(",");
269  stringtec = tecData.join(",");
270  let sortby = $("#toolsortby").val();
271  var hash = location.hash;
272  let refresh =
273    window.location.protocol +
274    "//" +
275    window.location.host +
276    window.location.pathname +
277    "?sort=" +
278    sortby +
279    "&cat=" +
280    stringCat +
281    "&tec=" +
282    stringtec + "" + hash;
283  window.history.pushState({
284    path: refresh
285  }, "", refresh);
286  //   alert( $(hash).data('id'))
287  if (hash) {
288    window.location.href = refresh;
289
290    $('#collapse' + $(hash).data('id')).collapse({
291      toggle: true
292    });
293  }
294  //   $('#'+hash+' > a')[0].click();
295}
296
297//create collaps cards
298function genarateCollapsheading(obje, key) {
299  var name = obje.Name;
300  var description = obje.Description;
301  var citations = obje.Citations;
302  var recentcitations = obje.Recent_citations;
303  var refs = obje.Refs;
304  var platform = obje.Platform;
305  var code = obje.Code;
306  var license = obje.License;
307  var cats = obje.Categories;
308  var techs = obje.Technologies;
309  var bioc = obje.BioC;
310  var pypi = obje.PyPI;
311  var cran = obje.CRAN;
312  var nPubs = obje.Publications;
313  var nPres = obje.Preprints;
314  var totalRefs = nPubs + nPres;
315  var algo = obje.Underlying_algorithms;
316  var assump = obje.Underlying_assumptions;
317  var sandw = obje.Strengths_weaknesses;
318  var perform = obje.Overall_performance;
319  blockHtml = "";
320  blockHtml +=
321
322    '<span class="anc" id="' + removeSpecialChar(name) + '" data-id="' + removeSpecialChar(key) + '"></span><div class="panel panel-default">' +
323    '<div class="collapsedhead panel-heading tool-block" role="tab" id="heading' +
324    removeSpecialChar(key) +
325    '">' +
326    '<h4 class="panel-title ' + removeSpecialChar(key) + '" >' +
327    '<a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse' +
328    removeSpecialChar(key) +
329    '" aria-expanded="false" aria-controls="collapse' +
330    removeSpecialChar(key) +
331    '"> ' +
332    name
333
334  if (typeof bioc !== 'undefined') {
335    blockHtml += ' <img border="0" height="15" src="img/shields/BioC/' + bioc + '_years.svg">' +
336      ' <img border="0" height="15" src="img/shields/BioC/' + bioc + '_downloads.svg">'
337  }
338
339  if (typeof cran !== 'undefined') {
340    blockHtml += ' <img border="0" height="15" src="img/shields/CRAN/' + cran + '_version.svg">' +
341      ' <img border="0" height="15" src="img/shields/CRAN/' + cran + '_downloads.svg">'
342  }
343
344  if (typeof pypi !== 'undefined') {
345    blockHtml += ' <img border="0" height="15" src="img/shields/PyPI/' + pypi + '_version.svg">' +
346      ' <img border="0" height="15" src="img/shields/PyPI/' + pypi + '_python.svg">' +
347      ' <img border="0" height="15" src="img/shields/PyPI/' + pypi + '_status.svg">'
348  }
349  blockHtml += "</a>" +
350    "</h4>" +
351    "</div>" +
352    '<div id="collapse' +
353    removeSpecialChar(key) +
354    '" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading' +
355    removeSpecialChar(key) +
356    '">' +
357    '<div class="panel-body">';
358  blockHtml += "<p>" + description + "</p>";
359
360  if (totalRefs > 0) {
361    blockHtml +=
362      '<div class="panel-group">' +
363      '<div class="panel panel-default">' +
364      '<div class="panel-heading">' +
365      '<h4 class="panel-title">' +
366      '<a data-toggle="collapse" href="#collapsePublications' +
367      removeSpecialChar(key) +
368      '">Publications: ' +
369      nPubs +
370      ", Preprints:" +
371      nPres +
372      ",Total citations: " +
373      citations +
374      ", Recent Citations: " +
375
376      recentcitations +
377      "</a>" +
378      "</h4>" +
379      "</div>" +
380      '<div id="collapsePublications' +
381      removeSpecialChar(key) +
382      '" class="panel-collapse collapse">' +
383      '<div class="panel-body">';
384    if (nPubs > 0) {
385      blockHtml += '<div class="panel-group">';
386      blockHtml +=
387        '<div class="panel panel-default">' +
388        '<div class="panel-heading"><strong>Publication(s)</strong></div>' +
389        '<div class="panel-body">' +
390        "<ul>";
391      $.each(refs.Publications, function (key3, publication) {
392        blockHtml +=
393          '<li> <p>"' +
394          publication.Title +
395          ' "</p>' +
396          ' <p><strong> DOI</strong>: <a target="_blank" href="https://doi.org/' + publication.DOI + '">' +
397          publication.DOI +
398          '  <a/><strong>, Published</strong>: ' +
399          publication.PubDate +
400          ', <strong>Citations</strong>:  <a target="_blank" href="https://scholar.google.com/scholar?&q=' + publication.DOI + '">' +
401          publication.Citations +
402          '</a></p>' +
403          '</li>';
404      });
405      blockHtml += "</ul>" + "</div>" + " </div>" + "</div>";
406    }
407    if (nPres > 0) {
408      blockHtml += '<div class="panel-group">';
409      blockHtml +=
410        '<div class="panel panel-default">' +
411        '<div class="panel-heading"><strong>Preprint(s)</strong></div>' +
412        '<div class="panel-body">' +
413        "<ul>";
414      $.each(refs.Preprints, function (key3, Preprint) {
415        blockHtml +=
416          '<li> <p>"' +
417          Preprint.Title +
418          ' "</p>' +
419          ' <p><strong>DOI</strong>: <a target="_blank" href="https://doi.org/' + Preprint.DOI + '"> ' +
420          Preprint.DOI +
421          ', </a> <strong>Published</strong>: ' +
422          Preprint.PubDate +
423          ', <strong>Citations</strong>:  <a target="_blank" href="https://scholar.google.com/scholar?&q=' + Preprint.DOI + '"> ' +
424          Preprint.Citations +
425          ' </a></p>' +
426          '</li>';
427      });
428      blockHtml += "</ul>" + "</div>" + " </div>" + "</div>";
429    }
430    blockHtml += "</div>";
431    blockHtml += "</div>";
432    blockHtml += "</div>";
433    blockHtml += "</div>";
434  }
435  blockHtml += '<div class="panel-group">';
436  typeof platform !== "undefined" ?
437    (blockHtml +=
438      '<div class="panel panel-default">' +
439      '<div class="panel-heading"><strong>Platform</strong></div>' +
440      '<div class="panel-body">' +
441      platform +
442      "</div>" +
443      " </div>") :
444    null;
445  typeof code !== "undefined" ?
446    (blockHtml +=
447      '<div class="panel panel-default">' +
448      '<div class="panel-heading"><strong>Code</strong></div>' +
449      '<div class="panel-body">' +
450      '<a target="_blank" href="' + code + '"> ' + code + ' </a>' +
451      "</div>" +
452      " </div>") :
453    null;
454  typeof license !== "undefined" ?
455    (blockHtml +=
456      '<div class="panel panel-default">' +
457      '<div class="panel-heading"><strong>License</strong></div>' +
458      '<div class="panel-body">' +
459      license +
460      "</div>" +
461      " </div>") :
462    null;
463
464  if (cats.length > 0 && cats[0] != null) {
465    blockHtml +=
466      '<div class="panel panel-default">' +
467      '<div class="panel-heading"><strong>Categories</strong></div>';
468    blockHtml += '<div class="panel-body">' + linkCats(cats);
469    blockHtml += "</div>";
470    blockHtml += " </div>";
471  }
472  if (techs.length > 0 && techs[0] != null) {
473    blockHtml +=
474      '<div class="panel panel-default">' +
475      '<div class="panel-heading"><strong>Technologies</strong></div>';
476    blockHtml += '<div class="panel-body">' + linkTechs(techs);
477    blockHtml += "</div>";
478    blockHtml += " </div>";
479  }
480
481  typeof algo !== "undefined" ?
482    (blockHtml +=
483      '<div class="panel panel-default">' +
484      '<div class="panel-heading"><strong>Underlying algorithm</strong></div>' +
485      '<div class="panel-body">' +
486      algo +
487      "</div>" +
488      " </div>") :
489    null;
490  typeof assump !== "undefined" ?
491    (blockHtml +=
492      '<div class="panel panel-default">' +
493      '<div class="panel-heading"><strong>Underlying assumption</strong></div>' +
494      '<div class="panel-body">' +
495      assump +
496      "</div>" +
497      " </div>") :
498    null;
499  typeof sandw !== "undefined" ?
500    (blockHtml +=
501      '<div class="panel panel-default">' +
502      '<div class="panel-heading"><strong>Strengths and weaknesses</strong></div>' +
503      '<div class="panel-body">' +
504      sandw +
505      "</div>" +
506      " </div>") :
507    null;
508  typeof perform !== "undefined" ?
509    (blockHtml +=
510      '<div class="panel panel-default">' +
511      '<div class="panel-heading"><strong>Overall performance</strong></div>' +
512      '<div class="panel-body">' +
513      perform +
514      "</div>" +
515      " </div>") :
516    null;
517
518  blockHtml += "</div>";
519
520  blockHtml += "</div>" + "</div>" + "</div>";
521
522  return blockHtml;
523}
524
525function linkCats(cats) {
526  var linked = [];
527
528  for (var i = 0; i < cats.length; i++) {
529    var cat = cats[i];
530
531    if (cat == "SNPAndVariantAnalysis") {
532      linked.push(
533        '<a href="tools.html?cat=' +
534        cat +
535        '">' +
536        "SNP And Variant Analysis" +
537        "</a>"
538      );
539    } else if (cat == "polyALengthEstimation") {
540      linked.push(
541        '<a href="tools.html?cat=' +
542        cat +
543        '">' +
544        "polyA Length Estimation" +
545        "</a>"
546      );
547    } else if (cat == "RNAStructure") {
548      linked.push(
549        '<a href="tools.html?cat=' +
550        cat +
551        '">' +
552        "RNA Structure" +
553        "</a>"
554      );
555    } else {
556      linked.push(
557        '<a href="tools.html?cat=' +
558        cat +
559        '">' +
560        cat.replace(/([a-z])([A-Z])/g, "$1 $2") +
561        "</a>"
562      );
563    }
564  }
565
566  return linked.join(", ");
567}
568
569function linkTechs(techs) {
570  var linked = [];
571
572  for (var i = 0; i < techs.length; i++) {
573    var tech = techs[i];
574
575    if (tech == "PacBio") {
576      linked.push('<a href="tools.html?techs=' + tech + '">' + tech + "</a>");
577    } else if (tech == "HiC") {
578      linked.push(
579        '<a href=""tools.html?techs=' + tech + '">' + "Hi-C" + "</a>"
580      );
581    } else if (tech == "BionanoGenomics") {
582      linked.push(
583        '<a href="tools.html?techs=' + tech + '">' + "Bionano Genomics" + "</a>"
584      );
585    } else if (tech == "tenxGenomics") {
586      linked.push(
587        '<a href="tools.html?techs=' + tech + '">' + "10X Genomics" + "</a>"
588      );
589    } else {
590      linked.push(
591        '<a href="tools.html?techs=' +
592        tech +
593        '">' +
594        tech.replace(/([a-z])([A-Z])/g, "$1 $2") +
595        "</a>"
596      );
597    }
598  }
599
600  return linked.join(", ");
601}
602
603function gearateOptionVals(data, type, callback) {
604  var options = [];
605  for (var i = 0; i < data.length; i++) {
606    if (type == "cat") {
607      var option = data[i]["Category"];
608      if (option == "SNPAndVariantAnalysis") {
609        options.push(
610          '<option value="' +
611          option +
612          '">' +
613          "SNP And Variant Analysis" +
614          "</option>"
615        );
616      } else if (option == "polyALengthEstimation") {
617        options.push(
618          '<option value="' +
619          option +
620          '">' +
621          "polyA Length Estimation" +
622          "</option>"
623        );
624      } else if (option == "RNAStructure") {
625        options.push(
626          '<option value="' +
627          option +
628          '">' +
629          "RNA Structure" +
630          "</option>"
631        );
632      } else {
633        options.push(
634          '<option value="' +
635          option +
636          '">' +
637          option.replace(/([a-z])([A-Z])/g, "$1 $2") +
638          "</option>"
639        );
640      }
641    }
642    if (type == "tec") {
643      var option = data[i]["Technology"];
644      if (option == "PacBio") {
645        options.push('<option value="' + option + '">' + option + '</option>');
646      } else if (option == "HiC") {
647        options.push('<option value="' + option + '">Hi-C</option>');
648      } else if (option == "BionanoGenomics") {
649        options.push('<option value="' + option + '">Bionano Genomics</option>');
650      } else if (option == "tenxGenomics") {
651        options.push('<option value="' + option + '">10X Genomics</option>');
652      } else {
653        options.push(
654          '<option value="' +
655          option +
656          '">' +
657          option.replace(/([a-z])([A-Z])/g, "$1 $2") +
658          "</option>"
659        );
660      }
661    }
662  }
663  callback(options.join(""));
664}
665
666// create cha list
667function genCharArray(charA, charZ) {
668  var a = [],
669    i = charA.charCodeAt(0),
670    j = charZ.charCodeAt(0);
671  for (; i <= j; ++i) {
672    a.push(String.fromCharCode(i));
673  }
674  return a;
675}
676
677function genCitationArry(data, callback) {
678  let withCitation = [];
679  let withOutCitation = [];
680  $.each(data, function (key, objt) {
681    if (typeof objt.Citations !== "undefined") {
682      withCitation.push(objt);
683    } else {
684      withOutCitation.push(objt);
685    }
686  });
687  callback(withCitation.concat(withOutCitation));
688}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.