Mercurial > repos > cpt > cpt_annotation_table
comparison phageqc_report_annotation_table.html @ 1:32e011fa615c draft
planemo upload commit edc74553919d09dcbe27fcadf144612c1ad3a2a2
| author | cpt |
|---|---|
| date | Wed, 26 Apr 2023 03:42:32 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:6a4d1bd8ac1d | 1:32e011fa615c |
|---|---|
| 1 <!DOCTYPE html> | |
| 2 <html lang="en"> | |
| 3 <head> | |
| 4 <meta charset="utf-8"> | |
| 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
| 6 <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| 7 <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> | |
| 8 <meta name="description" content=""> | |
| 9 <meta name="author" content=""> | |
| 10 <title>Annotation Table</title> | |
| 11 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> | |
| 12 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" crossorigin="anonymous"> | |
| 13 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" crossorigin="anonymous"> | |
| 14 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" crossorigin="anonymous"></script> | |
| 15 | |
| 16 <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.11/css/jquery.dataTables.css"> | |
| 17 <script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.11/js/jquery.dataTables.js"></script> | |
| 18 <style type="text/css"> | |
| 19 /* | |
| 20 * Base structure | |
| 21 */ | |
| 22 | |
| 23 /* Move down content because we have a fixed navbar that is 50px tall */ | |
| 24 body { | |
| 25 padding-top: 50px; | |
| 26 } | |
| 27 | |
| 28 h3:before { | |
| 29 display: block; | |
| 30 content: " "; | |
| 31 margin-top: -50px; | |
| 32 height: 50px; | |
| 33 visibility: hidden; | |
| 34 } | |
| 35 | |
| 36 /* | |
| 37 * Global add-ons | |
| 38 */ | |
| 39 | |
| 40 .sub-header { | |
| 41 padding-bottom: 10px; | |
| 42 border-bottom: 1px solid #eee; | |
| 43 } | |
| 44 | |
| 45 /* | |
| 46 * Top navigation | |
| 47 * Hide default border to remove 1px line. | |
| 48 */ | |
| 49 .navbar-fixed-top { | |
| 50 border: 0; | |
| 51 } | |
| 52 | |
| 53 /* | |
| 54 * Sidebar | |
| 55 */ | |
| 56 | |
| 57 /* Hide for mobile, show later */ | |
| 58 .sidebar { | |
| 59 display: none; | |
| 60 } | |
| 61 @media (min-width: 768px) { | |
| 62 .sidebar { | |
| 63 position: fixed; | |
| 64 top: 51px; | |
| 65 bottom: 0; | |
| 66 left: 0; | |
| 67 z-index: 1000; | |
| 68 display: block; | |
| 69 padding: 20px; | |
| 70 overflow-x: hidden; | |
| 71 overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */ | |
| 72 background-color: #f5f5f5; | |
| 73 border-right: 1px solid #eee; | |
| 74 } | |
| 75 } | |
| 76 | |
| 77 /* Sidebar navigation */ | |
| 78 .nav-sidebar { | |
| 79 margin-right: -21px; /* 20px padding + 1px border */ | |
| 80 margin-bottom: 20px; | |
| 81 margin-left: -20px; | |
| 82 } | |
| 83 .nav-sidebar > li > a { | |
| 84 padding-right: 20px; | |
| 85 padding-left: 20px; | |
| 86 } | |
| 87 .nav-sidebar > .active > a, | |
| 88 .nav-sidebar > .active > a:hover, | |
| 89 .nav-sidebar > .active > a:focus { | |
| 90 color: #fff; | |
| 91 background-color: #428bca; | |
| 92 } | |
| 93 | |
| 94 | |
| 95 /* | |
| 96 * Main content | |
| 97 */ | |
| 98 | |
| 99 .main { | |
| 100 padding: 20px; | |
| 101 } | |
| 102 @media (min-width: 768px) { | |
| 103 .main { | |
| 104 padding-right: 40px; | |
| 105 padding-left: 40px; | |
| 106 } | |
| 107 } | |
| 108 .main .page-header { | |
| 109 margin-top: 0; | |
| 110 } | |
| 111 | |
| 112 | |
| 113 /* | |
| 114 * Placeholder dashboard ideas | |
| 115 */ | |
| 116 | |
| 117 .placeholders { | |
| 118 margin-bottom: 30px; | |
| 119 text-align: center; | |
| 120 } | |
| 121 .placeholders h4 { | |
| 122 margin-bottom: 0; | |
| 123 } | |
| 124 .placeholder { | |
| 125 margin-bottom: 20px; | |
| 126 } | |
| 127 .placeholder img { | |
| 128 display: inline-block; | |
| 129 border-radius: 50%; | |
| 130 } | |
| 131 | |
| 132 td.moron { | |
| 133 font-size: 150%; | |
| 134 padding: 0px; | |
| 135 color: gray; | |
| 136 } | |
| 137 .strand_emph { | |
| 138 text-decoration: underline; | |
| 139 color: black; | |
| 140 } | |
| 141 | |
| 142 </style> | |
| 143 <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> | |
| 144 <!--[if lt IE 9]> | |
| 145 <script src="//oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> | |
| 146 <script src="//oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> | |
| 147 <![endif]--> | |
| 148 </head> | |
| 149 <body> | |
| 150 | |
| 151 <nav class="navbar navbar-inverse navbar-fixed-top"> | |
| 152 <div class="container-fluid"> | |
| 153 <div class="navbar-header"> | |
| 154 <a class="navbar-brand" href="#">Annotation Table</a> | |
| 155 </div> | |
| 156 </div> | |
| 157 </nav> | |
| 158 | |
| 159 <div class="container-fluid"> | |
| 160 <div class="row"> | |
| 161 <div class="col-md-12 main" id="main"> | |
| 162 <ul class="nav nav-tabs" role="tablist" id="myTabs"> | |
| 163 <li role="presentation" class="active"><a href="#overview" role="tab" data-toggle="tab">Overview</a></li> | |
| 164 {% for (record, data) in annotation_table_data %} | |
| 165 <li role="presentation"><a href="#{{ record.id }}" role="tab" data-toggle="tab">{{ record.id }}</a></li> | |
| 166 {% endfor %} | |
| 167 </ul> | |
| 168 | |
| 169 <!-- Tab panes --> | |
| 170 <div class="tab-content"> | |
| 171 <div role="tabpanel" class="tab-pane active" id="overview"> | |
| 172 Data on each organism will be accessible from the tabs above. | |
| 173 </div> | |
| 174 {% for (record, data) in annotation_table_data %} | |
| 175 <div role="tabpanel" class="tab-pane" id="{{ record.id }}"> | |
| 176 <table class="table table-striped" id="data"> | |
| 177 <thead> | |
| 178 <tr> | |
| 179 {% for col in annotation_table_col_names %} | |
| 180 <th>{{ col[0] }}</th> | |
| 181 {% endfor %} | |
| 182 </tr> | |
| 183 </thead> | |
| 184 <tbody> | |
| 185 {% for row in data %} | |
| 186 <tr> | |
| 187 {% for col in row %} | |
| 188 <td>{% if col is not string %}<ul>{% for val in col %}<li>{{ val }}</li>{% endfor %}</ul>{% else %}{{ col }}{% endif %}</td> | |
| 189 {% endfor %} | |
| 190 </tr> | |
| 191 {% endfor %} | |
| 192 </tbody> | |
| 193 </table> | |
| 194 </div> | |
| 195 {% endfor %} | |
| 196 </div> | |
| 197 </div> | |
| 198 </div> | |
| 199 </div> | |
| 200 | |
| 201 <script type="text/javascript"> | |
| 202 $(document).ready( function () { | |
| 203 | |
| 204 | |
| 205 | |
| 206 $('#myTabs a').click(function (e) { | |
| 207 e.preventDefault() | |
| 208 $(this).tab('show') | |
| 209 }) | |
| 210 | |
| 211 | |
| 212 | |
| 213 jQuery.fn.dataTable.ext.type.detect.unshift( function ( data ) { | |
| 214 if ( typeof data !== 'string' ) { | |
| 215 return null; | |
| 216 } | |
| 217 | |
| 218 var matches = data.match(/^(\d+)\.\.(\d+)/); | |
| 219 return matches ? 'genomic' : null; | |
| 220 } ); | |
| 221 | |
| 222 | |
| 223 | |
| 224 jQuery.extend( jQuery.fn.dataTableExt.oSort, { | |
| 225 "genomic-pre": function ( a ) { | |
| 226 var matches = a.match(/^(\d+)\.\.(\d+)/); | |
| 227 console.log(a + " " + matches[1]); | |
| 228 return parseInt(matches[1]); | |
| 229 }, | |
| 230 | |
| 231 "genomic-asc": function ( a, b ) { | |
| 232 return ((a < b) ? -1 : ((a > b) ? 1 : 0)); | |
| 233 }, | |
| 234 | |
| 235 "genomic-desc": function ( a, b ) { | |
| 236 return ((a < b) ? 1 : ((a > b) ? -1 : 0)); | |
| 237 } | |
| 238 } ); | |
| 239 | |
| 240 $('table').DataTable(); | |
| 241 }); | |
| 242 </script> | |
| 243 </body> | |
| 244 </html> |
