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.