Mercurial > repos > saskia-hiltemann > ireport_devel
comparison createHTML.sh @ 6:e3cb63c2b7c1 draft
Uploaded
author | saskia-hiltemann |
---|---|
date | Mon, 16 Nov 2015 10:06:52 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
5:a89dd3328d2c | 6:e3cb63c2b7c1 |
---|---|
1 gbcount=0 | |
2 | |
3 ## | |
4 ## Create Cover Page | |
5 ## | |
6 #<a href=\"$zipireport\"> Click here to download a copy of this iReport </a> <br/><br/> | |
7 function makeIntroPage ( ){ | |
8 echo "Creating Intro Page" | |
9 title="$1" | |
10 coverimage=$2 | |
11 link=$3 | |
12 htmlout=$4 | |
13 zipireport=$5 | |
14 | |
15 echo -e "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\"> | |
16 <html> | |
17 <head> | |
18 </head> | |
19 <body> | |
20 <br/> | |
21 <br/> | |
22 <center> | |
23 <b><font size=\"15\"> iReport: ${title} </font></b><br/> | |
24 <br/> | |
25 <br/> | |
26 <a href=\"$link\"> Click image to view report </a> <br/><br/> | |
27 <a href=\"$link\"> <img src="$coverimage" width=\"50%\" alt=\"loading image..\"/> </a><br/><br/> | |
28 </center> | |
29 </body> | |
30 </html>" > $htmlout | |
31 | |
32 } | |
33 | |
34 ## | |
35 ## Decompress archive fiels | |
36 ## -> will detect archive formats: zip, tar, gzip, tar.gz, bzip2 | |
37 ## -> input: path to archive | |
38 ## -> files will be located in ${galaxypath}/archive_${fname}/ | |
39 ## | |
40 function decompressArchive (){ | |
41 archive=$1 | |
42 | |
43 fname=`basename ${archive}` | |
44 fname=${fname%.dat} | |
45 ftype=`file $archive` | |
46 | |
47 if [[ ! -d ${galaxypath}/archive_${fname}/ ]] | |
48 then | |
49 mkdir ${galaxypath}/archive_${fname}/ | |
50 | |
51 #echo "archive type: `file $archive`" | |
52 # decompress archive | |
53 if [[ $ftype == *Zip* ]] | |
54 then | |
55 #echo "detected zip file" | |
56 cp $archive ${galaxypath}/archive_${fname}/${fname}.zip | |
57 wd=`pwd` | |
58 cd ${galaxypath}/archive_${fname}/ | |
59 unzip -q ${fname}.zip | |
60 rm ${fname}.zip | |
61 cd $wd | |
62 fi | |
63 if [[ $ftype == *tar* ]] | |
64 then | |
65 cp $archive ${galaxypath}/archive_${fname}/${fname}.tar | |
66 wd=`pwd` | |
67 cd ${galaxypath}/archive_${fname}/ | |
68 tar xf ${fname}.tar | |
69 rm ${fname}.tar | |
70 cd $wd | |
71 fi | |
72 if [[ $ftype == *gzip* ]] | |
73 then | |
74 cp $archive ${galaxypath}/archive_${fname}/${fname}.gz | |
75 gunzip ${galaxypath}/archive_${fname}/${fname}.gz | |
76 #ls ${galaxypath}/archive_${fname}/ | |
77 | |
78 # check for tar.gz | |
79 ftype=`file ${galaxypath}/archive_${fname}/${fname}` | |
80 if [[ $ftype == *tar* ]] | |
81 then | |
82 # turns out it was tar.gz | |
83 rm -Rf ${galaxypath}/archive_${fname}/* | |
84 ls ${galaxypath}/archive_${fname}/ | |
85 cp $archive ${galaxypath}/archive_${fname}/${fname}.tar.gz | |
86 | |
87 wd=`pwd` | |
88 cd ${galaxypath}/archive_${fname}/ | |
89 tar xzf ${fname}.tar.gz | |
90 cd $wd | |
91 fi | |
92 wait | |
93 rm -f ${galaxypath}/archive_${fname}/*.tar | |
94 rm -f ${galaxypath}/archive_${fname}/*.tar.gz | |
95 fi | |
96 if [[ $ftype == *bzip2* ]] | |
97 then | |
98 cp $archive ${galaxypath}/archive_${fname}/${fname}.gz | |
99 gunzip2 ${galaxypath}/archive_${fname}/${fname}.gz | |
100 fi | |
101 fi | |
102 } | |
103 | |
104 ## | |
105 ## Create HTML content for the tabs specified by user | |
106 ## | |
107 function makeTabContent ( ){ | |
108 tab=$1 # name of current tab | |
109 itemslist=$2 # list of all items | |
110 tracklist=$3 # genome browser tracks info | |
111 contentline="" # HTML code for tab | |
112 imgcount=0 # keep track of the number of images on the current tab | |
113 iframename=`head -n 1 < /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1` | |
114 #iframename="test" | |
115 for item in $itemslist | |
116 do | |
117 ## Parse items lists | |
118 item=${item/::/:emptycol:} | |
119 declare -a myarr=(`echo $item |sed 's/:/ /g'`) | |
120 | |
121 ## Create the tab contents HTML code | |
122 if [ ${myarr[0]} == $tab ] | |
123 then | |
124 | |
125 ## | |
126 ## Text Field | |
127 ## | |
128 if [ ${myarr[1]} == "text" ] | |
129 then | |
130 text=${myarr[2]} | |
131 md=${myarr[4]} | |
132 | |
133 # if markdown, convert to html | |
134 if [ $md == "Y" ] | |
135 then | |
136 ## resubstitute sanitized charachters | |
137 text=${text//==space==/ } | |
138 text=${text//==colon==/:} | |
139 text=${text//==comma==/,} | |
140 | |
141 text=${text//==braceopen==/(} | |
142 text=${text//==braceclose==/)} | |
143 text=${text//==cbraceopen==/{} | |
144 text=${text//==cbraceclose==/}} | |
145 | |
146 text=${text//==slash==/\/} | |
147 text=${text//==lt==/<} | |
148 text=${text//==gt==/>} | |
149 text=${text//==apos==/\'} | |
150 text=${text//==quote==/\"} | |
151 text=${text//==backtick==/\`} | |
152 text=${text//==dollar==/$} | |
153 text=${text//==bar==/|} | |
154 text=${text//&&/&} | |
155 text=${text//\\n/\\n} | |
156 text=${text//\\t/\\t} | |
157 text=${text//\&r\&n/\\n} | |
158 text=${text//\&r/\\n} | |
159 text=${text//\&n/\\n} | |
160 text=${text//\&c/:} | |
161 | |
162 | |
163 ## convert markdown in textfield to html | |
164 echo -e "$text" > mytext.md | |
165 | |
166 if [ -z `type -p pandoc` ] | |
167 then | |
168 # pandoc missing | |
169 ${repositorypath}/Markdown/markdown2.py mytext.md > mytext.html | |
170 | |
171 else | |
172 # pandoc exists | |
173 pandoc -f markdown -o mytext.html mytext.md | |
174 pandoc -f markdown -o standalone.html -s mytext.md | |
175 | |
176 #get css generated by pandoc and add as scoped attribute (HTML5) | |
177 pandocstyle=`sed -n '/<style/,/style>/p' standalone.html` | |
178 fi | |
179 | |
180 markdowntext=$(cat mytext.html) | |
181 contentline="${contentline}\n<div class=\"markdown-body\">${pandocstyle} ${markdowntext}</div>\n" | |
182 | |
183 else # If not markdown, print verbatim (with exception of few html tags) | |
184 | |
185 ## allow some html formatting tags | |
186 text=${text//==lt==strong==gt==/<strong>} # search for strong tags | |
187 text=${text//==lt====slash==strong==gt==/<\/strong>} # search for strong tags | |
188 text=${text//==lt==em==gt==/<em>} # search for strong tags | |
189 text=${text//==lt====slash==em==gt==/<\/em>} # search for strong tags | |
190 | |
191 text=${text//==lt==b==gt==/<strong>} # search for strong tags | |
192 text=${text//==lt====slash==b==gt==/<\/strong>} # search for strong tags | |
193 text=${text//==lt==i==gt==/<em>} # search for strong tags | |
194 text=${text//==lt====slash==i==gt==/<\/em>} # search for strong tags | |
195 | |
196 text=${text//==lt==br==gt==/<br\/>} # search for strong tags | |
197 text=${text//==lt====br==slash==gt==/<br\/>} # search for strong tags | |
198 text=${text//==lt==h1==gt==/<h1>} # search for h1-h6 tags | |
199 text=${text//==lt==h2==gt==/<h2>} # search for h1-h6 tags | |
200 text=${text//==lt==h3==gt==/<h3>} # search for h1-h6 tags | |
201 text=${text//==lt==h4==gt==/<h4>} # search for h1-h6 tags | |
202 text=${text//==lt==h5==gt==/<h5>} # search for h1-h6 tags | |
203 text=${text//==lt==h6==gt==/<h6>} # search for h1-h6 tags | |
204 text=${text//==lt====slash==h1==gt==/<\/h1>} # search for h1-h6 closing tags | |
205 text=${text//==lt====slash==h2==gt==/<\/h2>} # search for h1-h6 closing tags | |
206 text=${text//==lt====slash==h3==gt==/<\/h3>} # search for h1-h6 closing tags | |
207 text=${text//==lt====slash==h4==gt==/<\/h4>} # search for h1-h6 closing tags | |
208 text=${text//==lt====slash==h5==gt==/<\/h5>} # search for h1-h6 closing tags | |
209 text=${text//==lt====slaxh==h6==gt==/<\/h6>} # search for h1-h6 closing tags | |
210 | |
211 ## display everything else verbatim | |
212 text=${text//==space==/ } | |
213 text=${text//==colon==/:} | |
214 text=${text//==comma==/,} | |
215 text=${text//==slash==/\/} | |
216 text=${text//==lt==/<} | |
217 text=${text//==gt==/>} | |
218 text=${text//==apos==/'} | |
219 text=${text//==quote==/"} | |
220 text=${text//&&/&} | |
221 text=${text//\\n/<br/>} | |
222 text=${text//\\t/ } | |
223 text=${text//\&r\&n/<br/>} | |
224 text=${text//\&r/<br/>} | |
225 text=${text//\&n/<br/>} | |
226 text=${text//\&c/:} | |
227 text=${text//==backtick==/`} | |
228 text=${text//==dollar==/$} | |
229 text=${text//==bar==/|} | |
230 text=${text//==braceopen==/(} | |
231 text=${text//==braceclose==/)} | |
232 text=${text//==cbraceopen==/{} | |
233 text=${text//==cbraceclose==/}} | |
234 contentline="${contentline}\n${text}\n" | |
235 fi | |
236 | |
237 | |
238 fi | |
239 | |
240 ## | |
241 ## Text File | |
242 ## | |
243 if [ ${myarr[1]} == "textfile" ] | |
244 then | |
245 tfile=${myarr[2]} | |
246 md=${myarr[4]} | |
247 fname=`basename ${tfile}` | |
248 fname=${fname%.*} | |
249 fname="${fname}.txt" | |
250 cp ${tfile} "${galaxypath}/${fname}" | |
251 | |
252 #estimate height for iframe based on number oflines in the file | |
253 numlines=`wc -l ${tfile} | cut -d" " -f1` | |
254 minheight=$[$numlines*17] | |
255 | |
256 # if markdown, convert to html | |
257 if [ $md == "Y" ] | |
258 then | |
259 | |
260 if [ -z `type -p pandoc` ] | |
261 then | |
262 # pandoc missing | |
263 ${repositorypath}/Markdown/markdown2.py ${tfile} > mytext.html | |
264 | |
265 else | |
266 # pandoc exists | |
267 pandoc -o mytext.html ${tfile} | |
268 pandoc -o standalone.html -s ${tfile} | |
269 | |
270 # get css generated by pandoc and add as scoped attribute (HTML5) | |
271 pandocstyle=`sed -n '/<style/,/style>/p' standalone.html` | |
272 | |
273 fi | |
274 | |
275 markdowntext=$(cat mytext.html) | |
276 contentline="${contentline}\n<div class=\"markdown-body\">${pandocstyle} ${markdowntext}</div>\n" | |
277 else | |
278 contentline="${contentline}\n<iframe class=\"invisibleframe\" src=\"${fname}\" width=\"100%\" height=\"$minheight\"> </iframe>\n" | |
279 fi | |
280 fi | |
281 | |
282 ## | |
283 ## Image | |
284 ## | |
285 if [ ${myarr[1]} == "image" ] | |
286 | |
287 then | |
288 imgcount=$[$imgcount+1] | |
289 #restore file suffix for html | |
290 ftype=`file ${myarr[2]}` | |
291 zoomlevel=${myarr[4]} | |
292 zoomenable=${myarr[5]} | |
293 align=${myarr[6]} | |
294 typestring="" | |
295 #####echo "zoomenable:${zoomenable}, align:${align}" | |
296 if [[ $ftype == *JPEG* ]] | |
297 then | |
298 suffix=".jpg" | |
299 fi | |
300 if [[ $ftype == *SVG* ]] | |
301 then | |
302 suffix=".svg" | |
303 fi | |
304 if [[ $ftype == *PNG* ]] | |
305 then | |
306 suffix=".png" | |
307 fi | |
308 if [[ $ftype == *TIFF* ]] | |
309 then | |
310 suffix=".tiff" | |
311 typestring="type=\"image/tiff\"" | |
312 fi | |
313 | |
314 image=`basename ${myarr[2]}` | |
315 image=${image%.dat} | |
316 image="${image}${suffix}" | |
317 cp ${myarr[2]} ${galaxypath}/${image} | |
318 | |
319 if [[ ${align} == "none" ]] | |
320 then | |
321 alignstring="" | |
322 alignstring2="" | |
323 else | |
324 alignstring="<div float=\"${align}\">" | |
325 alignstring2="</div>" | |
326 | |
327 alignstring="align=\"${align}\"" | |
328 alignstring2="" | |
329 fi | |
330 | |
331 | |
332 if [[ ${zoomlevel} -eq 0 ]] | |
333 then | |
334 widthstring="" | |
335 else | |
336 widthstring="width=\"${zoomlevel}\"" | |
337 fi | |
338 | |
339 if [[ ${zoomlevel} -eq 0 || ${zoomenable} == "N" ]] | |
340 then | |
341 contentline="${contentline}<span id=\"img${imgcount}\"> <img src=\"${image}\" ${alignstring} ${widthstring} alt=\"loading image..\"/></span>" | |
342 else | |
343 contentline="${contentline}<span class=\"zoomme\" id=\"img${imgcount}\"> <img src=\"${image}\" ${alignstring} ${widthstring} alt=\"loading image..\"/></span>" | |
344 fi | |
345 | |
346 fi | |
347 | |
348 ## | |
349 ## Table | |
350 ## | |
351 if [ ${myarr[1]} == "table" ] | |
352 then | |
353 | |
354 maxlines=50000 | |
355 tsvfile_orig=${myarr[2]} | |
356 tsvfile="tablehead.tsv" | |
357 fname=`basename ${tsvfile_orig}` | |
358 fname=${fname%.*} | |
359 fancy=${myarr[4]} | |
360 makelinks=${myarr[5]} | |
361 #iframeid="iframe$giframecount" | |
362 iframeid="iframe-$iframename" | |
363 | |
364 #echo "\nmakelinks: $makelinks fancy: $fancy <br>" | |
365 | |
366 #TODO client side database for large files. For now only display first section of file and add download link | |
367 numlines=`wc -l ${tsvfile_orig} |cut -d" " -f1` | |
368 | |
369 head -${maxlines} ${tsvfile_orig} > tsvtmpfile | |
370 | |
371 #remove any empty or header lines (lines starting with #, unless vcf file, then keep #CHROM line) | |
372 awk 'BEGIN{ | |
373 FS="\t" | |
374 OFS="\t" | |
375 }{ | |
376 if((index($0,"#")==1 && index($0,"#CHROM")!=1) || $0==""){ | |
377 headerlines++ | |
378 } | |
379 else print $0 | |
380 | |
381 }END{}' tsvtmpfile > ${tsvfile} | |
382 | |
383 if [[ $makelinks == "Y" ]] | |
384 then | |
385 col=${myarr[6]} | |
386 prefix=${myarr[7]} | |
387 suffix=${myarr[8]} | |
388 urlitems=${myarr[9]} | |
389 minw=${myarr[10]} | |
390 minh=${myarr[11]} | |
391 suffix=${suffix/emptycol/} | |
392 suffix=${suffix/==quote==/&} | |
393 prefix=${prefix/emptycol/} | |
394 prefix=${prefix/==quote==/&} | |
395 prefix=${prefix/==colon==/:} | |
396 | |
397 # unpack archive of files to link to if present | |
398 if [[ ${urlitems} != None ]] | |
399 then | |
400 oldfname=$fname | |
401 decompressArchive ${urlitems} | |
402 prefix=archive_${fname}/${prefix} | |
403 fname=$oldfname | |
404 fi | |
405 | |
406 | |
407 #edit the table to include links | |
408 awk 'BEGIN{ | |
409 FS="\t" | |
410 OFS="\t" | |
411 url="'"$prefix"'" | |
412 url2="'"$suffix"'" | |
413 iframeid="'"$iframeid"'" | |
414 prefix="<a href=\42" | |
415 suffix="\42 onclick=\42resizeIframe("iframeid")\42>" | |
416 col="'"$col"'" | |
417 end="</a>" | |
418 }{ | |
419 if(FNR==1) | |
420 print $0 | |
421 else{ | |
422 $col=prefix""url""$col""url2""suffix""$col""end | |
423 print $0 | |
424 } | |
425 }END{}' ${tsvfile} > ${tsvfile}2 | |
426 | |
427 else | |
428 minw=${myarr[6]} | |
429 minh=${myarr[7]} | |
430 cp ${tsvfile} ${tsvfile}2 | |
431 fi | |
432 | |
433 #iframecount=$[$iframecount+1] | |
434 | |
435 if [ $fancy == "Y" ] | |
436 then | |
437 perl ${repositorypath}/tsv2html.pl < ${tsvfile}2 > ${galaxypath}/htmltable_${fname}.html | |
438 contentline="${contentline}\n<iframe class=\"invisibleframe fancyiframe\" id=\"$iframeid\" src=\"htmltable_${fname}.html\" width=\"100%\" style=\"height: 350px; min-height: ${minh}px !important; overflow-y: hidden; overflow-x: scroll\" onClick=resizeIframe(\"$iframeid\")></iframe>" | |
439 | |
440 else | |
441 perl ${repositorypath}/tsv2html_simple.pl < ${tsvfile}2 > ${galaxypath}/htmltable_${fname}.html | |
442 contentline="${contentline}\n<iframe class=\"unfancyiframe invisibleframe\" id=\"$iframeid\" src=\"htmltable_${fname}.html\" scrolling=\"no\" style=\"min-width: ${minw}px; min-height: ${minh}px !important; max-width: 100%; vertical-align: top;\" onClick=resizeIframe(\"$iframeid\") ></iframe>" | |
443 | |
444 fi | |
445 | |
446 if [[ $numlines -gt ${maxlines} ]] | |
447 then | |
448 tablename=`basename ${tsvfile_orig}` | |
449 cp ${tsvfile_orig} ${galaxypath}/$tablename | |
450 contentline="${contentline}<br/>\nLarge tables will be supported soon. The first ${maxlines} lines are shown here, and you can download the full file <a href=\"${tablename}\">here</a>." | |
451 fi | |
452 fi | |
453 | |
454 ## | |
455 ## PDF | |
456 ## | |
457 if [[ ${myarr[1]} == "pdf" ]] | |
458 then | |
459 pdffile=${myarr[2]} | |
460 fname=`basename ${pdffile}` | |
461 fname=${fname%.dat} | |
462 pdfname="${fname}.pdf" | |
463 cp ${pdffile} "${galaxypath}/${pdfname}" | |
464 | |
465 width=1000 | |
466 height=800 | |
467 echo -e "<html><body><object data=\"${pdfname}\" type=\"application/pdf\" width=\"$width\" height=\"$height\"><embed src=\"${pdfname}\" type=\"application/pdf\" /><p>It appears you have no PDF plugin for your browser. No biggie... you can <a href=\"${pdfname}\">click here to download the PDF file.</a></p></object></body></html>" > "${galaxypath}/${fname}.html" | |
468 width=$[$width+10] | |
469 height=$[$height+10] | |
470 contentline="${contentline}\n<iframe src=\"${fname}.html\" width=\"${width}\" height=\"${height}\"></iframe>\n" | |
471 | |
472 fi | |
473 | |
474 ## | |
475 ## HTML | |
476 ## | |
477 if [[ ${myarr[1]} == "htmlfile" ]] | |
478 then | |
479 htmlfile=${myarr[2]} | |
480 height=${myarr[4]} | |
481 fname=`basename ${htmlfile}` | |
482 fname=${fname%.dat} | |
483 htmlname="${fname}.html" | |
484 cp ${htmlfile} "${galaxypath}/${htmlname}" | |
485 | |
486 apiid=${myarr[5]} | |
487 isireport=${myarr[6]} | |
488 localhost=${myarr[7]} | |
489 proxy=${myarr[8]} | |
490 localhost=${localhost//==colon==/:} | |
491 localhost=${localhost//==fslash==/\/} | |
492 if [[ ${isireport} == "Y" ]] | |
493 then | |
494 #cp ${localhost}/datasets/${apiid}/* "${galaxypath}/tst" | |
495 htmlname="/${proxy}/datasets/${apiid}/display/" | |
496 fi | |
497 | |
498 contentline="${contentline}\n<iframe class=\"invisibleframe\" src=\"${htmlname}\" width=\"100%\" height=\"${height}px\"></iframe>\n" | |
499 fi | |
500 | |
501 | |
502 if [[ ${myarr[1]} == "htmlpage" ]] | |
503 then | |
504 url=${myarr[2]} | |
505 url=${url//==colon==/:} | |
506 url=${url//==fslash==//} | |
507 height=${myarr[4]} | |
508 contentline="${contentline}\n<iframe class=\"invisibleframe\" src=\"${url}\" width=\"100%\" height=\"${height}px\"></iframe>\n" | |
509 fi | |
510 | |
511 ## | |
512 ## Web Link | |
513 ## | |
514 if [ ${myarr[1]} == "weblink" ] | |
515 then | |
516 url=${myarr[2]} | |
517 linktext=${myarr[4]} | |
518 | |
519 echo -n "$url" > tmpfileb64 | |
520 url=`base64 -d tmpfileb64` | |
521 | |
522 echo -n "$linktext" > tmpfileb64 | |
523 linktext=`base64 -d tmpfileb64` | |
524 | |
525 if [[ -z $linktext ]] | |
526 then | |
527 linktext=$url | |
528 fi | |
529 contentline="${contentline}<a href=\"${url}\" target=\"_blank\">${linktext}</a>" | |
530 fi | |
531 | |
532 | |
533 ## | |
534 ## Genome Browser | |
535 ## | |
536 if [ ${myarr[1]} == "genomebrowser" ] | |
537 then | |
538 | |
539 # parse inputs | |
540 | |
541 apiid=${myarr[4]} | |
542 servername=${myarr[5]} | |
543 buildver=${myarr[2]} | |
544 | |
545 | |
546 region=${myarr[6]} | |
547 | |
548 | |
549 echo -n "$region" > tmpfileb64 | |
550 region=`base64 -d tmpfileb64` | |
551 | |
552 | |
553 initialchrom=${region%:*} | |
554 initialrange=${region#*:} | |
555 | |
556 initialstart=${initialrange%-*} | |
557 initialend=${initialrange#*-} | |
558 | |
559 | |
560 #TODO | |
561 ftype="vcf" | |
562 | |
563 servername=${servername/==colon==/:} | |
564 | |
565 ## parse and prepare all tracks | |
566 gbcount=$[$gbcount+1] | |
567 gbfilelist=${tracklist} | |
568 userTracks="" | |
569 #IFS=',' read -a gbfilearray <<< ${gbfilelist} | |
570 gbfilearray=(${gbfilelist//,/ }) | |
571 for gbfile in "${gbfilearray[@]}" | |
572 do | |
573 # gbfile is in format "browsernum:file" | |
574 #IFS=':' read -a gbfileinfo <<< ${gbfile} | |
575 gbfileinfo=(${gbfile//:/ }) | |
576 if [[ ${gbfileinfo[0]} == $gbcount ]] | |
577 then | |
578 | |
579 ftype=${gbfileinfo[3]} | |
580 | |
581 gbfilename=${gbfileinfo[1]} | |
582 gbfilelabel=${gbfileinfo[2]} | |
583 gbfilelabel=${gbfilelabel//==space==/ } | |
584 gbfilelabel=${gbfilelabel//==bopen==/(} | |
585 gbfilelabel=${gbfilelabel//==bclose==/)} | |
586 fname=`basename ${gbfilename}` | |
587 fname=${fname%.dat} | |
588 | |
589 if [[ $ftype == "vcftabix" ]] | |
590 then | |
591 newgbfilename="${fname}.vcf" | |
592 | |
593 | |
594 cp ${gbfilename} "${galaxypath}/${newgbfilename}" | |
595 bgzip "${galaxypath}/${newgbfilename}" | |
596 tabix -f -p vcf "${galaxypath}/${newgbfilename}.gz" | |
597 | |
598 userTracks="${userTracks}, | |
599 {name: '${gbfilelabel}', | |
600 uri: '${servername}/datasets/${apiid}/display/${newgbfilename}.gz', | |
601 tier_type: 'tabix', | |
602 payload: 'vcf'} | |
603 " | |
604 fi | |
605 | |
606 if [[ $ftype == "vcfmemstore" ]] | |
607 then | |
608 newgbfilename="${fname}.vcf" | |
609 | |
610 | |
611 cp ${gbfilename} "${galaxypath}/${newgbfilename}" | |
612 #bgzip "${galaxypath}/${newgbfilename}" | |
613 #tabix -p vcf "${galaxypath}/${newgbfilename}.gz" | |
614 | |
615 userTracks="${userTracks}, | |
616 {name: '${gbfilelabel}', | |
617 uri: '${servername}/datasets/${apiid}/display/${newgbfilename}', | |
618 tier_type: 'memstore', | |
619 payload: 'vcf'} | |
620 " | |
621 fi | |
622 | |
623 if [[ $ftype == "bam" ]] | |
624 then | |
625 newgbfilename="${fname}.bam" | |
626 | |
627 # link to bam instead of copying | |
628 ln -s ${gbfilename} "${galaxypath}/${newgbfilename}" | |
629 samtools index "${galaxypath}/${newgbfilename}" | |
630 | |
631 userTracks="${userTracks}, | |
632 {name: '${gbfilelabel}', | |
633 bamURI: '${servername}/datasets/${apiid}/display/${newgbfilename}'} | |
634 " | |
635 | |
636 fi | |
637 | |
638 if [[ $ftype == "bigbed" ]] | |
639 then | |
640 newgbfilename="${fname}.bigbed" | |
641 | |
642 cp ${gbfilename} "${galaxypath}/${newgbfilename}" | |
643 #bgzip "${galaxypath}/${newgbfilename}" | |
644 #tabix -f -p bed "${galaxypath}/${newgbfilename}.gz" | |
645 | |
646 userTracks="${userTracks}, | |
647 {name: '${gbfilelabel}', | |
648 bwgURI: '${servername}/datasets/${apiid}/display/${newgbfilename}'} | |
649 " | |
650 | |
651 fi | |
652 | |
653 if [[ $ftype == "bedtabix" ]] | |
654 then | |
655 newgbfilename="${fname}.bed" | |
656 | |
657 cp ${gbfilename} "${galaxypath}/${newgbfilename}" | |
658 bgzip "${galaxypath}/${newgbfilename}" | |
659 tabix -f -p bed "${galaxypath}/${newgbfilename}.gz" | |
660 | |
661 userTracks="${userTracks}, | |
662 {name: '${gbfilelabel}', | |
663 uri: '${servername}/datasets/${apiid}/display/${newgbfilename}.gz', | |
664 tier_type: 'tabix', | |
665 payload: 'bed'} | |
666 " | |
667 | |
668 fi | |
669 | |
670 if [[ $ftype == "bedmemstore" ]] | |
671 then | |
672 newgbfilename="${fname}.bed" | |
673 | |
674 cp ${gbfilename} "${galaxypath}/${newgbfilename}" | |
675 #bgzip "${galaxypath}/${newgbfilename}" | |
676 #tabix -p bed "${galaxypath}/${newgbfilename}.gz" | |
677 | |
678 userTracks="${userTracks}, | |
679 {name: '${gbfilelabel}', | |
680 uri: '${servername}/datasets/${apiid}/display/${newgbfilename}', | |
681 tier_type: 'memstore', | |
682 payload: 'bed'} | |
683 " | |
684 | |
685 fi | |
686 fi | |
687 done | |
688 | |
689 | |
690 | |
691 if [ ${buildver} == "hg18" ] | |
692 then | |
693 coordSystem="coordSystem: { | |
694 speciesName: 'Human', | |
695 taxon: 9606, | |
696 auth: 'NCBI', | |
697 version: '36', | |
698 ucscName: 'hg18' | |
699 }," | |
700 | |
701 chains="chains: { | |
702 hg19ToHg18: new Chainset('https://www.biodalliance.org/das/hg19ToHg18/', 'GRCh37', 'NCBI36', | |
703 { | |
704 speciesName: 'Human', | |
705 taxon: 9606, | |
706 auth: 'GRCh', | |
707 version: 37 | |
708 }) | |
709 }," | |
710 | |
711 genesTrack="{name: 'Genes', | |
712 desc: 'Gene structures from Ensembl 54', | |
713 uri: 'https://www.biodalliance.org/das/hsa_54_36p/', | |
714 collapseSuperGroups: true, | |
715 provides_karyotype: true, | |
716 provides_search: true, | |
717 provides_entrypoints: true, | |
718 maxbins: false}, " | |
719 | |
720 repeatsTrack="{name: 'Repeats', | |
721 desc: 'Repeat annotation from Ensembl 59', | |
722 bwgURI: 'https://www.biodalliance.org/datasets/repeats.bb', | |
723 stylesheet_uri: 'https://www.biodalliance.org/stylesheets/bb-repeats.xml'}" | |
724 | |
725 | |
726 # default is hg19 | |
727 else | |
728 coordSystem="coordSystem: { | |
729 speciesName: 'Human', | |
730 taxon: 9606, | |
731 auth: 'NCBI', | |
732 version: '37', | |
733 ucscName: 'hg19' | |
734 }," | |
735 | |
736 chains="" | |
737 | |
738 genesTrack="{name: 'Genes', | |
739 desc: 'Gene structures from GENCODE 19', | |
740 bwgURI: 'https://www.biodalliance.org/datasets/gencode.bb', | |
741 stylesheet_uri: 'https://www.biodalliance.org/stylesheets/gencode.xml', | |
742 collapseSuperGroups: true, | |
743 trixURI: 'https://www.biodalliance.org/datasets/geneIndex.ix'}," | |
744 | |
745 repeatsTrack="{name: 'Repeats', | |
746 desc: 'Repeat annotation from Ensembl 59', | |
747 bwgURI: 'https://www.biodalliance.org/datasets/repeats.bb', | |
748 stylesheet_uri: 'https://www.biodalliance.org/stylesheets/bb-repeats.xml'}," | |
749 | |
750 fi | |
751 | |
752 contentline="${contentline} | |
753 <script language=\"javascript\" src=\"https://www.biodalliance.org/release-0.13/dalliance-compiled.js\"></script> | |
754 <script language=\"javascript\"> | |
755 new Browser({ | |
756 chr: '$initialchrom', | |
757 viewStart: $initialstart, | |
758 viewEnd: $initialend, | |
759 cookieKey: 'human', | |
760 pageName: 'svgHolder${gbcount}', | |
761 ${coordSystem} | |
762 | |
763 ${chains} | |
764 sources: [{name: 'Genome', | |
765 twoBitURI: 'https://www.biodalliance.org/datasets/${buildver}.2bit', | |
766 tier_type: 'sequence'}, | |
767 ${genesTrack}, | |
768 ${repeatsTrack}, | |
769 {name: 'Conservation', | |
770 desc: 'Conservation', | |
771 bwgURI: 'https://www.biodalliance.org/datasets/phastCons46way.bw', | |
772 noDownsample: true} | |
773 ${userTracks} | |
774 ], | |
775 | |
776 | |
777 | |
778 | |
779 browserLinks: { | |
780 Ensembl: 'http://www.ensembl.org/Homo_sapiens/Location/View?r=${chr}:${start}-${end}', | |
781 UCSC: 'http://genome.ucsc.edu/cgi-bin/hgTracks?db=${buildver}&position=chr${chr}:${start}-${end}', | |
782 Sequence: 'http://www.derkholm.net:8080/das/${buildver}comp/sequence?segment=${chr}:${start},${end}' | |
783 } | |
784 | |
785 }); | |
786 </script> | |
787 | |
788 <div id=\"svgHolder${gbcount}\"></div> | |
789 " | |
790 fi | |
791 | |
792 ## | |
793 ## Link to Dataset | |
794 ## | |
795 if [ ${myarr[1]} == "link" ] | |
796 then | |
797 linkfile=${myarr[2]} | |
798 apiid=${myarr[4]} | |
799 isireport=${myarr[5]} | |
800 linkfilename=`basename ${linkfile}` | |
801 linktext=${myarr[6]} | |
802 | |
803 localhost=${myarr[7]} | |
804 proxy=${myarr[8]} | |
805 localhost=${localhost//==colon==/:} | |
806 localhost=${localhost//==fslash==/\/} | |
807 | |
808 #check for some basic filetypes | |
809 ftype=`file $linkfile` | |
810 if [[ $ftype == *HTML* ]] | |
811 then | |
812 linkfilename=${linkfilename%.dat} | |
813 linkfilename=${linkfilename}.html | |
814 fi | |
815 if [[ $ftype == *PNG* ]] | |
816 then | |
817 linkfilename=${linkfilename%.dat} | |
818 linkfilename=${linkfilename}.png | |
819 fi | |
820 if [[ $ftype == *SVG* ]] | |
821 then | |
822 linkfilename=${linkfilename%.dat} | |
823 linkfilename=${linkfilename}.svg | |
824 fi | |
825 if [[ $ftype == *JPEG* ]] | |
826 then | |
827 linkfilename=${linkfilename%.dat} | |
828 linkfilename=${linkfilename}.jpg | |
829 fi | |
830 | |
831 | |
832 if [[ ${isireport} == "Y" ]] | |
833 then | |
834 linkfilename="/${proxy}/datasets/${apiid}/display/" | |
835 else | |
836 cp ${linkfile} "${galaxypath}/${linkfilename}" | |
837 fi | |
838 | |
839 contentline="${contentline}<a href=\"${linkfilename}\">${linktext}</a>" | |
840 fi | |
841 | |
842 ## | |
843 ## Links to Archive Contents | |
844 ## | |
845 if [[ ${myarr[1]} == "links" ]] | |
846 then | |
847 archive=${myarr[2]} | |
848 decompressArchive $archive | |
849 | |
850 # add links to webpage | |
851 # separate line for each folder, files within folder on same line | |
852 for linkfile in `ls ${galaxypath}/archive_${fname}/ |sort -V` | |
853 do | |
854 #echo "<br/> ->making link to file: $linkfile " | |
855 if [ -d ${galaxypath}/archive_${fname}/$linkfile ] # if directory, add break, and list all contained files, max level 1 deep | |
856 then | |
857 #echo "<br/> ->is directory, entering: $linkfile " | |
858 #ls ${galaxypath}/archive_${fname}/$linkfile | |
859 contentline="${contentline}" | |
860 for linkfile2 in `ls ${galaxypath}/archive_${fname}/$linkfile | sort -V` | |
861 do | |
862 #echo "<br/> ->making link to file: ${galaxypath}/archive_${fname}/$linkfile2" | |
863 if [ -f ${galaxypath}/archive_${fname}/$linkfile/$linkfile2 ] # if directory, add break, and list all contained files, max level 1 deep | |
864 then | |
865 #echo "<br/> ->is file, making link: $linkfile " | |
866 label=`basename $linkfile2` | |
867 label=${label%.*} | |
868 contentline="${contentline}<a class=\"mylinks\" href=\"archive_${fname}/${linkfile}/${linkfile2}\">${label}</a> \n " | |
869 fi | |
870 done | |
871 elif [ -f ${galaxypath}/archive_${fname}/$linkfile ] | |
872 then | |
873 label=`basename ${galaxypath}/archive_${fname}/$linkfile` | |
874 label=${label%.*} | |
875 contentline="${contentline}<a class=\"mylinks\" href=\"archive_${fname}/${linkfile}\">$label</a> \n" | |
876 fi | |
877 done | |
878 | |
879 | |
880 fi | |
881 | |
882 if [[ ${myarr[3]} == "Y" ]] | |
883 then | |
884 contentline="${contentline}<br/>\n" | |
885 fi | |
886 fi | |
887 done | |
888 | |
889 echo "${contentline}" | |
890 | |
891 | |
892 } | |
893 | |
894 ## | |
895 ## Create HTML content for iReport | |
896 ## | |
897 createMainPage (){ | |
898 #export IFRAMECNT=1 | |
899 page=$1 | |
900 tabtitles=$2 # comma-separated list of tab titles | |
901 tabitems=$3 # colon-sparated list of tabs specifications | |
902 #giframecount=1 # keep track of number of iFrames so that they can be referenced by ID | |
903 minwidth=$4 # width of page | |
904 gbtracks=$5 # genome browser track information | |
905 | |
906 echo "createMainPage: tabitems: $tabitems. tabtitles: $tabtitles. gbtracks: $gbtracks" | |
907 # create correct number of tabs | |
908 count=0 | |
909 | |
910 tabtitles=${tabtitles/,/} | |
911 tabtitles=${tabtitles//,/ } | |
912 echo $tabtitles | |
913 | |
914 tabcount=0 | |
915 for tabt in $tabtitles | |
916 do | |
917 echo -n $tabt > tmpfileb64 | |
918 thistabtitle=`base64 -d tmpfileb64` | |
919 newtabtitles+=" $thistabtitle" | |
920 tabcount=$[tabcount+1] | |
921 done | |
922 | |
923 echo $newtabtitles | |
924 | |
925 tabslist="<ul>\n" | |
926 mytabs="" | |
927 | |
928 for title in $newtabtitles | |
929 do | |
930 # Create list of tabs | |
931 count=$[count+1] | |
932 title2=${title//==space==/ } | |
933 title2=${title2//==dollar==/$} | |
934 title2=${title2//==colon==/} | |
935 tabslist="${tabslist} <li><a href=\"#tabs-${count}\">${title2}</a></li>\n" | |
936 | |
937 # Create tabs with content | |
938 tabcontent=$(makeTabContent $title "$tabitems" "$gbtracks") | |
939 mytabs="${mytabs}\n<div id=\"tabs-${count}\">\n" | |
940 mytabs="${mytabs}${tabcontent}" | |
941 mytabs="${mytabs}\n</div>\n" | |
942 done | |
943 tabslist="${tabslist}</ul>" | |
944 | |
945 ## Output the webpage | |
946 echo -e "<!doctype html> | |
947 <head> | |
948 <meta charset=\"utf-8\"> | |
949 <title>iReport</title> | |
950 <link rel=\"stylesheet\" href=\"jquery-ui.css\"> | |
951 <link rel=\"stylesheet\" href=\"ireport_css.css\"> | |
952 <link rel=\"stylesheet\" href=\"md.css\"> | |
953 <script type=\"text/javascript\" src=\"jquery-1.10.2.js\"></script> | |
954 <script type=\"text/javascript\" src=\"jquery-ui.js\"></script> | |
955 <script type=\"text/javascript\" src=\"iframe-resizer/src/iframeResizer.js\"></script> | |
956 <script type=\"text/javascript\" src=\"jquery.zoom.js\"></script> | |
957 <script type=\"text/javascript\" src=\"ireport_jquery.js\"></script> | |
958 <script type=\"text/javascript\" src=\"ireport_javascript.js\"></script> | |
959 </head> | |
960 <body> | |
961 <div id=\"tabs\" style=\"display:inline-block; min-height:100%; min-width:${minwidth}px\"> | |
962 $tabslist | |
963 | |
964 $mytabs | |
965 </div> | |
966 </body> | |
967 </html>" > $page | |
968 } |