<!DOCTYPE html> <html> <style> hr { margin: auto 0; } body { color: #101010; background-color: #F9EDE1; } h1, h2, h3, h4 { font-family: 'Roboto Slab', serif; color: darkblue; } h1 { text-align: center; } p { color: #505050; font-style: italic; } .header { background-color: white; margin: 0 auto; padding: 20px; text-align: center; height: 150px; } .logo { float: right; } p, form, .about, .footer { font-family: 'Raleway', sans-serif; line-height: 1.5; } form h4 { text-transform: 'uppercase'; } .intro, form { padding: 20px; } .intro { background-color: lightgrey; margin: 0 auto; padding: 20px; } .about { background-color: lightgrey; margin: 0 auto; padding: 20px; } .footer { background-color: white; margin: 0 auto; } span.dropt {border-bottom: thin dotted; background: #ffeedd;} span.dropt:hover {text-decoration: none; background: #ffffff; z-index: 6; } .grid-container { display: grid; grid-template-columns: repeat(4, 1fr); grid-template-rows: auto; row-gap:5px; grid-template-areas: "a a b b" "a a c c" "a a d d" "e e e e" "f f f f"; grid-auto-flow: column; } .intro { grid-area: a; } .fasta-file-select { padding: 1em; grid-area: b; } .metadata { padding: 1em; grid-area: c; } .metadata_upload_form { padding: 1em; grid-area: c; } #metadata_upload_form_spot { grid-area: d; } #metadata_fill_form_spot { grid-area: e; } #metadata_fill_form { column-count: 4; margin-top: 0.5em; column-width: 250px; } .record { display: flex; flex-direction: column; border: solid 1px #808080; padding: 1em; background: #F8F8F8; margin-bottom: 1em; } .record label { font-size: small; margin-top: 10px; } .submit { grid-area: f; width: 17em; justify-self: center; } @media only screen and (max-device-width: 480px) { .grid-container { display: flex; flex-direction: column; } } </style> <head> <meta charset="UTF-8"> <link href="https://fonts.googleapis.com/css2?family=Raleway:wght@500&family=Roboto+Slab&display=swap" rel="stylesheet"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Web uploader for Public SARS-CoV-2 Sequence Resource</title> </head> <body> <section class="header"> <div class="logo"><a href="https://github.com/tylermorganwall/coronaobj/"><img src="static/image/coronasmallcomp.gif" width="150" /></a></div> <h1>Web uploader for Public SARS-CoV-2 Sequence Resource</h1> <small>Disabled until we got everything wired up</small> </section> <hr> <section> <form action="/submit" method="POST" enctype="multipart/form-data" id="main_form" class="grid-container"> <p class="intro"> Upload your SARS-CoV-2 sequence (FASTA or FASTQ formats) with metadata (JSONLD) to the <a href="https://workbench.lugli.arvadosapi.com/collections/lugli-4zz18-z513nlpqm03hpca">public sequence resource</a>. The upload will trigger a recompute with all available sequences into a Pangenome available for <a href="https://workbench.lugli.arvadosapi.com/collections/lugli-4zz18-z513nlpqm03hpca">download</a>! Your uploaded sequence will automatically be processed and incorporated into the public pangenome with metadata using worklows from the High Performance Open Biology Lab defined <a href="https://github.com/hpobio-lab/viral-analysis/tree/master/cwl/pangenome-generate">here</a>. All data is published under a <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons 4.0 attribution license</a> (CC-BY-4.0). You can take the published (GFA/RDF/FASTA) data and store it in a triple store for further processing. A free command line version of the uploader can be installed from <a href="https://github.com/arvados/bh20-seq-resource">source</a>. </p> <div class="fasta-file-select"> <label for="fasta">Select FASTA file of assembled genome (max 50K), or FASTQ of reads (<span class="dropt" title="For a larger fastq file you'll need to use a CLI uploader">max 150MB<span style="width:500px;"></span></span>) : </label> <br> <input type="file" id="fasta" name="fasta" accept=".fa,.fasta,.fna,.fq" required> <br> <small> Note that by uploading your data you automatically agree to a <a href="https://creativecommons.org/licenses/by/4.0/">CC-BY-4.0 license</a>. </small> </div> <div class="metadata"> <label>Select metadata submission method:</label> <br> <input type="radio" id="metadata_form" name="metadata_type" value="fill" onchange="setMode()" checked required> <label for="metadata_form">Fill in metadata manually</label> <input type="radio" id="metadata_upload" name="metadata_type" value="upload" onchange="setMode()" required> <label for="metadata_upload">Upload metadata file</label> <br> <small>Make sure the metadata has submitter attribution details.</small> <div id="metadata_upload_form_spot"> <div id="metadata_upload_form"> <br> <label for="metadata">Select JSON or YAML metadata file following <a href="https://github.com/arvados/bh20-seq-resource/blob/master/bh20sequploader/bh20seq-schema.yml" target="_blank">this schema</a> and <a href="https://github.com/arvados/bh20-seq-resource/blob/master/example/metadata.yaml" target="_blank">example</a> (max 50K):</label> <br> <input type="file" id="metadata" name="metadata" accept=".json,.yml,.yaml" required> <br> </div> </div> </div> <div id="metadata_fill_form_spot"> <div id="metadata_fill_form"> {{ record }} {% for record in fields %} {% if 'heading' in record %} {% if loop.index > 1 and 2 < 3 %} </div> {% endif %} <div class="record"> <h4>{{ record['heading'] }}</h4> {% else %} <label for="{{ record['id'] }}"> {{ record['label'] }} {{ "*" if record['required'] else "" }} {% if 'ref_url' in record %} <a href="{{ record['ref_url'] }}" title="More Info" target="_blank">?</a> {% endif %} </label> <input type="{{ record['type'] }}" id="{{ record['id'] }}" name="{{ record['id'] }}" {{ "required" if record['required'] else "" }}> {% endif %} {% if loop.index == loop.length %} </div> {% endif %} {% endfor %} </div> </div> <input class="submit" type="submit" value="Add to Pangenome" disabled> </form> </section> <hr> <br> <div class="about"> <h3>ABOUT</h3> <p> This a public repository created at the COVID-19 BioHackathon that has a low barrier to entry for uploading sequence data using best practices. I.e., data is published with a creative commons 4.0 (CC-4.0) license with metadata using state-of-the art standards and, perhaps most importantly, providing standardized workflows that get triggered on upload, so that results are immediately available in standardized data formats. The repository will be maintained and expanded for the duration of the pandemic. To contribute data simply upload it! To contribute code and/or workflows see the <a href="https://github.com/arvados/bh20-seq-resource">project repository</a>. For more information see the <a href="https://github.com/arvados/bh20-seq-resource/blob/master/paper/paper.md">paper</a> (WIP). </p> <br> </div> <hr> <div class="footer"> <a href="https://arvados.org/"><img src="static/image/arvados-logo.png" align="top"></a> <a href="https://www.commonwl.org/"><img src="static/image/CWL-Logo-Header.png" height="70"></a> <a href="https://github.com/virtual-biohackathons/covid-19-bh20"> <img src="static/image/covid19biohackathon.png" align="right" height="70"></a> <center> <small><a href="https://github.com/arvados/bh20-seq-resource">Source code</a> · Powered by <a href="https://www.commonwl.org/">Common Workflow Language</a> & <a href="https://arvados.org/">Arvados</a>; Made for <a href="https://github.com/virtual-biohackathons/covid-19-bh20">COVID-19-BH20</a> </small> </center> </div> <script type="text/javascript"> let uploadForm = document.getElementById('metadata_upload_form') let uploadFormSpot = document.getElementById('metadata_upload_form_spot') let fillForm = document.getElementById('metadata_fill_form') let fillFormSpot = document.getElementById('metadata_fill_form_spot') function setUploadMode() { // Make the upload form the one in use uploadFormSpot.appendChild(uploadForm) fillFormSpot.removeChild(fillForm) } function setFillMode() { // Make the fillable form the one in use uploadFormSpot.removeChild(uploadForm) fillFormSpot.appendChild(fillForm) } function setMode() { // Pick mode based on radio if (document.getElementById('metadata_upload').checked) { setUploadMode() } else { setFillMode() } } // Start in mode appropriate to selected form item setMode() </script> </body> </html>