[[BioOSM]]
 

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
project:bioosm:start [2018/06/07 22:02]
sumie-dh
project:bioosm:start [2018/08/28 01:04] (current)
sachy
Line 4: Line 4:
 name=Biologicke zbrane ve vasem okoli| name=Biologicke zbrane ve vasem okoli|
 image= bioosm:​bioosm.jpg?​400 | image= bioosm:​bioosm.jpg?​400 |
-founder=[[user:​sachy:start]]| +founder=[[user:​sachy]]| 
-interested=[[user:​sumie]]| +interested=[[user:​sumie-dh]]| 
-sw=CC|+sw=CC-BY-SA|
 hw=N/A| hw=N/A|
 status=active}} status=active}}
Line 15: Line 15:
  
 [[http://​brmlab.s0c4.net/​bioosm/​|BioOSM]] je mapa vyskytu mikroorganismu (ras, bakterii, plostenek, ...) a do budoucna i dalsich prirodnin (mineralu, ...). [[http://​brmlab.s0c4.net/​bioosm/​|BioOSM]] je mapa vyskytu mikroorganismu (ras, bakterii, plostenek, ...) a do budoucna i dalsich prirodnin (mineralu, ...).
 +
 +==== K cemu to je ====
 +
 +  *  interaktivni mapa vhodna k zobrazovani vetsiho mnozstvi fotek, brmlabi wiki, sluzby typu phtagr a soup se zdaly nevhodne k publikaci tohoto typu obsahu, wiki by byla prilis obludna, na beznych sdilecich obrazkovych sluzbach se neda nic pohodlne dohledavat a davat tam biologicky smysluplne a prehledne popisky
 +  *  monitoring zivocichu a rostlin podle zajmu prispevovatelu ​
 +  *  snadne klikaci katalogovani nalezu skrze Tellico nevyzadujici coding skills
 +  *  TODO - jednoduche selekce zajmoveho okruhu subjektu [napr. podle rodu, biotopu, datumu] na mape
 +  * procvicovani temne magie commandu grep, sed a regexpu
  
 ==== Jak to funguje ==== ==== Jak to funguje ====
Line 20: Line 28:
 Podklad jsou [[https://​openstreetmap.org|OSM]],​ ktere maji API [[http://​openlayers.org/​|OpenLayers]] jez umoznuje pridavat do mapy vlastni body, vrstvy... Podklad jsou [[https://​openstreetmap.org|OSM]],​ ktere maji API [[http://​openlayers.org/​|OpenLayers]] jez umoznuje pridavat do mapy vlastni body, vrstvy...
  
-Jednotliva pozorovani jsou v databazi [[http://​tellico-project.org/​|Tellico]]. Udelal jsem script parse_tellico.sh,​ ktery z .tc databaze (je to vlastne ZIP s XML uvnitr) vyparsuje jednotlive polozky a vygeneruje HTML soubor s mapou a podadresar "​det"​ s HTML strankami s detaily jednotlivych pozorovani.+Jednotliva pozorovani jsou v databazi [[http://​tellico-project.org/​|Tellico]]. Udelal jsem script parse_tellico.sh,​ ktery z .tc databaze (je to vlastne ZIP s XML uvnitr) vyparsuje jednotlive polozky a vygeneruje HTML soubor s mapou a podadresar "​det"​ s HTML strankami s detaily jednotlivych pozorovani. Vygeneruje se taky JSON s vyparsovanymi polozkami, ktery lze z webu projektu stahnout. 
 + 
 +Pro nadsence je vygenerovany taky prehled prispevku plainlog.htm serazeny dle data pridani do databaze.
  
 Obrazky v plnem rozliseni jsou v podadresari "​img",​ nahledy v "​simg"​. Videa jsou nahrana na YT a misto nahledu maji generickou ikonu. Obrazky v plnem rozliseni jsou v podadresari "​img",​ nahledy v "​simg"​. Videa jsou nahrana na YT a misto nahledu maji generickou ikonu.
  
-Pozorovani ktera se v mape zobrazi lze filtrovat dle prislusnosti k radu (bakterie, zvirata, rostliny,​...) ​pripadne cimkoli co lze grepnout z Tellico XML.+Pozorovani ktera se v mape zobrazi lze filtrovat dle prislusnosti k radu (bakterie, zvirata, rostliny,​...) ​az po prislusnost k jednotlivym druhum.
  
 === Tellico sample database === === Tellico sample database ===
Line 89: Line 99:
  
 ==== parse_tellico.sh ==== ==== parse_tellico.sh ====
-<code bash>+<code bash parse_tellico.sh>
 #!/bin/bash #!/bin/bash
 # Parse Tellico database to BioOSM index.htm # Parse Tellico database to BioOSM index.htm
Line 95: Line 105:
 # Print result to stdout # Print result to stdout
 # #
-# Generate minis in simg folder 
 # find ./ -type f -exec mogrify -verbose -layers Dispose -resize 128\>​x128\>​ -quality 100% {} + # find ./ -type f -exec mogrify -verbose -layers Dispose -resize 128\>​x128\>​ -quality 100% {} +
 # #
 +# // vectorLayer.removeFeatures(atol)
 +# // map.removeLayer(vectorLayer)
 # #
 # #
Line 107: Line 118:
 rm -rfv "​./​det/​*"​ rm -rfv "​./​det/​*"​
 mkdir -p "​./​det"​ mkdir -p "​./​det"​
-#cat "./index_head.htm"+ 
 +ICON_animalia="​animalia.png"​ 
 +ICON_bacteria="​bacteria.png"​ 
 +ICON_fungi="​fungi.png"​ 
 +ICON_chromista="​chromista.png"​ 
 +ICON_plantae="​plantae.svg"​ 
 +ICON_plostenkoid="​plostenkoid.png"​ 
 +ICON_protista="​protista.png"​ 
 +ICON_biohazard="​biohazard.svg"​ 
 + 
 +json=""​ 
 + 
 +Return icon by Regnum 
 +function geticon () { 
 + case "$1" in 
 + "​Animalia"​) 
 + echo "​$ICON_animalia";;​ 
 + "​Bacteria"​) 
 + echo "​$ICON_bacteria";;​ 
 + "​Fungi"​) 
 + echo "​$ICON_fungi";;​ 
 + "​Chromista"​) 
 + echo "​$ICON_chromista";;​ 
 + "​Plantae"​) 
 + echo "​$ICON_plantae";;​ 
 + "​Protista"​) 
 + echo "​$ICON_protista";;​ 
 + *) 
 + echo "​$ICON_biohazard";;​ 
 + esac 
 +
 + 
 +function safehtml () { 
 + echo "​$1"​ | sed -e "​s/'/​\&#​39;/​g"​ -e '​s/"/​\&#​34;/​g'​ -e '​s/</​\&​lt;/​g'​ -e '​s/>/​\&​gt;/​g'​ -e 's/^[ ]*//g' -e 's/[ ]*$//​g'​ 
 +
 + 
 +i=1 # GLOBAL increment must persist multiple spagety() calls; incremented to infinity 
 +# Core function generating entries matching selection criteria (ie Kingdom) 
 +# !!! BEZ ODSAZENI !!! 
 +# $1 = list of entries 
 +# $2 = layer name 
 +# $3 = icon of the points 
 +function spagety () { 
 + 
 + bylo=""​ # Minula pozice 
 + sam=""​ # HTML samostatneho zaznamu 
 + osam=""​ # predchozi $sam 
 + spoj=""​ # HTML had z popisu stejnych pozic 
 + ospoj=""​ # Predchozi $spoj 
 + ox=""​ # Old X 
 + oy=""​ # Old Y 
 + datelog=""​ # Entries sorted by date for plaintext log 
 + json="​var data='​{\"​version\":​\"​$(date --rfc-3339=seconds)\",​\"​arma\":​["​ 
 + 
 + while IFS=''​ read -r radek || [[ -n "​$radek"​ ]]; do 
 + co=$(echo "​$radek"​ | grep -oe ' <​title>​.*</title> ' | sed -E 's/( )*<​(\/​)?​title>​( )*//​g'​) 
 + co=$(safehtml "​$co"​) 
 + obr=$(echo "​$radek"​ | grep -oe ' <​image>​.*</​image>​ ' | sed -E 's/( )*<​(\/​)?​image>​( )*//g' | grep -oPe '​[^/​]*$'​) 
 + obr=$(safehtml "​$obr"​) 
 + kde=$(echo "​$radek"​ | grep -oe '<​locality>​.*</​locality>'​ | grep -oPe '​[0-9]{2}\.[0-9]{1,​10}[,​ ]*[0-9]{2}\.[0-9]{1,​10}'​) 
 + kde=$(safehtml "​$kde"​) 
 + kdex=$(echo "​$kde"​ | grep -oPe '​[0-9]{2}\.[0-9]{1,​10}$'​) 
 + kdex=$(safehtml "​$kdex"​) 
 + kdey=$(echo "​$kde"​ | grep -oPe '​^[0-9]{2}\.[0-9]{1,​10}'​) 
 + kdey=$(safehtml "​$kdey"​) 
 + kdy=$(echo "​$radek"​ | grep -oe ' <​taken-date>​.*</​taken-date>​ ' | sed -E 's/( )*<​(\/​)?​taken-date>​( )*//g' | sed -E '​s/​([0-9]+)\.([0-9]+)\.([0-9]{4})/​\3-\2-\1/​g'​ | sed -E '​s/​-([0-9])-/​-0\1-/​g'​ | sed -E '​s/​-([0-9])$/​-0\1/​g'​) 
 + kdy=$(safehtml "​$kdy"​) 
 + skop_typ=$(echo "​$radek"​ | grep -oe ' <​new-field-1>​.*</​new-field-1>​ ' | sed -E 's/( )*<​(\/​)?​new-field-1>​( )*//​g'​) 
 + skop_typ=$(safehtml "​$skop_typ"​) 
 + skop=$(echo "​$radek"​ | grep -oe ' <​microscope>​.*</​microscope>​ ' | sed -E 's/( )*<​(\/​)?​microscope>​( )*//​g'​) 
 + skop=$(safehtml "​$skop"​) 
 + imp=$(echo "​$radek"​ | grep -oe ' <​new-field-3>​.*</​new-field-3>​ ' | sed -E 's/( )*<​(\/​)?​new-field-3>​( )*//​g'​) 
 + imp=$(safehtml "​$imp"​) 
 + reg=$(echo "​$radek"​ | grep -oe ' <​new-field-4>​.*</​new-field-4>​ ' | sed -E 's/( )*<​(\/​)?​new-field-4>​( )*//​g'​) 
 + reg=$(safehtml "​$reg"​) 
 + phy=$(echo "​$radek"​ | grep -oe ' <​phylum>​.*</​phylum>​ ' | sed -E 's/( )*<​(\/​)?​phylum>​( )*//​g'​) 
 + phy=$(safehtml "​$phy"​) 
 + cla=$(echo "​$radek"​ | grep -oe ' <​class>​.*</​class>​ ' | sed -E 's/( )*<​(\/​)?​class>​( )*//​g'​) 
 + cla=$(safehtml "​$cla"​) 
 + ord=$(echo "​$radek"​ | grep -oe ' <​order>​.*</​order>​ ' | sed -E 's/( )*<​(\/​)?​order>​( )*//​g'​) 
 + ord=$(safehtml "​$ord"​) 
 + fam=$(echo "​$radek"​ | grep -oe ' <​family>​.*</​family>​ ' | sed -E 's/( )*<​(\/​)?​family>​( )*//​g'​) 
 + fam=$(safehtml "​$fam"​) 
 + gen=$(echo "​$radek"​ | grep -oe ' <​genus>​.*</​genus>​ ' | sed -E 's/( )*<​(\/​)?​genus( )*>//​g'​) 
 + gen=$(safehtml "​$gen"​) 
 + spe=$(echo "​$radek"​ | grep -oe ' <​species>​.*</​species>​ ' | sed -E 's/( )*<​(\/​)?​species>​( )*//​g'​) 
 + spe=$(safehtml "​$spe"​) 
 + loc=$(echo "​$radek"​ | grep -oe ' <​locality---plaintext>​.*</​locality---plaintext>​ ' | sed -E 's/( )*<​(\/​)?​locality---plaintext>​( )*//​g'​) 
 + loc=$(safehtml "​$loc"​) 
 + des=$(echo "​$radek"​ | grep -oe ' <​description>​.*</​description>​ ' | sed -E 's/( )*<​(\/​)?​description>​( )*//​g'​) 
 + des=$(safehtml "​$des"​) 
 + vid=$(echo "​$radek"​ | grep -oe ' <​videolink>​.*</​videolink>​ ' | sed -E 's/( )*<​(\/​)?​videolink>​( )*//​g'​) 
 + vid=$(safehtml "​$vid"​) 
 + bio=$(echo "​$radek"​ | grep -oe ' <​biotope>​.*</​biotope>​ ' | sed -E 's/( )*<​(\/​)?​biotope>​( )*//​g'​) 
 + bio=$(safehtml "​$bio"​) 
 + eng=$(echo "​$radek"​ | grep -oe ' <​enlargement>​.*</​enlargement>​ ' | sed -E 's/( )*<​(\/​)?​enlargement>​( )*//​g'​) 
 + eng=$(safehtml "​$eng"​) 
 + obs=$(echo "​$radek"​ | grep -oe ' <​observer>​.*</​observer>​ ' | sed -E 's/( )*<​(\/​)?​observer>​( )*//​g'​) 
 + obs=$(safehtml "​$obs"​) 
 + lnk=$(echo "​$radek"​ | grep -oe ' <​localitylink>​.*</​localitylink>​ ' | sed -E 's/( )*<​(\/​)?​localitylink>​( )*//​g'​) 
 + lnk=$(safehtml "​$lnk"​) 
 + detid=$(echo "​brmlab$co$obr$kde$kdy"​ | md5sum | grep -oe '​[a-zA-Z0-9]*'​) 
 + 
 + if [[ "​$kdex"​ = ""​ ]]; then 
 + >&​2 echo $(echo "​$radek"​ | grep -oe '<​locality>​.*</​locality>'​) " $co" 
 + continue;​ 
 + fi 
 + zkurvenetellico=$(echo "​$obr"​ | grep -oe '​\.[a-zA-Z]*$'​) 
 + if [[ "​$zkurvenetellico"​ = "​.jpeg"​ ]]; then 
 + >&​2 echo "$obr $co" 
 + continue;​ 
 + fi 
 + 
 + if [[ "​$spe"​ = "​sp."​ ]]; then 
 + wikisp="​https://​en.wikipedia.org/​wiki/​$gen"​ 
 + else 
 + wikisp="​https://​en.wikipedia.org/​wiki/​$gen $spe"​ 
 + fi 
 + 
 + json="​$json{"​ 
 + json="​$json \"​qualis\":​\"​$co\","​ 
 + json="​$json \"​imperium\":​\"​$imp\","​ 
 + json="​$json \"​regnum\":​\"​$reg\","​ 
 + json="​$json \"​phylum\":​\"​$phy\","​ 
 + json="​$json \"​classis\":​\"​$cla\","​ 
 + json="​$json \"​ordo\":​\"​$ord\","​ 
 + json="​$json \"​familia\":​\"​$fam\","​ 
 + json="​$json \"​genus\":​\"​$gen\","​ 
 + json="​$json \"​specie\":​\"​$spe\","​ 
 + json="​$json \"​locus\":​\"​$kde\","​ 
 + json="​$json \"​x\":​\"​$kdex\","​ 
 + json="​$json \"​y\":​\"​$kdey\","​ 
 + json="​$json \"​locplain\":​\"​$loc\","​ 
 + json="​$json \"​depictio\":​\"​$des\","​ 
 + json="​$json \"​quando\":​\"​$kdy\","​ 
 + json="​$json \"​obr\":​\"​$obr\","​ 
 + json="​$json \"​micro\":​\"​$skop\","​ 
 + json="​$json \"​microtyp\":​\"​$skop_typ\","​ 
 + json="​$json \"​vid\":​\"​$vid\","​ 
 + json="​$json \"​bio\":​\"​$bio\","​ 
 + json="​$json \"​amp\":​\"​$eng\","​ 
 + json="​$json \"​spec\":​\"​$obs\","​ 
 + json="​$json \"​detid\":​\"​$detid\","​ 
 + json="​$json \"​lnk\":​\"​$lnk\""​ # Lastone without ','​ 
 + json="​$json }," 
 + 
 + 
 + # Generate detail page 
 + detid=$(echo "​brmlab$co$obr$kde$kdy"​ | md5sum | grep -oe '​[a-zA-Z0-9]*'​) 
 + detpg="<​html><​head>"​ 
 + detpg="​$detpg<​meta http-equiv='​Content-Type'​ content='​text/​html;​ charset=utf-8'>"​ 
 + detpg="​$detpg<​link rel='​stylesheet'​ href='​../​style.css'​ type='​text/​css'>"​ 
 + detpg="​$detpg<​title>​Brmlab - BioOSM $co $kde</​title>"​ 
 + detpg="​$detpg</​head><​body>"​ 
 + detpg="​$detpg<​table class='​dettbl'><​tr>"​ 
 + detpg="​$detpg<​td><​h1>​$co (<a href='​$wikisp'​ target='​_blank'>​wiki</​a>​)</​h1>"​ 
 + if [[ "​$imp"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Imperium:</​b>​ <a href='​https://​en.wikipedia.org/​wiki/​$imp'​ target='​_blank'>​$imp</​a><​br>"​ 
 + fi 
 + if [[ "​$reg"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Regnum:</​b>​ <a href='​https://​en.wikipedia.org/​wiki/​$reg'​ target='​_blank'>​$reg</​a><​br>"​ 
 + fi 
 + if [[ "​$phy"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Phylum:</​b>​ <a href='​https://​en.wikipedia.org/​wiki/​$phy'​ target='​_blank'>​$phy</​a><​br>"​ 
 + fi 
 + if [[ "​$cla"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Classis:</​b>​ <a href='​https://​en.wikipedia.org/​wiki/​$cla'​ target='​_blank'>​$cla</​a><​br>"​ 
 + fi 
 + if [[ "​$ord"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Ordo:</​b>​ <a href='​https://​en.wikipedia.org/​wiki/​$ord'​ target='​_blank'>​$ord</​a><​br>"​ 
 + fi 
 + if [[ "​$fam"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Familia:</​b>​ <a href='​https://​en.wikipedia.org/​wiki/​$fam'​ target='​_blank'>​$fam</​a><​br>"​ 
 + fi 
 + if [[ "​$gen"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Genus:</​b>​ <a href='​https://​en.wikipedia.org/​wiki/​$gen'​ target='​_blank'>​$gen</​a><​br>"​ 
 + fi 
 + if [[ "​$spe"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Specie:</​b>​ <a href='​$wikisp'​ target='​_blank'>​$spe</​a><​br>"​ 
 + fi 
 + detpg="​$detpg<​br>"​ 
 + if [[ "​$kdy"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Quando:</​b>​ $kdy<​br>"​ 
 + fi 
 + if [[ "​$lnk"​ != ""​ ]]; then 
 + loc="<​a href=\"​$lnk\"​ target=\"​_blank\">​$loc</​a>"​ # Yes, escaped " 
 + fi 
 + detpg="​$detpg<​b>​Locus:</​b>​ $kde ($loc)<​br>"​ 
 + if [[ "​$obs"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Spectator:</​b>​ $obs<​br>"​ 
 + fi 
 + if [[ "​$bio"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Biotope:</​b>​ $bio<​br>"​ 
 + fi 
 + detpg="​$detpg<​br>"​ 
 + if [[ "​$skop"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Microscopium:</​b>​ $skop ($skop_typ)<​br>"​ 
 + fi 
 + if [[ "​$eng"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Amplificatio:</​b>​ $eng<​br>"​ 
 + fi 
 + detpg="​$detpg<​br>"​ 
 + if [[ "​$des"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Depictio:</​b>​ $des<​br>"​ 
 + fi 
 + if [[ "​$vid"​ != ""​ ]]; then 
 + detpg="​$detpg<​b>​Video:</​b>​ <a href=\"​$vid\"​ target=\"​_blank\">​$vid</​a><​br>"​ 
 + fi 
 + detpg="​$detpg</​td><​td style='​min-width:​66%'>"​ 
 + if [[ "​$obr"​ != ""​ ]]; then 
 + detpg="​$detpg<​a href=\"​../​img/​$obr\"><​img src=\"​../​img/​$obr\"​ alt=\"​$co\"​ class='​detimg'></​a>"​ 
 + else 
 + if [[ "​$vid"​ != ""​ ]]; then 
 + detyt=$(echo "​$vid"​ | sed -e '​s/​youtube.com\/​watch?​v=/​youtube.com\/​embed\//​g'​) 
 + detpg="​$detpg<​iframe class='​detvid'​ src='​$detyt'​ frameborder='​0'​ allow='​encrypted-media'​ allowfullscreen></​iframe>"​ 
 + else 
 + detpg="​$detpg<​img src=\"​../​$3\"​ alt=\"​video\"​ class='​detimg'>"​ 
 + fi 
 + fi 
 + detpg="​$detpg</​td></​tr></​table>"​ 
 + detpg="​$detpg</​body></​html>"​ 
 + echo "​$detpg"​ > "​./​det/​$detid.htm" 
 + 
 + # Plain log of entries 
 + datelog="​$datelog $kdy $kde <a href='​./​det/​$detid.htm'​ target='​_blank'>​$co</​a><​br>​\n"​ 
 + 
 + >&​2 echo "$co $obs"​ 
 + 
 + ox="​$kdex"​ 
 + oy="​$kdey"​ 
 + 
 + i=$(($i+1)) 
 + 
 + done <<<​ $(echo "​$1"​) # Zere parametr spaget, nikoli $1 scriptu !!! 
 + echo "​$json{}]}"​ | sed -e "​s/​^var data='//​g"​ > "​./​bioosm.json"​ 
 + echo "​$json{}]}'"​ 
 + 
 +} # KONEC FCE SPAGETY 
 + 
  
 # Parse Tellico file to list of entries # Parse Tellico file to list of entries
Line 114: Line 364:
 # Sorted unique Kingdoms (to be passed as selection criteria) # Sorted unique Kingdoms (to be passed as selection criteria)
 kingdoms=$(echo "​$praseTC"​ | grep -oe ' <​new-field-4>​.*</​new-field-4>​ ' | sed -E 's/( )*<​(\/​)?​new-field-4>​( )*//g' | sort | uniq) kingdoms=$(echo "​$praseTC"​ | grep -oe ' <​new-field-4>​.*</​new-field-4>​ ' | sed -E 's/( )*<​(\/​)?​new-field-4>​( )*//g' | sort | uniq)
- 
  
 echo '<​!DOCTYPE html>'​ echo '<​!DOCTYPE html>'​
Line 120: Line 369:
 echo '<​head>'​ echo '<​head>'​
 echo '​ <​meta http-equiv="​Content-Type"​ content="​text/​html;​ charset=utf-8">'​ echo '​ <​meta http-equiv="​Content-Type"​ content="​text/​html;​ charset=utf-8">'​
-echo '​ <​title>​BioOSM</​title>'​+echo '​ <​title>​brmlab - BioOSM</​title>'​
 echo '​ <​link rel="​stylesheet"​ href="​./​style.css"​ type="​text/​css">'​ echo '​ <​link rel="​stylesheet"​ href="​./​style.css"​ type="​text/​css">'​
 +echo '​ <​link rel="​favicon"​ href="​./'​$ICON_biohazard'">'​
 echo '​ <​script src="​./​OpenLayers.js"></​script>'​ echo '​ <​script src="​./​OpenLayers.js"></​script>'​
 echo '</​head>'​ echo '</​head>'​
 +echo '<​body>'​
 +# Generate select
 +echo "<​div id='​plainlog'><​b><​a href='​./​plainlog.htm'>​Plaintext log</​a></​b></​div>"​
 +echo "<​h1 id='​title'>​BioOSM - arma biologica in tuis vicinia</​h1>"​
 +ksel="<​select id='​reg'​ onChange='​genphy()'>"​
 +ksel="​$ksel<​option value='​ALL'​ selected>​ALL</​option>"​
 +while IFS=''​ read -r king || [[ -n "​$king"​ ]]; do
 + ksel="​$ksel<​option value='"​$king"'>​$king</​option>"​
 +done <<<​ $(echo "​$kingdoms"​)
 +ksel="​$ksel</​select>"​
 +echo "​Regnum:​ $ksel "
  
-echo "<body>"​ +echo "Phylum: ​<select id='​phy'​ onChange='​gencla()'><​option>​ALL</​option></​select> " 
- echo "<h1 id='title'>BioOSM - armis biologica in tuis vicinia</h1>"​ +echo "Classis: ​<select ​id='cla' onChange='​genord()'><​option>​ALL</option></​select> " 
- +echo "Ordo: <select id='ord' onChange='​genfam()'><​option>​ALL</​option></​select> " 
- # Generate select +echo "Familia: ​<select id='fam' ​onChange='​gengen()'><​option>​ALL</​option></​select> " 
- ksel="<​select id='kin' onChange='​kinchange()'>"​ +echo "​Genus:​ <select id='gen' ​onChange='genspe()'><​option>​ALL</option></​select>"​ 
- ksel="$ksel<option value='ALL' ​selected>​ALL</​option>"​ +echo "Specie: <select id='​spe'​ onChange='​armageddon()'><​option>​ALL</​option>​</​select>"​ 
- while IFS='' ​read -r king || [[ -n "​$king"​ ]]; do +echo "<​br><​input type='​button'​ value='​Platyhelminthes'​ onClick='​plostenkoidy()'>​
- ksel="​$ksel<​option value='"​$king"​'>$king</​option>"​ +#echo "<​input type='​button'​ value='​Bugs' onClick='​buggy()'>​
- done <<<​ $(echo "$kingdoms"​) +echo "<​br><​br><​div id='​map'​ class='​smallmap'></​div>"​ 
- ksel="$ksel</​select>"​ +echo "<​br><​p>​Welcome! You can download the <a href='​./​bioosm.json'​ target='​_blank'>​source data as JSON file</​a><​br>"​ 
- echo "Regnum: $ksel | +echo "This site is owned by members of the <a href='​https://​brmlab.cz'​ target='​_blank'>​hackerspace brmlab</​a>​. See our wiki page for <a href='​https://​brmlab.cz/​project/​bioosm/​start'​ target='​_blank'>​details and contact info</​a><​br>​License:​ CC-BY-SA</​p>"
- echo "<​input type='​button'​ value='​Plostenkoidy' onClick='​plostenkoid()'><​br><​br>​+
- +
-  echo "<div id='​map'​ class='​smallmap'></​div>"​+
 echo "</​body>"​ echo "</​body>"​
  
-echo '<​script>​+echo "<​script>​"
 echo 'map = new OpenLayers.Map("​map"​);'​ echo 'map = new OpenLayers.Map("​map"​);'​
 echo '​map.addLayer(new OpenLayers.Layer.OSM());'​ echo '​map.addLayer(new OpenLayers.Layer.OSM());'​
Line 158: Line 415:
 echo ' new OpenLayers.Geometry.Point(14.41876,​ 50.10554).transform(epsg4326,​ projectTo),'​ echo ' new OpenLayers.Geometry.Point(14.41876,​ 50.10554).transform(epsg4326,​ projectTo),'​
 echo '​ {description:"​Atomovy atol Brmkini"​} ,' echo '​ {description:"​Atomovy atol Brmkini"​} ,'
-echo '​ {externalGraphic:​ "​./​biohazard.svg",​ graphicHeight:​24, graphicWidth:​24, graphicXOffset:​-12, graphicYOffset:​-12},'+echo '​ {externalGraphic:​ "​./​biohazard.svg",​ graphicHeight:​8, graphicWidth:​8, graphicXOffset:​-4, graphicYOffset:​-4},'
 echo '​);'​ echo '​);'​
 echo '​vectorLayer.addFeatures(atol);'​ echo '​vectorLayer.addFeatures(atol);'​
Line 164: Line 421:
 echo "​map.addLayer(vectorLayer);"​ echo "​map.addLayer(vectorLayer);"​
  
 +spagety "​$praseTC"​ "​ALL"​ "​$ICON_biohazard"​
  
 +echo '</​script>'​
 +echo '<​script src="​./​bioosm.js"></​script>'​ # Must be after JSON
 +echo "</​html>"​
  
-i=1 GLOBAL increment must persist multiple spagety() calls; incremented to infinity +Create plaintext log 
-# Core function generating entries matching selection criteria (ie Kingdom) +dateloghtm="<​html><​head>"​ 
-# !!! BEZ ODSAZENI !!! +dateloghtm="​$dateloghtm<​meta http-equiv='​Content-Type'​ content='​text/​html;​ charset=utf-8'>"​ 
-$list of entries +dateloghtm="​$dateloghtm<​link rel='​stylesheet'​ href='​./​style.css'​ type='​text/​css'>"​ 
-$layer name +dateloghtm="​$dateloghtm<​title>​Brmlab - BioOSM plaintext log</​title>"​ 
-$icon of the points +dateloghtm="​$dateloghtm</​head><​body>"​ 
-function spagety ​() {+datelogsort=$(echo -e "​$datelog"​ | sort -r | uniq) 
 +dateloghtm="​$dateloghtm $datelogsort"​ 
 +dateloghtm="​$dateloghtm</​body></​html>"​ 
 +echo "​$dateloghtm"​ > "​./​plainlog.htm"​ 
 +</​code>​
  
-bylo=""​ # Minula pozice +==== bioosm.js ====
-sam=""​ # HTML samostatneho zaznamu +
-osam=""​ # predchozi $sam +
-spoj=""​ # HTML had z popisu stejnych pozic +
-ospoj=""​ # Predchozi $spoj +
-ox=""​ # Old X +
-oy=""​ # Old Y+
  
-while IFS=''​ read -r radek || [[ -n "​$radek"​ ]]; do+<code javascript bioosm.js>​ 
 +var blob=JSON.parse(data) 
 +var arma=blob.arma
  
- co=$(echo "​$radek"​ | grep -oe ' <​title>​.*</​title>​ ' | sed -E 's/( )*<​(\/​)?​title>​( )*//​g'​) +var vectorLayerDynamic ​new OpenLayers.Layer.Vector('Overlay',{attribution:​'<a href="http://brmlab.cz">Brmlab</a>'}); 
- obr=$(echo "​$radek"​ | grep -oe ' <​image>​.*</​image>​ ' | sed -E 's/)*<​(\/​)?​image>​( )*//g' ​| grep -oPe '[^/​]*$'​) +map.addLayer(vectorLayerDynamic);
- kde=$(echo "​$radek"​ | grep -oe '<​locality>​.*</​locality>'​ | grep -oPe '​[0-9]{2}\.[0-9]{1,10}[, ]*[0-9]{2}\.[0-9]{1,​10}'​) +
- kdex=$(echo "​$kde"​ | grep -oPe '​[0-9]{2}\.[0-9]{1,​10}$'​) +
- kdey=$(echo "​$kde"​ | grep -oPe '​^[0-9]{2}\.[0-9]{1,​10}'​) +
- kdy=$(echo "​$radek"​ | grep -oe ' <taken-date>​.*</​taken-date>​ ' | sed -E 's/( )*<​(\/​)?​taken-date>​( )*//​g'​) +
- skop_typ=$(echo ​"$radek"​ | grep -oe ' <​new-field-1>​.*<​/new-field-1>​ ' | sed -E 's/( )*<​(\/​)?​new-field-1>​( )*//​g'​) +
- skop=$(echo "​$radek"​ | grep -oe ' <​microscope>​.*</​microscope>​ ' | sed -E 's/( )*<​(\/​)?​microscope>​( )*//​g'​) +
- imp=$(echo ​"$radek"​ | grep -oe ' <​new-field-3>.*</new-field-3> ' ​| sed -E 's/( )*<​(\/​)?​new-field-3>​( )*//g'+
- reg=$(echo "​$radek"​ | grep -oe ' <​new-field-4>​.*</​new-field-4>​ ' | sed -E 's/( )*<​(\/​)?​new-field-4>​( )*//​g'​) +
- phy=$(echo "​$radek"​ | grep -oe ' <​phylum>​.*</​phylum>​ ' | sed -E 's/( )*<​(\/​)?​phylum>​( )*//​g'​) +
- cla=$(echo "​$radek"​ | grep -oe ' <​class>​.*</​class>​ ' | sed -E 's/( )*<​(\/​)?​class>​( )*//​g'​) +
- ord=$(echo "​$radek"​ | grep -oe ' <​order>​.*</​order>​ ' | sed -E 's/( )*<​(\/​)?​order>​( )*//​g'​) +
- fam=$(echo "​$radek"​ | grep -oe ' <​family>​.*</​family>​ ' | sed -E 's/( )*<​(\/​)?​family>​( )*//​g'​) +
- gen=$(echo "​$radek"​ | grep -oe ' <​genus>​.*</​genus>​ ' | sed -E 's/( )*<​(\/​)?​genus( )*>//​g'​) +
- spe=$(echo "​$radek"​ | grep -oe ' <​species>​.*</​species>​ ' | sed -E 's/( )*<​(\/​)?​species>​( )*//​g'​) +
- loc=$(echo "​$radek"​ | grep -oe ' <​locality---plaintext>​.*</​locality---plaintext>​ ' | sed -E 's/( )*<​(\/​)?​locality---plaintext>​( )*//​g'​) +
- des=$(echo "​$radek"​ | grep -oe ' <​description>​.*</​description>​ ' | sed -E 's/( )*<​(\/​)?​description>​( )*//​g'​) +
- vid=$(echo "​$radek"​ | grep -oe ' <​videolink>​.*</​videolink>​ ' | sed -E 's/( )*<​(\/​)?​videolink>​( )*//​g'​) +
- bio=$(echo "​$radek"​ | grep -oe ' <​biotope>​.*</​biotope>​ ' | sed -E 's/( )*<​(\/​)?​biotope>​( )*//​g'​) +
- eng=$(echo "​$radek"​ | grep -oe ' <​enlargement>​.*</​enlargement>​ ' | sed -E 's/( )*<​(\/​)?​enlargement>​( )*//​g'​) +
- obs=$(echo "​$radek"​ | grep -oe ' <​observer>​.*</​observer>​ ' | sed -E 's/( )*<​(\/​)?​observer>​( )*//​g'​)+
  
 +var regsel=document.getElementById("​reg"​)
 +var physel=document.getElementById("​phy"​)
 +var clasel=document.getElementById("​cla"​)
 +var ordsel=document.getElementById("​ord"​)
 +var famsel=document.getElementById("​fam"​)
 +var gensel=document.getElementById("​gen"​)
 +var spesel=document.getElementById("​spe"​)
  
- if [[ "$kdex" = "" ​]]; then +var ICON_animalia="animalia.png" 
- >&2 echo $(echo "​$radek" ​| grep -oe '<​locality>​.*</​locality>'​) " $co+var ICON_bacteria="bacteria.png
- continue;​ +var ICON_fungi="fungi.png
- fi +var ICON_chromista="chromista.png" 
- zkurvenetellico=$(echo ​"$obr" | grep -oe '\.[a-zA-Z]*$'​) +var ICON_plantae="plantae.svg" 
- if [[ "$zkurvenetellico" = ".jpeg" ​]]; then +var ICON_plostenkoid="plostenkoid.png
- >&2 echo "$obr $co+var ICON_protista="protista.png
- continue;​ +var ICON_biohazard="​biohazard.svg"​
- fi+
  
- +// Return icon by Regnum 
- # Generate detail page +function geticon ​(a,i
- detid=$(echo "​brmlab$co$obr$kde$kdy"​ | md5sum | grep -oe '[a-zA-Z0-9]*'​+{ 
- detpg="<​html><​head>"​ + var r=""​ 
- detpg="$detpg<​meta http-equiv='​Content-Type'​ content='​text/​html;​ charset=utf-8'>​+ if(document.getElementById("​reg"​).value!="ALL") 
- detpg="​$detpg<​link rel='​stylesheet'​ href='../​style.css'​ type='​text/​css'>"​ + r=document.getElementById("reg").value
- detpg="​$detpg<​title>​Brmlab - BioOSM $co $kde</​title>"​ +
- detpg="​$detpg</​head><​body>"​ +
- detpg="​$detpg<​table class='​dettbl'><​tr>"​ +
- detpg="​$detpg<​td><​h1>​$co</​h1>"​ +
- if [[ "​$imp"​ != ""​ ]]; then +
- detpg="​$detpg<​b>​Imperium:</​b>​ $imp<​br>"​ +
- fi +
- if [[ "$reg" ​!= ""​ ]]; then +
- detpg="​$detpg<​b>​Regnum:</​b>​ $reg<​br>"​ +
- fi +
- if [[ "​$phy"​ != ""​ ]]; then +
- detpg="​$detpg<​b>​Phylum:</​b>​ $phy<​br>"​ +
- fi +
- if [[ "​$cla"​ != ""​ ]]; then +
- detpg="​$detpg<​b>​Classis:</​b>​ $cla<​br>"​ +
- fi +
- if [[ "​$ord"​ != ""​ ]]; then +
- detpg="​$detpg<​b>​Ordo:</​b>​ $ord<​br>"​ +
- fi +
- if [[ "​$fam"​ != ""​ ]]; then +
- detpg="​$detpg<​b>​Familia:</​b>​ $fam<​br>"​ +
- fi +
- if [[ "​$gen"​ != ""​ ]]; then +
- detpg="​$detpg<​b>​Genus:</​b>​ $gen<​br>"​ +
- fi +
- if [[ "​$spe"​ != ""​ ]]; then +
- detpg="​$detpg<​b>​Specie:</​b>​ $spe<​br>"​ +
- fi +
- detpg="​$detpg<​br>"​ +
- if [[ "​$kdy"​ != ""​ ]]; then +
- detpg="​$detpg<​b>​Quando:</​b>​ $kdy<​br>"​ +
- fi +
- detpg="​$detpg<​b>​Locus:</​b>​ $kde ($loc)<​br>"​ +
- if [[ "​$obs" ​!= "" ​]]; then +
- detpg="​$detpg<​b>​Spectator:</​b>​ $obs<​br>"​ +
- fi +
- if [[ "​$bio"​ != ""​ ]]; then +
- detpg="​$detpg<​b>​Biotope:</​b>​ $bio<​br>"​ +
- fi +
- detpg="​$detpg<​br>"​ +
- if [[ "​$skop"​ != ""​ ]]; then +
- detpg="​$detpg<​b>​Microscopium:</​b>​ $skop ($skop_typ)<​br>"​ +
- fi +
- if [[ "​$eng"​ != ""​ ]]; then +
- detpg="​$detpg<​b>​Amplificatio:</​b>​ $eng<​br>"​ +
- fi +
- detpg="​$detpg<​br>"​ +
- if [[ "​$des"​ != ""​ ]]; then +
- detpg="​$detpg<​b>​Depictio:</​b>​ $des<​br>"​ +
- fi +
- if [[ "​$vid"​ != ""​ ]]; then +
- detpg="​$detpg<​b>​Video:</​b>​ <a href=\"​$vid\"​ target=\"​_blank\">​$vid</​a><​br>"​ +
- fi +
- detpg="​$detpg</​td><​td>"​ +
- if [[ "​$obr"​ != ""​ ]]; then +
- detpg="​$detpg<​a href=\"​../img/$obr\"><img src=\"../​img/​$obr\"​ alt=\"​$co\"​ class='​detimg'></​a>"​+
  else  else
- if [[ "​$vid"​ !""​ ]]; then +
- detyt=$(echo "​$vid"​ | sed -'​s/​youtube.com\/​watch?​v=/youtube.com\/​embed\//​g'​+ r=a[i].regnum 
- detpg="$detpg<​iframe class='​detvid'​ src='​$detyt'​ frameborder='​0'​ allow='​encrypted-media'​ allowfullscreen></​iframe>​+ for(var e=i;e>=0 && a[e].locus==a[i].locus;e--) 
- else + if(a[e].regnum!=a[i].regnum
- detpg="​$detpg<​img src=\"​../​$3\"​ alt=\"​video\"​ class='​detimg'>"​ +
- fi + r="ALL"; 
- fi + break; 
- detpg="​$detpg</​td></​tr></​table>"​ + } 
- detpg="​$detpg</​body></​html>"​ + }
- echo "​$detpg"​ > "​./​det/​$detid.htm"​+
  
- # Pokracujem v hadovi + switch (r) 
- if [[ "​$kde"​ = "​$bylo"​ ]]; then + { 
- sam="";​ + case "Animalia"
- spoj="$spoj<​tr><​td><​a href=\"​./​det/​$detid.htm\"​ target=\"​_blank\">​+ return ICON_animalia
- if [[ "$obr" ​!= ""​ ]]; then + case "Bacteria"
- spoj="​$spoj<​img src=\"​./​simg/​$obr\"​ class=\"​hadimg\"></​a></​td>"​ + return ICON_bacteria;​ 
- else + case "Fungi": 
- spoj="$spoj<​img src=\"​./​$3\"​ class=\"​hadimg\"></​a></​td>​+ return ICON_fungi; 
- fi + case "Chromista": 
- spoj="$spoj<​td>​$co<​br>​$kdy</​td>​+ return ICON_chromista;​ 
- spoj="​$spoj</​tr>"​ + case "Plantae": 
- ox="$kdex+ return ICON_plantae;​ 
- oy="​$kdey"​ + case "Protista"
- continue; + return ICON_protista;​ 
- fi+ default: 
 + return ICON_biohazard 
 + } 
 +}
  
- # Bud prvni zaznam, nebo zmena pozice+function genphy() { 
 + physel.innerHTML="<​option>​ALL</​option>"​ 
 + clasel.innerHTML="<​option>​ALL</​option>"​ 
 + ordsel.innerHTML="<​option>​ALL</​option>"​ 
 + famsel.innerHTML="<​option>​ALL</​option>"​ 
 + gensel.innerHTML="<​option>​ALL</​option>"​ 
 + spesel.innerHTML="<​option>​ALL</​option>"​
  
- # Predchozi pozice jen zaznam? + var phyarr=[] 
- if [[ "​$sam" ​!= "" ​]]; then + for (var i=0;​i<​arma.length-1;i++) 
- echo "var n$i = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point($ox,​$oy).transform(epsg4326,​projectTo),​{description:'"​$sam"'​},​{externalGraphic:'​./​$3',​graphicHeight:​24,​graphicWidth:​24,​graphicXOffset:​-12,​graphicYOffset:​-12});" +
- echo "​$2.addFeatures(n$i);" + if(regsel.value==arma[i].regnum && arma[i].phynum!=""​) 
- spoj=""​ + phyarr.push(arma[i].phylum) 
- sam=""​ +
- fi # ELSE vytvori prazdny radek + phyarr.sort() 
- # Predchozi pozice vic zaznamu? + for (var i=0;​i<​phyarr.length;i++) 
- if [[ "​$spoj" ​!= "" ​]]; then + { 
- echo "var n$i = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point($ox,​$oy).transform(epsg4326,​projectTo),​{description:'<​table class=\"​hadtbl\">"​$spoj"</table>'​},​{externalGraphic:'​./​$3',​graphicHeight:​24,​graphicWidth:​24,​graphicXOffset:​-12,​graphicYOffset:​-12});​+ if(i==0
-    echo "​$2.addFeatures(n$i);" +
- spoj=""​ + physel.innerHTML+="<​option>​"+phyarr[0]+"</​option>​
- sam=""​ + continue 
- fi+ } 
 + if(phyarr[i]!=phyarr[i-1]) 
 + physel.innerHTML+="<option>"+phyarr[i]+"</option>"​ 
 +
 + armageddon() // Populate the map with monsters... 
 +}
  
- bylo="​$kde"​ +function gencla() { 
- spoj="<tr><td><a href=\"​./det/​$detid.htm\"​ target=\"​_blank\"​>"​ + clasel.innerHTML="<option>ALL</option>"​ 
- if [[ "​$obr"​ != ""​ ]]; then + ordsel.innerHTML="<option>ALL</option>"​ 
- spoj="​$spoj<​img src=\"./​simg/​$obr\"​ class=\"hadimg\">​</a></td>"​ + famsel.innerHTML="<option>ALL</option>"​ 
- else + gensel.innerHTML="<option>ALL</option>"​ 
- spoj="​$spoj<​img src=\"./$3\" class=\"​hadimg\"</a></td>"​ + spesel.innerHTML="<​option>​ALL</option>"
- fi +
- spoj="$spoj<td>$co<​br>​$kdy</td>"​ +
- spoj="$spoj</tr>"+
  
- sam="<a href=\"​./​det/​$detid.htm\"​ target=\"​_blank\"><​img src=\"​./​simg/​$obr\"​ alt=\"​$co\"​ class=\"​buttimg\"></​a>"​ + var claarr=[] 
- sam="​$sam<​br><​span class=\"​butttext\"><​b>​Qualis:</​b>​ $co<​br>"​ + for (var i=0;i<arma.length-1;​i++) 
- if [[ "​$imp"​ != "" ​]]; then + { 
- sam="$sam<b>​Imperium:</​b>​ $imp<​br>"​ + if(physel.value==arma[i].phylum && arma.classis!=""​) 
- fi + claarr.push(arma[i].classis) 
- if [[ "​$reg"​ !""​ ]]; then + } 
- sam="​$sam<​b>​Regnum:</​b>​ $reg<​br>"​ + claarr.sort() 
- fi + for (var i=0;i<claarr.length;i++) 
- if [[ "​$phy"​ != "" ​]]; then + { 
- sam="​$sam<​b>​Phylum:</​b>​ $phy<​br>"​ + if(i==0) 
- fi + { 
- if [[ "​$cla" ​!= "" ​]]; then + clasel.innerHTML+="<option>"+claarr[0]+"</option>"​ 
- sam="​$sam<​b>​Classis:</​b>​ $cla<​br>"​ + continue 
- fi + } 
- if [[ "​$ord"​ != "" ​]]; then + if(claarr[i]!=claarr[i-1]) 
- sam="​$sam<​b>​Ordo:</​b>​ $ord<​br>"​ + clasel.innerHTML+="<option>"+claarr[i]+"</option>"​ 
- fi + } 
- if [[ "​$fam"​ !""​ ]]then + armageddon() ​// Populate the map with monsters... 
- sam="​$sam<b>​Familia:</​b>​ $fam<​br>"​ +}
- fi +
- if [[ "​$gen"​ != ""​ ]]then +
- sam="​$sam<​b>​Genus:</​b>​ $gen<​br>"​ +
- fi +
- if [[ "​$spe"​ != ""​ ]]; then +
- sam="​$sam<​b>​Specie:</​b>​ $spe<​br>"​ +
- fi +
- if [[ "​$bio"​ !""​ ]]; then +
- sam="​$sam<​b>​Biotope:</​b>​ $bio<​br>"​ +
- fi +
- if [[ "​$kdy"​ != ""​ ]]; then +
- sam="​$sam<​b>​Quando:</​b>​ $kdy<​br>"​ +
- fi +
- sam="$sam<b>​Locus:</​b>​ $kde ($loc)<​br>" +
- if [[ "​$obs"​ != "" ​]]; then +
- sam="$sam<​b>​Spectator:​</b> $obs<br>"​ +
- fi +
- if [[ "​$skop"​ != ""​ ]]; then +
- sam="​$sam<​b>​Microscopium:</​b>​ $skop ($skop_typ)<​br>"​ +
- fi +
- if [[ "​$eng" ​!= "" ​]]; then +
- sam="$sam<b>​Amplificatio:</​b>​ $eng<br>" +
- fi +
-# if [[ "​$des"​ != "" ​]]; then +
-# sam="$sam<​b>​Depictio:​</b> $des<br>"​ +
-# fi +
- if [[ "​$vid"​ != ""​ ]]; then +
- sam="​$sam<​b>​Video:<​/b> <a href=\"​$vid\"​ target=\"​_blank\">​$vid<​/a><​br>"​ +
- fi +
- sam="​$sam</​span>"​+
  
- #>&2 echo "$sam+function genord() { 
- >&2 echo "$co $obs"+ ordsel.innerHTML="<​option>​ALL</​option>" 
 + famsel.innerHTML="<​option>​ALL</​option>​
 + gensel.innerHTML="<​option>ALL</​option>"​ 
 + spesel.innerHTML="<​option>​ALL</​option>"​ 
 + var ordarr=[] 
 + for (var i=0;​i<​arma.length-1;​i++) 
 +
 + if(clasel.value==arma[i].classis ​&& arma[i].ordo!=""​
 + ordarr.push(arma[i].ordo) 
 +
 + ordarr.sort() 
 + for (var i=0;​i<​ordarr.length;​i++) 
 +
 + if(i==0) 
 +
 + ordsel.innerHTML+="<​option>"​+ordarr[0]+"</​option>"​ 
 + continue 
 +
 + if(ordarr[i]!=ordarr[i-1]) 
 + ordsel.innerHTML+="<​option>"​+ordarr[i]+"</​option>"​ 
 +
 + armageddon() // Populate the map with monsters... 
 +}
  
 +function genfam() {
 + famsel.innerHTML="<​option>​ALL</​option>"​
 + gensel.innerHTML="<​option>​ALL</​option>"​
 + spesel.innerHTML="<​option>​ALL</​option>"​
 + var famarr=[]
 + for (var i=0;​i<​arma.length-1;​i++)
 + {
 + if(ordsel.value==arma[i].ordo && arma[i].familia!=""​)
 + famarr.push(arma[i].familia)
 + }
 + famarr.sort()
 + for (var i=0;​i<​famarr.length;​i++)
 + {
 + if(i==0)
 + {
 + famsel.innerHTML+="<​option>"​+famarr[0]+"</​option>"​
 + continue
 + }
 + if(famarr[i]!=famarr[i-1])
 + famsel.innerHTML+="<​option>"​+famarr[i]+"</​option>"​
 + }
 + armageddon() // Populate the map with monsters...
 +}
  
- ox="$kdex+function gengen() { 
- oy="$kdey"+ gensel.innerHTML="<​option>​ALL</​option>"​ 
 + spesel.innerHTML="<​option>​ALL</​option>"​ 
 + var genarr=[] 
 + for (var i=0;​i<​arma.length-1;​i++) 
 +
 + if(famsel.value==arma[i].familia && arma[i].genus!=""​) 
 + genarr.push(arma[i].genus) 
 +
 + genarr.sort() 
 + for (var i=0;​i<​genarr.length;​i++) 
 +
 + if(i==0) 
 +
 + gensel.innerHTML+="<​option>​"+genarr[0]+"</​option>"​ 
 + continue 
 +
 + if(genarr[i]!=genarr[i-1]) 
 + gensel.innerHTML+="<​option>"​+genarr[i]+"</​option>"​ 
 +
 + //genspe() // ...and here we go 
 + armageddon() // Populate the map with monsters... 
 +}
  
 +function genspe()
 +{
 + spesel.innerHTML="<​option>​ALL</​option>"​
 + var spearr=[]
 + for (var i=0;​i<​arma.length-1;​i++)
 + {
 + if(gensel.value==arma[i].genus && arma[i].specie!=""​)
 + spearr.push(arma[i].specie)
 + }
 + spearr.sort()
 + for (var i=0;​i<​spearr.length;​i++)
 + {
 + if(i==0)
 + {
 + spesel.innerHTML+="<​option>"​+spearr[0]+"</​option>"​
 + continue
 + }
 + if(spearr[i]!=spearr[i-1])
 + spesel.innerHTML+="<​option>"​+spearr[i]+"</​option>"​
 + }
 + armageddon() // Populate the map with monsters...
 +}
  
- i=$(($i+1))+function armageddon() 
 +
 + var speval=document.getElementById("​spe"​).value 
 + var genval=document.getElementById("​gen"​).value 
 + var famval=document.getElementById("​fam"​).value 
 + var ordval=document.getElementById("​ord"​).value 
 + var claval=document.getElementById("​cla"​).value 
 + var phyval=document.getElementById("​phy"​).value 
 + var regval=document.getElementById("​reg"​).value 
 + var a=[]
  
- # Precti XML, vyfiltruj jen to co ma prijit do mapy serad to dle umisteni + if(speval!="​ALL"​) 
- #  Umisteni je razene kvuli vic vzorkum z jednoho mista+
 + for(var i=0;​i<​arma.length-1;​i++) 
 + if(arma[i].specie==speval && arma[i].genus==genval) // Check genus because of unknown "​sp."​ 
 + a.push(arma[i]) 
 +
 + else if(genval!="​ALL"​) 
 +
 + for(var i=0;​i<​arma.length-1;​i++) 
 + if(arma[i].genus==genval) 
 + a.push(arma[i]) 
 +
 + else if(famval!="​ALL"​) 
 +
 + for(var i=0;​i<​arma.length-1;​i++) 
 + if(arma[i].familia==famval) 
 + a.push(arma[i]) 
 +
 + else if(ordval!="​ALL"​) 
 +
 + for(var i=0;​i<​arma.length-1;​i++) 
 + if(arma[i].ordo==ordval) 
 + a.push(arma[i]) 
 +
 + else if(claval!="​ALL"​) 
 +
 + for(var i=0;​i<​arma.length-1;​i++) 
 + if(arma[i].classis==claval) 
 + a.push(arma[i]) 
 +
 + else if(phyval!="​ALL"​) 
 +
 + for(var i=0;​i<​arma.length-1;​i++) 
 + if(arma[i].phylum==phyval) 
 + a.push(arma[i]) 
 +
 + else if(regval!="​ALL"​) 
 +
 + for(var i=0;​i<​arma.length-1;​i++) 
 + if(arma[i].regnum==regval) 
 + a.push(arma[i]) 
 +
 + else // Regnum: ALL 
 +
 + for(var i=0;​i<​arma.length-1;​i++) 
 + a.push(arma[i]) 
 + }
  
-done <<<​ $(echo "​$1"​# Zere parametr spaget, nikoli $1 scriptu !!!+ icongeddon(a) 
 +}
  
-# Do not forget to print last line when WHILE ends! +function buggy() 
-if ["$sam" = "" ​]]; then +
- sam="<​table style=\"hadtbl\">​$spoj</​table>​+ var p=[] 
-fi + for(var i=0;​i<​arma.length-1;​i++) 
-echo "var n$= new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point($kdex,​$kdey).transform(epsg4326,​projectTo),​{description:'​"$sam"'​},​{externalGraphic:'​./​$3',​graphicHeight:​24,​graphicWidth:​24,​graphicXOffset:​-12,​graphicYOffset:​-12});​+
-echo "$2.addFeatures(n$i);"+ if(arma[i].regnum==""​|| 
 +      ​arma[i].phylum==""​|| 
 +      ​arma[i].classis==""​|| 
 +      arma[i].ordo==""​|| 
 +      ​arma[i].familia=="​"|| 
 +      ​arma[i].genus=="") 
 +   p.push(arma[i]) 
 +
 + icongeddon(p) 
 +}
  
-# KONEC FCE SPAGETY !!!+function plostenkoidy() 
 +
 + var p=[] 
 + for(var i=0;​i<​arma.length-1;​i++) 
 +
 + if(arma[i].phylum=="​Platyhelminthes"​) 
 + p.push(arma[i]) 
 +
 + icongeddon(p) 
 +}
  
-echo "var ALL = new OpenLayers.Layer.Vector('​Overlay',​{attribution:'<​href=\"​http:​//brmlab.cz\">​Brmlab<​/a>'});" +function icongeddon(a
-spagety "​$praseTC"​ "​ALL"​ "​biohazard.svg" +
-echo "map.addLayer(ALL);"+ //alert(a.length) ​// #thingies to show in the map
 + while(map.popups.length) 
 + map.removePopup(map.popups[0]) 
 + vectorLayerDynamic.destroyFeatures()
  
-echo "var laycon ​[vectorLayer,​ALL];​" ​# Layer controls JS array + var bylo="" ​// Minula pozice 
-while IFS=''​ read -r spag || [[ -n "$spag" ]]; do + var sam="" ​// HTML samostatneho zaznamu 
- echo "var $spag new OpenLayers.Layer.Vector('​Overlay',​{attribution:'<​a href=\"http://brmlab.cz\">​Brmlab</​a>'​});"​ + var osam=""​ // predchozi ​$sam 
- spg=$(echo ​"$praseTC" ​| grep "<​new-field-4>​$spag<​/new-field-4>"​) + var spoj="" ​// HTML had z popisu stejnych pozic 
- case "$spag" in + var ospoj="" ​// Predchozi spoj 
- "Animalia") + var ox="" ​// Old X 
- icon="animalia.png";; + var oy="" ​// Old Y 
- "Bacteria") + var datelog="" ​// Entries sorted by date for plaintext log 
- icon="bacteria.png";; + var i=0 // Iterator over a[] (needed after FOR
- "Fungi") + var n=[] // New points in the layer 
- icon="​fungi.png";;​ + var muchicons=0 // How much Regnum'​s?​ 
- "​Chromista"​+ var samicon=ICON_biohazard // Icon 
- icon="​chromista.png";;​ + var spojicon=ICON_biohazard // Icon
- "​Plantae"​) +
- icon="​plantae.svg";;​ +
- "​Protista"​) +
- icon="​protista.png";;​ +
- *) +
- icon="​biohazard.svg";;​ +
- esac+
  
- spagety ​"$spg" "$spag" "$icon+ for(;​i<​a.length;​i++) // -1 fix for last empty entry 
- echo "laycon.push($spag);+
-done <<< ​$(echo ​"$kingdoms")+ // Pokracujem v hadovi 
 + if(a[i].locus == bylo) 
 +
 + sam=""​
 + spoj+="<​tr><​td>​
 + spoj+='<​a href="./​det/'​+a[i].detid+'​.htm"​ target="​_blank">'​ 
 + if(a[i].obr != ""​) 
 + spoj+='<​img src="./​simg/'​+a[i].obr+'"​ class="​hadimg"></​a></​td>'​ 
 + else 
 + spoj+='​<img src=./"'​+ICON_biohazard+'"​ class="​hadimg">​</a></​td>'​ 
 + spoj+="<td>"+a[i].qualis+"<​br>"​+a[i].quando+"</​td>"​ 
 + spoj+="</​tr>"​ 
 + ox=a[i].x 
 + oy=a[i].y 
 + continue;​ 
 + }
  
-# Plostenky + if(a[i].specie=="sp.") 
-spg=$(echo ​"$praseTC"​ | grep "<​phylum>​Platyhelminthes</​phylum>​") + wikisp="https://en.wikipedia.org/​wiki/"​+a[i].genus 
-echo "var Platyhelminthes = new OpenLayers.Layer.Vector('​Overlay',​{attribution:'<​href=\"http://brmlab.cz\">​Brmlab<​/a>'​});"​ + else 
-spagety "​$spg"​ "​Platyhelminthes"​ "​plostenkoid.png" + wikisp="https://en.wikipedia.org/wiki/"​+a[i].genus+" "+a[i].specie
-echo "laycon.push(Platyhelminthes)"​+
  
 + // Bud prvni zaznam, nebo zmena pozice
  
-echo "var controls ​{" + // Predchozi pozice jen 1 zaznam? 
-echo " selector: ​new OpenLayers.Control.SelectFeature(laycon, { onSelectcreatePopuponUnselectdestroyPopup ​})+ if(sam != ""​
-echo "};" +
-echo "map.addControl(controls['​selector'​]);" + samicon=geticon(a,​i-1) 
-echo "controls['selector'].activate();"+ n[i] = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(ox,​oy).transform(epsg4326,​projectTo),{'​description'​:sam},{'​externalGraphic':​samicon,'​graphicHeight':​24,'​graphicWidth':​24,'​graphicXOffset':​-12,'​graphicYOffset'​:-12}); 
 + vectorLayerDynamic.addFeatures(n[i]); 
 + spoj="​
 + sam="
 + } // ELSE vytvori prazdny radek 
 + // Predchozi pozice vic zaznamu? 
 + if(spoj!=""​) 
 +
 + spojicon=geticon(a,​i-1) 
 + n[i] = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(ox,​oy).transform(epsg4326,​projectTo),​{'description':"<​table class=\"​hadtbl\">"​+spoj+"</​table>"​},​{'​externalGraphic':​spojicon,'​graphicHeight':​24,'​graphicWidth':​24,'​graphicXOffset':​-12,'​graphicYOffset':​-12});​ 
 + vectorLayerDynamic.addFeatures(n[i]); 
 + spoj="
 + sam=""​ 
 + }
  
 + bylo=a[i].locus
 + spoj='<​tr><​td><​a href="​./​det/'​+a[i].detid+'​.htm"​ target="​_blank">'​
 + if(a[i].obr != ""​)
 + spoj+='<​img src="​./​simg/'​+a[i].obr+'"​ class="​hadimg"></​a></​td>'​
 + else
 + spoj+='<​img src="​./'​+geticon(a,​i)+'"​ class="​hadimg"</​a></​td>'​
 + spoj+='<​td>'​+a[i].qualis+'<​br>'​+a[i].quando+'</​td>'​
 + spoj+="</​tr>"​
  
  
 + sam='<​a href="​./​det/'​+a[i].detid+'​.htm"​ target="​_blank"><​img src="​./​simg/'​+a[i].obr+'"​ alt="'​+a[i].qualis+'"​ class="​buttimg"></​a>'​
 + sam+='<​br><​span class="​butttext">'​
 + sam+='<​b>​Qualis:</​b>​ <a href="'​+wikisp+'"​ target="​_blank">'​+a[i].qualis+'</​a><​br>'​
 + if(a[i].imperium != ""​)
 + sam+='<​b>​Imperium:</​b>​ <a href="​https://​en.wikipedia.org/​wiki/'​+a[i].imperium+'"​ target="​_blank">'​+a[i].imperium+'</​a><​br>'​
 + if(a[i].regnum != ""​)
 +    sam+='<​b>​Regnum:</​b>​ <a href="​https://​en.wikipedia.org/​wiki/'​+a[i].regnum+'"​ target="​_blank">'​+a[i].regnum+'</​a><​br>'​
 + if(a[i].phylum != ""​)
 + sam+='<​b>​Phylum:</​b>​ <a href="​https://​en.wikipedia.org/​wiki/'​+a[i].phylum+'"​ target="​_blank">'​+a[i].phylum+'</​a><​br>'​
 + if(a[i].classis != ""​)
 + sam+='<​b>​Classis:</​b>​ <a href="​https://​en.wikipedia.org/​wiki/'​+a[i].classis+'"​ target="​_blank">'​+a[i].classis+'</​a><​br>'​
 + if(a[i].ordo != ""​)
 + sam+='<​b>​Ordo:</​b>​ <a href="​https://​en.wikipedia.org/​wiki/'​+a[i].ordo+'"​ target="​_blank">'​+a[i].ordo+'</​a><​br>'​
 + if(a[i].familia != ""​)
 + sam+='<​b>​Familia:</​b>​ <a href="​https://​en.wikipedia.org/​wiki/'​+a[i].familia+'"​ target="​_blank">'​+a[i].familia+'</​a><​br>'​
 + if(a[i].genus != ""​)
 + sam+='<​b>​Genus:</​b>​ <a href="​https://​en.wikipedia.org/​wiki/'​+a[i].genus+'"​ target="​_blank">'​+a[i].genus+'</​a><​br>'​
 + if(a[i].specie != ""​)
 + sam+='<​b>​Specie:</​b>​ <a href="'​+wikisp+'"​ target="​_blank">'​+a[i].specie+'</​a><​br>'​
 + if(a[i].bio != ""​)
 + sam+="<​b>​Biotope:</​b>​ "​+a[i].bio+"<​br>"​
 + if(a[i].quando != ""​)
 + sam+="<​b>​Quando:</​b>​ "​+a[i].quando+"<​br>"​
 + sam+="<​b>​Locus:</​b>​ "​+a[i].locus+"​ ("​+a[i].locplain+"​)<​br>"​
 + if(a[i].spec != ""​)
 + ​ sam+="<​b>​Spectator:</​b>​ "​+a[i].spec+"<​br>"​
 + if(a[i].micro != ""​)
 + sam+="<​b>​Microscopium:</​b>​ "​+a[i].micro+"​ ("​+a[i].microtyp+"​)<​br>"​
 + if(a[i].amp != ""​)
 + sam+="<​b>​Amplificatio:</​b>​ "​+a[i].amp+"<​br>"​
 + /* if [[ "​$des"​ != ""​ ]]; then
 + #   ​sam="​$sam<​b>​Depictio:</​b>​ $des<​br>"​
 + # fi */
 + if(a[i].vid != ""​)
 + sam+='<​b>​Video:</​b>​ <a href="'​+a[i].vid+'"​ target="​_blank">'​+a[i].vid+'</​a><​br>'​
 + sam+="</​span>"​
  
 + ox=a[i].x
 + oy=a[i].y
 + } // Konec prochazeni a[]
  
-echo "​function createPopup(feature) {" + // Do not forget to print last line when FOR ends! 
- echo "​ feature.popup ​new OpenLayers.Popup.FramedCloud('​pop'​," + samicon=geticon(a,i-1) 
- echo "​ feature.geometry.getBounds().getCenterLonLat(),​" + if(sam == ""​) 
- echo "​ null,​+ sam='<table style="hadtbl">'​+spoj+'</​table>'
- echo " '<div class=\"markerContent\">'​+feature.attributes.description+'</​div>'," +
- echo "​ null,"​ +
- echo "​ false,"​ +
- echo "​ function() { controls['​selector'​].unselectAll();​ }" +
- echo "​ );"​ +
- echo "​ //​feature.popup.closeOnMove = true;"​ +
- echo "​ map.addPopup(feature.popup);"​ +
-echo "​}"​+
  
-echo "​function destroyPopup(feature) {" + n[i]=new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(a[i-1].x,​a[i-1].y).transform(epsg4326,​projectTo),​{description:​"'"+sam+"'"},​{externalGraphic:​samicon,​graphicHeight:​24,​graphicWidth:​24,​graphicXOffset:​-12,​graphicYOffset:​-12});​ 
- echo "​ feature.popup.destroy();" + vectorLayerDynamic.addFeatures(n[i]);​
- echo " feature.popup = null;" +
-echo "}"+
  
 +} // Konec armageddonu
  
-echo "​function kinchange() {" +var laycon ​= [vectorLayer,​vectorLayerDynamic];
- echo "​ kinsel=document.getElementById('​kin'​);"​ +
- echo "​ kinopt=kinsel.options[kinsel.selectedIndex].text;"​ +
- echo " for (var map.layers.length - 1; i >= 1; i--) {" +
- echo "​ map.removeLayer(map.layers[i]);+
- echo "​ }"​ +
- echo "​ map.addLayer(window[kinopt])"​ +
-echo "​}"​+
  
-echo "​function plostenkoid() {" +var controls ​{selector: new OpenLayers.Control.SelectFeature(laycon,​ { onSelect: createPopup,​ onUnselect: destroyPopup })}
- echo " for (var i=map.layers.length-1;i>​=1;​i--) {" +map.addControl(controls['​selector'​]); 
- echo " map.removeLayer(map.layers[i]);" +controls['​selector'​].activate();
- echo "​ }"​ +
- echo " map.addLayer(Platyhelminthes)+
-echo "​}"​+
  
 +function createPopup(feature)
 +{
 + feature.popup = new OpenLayers.Popup.FramedCloud('​pop',​
 + feature.geometry.getBounds().getCenterLonLat(),​
 + null,
 + '<​div class="​markerContent">'​+feature.attributes.description+'</​div>',​
 + null,
 + false, // Close button?
 + function() { controls['​selector'​].unselectAll();​ }
 + );
 + //​feature.popup.closeOnMove = true;
 + map.addPopup(feature.popup);​
 +}
  
-echo "</script>" +function destroyPopup(feature) { 
-echo "</html>"+ feature.popup.destroy();​ 
 + feature.popup = null; 
 +
 + 
 +// Run armageddon on initial load 
 +armageddon() 
 +</code
 + 
 +==== Taxonomie dle rodoveho jmena ==== 
 + 
 +Script bere jako jediny parametr rodove jmeno a z wikipedie vyparsuje zbytek taxonomie. 
 +<code bash tax.sh>​ 
 +#​!/​bin/​bash 
 + 
 +wat=$(wget -q -O - "https://​en.wikipedia.org/​wiki/​Template:​Taxonomy/​$1"​ 2>/​dev/​null | tr -d '​\n'​ | sed -e $'s/<\/tr>/<​\/​tr>​\\n/​g'​ | grep "<​tr>"​ | sed -e '​s/<​[^>​]*>//​g'​ | grep -o -e "​^[a-zA-Z]*:​[a-zA-Z]*"​) 
 + 
 +echo $(echo "​$wat"​ | grep "​Domain:"​) 
 +echo $(echo "​$wat"​ | grep "​Kingdom:"​) 
 +echo $(echo "​$wat"​ | grep "​Phylum:"​) 
 +echo $(echo "​$wat"​ | grep "​Class:"​) 
 +echo $(echo "​$wat"​ | grep "​Order:"​) 
 +echo $(echo "​$wat"​ | grep "​Family:"​) 
 +echo $(echo "​$wat"​ | grep "​Genus:​")
 </​code>​ </​code>​
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 4.0 International
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki