1<!DOCTYPE html> 2<html lang="en"> 3<!-- RESPONSIVE HEADER START HERE --> 4<head> 5 <link rel="shortcut icon" href="./favicon.ico" type="image/x-icon"> 6 <link rel="icon" href="./apple-touch-icon.png" type="image/png" sizes="57x57"> 7 <link rel="apple-touch-icon" href="./apple-touch-icon.png"> 8 <style> 9 :root {--alink:black;--menu_head:#cedaea;--title_box:#0061a1;--button-color:#f9ba57;--menu_head_off:#9cb7d6;--title_box_text:#ffffff;--toplevel-color:#0061a1;--backpanel-color:#e0e0e0;--frontpanel-color:#ffffff;--title-menu-color:#ffffff;--shadowpanel-color:#999999;--profile-card-color:#ffffff;--title_gradien_stop:#0061a1;--lowlevel-menu-color:#f9ba57;--midlevel-menu-color:#f5f5f5;--title_gradien_start:#0061a1;--toplevel-menu-color:#0061a1;--highlevel-menu-color:#f9ba57;--lightshadowpanel-color:#b7b7b7} </style> 10 <link href="https://cdnfiles1.biolovision.net/common/css/responsive_styles_e4abb055.css" rel="stylesheet" type="text/css"> 11 <link href="https://cdnfiles1.biolovision.net/common/css/btn-sprite_a59ff6ea.css" rel="stylesheet" type="text/css"> 12 13 <style> 14 @media (min-width: 1800px) { 15 .tab-group { 16 margin-top: 0; 17 } 18 .tab-title, 19 .tab-active-hidden { 20 display: block; 21 } 22 } 23 </style> 24 25 <meta name="google-site-verification" content="nZTtSUyudi8QJFYl-yX3b6Ret999zHtlp_VaA8825zc"> 26 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 27 <title>Home ornitho.de / ornitho.lu - www.ornitho.de</title> 28 <meta property="og:title" content="Home ornitho.de / ornitho.lu - www.ornitho.de"> 29 <meta property="og:image" content="https://www.biolovision.net/logo_2021_small.png"> 30 <meta property="twitter:card" content="summary"> 31 <meta property="twitter:title" content="Home ornitho.de / ornitho.lu - www.ornitho.de"> 32 <meta property="twitter:image" content="https://www.biolovision.net/logo_2021_small.png"> 33 <meta name="viewport" content="width=device-width, initial-scale=1"> 34 </head> 35 36<body> 37 38<div id="ornithobody"> 39 40 <!--[if LT IE 10]> 41 <div class="ie6"> 42 You are using an outdated browser. For a faster, safer browsing experience, <a class="ie6" href="http://ie.microsoft.com/">upgrade for free today</a>. 43 </div> 44 <![endif]--> 45 46 <div id="responsive-sidebar-left-container"> 47 <em id="sidebar-open" class="fa-solid fa-bars iconhome"></em> 48 <a class="a-bk" href="/"><em class="fa-solid fa-home iconhome"></em></a> 49 <a href="https://play.google.com/store/apps/details?id=ch.biolovision.naturalist" style="display: none;margin-left:-5px;margin-right:0.5rem;"><em class="btn btn-naturalist btn-naturalist-android sidebar-btn"></em></a> 50 <a href="https://itunes.apple.com/us/app/naturalist/id1175280268?mt=8" style="display: none;margin-left:-5px;margin-right:0.5rem;"><em class="btn btn-naturalist btn-naturalist-ios sidebar-btn"></em></a> 51 </div> 52 53 <div id="responsive-sidebar-container"> 54 <div class="topLogo"> <div style="z-index:100"> 55 <a onclick="send_das_stat(19);" rel='nofollow' href='https://www.ornitho.de'> 56 <img class="topleftlogo" style="" alt="www.ornitho.de" src="https://cdnfiles2.biolovision.net/www.ornitho.de/images/das/logoddaweisstransparent-5945.png"> </a> 57 58
58<script> 59 //<![CDATA[ 60 function send_das_stat(id_das) 61 { 62 $.post("index.php?m_id=63&content=ads_stat_click&id_ads=" + id_das,{}); 63 } 64 // ]]> 65 </script>
65 66 67 </div> 68 69 </div> 70 <div class="notlogged">ornitho.de</div> 71 <div class="toprightlogo"> <div style="z-index:100"> 72 <a onclick="send_das_stat(14);" rel='nofollow' href='https://www.dda-web.de/'> 73 <img class="toprightlogoimg" style="" alt="www.ornitho.de" src="https://cdnfiles2.biolovision.net/www.ornitho.de/images/das/logoddaweisstransparent-7288.png"> </a> 74 75
75<script> 76 //<![CDATA[ 77 function send_das_stat(id_das) 78 { 79 $.post("index.php?m_id=63&content=ads_stat_click&id_ads=" + id_das,{}); 80 } 81 // ]]> 82 </script>
82 83 84 </div> 85 86 </div> <div class="langubox"> 87 <div class="langButton" 88 onmouseover="this.className='langButtonOver'" 89 onmouseout="this.className='langButton'" 90 onclick="location.href='https://www.ornitho.de/index.php?m_id=1&langu=fr'"> 91 <a class="bvLangu" href="https://www.ornitho.de/index.php?m_id=1&langu=fr">fr</a> 92 </div><div class="langButton" 93 onmouseover="this.className='langButtonOver'" 94 onmouseout="this.className='langButton'" 95 onclick="location.href='https://www.ornitho.de/index.php?m_id=1&langu=de'"> 96 <a class="bvLangu" href="https://www.ornitho.de/index.php?m_id=1&langu=de">de</a> 97 </div><div class="langButtonSelected">en</div> </div> 98 99 </div> 100 101 <div class="clearfix"></div> 102 103
103<script type="importmap"> 104 { 105 "imports": { 106 "vendor-carbon": "https://cdnfiles1.biolovision.net/common/components/vendor-carbon_770d19c5.js", 107 "vendor-chart": "https://cdnfiles1.biolovision.net/common/components/vendor-chart_8830aae6.js", 108 "vendor-map": "https://cdnfiles1.biolovision.net/common/components/vendor-map_d3fcc28e.js", 109 "vendor-misc": "https://cdnfiles1.biolovision.net/common/components/vendor-misc_f66f55fa.js", 110 "vendor-svelte": "https://cdnfiles1.biolovision.net/common/components/vendor-svelte_fc689eb8.js" 111 } 112 } 113 </script>
113 114
114<script type="module" crossorigin src="https://cdnfiles1.biolovision.net/common/components/polyfills_d532c8be.js"></script>
114 115
115<script type="module" crossorigin src="https://cdnfiles1.biolovision.net/common/components/components_1f6d7283.js"></script>
115 116 <link rel="stylesheet" crossorigin href="https://cdnfiles1.biolovision.net/common/components/v3-reset_66a2ff10.css"> 117 <link rel="stylesheet" crossorigin href="https://cdnfiles1.biolovision.net/common/components/carbon.all.v3.min_f9f97f0b.css"> 118 <link rel="stylesheet" crossorigin href="https://cdnfiles1.biolovision.net/common/components/components_fa26e04c.css"> 119 120
120<script type="module"> 121 import { setDataColorTheme, setPlatformContext, componentRegistry, LazySpeciesRepository } from 'https://cdnfiles1.biolovision.net/common/components/components_1f6d7283.js'; 122 123 setDataColorTheme({ 124 single: { 125 primary: getComputedStyle(document.documentElement).getPropertyValue('--toplevel-menu-color').trim(), 126 primary50: '#e6eff6' 127 }, 128 sequential: {}, 129 diverging: {}, 130 qualitative: { 131 default: ['#0765a8', '#74ccfb'], 132 muted: ['#bccedd', '#bcbcc5'] 133 }, 134 special: { 135 rarity: { 136 verycommon: '#000000', 137 common: '#000000', 138 escaped: '#3366FF', 139 never: '#CC0099', 140 rare: '#CC3300', 141 veryrare: '#CC3300', 142 unusual: '#000000' 143 } 144 } 145 }); 146 147 setPlatformContext({ 148 speciesRepository: LazySpeciesRepository.withBasePath(new URL('https://www.ornitho.de/')) 149 }); 150 151 window.componentRegistry = componentRegistry; 152 </script>
152 153
153<script src="https://cdnfiles1.biolovision.net/common/js/jquery-3.6.0.min.js"></script>
153 154
154<script> 155 //<![CDATA[ 156 $(document).ready(function(){ 157 $("#login").click(function(){ 158 if ($("#slidingLogin").is(":hidden")) { 159 $("#slidingLogin").slideDown("slow", function() {$("#loginemail").focus()}); 160 } 161 else { 162 $("#slidingLogin").hide(); 163 } 164 }); 165 }); 166 // ]]> 167 </script>
167 168 169 <div id="maincontent"></div> 170 <div id="td-full-content"> 171 <div id="td-sidebar"> 172 <!-- RESPONSIVE START LEFT -->
173<script src="https://cdnfiles1.biolovision.net/common/js/menu_f0d31db0.js"></script>
vendor: 2 bytes, line 173
173
174<script> 175 // <![CDATA[ 176 var menu = menuBuilder('/'); 177 178 $(function(){ 179 180 $(".bvMenuSubTitle").click(function() { 181 menu.toggleSubSub($(this).attr("id"),1); 182 return false; 183 }); 184 185 $(".bvMenuTitle").click(function() { 186 menu.toggleSub($(this).attr("id")); 187 return false; 188 }); 189 }) 190 // ]]> 191</script>
191 192 193<div id="table-sidebar" class="bvMenuBar"> 194 <div class="row_1st home "> 195 <div class="col-xs-12"> 196 <div id="conbt" onclick="javascript:menu.toggleConnect();" class="takepart takepartmenu"> 197 <input name="login_button" type="submit" class="submit takepartbutton" value="Participate!"/> 198 </div> 199 </div> 200 </div> 201 202 <form id="confm" name="loginform" style="background-color: white;" class="loginformform" action="https://www.ornitho.de/index.php" method="post"> 203 <input type="hidden" name="login" value="1"/> 204 <div class="loginform"> 205 <div class="logintext"> 206 <input class="textlogin" id="loginemail" placeholder="My e-mail" type="text" autocomplete="username" name="USERNAME" size="20" value=""/> 207 </div> 208 <div class="logintext"> 209 <input class="textlogin" placeholder="My password" type="password" autocomplete="current-password" name="PASSWORD" size="20"/> 210 </div> 211 <div class="logintext"> 212 <input id="remember" type="checkbox" name="REMEMBER" value="ON"/><label for="remember">Remember password</label> 213 </div> 214 <div class="logintext"> 215 <a class="alink" href="https://www.ornitho.de/index.php?m_id=60">I have lost my password</a> 216 </div> 217 </div> 218 219 <div class="loginform connect" style="padding:0"> 220 <input name="login_button" type="submit" class="submit" value="Login"/> 221 </div> 222 <div class="logintext" style="margin-bottom:0;background-color: var(--midlevel-menu-color);"> 223 <a class="alink submit submit--link" style="font-size:0.8rem;" href="https://www.ornitho.de/index.php?m_id=61">Register</a> 224 </div> 225 </form> 226 <div id="20" class="bvMenuTitle" ><em id="oc-t20" class="menu_title_deco fa fa-chevron-right"></em><em class="menu_title_deco_icon fa-solid fa-newspaper fa-2x"></em><div class="bvMT">Latest</div></div><div style="display:none" id="t20"><div id="5" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=5&sp_DOffset=5'"><div class="bvMI-pad-1"></div><div class="bvMIt">Current observations</div></div><div id="7" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=7'"><div class="bvMI-pad-1"></div><div class="bvMIt">Photo and sound gallery</div></div><div id="12" class="bvMenuSubTitleUsePageBoxes" onmouseover="this.className='bvMenuSubTitleUsePageBoxesOver'" onmouseout="this.className='bvMenuSubTitleUsePageBoxes'" onclick="location.href='https://www.ornitho.de/index.php?m_id=1501&parent=12'"><div class="bvMI-pad-1"></div><em style="color:var(--title_box);margin-right: 0.25rem;" class="menu_title_deco fa-solid fa-grip"></em><em style="color:var(--title_box);margin-right: 0.25rem;" class="menu_title_deco_icon fa-solid fa-table-cells-large fa-12x"></em><div class="bi-l1t">Distribution</div></div><div id="t12"></div><div id="400" class="bvMenuSubTitle" onmouseover="this.className='bvMenuSubTitleOver'" onmouseout="this.className='bvMenuSubTitle'" ><em id="oc-t400" class="menu_deco fa-solid fa-square-plus"></em><div class="bvMI-pad-1"></div><div class="bi-l1t">News & Events</div></div><div style="display:none" id="t400"><div id="1164" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=1164'"><div class="bvMI-pad-4"></div><div class="bvMIt">Latest news</div></div><div id="21" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.dda-web.de/aktuelles/kalender'"><div class="bvMI-pad-4"></div><div class="bvMIt">Events and meetings</div></div></div></div><div id="510" class="bvMenuTitle" ><em id="oc-t510" class="menu_title_deco fa fa-chevron-right"></em><em class="menu_title_deco_icon fa-solid fa-square-poll-vertical fa-2x"></em><div class="bvMT">Analyses</div></div><div style="display:none" id="t510"><div id="68" class="bvMenuSubTitleUsePageBoxes" onmouseover="this.className='bvMenuSubTitleUsePageBoxesOver'" onmouseout="this.className='bvMenuSubTitleUsePageBoxes'" onclick="location.href='https://www.ornitho.de/index.php?m_id=1501&parent=68'"><div class="bvMI-pad-1"></div><em style="color:var(--title_box);margin-right: 0.25rem;" class="menu_title_deco fa-solid fa-grip"></em><em style="color:var(--title_box);margin-right: 0.25rem;" class="menu_title_deco_icon fa-solid fa-chart-line fa-12x"></em><div class="bi-l1t">Statistics</div></div><div style="display:none" id="t68"></div><div id="1184" class="bvMenuSubTitle" onmouseover="this.className='bvMenuSubTitleOver'" onmouseout="this.className='bvMenuSubTitle'" ><em id="oc-t1184" class="menu_deco fa-solid fa-square-minus"></em><div class="bvMI-pad-1"></div><div class="bi-l1t">Publications & Evaluations</div></div><div id="t1184"><div id="1127" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=1127&item=12'"><div class="bvMI-pad-4"></div><div class="bvMIt">Publications</div></div><div id="1183" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=1183&item=126'"><div class="bvMI-pad-4"></div><div class="bvMIt">Annual reports, newsletters</div></div></div></div><div id="67" class="bvMenuTitle" ><em id="oc-t67" class="menu_title_deco fa fa-chevron-right"></em><em class="menu_title_deco_icon fa-solid fa-circle-question fa-2x"></em><div class="bvMT">Help</div></div><div style="display:none" id="t67"><div id="1124" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=1124&item=13'"><div class="bvMI-pad-1"></div><div class="bvMIt">Who is my regional coordinator?</div></div><div id="41" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=41'"><div class="bvMI-pad-1"></div><div class="bvMIt">Symbols and abbreviations</div></div><div id="125" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=125'"><div class="bvMI-pad-1"></div><div class="bvMIt">Frequently asked questions (FAQ)</div></div></div><div id="499" class="bvMenuTitle" ><em id="oc-t499" class="menu_title_deco fa fa-chevron-right"></em><em class="menu_title_deco_icon fa-solid fa-circle-info fa-2x"></em><div class="bvMT">
226Background</div></div><div style="display:none" id="t499"><div id="1116" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=1116&item=7'"><div class="bvMI-pad-1"></div><div class="bvMIt">About ornitho.de resp. ornitho.lu</div></div><div id="1126" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=1126&c=PART'"><div class="bvMI-pad-1"></div><div class="bvMIt">Legal body and partners</div></div><div id="401" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.dda-web.de/unterstuetzen/spenden/spendenformular'"><div class="bvMI-pad-1"></div><div class="bvMIt">Donate to ornitho.de</div></div><div id="1121" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=1121&item=3'"><div class="bvMI-pad-1"></div><div class="bvMIt">Terms and conditions of use</div></div><div id="1115" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=1115&item=8'"><div class="bvMI-pad-1"></div><div class="bvMIt">Code of conduct</div></div><div id="1129" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=1129&item=11'"><div class="bvMI-pad-1"></div><div class="bvMIt">Disclaimer</div></div><div id="402" class="bvMenuSubTitle" onmouseover="this.className='bvMenuSubTitleOver'" onmouseout="this.className='bvMenuSubTitle'" ><em id="oc-t402" class="menu_deco fa-solid fa-square-plus"></em><div class="bvMI-pad-1"></div><div class="bi-l1t">Technical-organizational</div></div><div style="display:none" id="t402"><div id="156" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=156'"><div class="bvMI-pad-4"></div><div class="bvMIt">Species protected automatically</div></div></div><div id="404" class="bvMenuSubTitle" onmouseover="this.className='bvMenuSubTitleOver'" onmouseout="this.className='bvMenuSubTitle'" ><em id="oc-t404" class="menu_deco fa-solid fa-square-plus"></em><div class="bvMI-pad-1"></div><div class="bi-l1t">Data Usage</div></div><div style="display:none" id="t404"><div id="405" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.dda-web.de/ornitho/datennutzung'"><div class="bvMI-pad-4"></div><div class="bvMIt">Use of ornitho Data</div></div><div id="1118" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=1118&item=15'"><div class="bvMI-pad-4"></div><div class="bvMIt">Reference lists, guide lines and forms</div></div><div id="406" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=406&item=92'"><div class="bvMI-pad-4"></div><div class="bvMIt">QR Codes from ornitho.de</div></div></div><div id="407" class="bvMenuSubTitle" onmouseover="this.className='bvMenuSubTitleOver'" onmouseout="this.className='bvMenuSubTitle'" ><em id="oc-t407" class="menu_deco fa-solid fa-square-plus"></em><div class="bvMI-pad-1"></div><div class="bi-l1t">Research Projects</div></div><div style="display:none" id="t407"><div id="408" class="bvMenuSub" onmouseover="this.className='bvMenuSubOver'" onmouseout="this.className='bvMenuSub'" onclick="location.href='https://www.ornitho.de/index.php?m_id=408&item=94'"><div class="bvMI-pad-4"></div><div class="bvMIt">Project Artenvielfalt</div></div></div></div></div> 227<!-- RESPONSIVE END LEFT --> 228 </div> 229 <div id="td-backdrop"></div> 230 <div id="td-page-content"> 231 <div id="ajaxErrorMessageDisplay"></div> 232
232<script> 233 //<![CDATA[ 234 //Global function that can be called by ajax functions to display error/result box 235 function errorMessageDisplay(json_result) 236 { 237 $('#ajaxErrorMessageDisplay').empty(); 238 var nbre_message_success = 0; 239 240 let fixed = 0; 241 242 if(Array.isArray(json_result)){ 243 json_result.forEach(function(entry) { 244 var style = entry.style; 245 var message = entry.text; 246 var status = entry.status; 247 248 if(typeof(style) !== "undefined" && typeof(message) !== "undefined" && typeof(status) !== "undefined") 249 { 250 251 if(status != "error" && status != "info" && status != "warning") 252 nbre_message_success++; 253 254 if(style == 'fixed') 255 fixed = 1; 256 257 var class_name = 'errorMessage'; 258 259 switch(status) 260 { 261 case 'error': 262 class_name = 'errorError'; 263 break; 264 case 'info': 265 class_name = 'errorInfo'; 266 break; 267 case 'warning': 268 class_name = 'errorWarning'; 269 break; 270 } 271 272 var display_style = ((class_name == 'errorMessage' && style == 'fade') || style == 'overlay') ? "style=\"position:absolute; z-index:100; width:100%\"" : ''; 273 if(style == 'fixed') { 274 display_style = "style=\"position:fixed;\""; 275 $("#ajaxErrorMessageDisplay").css("position", "fixed"); 276 } 277 else { 278 $("#ajaxErrorMessageDisplay").css("position", "absolute"); 279 } 280 281 var div_error_box = $('<div>',{'class' : class_name,'style':display_style}); 282 div_error_box.html(message); 283 284 $('#ajaxErrorMessageDisplay').append(div_error_box); 285 } 286 }); 287 } 288 289 if(nbre_message_success>0){ 290 $(".errorMessage").delay(6000).slideToggle(1000); 291 } 292 293 if(fixed) { 294 $(".errorMessage").delay(6000).fadeOut(1000); 295 $(".errorError").delay(6000).fadeOut(1000); 296 $(".errorInfo").delay(6000).fadeOut(1000); 297 $(".errorWarning").delay(6000).fadeOut(1000); 298 } 299 300 return nbre_message_success; 301 } 302 303 //Global function that will do some ajax on the link (we expect the link to provide utf8 json result) and it will send json to errorMessageDisplay so we can have a display of error message 304 //beforeFct: function that will be called before doing any ajax call (to activate wait icon for example ...) 305 //link: the url used for ajax call 306 //callbackFct: function used after ajax call and after displaying ErrorMessages 307 function ajaxToLink(beforeFct,used_method,link,send_data,callbackFct,sentData_contentType,sentData_processData) 308 { 309 beforeFct(); 310 $.ajax({
311 url: link, 312 method: used_method, 313 type: used_method, 314 data: send_data, 315 success: function(json_result) { 316 if(json_result===null) 317 { 318 callbackFct(0); 319 } 320 else{ 321 if(typeof(json_result['data'])!='undefined') 322 { 323 var nbre_message_success = errorMessageDisplay(json_result['data']['error_messages']); 324 callbackFct(nbre_message_success,json_result['data']['result']); 325 } 326 else{ 327 callbackFct(0); 328 } 329 } 330 }, 331 error: function(jqXHR, textStatus, errorThrown){ 332 callbackFct(0); 333 }, 334 contentType: (typeof(sentData_contentType)=='undefined')?'application/x-www-form-urlencoded; charset=UTF-8':sentData_contentType, 335 processData: (typeof(sentData_processData)=='undefined')?true:sentData_processData 336 }); 337 } 338 339 function sendErrorToService(error) { 340 var errorMessage = error.message; 341 var errorLine = error.lineNumber || error.line || 'N/A'; 342 var errorStack = error.stack || 'N/A'; 343 344 var errorData = { 345 message: errorMessage, 346 line: errorLine, 347 stack: errorStack, 348 url: 'core', 349 obid: '30' 350 }; 351 352 console.log(errorData); 353 354 $.ajax({
355 type: 'POST', 356 url: 'index.php?m_id=1351&backlink=skip&content=debug', 357 data: {data: JSON.stringify(errorData)}, 358 success: function(response) { 359 console.log('error message sucessfully sent'); 360 }, 361 error: function(xhr, status, error) { 362 console.log('error sending error message: ' + error); 363 } 364 }); 365 } 366 367 // ]]> 368 </script>
368 369 <!-- HEADER STOP HERE --> 370 <div id="td-main-table"> <!-- start middle responsive column --> 371 372
372<script src="https://cdnfiles1.biolovision.net/common/js/java_tools_1.js"></script>
372 373
373<script src="https://cdnfiles1.biolovision.net/common/js/query_ajax_endpage_19.js"></script>
373 374 375 <div id="core-main-title"> 376 <div class="pageTitle"> 377 </div> 378 </div> 379 380 <div style="display:none" class="rslides_container_top"></div> 381 <div class="rslides_container"> 382 <ul id="slider1" class="rslides"><li> <div id="SpeciesOfTheDayMapComponent"></div> 383
383<script type="module"> 384 import { locale, addTranslations, SpeciesOfTheDayMapComponent } from 'https://cdnfiles1.biolovision.net/common/components/components_1f6d7283.js'; 385 386 const dto = {"locale":"en","translations":{"CORE_TEXT_SPECIES_OF_THE_DAY_MAP_TITLE":"Observations of %s based on data entered since %s.","CORE_TEXT_SPECIES_OF_THE_DAY_CALL_TO_ACTION_TEXT":"Explore lots more information about the \u2018Species of the Day\u2019!","CORE_TEXT_SPECIES_OF_THE_DAY_CALL_TO_ACTION_BUTTON":"Learn more","DISPLAY_CUSTOM_POLYGON_NETWORK_ERROR":"Network error. Please try again later."},"basePath":"https:\/\/www.ornitho.de\/","speciesMapId":"2625","viewport":{"minLongitude":3.1664981886187,"maxLongitude":15.164732659117,"minLatitude":47.199153938505,"maxLatitude":55.998115828402},"countryId":1,"species":{"name":"Northern Nutcracker (ssp. macrorhynchos)","latinName":"Nucifraga caryocatactes macrorhynchos","id":"1174","image":{"src":"https:\/\/cdnfiles2.biolovision.net\/www.ornitho.de\/images\/birds\/TannenhaeherMPutze2-9559.jpg","alt":"Northern Nutcracker (ssp. macrorhynchos)","layout":"mirrored"}},"startDate":"2026-09-01","callToActionlink":"https:\/\/www.ornitho.de\/index.php?m_id=81&tab=tabs-stats&frmSpecies=1174","callToActionPlacement":"bottom-center","mobileBackground":"opaque","mobileAspectRatio":"constrained"} 387 locale.set(dto.locale); 388 addTranslations(dto.translations, dto.locale); 389 390 new SpeciesOfTheDayMapComponent(`SpeciesOfTheDayMapComponent`) 391 .mapProps({ 392 basePath: dto.basePath, 393 speciesMapId: dto.speciesMapId, 394 viewport: dto.viewport, 395 observations: dto.observations, 396 countryId: dto.countryId, 397 species: dto.species, 398 startDate: Temporal.PlainDate.from(dto.startDate), 399 callToActionlink: dto.callToActionlink, 400 callToActionPlacement: dto.callToActionPlacement, 401 mobileBackground: dto.mobileBackground, 402 mobileAspectRatio: dto.mobileAspectRatio 403 }) 404 .render(); 405 </script>
405 406 </li> <li style="height:100%;overflow: hidden;"><img 407 src="https://cdnfiles2.biolovision.net/www.ornitho.de/images/header/rotmilanMBoeniornitho2-6945.jpg" 408 alt="What are the aims of ornitho.de/lu and who stands behind it?"/> 409 <div class="head_caption">What are the aims of ornitho.de/lu and who stands behind it? <input onclick="window.location.href='https://www.dda-web.de/ornitho/info'" 410 name="login_button" type="submit" style="padding:0" class="submit" 411 value="Learn more"/> </div> 412 </li> 413 <li style="height:100%;overflow: hidden;"><img 414 src="https://cdnfiles2.biolovision.net/www.ornitho.de/images/header/GartenrotschwanzLThiessslider1-3669.jpg" 415 alt="What are observation lists and why are they so important?"/> 416 <div class="head_caption">What are observation lists and why are they so important? <input onclick="window.location.href='https://www.ornitho.de/index.php?m_id=20039'" 417 name="login_button" type="submit" style="padding:0" class="submit" 418 value="Learn more"/> </div> 419 </li> 420 <li style="height:100%;overflow: hidden;"><img 421 src="https://cdnfiles2.biolovision.net/www.ornitho.de/images/header/NewsbannerWVZ2-1010.jpg" 422 alt="Want to take part in bird monitoring? You can do it right around the corner!"/> 423 <div class="head_caption">Want to take part in bird monitoring? You can do it right around the corner! <input onclick="window.location.href='https://www.dda-web.de/monitoring/mrw/mitmachen'" 424 name="login_button" type="submit" style="padding:0" class="submit" 425 value="Learn more"/> </div> 426 </li> 427 <li style="height:100%;overflow: hidden;"><img 428 src="https://cdnfiles2.biolovision.net/www.ornitho.de/images/header/SliderSpendeFormation-7077.jpg" 429 alt="Happy with ornitho.de/lu? Then support us with a donation!"/> 430 <div class="head_caption">Happy with ornitho.de/lu? Then support us with a donation! <input onclick="window.location.href='https://www.dda-web.de/unterstuetzen/spenden/spendenformular'" 431 name="login_button" type="submit" style="padding:0" class="submit" 432 value="Learn more"/> </div> 433 </li> 434 <li style="height:100%;overflow: hidden;"><img 435 src="https://cdnfiles2.biolovision.net/www.ornitho.de/images/header/KranichMPutze2-4017.jpg" 436 alt=""/> 437 </li> 438 </ul> </div> 439 440
440<script src="https://cdnfiles1.biolovision.net/common/js/responsiveslides_1_55c.js"></script>
440 441
441<script src="https://cdnfiles1.biolovision.net/common/js/jquery.touchSwipe.1.6.min.js"></script>
441 442
442<script> 443 //<![CDATA[ 444 445 function resize() { 446 if($(window).width() > 1670) 447 { 448 //Mobile 449 $(".rslides_container").insertAfter(".rslides_container_news"); 450 } 451 else 452 { 453 //Desktop 454 $(".rslides_container").insertAfter(".rslides_container_top"); 455 //Leave original layout 456 } 457 } 458 459 $(function() { 460 461 $(window).resize(function() { 462 resize(); 463 }); 464 465 $(document).ready(function() { 466 resize(); 467 }); 468 469 $("#slider1").responsiveSlides({ 470 nav: true, 471 speed: 0, 472 timeout: 8000, 473 pager: true, 474 auto: true, 475 pause: true, 476 prevText: '<i class="fa fa-chevron-left fa-1x"></i>', 477 nextText: '<i class="fa fa-chevron-right fa-1x"></i>', 478 namespace: "large-btns" 479 }); 480 481 $("#slider1").swipe( { 482 swipeLeft: function(){ 483 $(".large-btns_nav.next").click(); 484 }, 485 swipeRight: function(){ 486 $(".large-btns_nav.prev").click(); 487 } 488 }); 489 490 }); 491 // ]]> 492 </script>
492 493 494 <div style="clear:both;"></div> 495 496 <div class="block-news" style="overflow: hidden"> 497 <div class="right_news"> 498 <div class="container-fluid-home"> 499 <div style="display:none" class="rslides_container_right_news"></div> 500 <div class="rslides_container2"> 501 <ul id="slider2" class="rslides"> 502 <!-- Moon --> 503 <li style="overflow:hidden;margin-bottom: 2rem;"> 504 <div id="large-btns-right2_s_spinner_0" style="height:18rem;display:none;align-items:center;justify-content:center;"> 505 <em class="fa-solid fa-spinner fa-spin fa-1x-spin"></em> 506 </div> 507 <div class="moonbox" style="flex:1"> <style> 508 .moon {opacity:0.6;} 509 .moonimage {position:absolute;width:120px;} 510 .glow {position:absolute;} 511 512 .moon-left,.moon-right {display:inline-block;width:60px;position:relative;margin:0;} 513 514 .moon-left .bg {fill:black;} 515 .moon-left .fg {fill:white;transform-origin: 0 0;} 516 517 .moon-right .fg {transform: scaleX(1);} 518 .moon-left .fg {transform: scaleX(0) translateX(0);} 519 .centered-content { 520 position:absolute; 521 background-color: black; 522 width: 50vw; 523 height: 50vw; 524 } 525 </style> 526
526<script> 527 Math.radians = function(degrees) { 528 return degrees * Math.PI / 180; 529 }; 530 531 function updateMoon(phase, moondiv, size) { 532 var phaseScale = 1, 533 phaseTrans = 1, 534 phaseRightScale = 0, 535 midMoonAge = 29.53 / 2; 536 halfMidMoonAge = midMoonAge / 2; 537 538 //$('#' + moondiv + ' .moonday').html(phase); 539 540 var MoonRightFg = $('#' + moondiv + ' .moon .moon-right .fg'); 541 var MoonLeftFg = $('#' + moondiv + ' .moon .moon-left .fg'); 542 543 544 if (phase <= midMoonAge) 545 { 546 phaseTrans = size / 6; 547 548 if (phase <= halfMidMoonAge) 549 { 550 phaseRightScale = (1 - phase / halfMidMoonAge); 551 } 552 else 553 { 554 phaseScale = (1 - (phase - halfMidMoonAge) / halfMidMoonAge); 555 phaseTrans = size / 2 * phaseScale; 556 } 557 558 MoonRightFg.css({ 559 'transform': 'scaleX(' + phaseRightScale + ')' 560 }); 561 562 MoonLeftFg.css({ 563 'transform': 'translate(' + phaseTrans + 'px,0) scaleX(' + (1 - phaseScale) + ')' 564 }); 565 } 566 else 567 { 568 phaseTrans = 0; 569 570 $('#' + moondiv + ' .moon .moon-left .bg').css({ 571 'fill': 'white' 572 }); 573 574 $('#' + moondiv + ' .moon .moon-right .bg').css({ 575 'fill': 'black' 576 }); 577 578 579 if (phase <= midMoonAge + halfMidMoonAge) 580 { 581 phaseRightScale = (1 - (phase - halfMidMoonAge) / halfMidMoonAge); 582 583 MoonRightFg.css({ 584 'fill': 'white' 585 }); 586 587 } 588 else 589 { 590 phaseScale = (1 - (phase - halfMidMoonAge) / halfMidMoonAge); 591 phaseTrans = -size / 2 * phaseScale; 592 593 MoonLeftFg.css({ 594 'fill': 'black' 595 }); 596 } 597 598 MoonLeftFg.css({ 599 'transform': 'translate(' + phaseTrans + 'px,0) scaleX(' + (1 + phaseScale) + ')' 600 }); 601 602 603 MoonRightFg.css({ 604 'transform': 'scaleX(' + (1 + phaseRightScale) + ')' 605 }); 606 } 607 } 608 609 function sleep(ms) { 610 return new Promise(resolve => setTimeout(resolve, ms)); 611 } 612 </script>
612 613
613<script> 614 $(document).ready(function(){ 615 updateMoon(20.805263635477, 'moon', 120); 616 }) 617 </script>
617 618 <div id="moon"> 619 <div class="glow"> 620 <svg> 621 <defs 622 id="defs13197"> 623 <filter 624 id="filter6851" 625 color-interpolation-filters="sRGB" 626 x="-0.058809649" 627 y="-0.058790288" 628 width="1.1176193" 629 height="1.1175806"> 630 <feGaussianBlur 631 id="feGaussianBlur6853" 632 stdDeviation="2.2880777"></feGaussianBlur> 633 </filter> 634 </defs> 635 <circle 636 id="path6735" 637 style="fill:#cccccc;stroke-width:0.23687;filter:url(#filter6851)" 638 cx="64" cy="64" r="60" stroke="none" stroke-width="1"></circle> 639 </svg> 640 </div> 641 <div class="moonimage" style="margin:4px"> 642 <img alt="Waning Gibbous" src="https://cdnfiles1.biolovision.net/common/images/moon/moon.svg"/> 643 </div> 644 <div class="moon" style="margin:4px"> 645 <svg height="120" width="60" class="moon-left"> 646 <circle cx="60" cy="60" r="60" stroke="none" fill="white" class="bg"></circle> 647 <circle cx="60" cy="60" r="60" stroke="none" fill="black" class="fg"></circle> 648 </svg><svg height="120" width="60" class="moon-right"> 649 <circle cx="0" cy="60" r="60" stroke="none" fill="white" class="bg"></circle> 650 <circle cx="0" cy="60" r="60" stroke="none" fill="black" class="fg"></circle> 651 </svg> 652 </div> 653 <div style="clear:both"></div> 654 </div> 655 656 <div class="moontextwhite"> 657 <span class="text-bold">Kassel (HE, KS*), Friday, October 2nd, 2026</span><br/> 658 Waning Gibbous (20 days)<br/>moonrise at 21h52, moonset at 15h03 </div> 659 <div class="moontext"> 660 Sun: sunrise at 07h25, sunset at 18h57<br/>Day : dawn at 06h52 and dusk at 19h30 </div> 661 </div> 662 </li> 663 <!-- Livemap --> 664 <li style="overflow: hidden;height: 18rem;margin-bottom: 2rem;"> 665 <div id="large-btns-right2_s_spinner_1" style="height:18rem;display:none;align-items:center;justify-content:center;"> 666 <em class="fa-solid fa-spinner fa-spin fa-1x-spin"></em> 667 </div> 668 </li> 669 <!-- Stats --> 670 <li style="overflow: hidden;margin-bottom: 2rem;"> 671 <div id="large-btns-right2_s_spinner_2" style="height:18rem;display:none;align-items:center;justify-content:center;"> 672 <em class="fa-solid fa-spinner fa-spin fa-1x-spin"></em> 673 </div> 674 </li> 675 <!-- windly --> 676 <li style="overflow: hidden;height:18rem;margin-bottom: 2rem;"> 677 <style> 678 .responsive-iframe-container { 679 position: relative; 680 height: 0; 681 min-height: 100%; 682 } 683 684 .responsive-iframe-container iframe { 685 position: absolute; 686 top: 0; 687 left: 0; 688 width: 100%; 689 height: 100%; 690 } 691 </style> 692 <div id="large-btns-right2_s_spinner_3" style="height:18rem;display:none;align-items:center;justify-content:center;"> 693 <em class="fa-solid fa-spinner fa-spin fa-1x-spin"></em> 694 </div> 695 <div class="responsive-iframe-container"> 696 <iframe id="windlyiFrame" title="windy.com" width="650" height="288" src="" style="display:none;"></iframe> 697 </div> 698 </li> 699 <!-- EBP --> 700 <li style="overflow: hidden;margin-bottom: 2rem;"> 701 <div id="large-btns-right2_s_spinner_4" style="height:18rem;display:none;align-items:center;justify-content:center;"> 702 <em class="fa-solid fa-spinner fa-spin fa-1x-spin"></em> 703 </div> 704 </li> 705 </ul> 706 </div> 707 708
708<script src="https://cdnfiles1.biolovision.net/common/js/responsiveslides_1_55c.js"></script>
708 709
709<script src="https://cdnfiles1.biolovision.net/common/js/jquery.touchSwipe.1.6.min.js"></script>
709 710
710<script> 711 //<![CDATA[ 712 var livemap = { 713 id_group : 0, 714 img_h : 948, 715 x_1 : 0, 716 y_1 : 948, 717 lat_1 : 46.9636, 718 lon_1 : 3.06044, 719 x_2 : 764, 720 y_2 : 0, 721 lat_2 : 56.2227, 722 lon_2 : 15.2982, 723 last_id : 0, 724 live : true 725 }; 726 727 var livestats = { 728 id_group : 0, 729 last_id : 0, 730 part : 'today', 731 live : true 732 }; 733 734 // ]]> 735 </script>
735 736 737
737<script src="https://cdnfiles1.biolovision.net/common/js/livemap_core_n.js"></script>
737 738 <style> 739 :root { 740 --fsliderTab_1_icon: "\f186";--fsliderTab_2_icon: "\f279";--fsliderTab_3_icon: "\f3ca";--fsliderTab_4_icon: "\f72e";--fsliderTab_5_icon: "\f7a2"; } 741 </style> 742
742<script> 743 //<![CDATA[ 744 745 function resize_right(){ 746 if($(window).width() > 1670) 747 { 748 //Mobile 749 $(".rslides_container2").insertAfter(".rslides_container_right_news"); 750 } 751 else 752 { 753 //Desktop 754 $(".rslides_container2").insertAfter(".rslides_container_right_news"); 755 //Leave original layout 756 } 757 } 758 759 function display_ebp() 760 { 761 762 return `<a style="background-color: #2a2d35" target="_blank" href="https://eurobirdportal.org/embedded/ger/en/22712252/counts/52weeks"> 763 <iframe style="z-index:100;position:relative" title="https://eurobirdportal.org/" width="100%" height="288px" src="https://eurobirdportal.org/embedded/ger/en/22712252/counts/52weeks" allowfullscreen></iframe> 764 <div style="top:0;z-index: 101;position: absolute;height:20rem;width:100%;cursor: pointer;background-color: transparent;" id="ebpDiv"></div> 765 </a>`; 766 } 767 768 769 function display_livemap() 770 { 771 772 return ' <div class="row box_head" style="padding:5px;height:auto"> <div class="col-sm-12 text-bold">Records in realtime</div> </div> <div id="realtime-sightings-livemap" class="col-sm-12 d-flex flex-wrap" style="height:16.2rem;"> <div class="row col-home-realtime" style="padding-top:0;padding-bottom:0;flex:1;height:100%;min-height:200px;
772min-width:200px;float:none;margin:auto;overflow:hidden"> <div id="livemap" style="height:100%;width: 100%;"> <em id="livemap_wait" class="fa-solid fa-spinner fa-spin fa-1x-spin"></em> </div> </div> </div> '; 773 } 774 775 function display_stats() 776 { 777 778 return ' <div id="realtime-sightings-stats" style="height:18rem;"> <nav aria-label="stats"> <div class="bvNav bvNav-tabs" id="nav-tab-stats" role="tablist"> <span class="bvNav-item nav-link-stats bvNav-link active" id="nav-today-tab" data-toggle="tab" role="tab" aria-controls="nav-today" aria-selected="true">today</span> <span class="bvNav-item nav-link-stats bvNav-link" id="nav-yesterday-tab" data-toggle="tab" role="tab" aria-controls="nav-yesterday" aria-selected="false">yesterday</span> <span class="bvNav-item nav-link-stats bvNav-link" id="nav-month-tab" data-toggle="tab" role="tab" aria-controls="nav-month" aria-selected="false">this month</span> <span class="bvNav-item nav-link-stats bvNav-link" id="nav-year-tab" data-toggle="tab" role="tab" aria-controls="nav-year" aria-selected="false">2026</span> </div> </nav> <div class="tab-content" id="nav-tabContent-stats"> <div class="bvPane tab-pane fade show active" id="nav-today" role="tabpanel" aria-labelledby="nav-today-tab"></div> <div class="bvPane tab-pane fade" id="nav-yesterday" role="tabpanel" aria-labelledby="nav-yesterday-tab"></div> <div class="bvPane tab-pane fade" id="nav-month" role="tabpanel" aria-labelledby="nav-month-tab"></div> <div class="bvPane tab-pane fade" id="nav-year" role="tabpanel" aria-labelledby="nav-year-tab"></div> </div> </div> '; 779 } 780 781 function get_stats_button(icon, title, cnt) 782 { 783 return `<div class="bvbspanel bvbspanel-primary bvbspanel-heading"> 784 <div class="bspanel-heading"> 785 <a class="falinkwhite" href="index.php?m_id=79&tab=tabs-contrib"> 786 <em class="fa ` + icon + ` fa-2x"></em> 787 </a> 788 <div> 789 <div id="statistics-sighting-number" class="box_stat text-bold"> ` + cnt + ` </div> 790 <span> ` + title + ` </span> 791 </div> 792 </div> 793 </div>`; 794 } 795 796 function fill_stats_button(targetId, data) 797 { 798 var statsHTML = get_stats_button('fa-binoculars', 'sightings', data.nb_sightings.toLocaleString(navigator.language)) 799 + get_stats_button('fa-user-circle', 'observers', data.nb_observers.toLocaleString(navigator.language)) 800 + get_stats_button('fa-rectangle-list', 'lists', data.nb_forms.toLocaleString(navigator.language)) 801 + get_stats_button('fa-dna', 'species', data.nb_species.toLocaleString(navigator.language)); 802 803 $(targetId).html(statsHTML); 804 } 805 806 function refresh_stats_button(jsonData) 807 { 808 var yearData = jsonData.year; 809 var monthData = jsonData.month; 810 var yesterdayData = jsonData.yesterday; 811 var todayData = jsonData.today; 812 813 fill_stats_button("#nav-today", todayData); 814 fill_stats_button("#nav-yesterday", yesterdayData); 815 fill_stats_button("#nav-month", monthData); 816 fill_stats_button("#nav-year", yearData); 817 } 818 819 $(function() { 820 821 var slider_array = ["moon","livemap","stats","windly","ebp"]; 822 823 $(window).resize(function() { 824 resize_right(); 825 }); 826 827 $(document).ready(function() { 828 resize_right(); 829 }); 830 831 var slider2 = $("#slider2"); 832 833 slider2.responsiveSlides({ 834 nav: true, 835 speed: 0, 836 timeout: 8000, 837 pager: true,
838 auto: false, 839 pause: true, 840 prevText: '<i class="fa fa-chevron-left fa-1x"></i>', 841 nextText: '<i class="fa fa-chevron-right fa-1x"></i>', 842 namespace: "large-btns-right", 843 after: function(index) { 844 845 var spinner = $('#large-btns-right2_s_spinner_' + index); 846 var panel = $('#large-btns-right2_s' + index); 847 848 spinner.css('display', 'flex'); 849 850 livemap.stop(); 851 livestats.stop(); 852 853 if (slider_array[index] === 'stats') 854 { 855 panel.html(display_stats()); 856 857 $("#nav-today").html(get_stats_button('fa-binoculars', 'sightings', 0) 858 + get_stats_button('fa-user-circle', 'observers', 0) 859 + get_stats_button('fa-rectangle-list', 'lists', 0) 860 + get_stats_button('fa-dna', 'species', 0)); 861 862 863 $(".nav-link-stats").click(function (e) { 864 var nav_tab = $(this).parent(); 865 var tab_content = $(this).parent().parent().next(); 866 var nav_active = $(this); 867 var controls = $(this).attr("aria-controls"); 868 869 var i = 0; 870 nav_tab.children().each(function () { 871 if (nav_active.index() === i) 872 $(this).addClass("active"); 873 else 874 $(this).removeClass("active"); 875 876 i++; 877 }); 878 879 tab_content.children().each(function () { 880 if ($(this).attr("id") === controls) 881 $(this).addClass("active"); 882 else 883 $(this).removeClass("active"); 884 }); 885 }); 886 887 livestats.run(); 888 } 889 890 if (slider_array[index] === 'ebp') 891 { 892 panel.html(display_ebp()); 893 } 894 895 if (slider_array[index] === 'windly') 896 { 897 var iframe = $('#windlyiFrame'); 898 899 if (iframe.attr('src') === '') { 900 iframe.attr('src', "https://embed.windy.com/embed2.html?lat=51.3115151083163&lon=9.46039220983643&detailLat=51.3115151083163&detailLon=9.46039220983643&width=650&height=320&zoom=4&level=surface&overlay=wind&product=ecmwf&menu=&message=true&marker=&calendar=now&pressure=true&type=map&location=coordinates&detail=&metricWind=km%2Fh&metricTemp=%C2%B0C&radarRange=-1"); 901 iframe.css('display', 'block'); 902 } 903 } 904 905 if (slider_array[index] === 'toplist') 906 { 907 panel.html(display_toplist()); 908 } 909 910 if (slider_array[index] === 'livemap') 911 { 912 panel.html(display_livemap()); 913 livemap.run(); 914 915 } 916 917 spinner.css('display', 'none'); 918 } 919 }); 920 921 slider2.swipe({ 922 swipeLeft: function(){ 923 $(".large-btns-right_nav.next").click(); 924 }, 925 swipeRight: function(){ 926 $(".large-btns-right_nav.prev").click(); 927 } 928 }); 929 }); 930 931 // ]]> 932 </script>
932 933 934 <div style="clear:both;"></div> 935 936
936<script> 937 //<![CDATA[ 938 function send_das_stat(id_das) { 939 $.post("index.php?m_id=63&content=ads_stat_click&id_ads=" + id_das,{}); 940 } 941 // ]]> 942 </script>
942 943 <a onclick="send_das_stat(12);" rel='nofollow' href=' https://orniwelt.de/p/202206-carl-zeiss-conquest-gavia-85mm-paket'> 944 <div class="rightlogostretch rightlogostretch12"></div> 945 <style> 946 .rightlogostretch12 { 947 background-image: url("https://cdnfiles2.biolovision.net/www.ornitho.de/images/das/small/20260211-Banner-Ornitho-2600x320px-01-2595.jpg"); 948 } 949 950 @media (max-width: 480px), (min-width: 901px) and (max-width: 1280px) { 951 .rightlogostretch12 { 952 background-image: url("https://cdnfiles2.biolovision.net/www.ornitho.de/images/das/xsmall/20260211-Banner-Ornitho-2600x320px-01-2595.jpg"); 953 } 954 } 955 956 @media (min-width: 2160px) { 957 .rightlogostretch12 { 958 background-image: url("https://cdnfiles2.biolovision.net/www.ornitho.de/images/das/20260211-Banner-Ornitho-2600x320px-01-2595.jpg"); 959 } 960 } 961 </style> 962 </a> 963 <!-- Sightings--> 964 <div> 965 <div class="verif_content_box" style="display:none"> 966 <div class="row box_head box_header"> 967 <div class="col-sm-12 text-bold text-ellipsis">My observations under verification</div> 968 </div> 969 <div style="padding:1rem; background-color: rgba(255, 204, 102, 0.68);"> 970 <div id="verif_content"></div> 971 <div class="text-center"> 972 <div id="verif_content_more" class="submit" style="display:none;" onclick="obsQueryEndPage.queryNewContent();">More sightings</div> 973 </div> 974 <div class="verif_content_container_wait text-center"> 975 <em id="verif_content_wait" class="fa-solid fa-spinner fa-spin fa-1x-spin"></em> 976 </div> 977 <div class="clearfix"></div> 978 </div> 979 </div> 980 981 982 <div class="rc_content_box" style="display:none"> 983 <div class="row box_head box_header"> 984 <div class="col-sm-12 text-bold text-ellipsis">My records without rarity report</div> 985 </div> 986 <div style="padding:1rem;background-color: rgba(255, 204, 102, 0.68);"> 987 <div id="rc_content"></div> 988 <div class="text-center"> 989 <div id="rc_content_more" class="submit" style="display:none;" onclick="obsQueryEndPage.queryNewContent();">More sightings</div> 990 </div> 991 <div class="rc_content_container_wait text-center"> 992 <em id="rc_content_wait" class="fa-solid fa-spinner fa-spin fa-1x-spin"></em> 993 </div> 994 <div class="clearfix"></div> 995 </div> 996 </div> 997 998 <nav> 999 <div class="bvNav bvNav-tabs" id="nav-tab" role="tablist"> 1000 <span onclick="setTimeout(function() {$(window).resize();}, 200);" class="bvNav-item nav-link bvNav-link active" style="" id="nav-sightings-tab" data-toggle="tab" role="tab" aria-controls="nav-sightings" aria-selected="true">Latest observations</span> 1001 <span onclick="setTimeout(function() {$(window).resize();}, 200);" class="bvNav-item nav-link bvNav-link" style="display:none;" id="nav-sightings-selected-tab" data-toggle="tab" role="tab" aria-controls="nav-sightings-selected" aria-selected="false">The most interesting observations</span> 1002 </div> 1003 </nav> 1004 <div class="tab-content" id="nav-sightingsContent"> 1005 <div class="tab-pane fade show active" id="nav-sightings" role="tabpanel" aria-labelledby="nav-news-tab"> 1006
1006<script> 1007 //<![CDATA[ 1008 1009 function print_svg_javascript(svg) 1010 { 1011 var ret_string = ''; 1012 1013 if (svg != '') 1014 { 1015 ret_string += "<div style=\"display:inline-block;vertical-align: middle\"><svg width=\"12\" height=\"12\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g>"; 1016 ret_string += svg; 1017 ret_string += "</g></svg></div>"; 1018 } 1019 1020 return ret_string; 1021 } 1022 1023 function generate_image(species_array, day_number, is_hidden, is_admin_hidden, is_new, is_second_hand, no_link, show_transparent, is_favorite, protocol_name, protocol_svg, admin_hidden_type) { 1024 const committees_urls = {"DAK":"https:\/\/www.dda-web.de\/dak\/meldebogen","AKBW":"https:\/\/www.avikombw.de\/","BAK":"https:\/\/www.og-bayern.de\/bak\/","AKBB":"https:\/\/www.abbo-info.de\/nabu\/akbb.php","AKH":"https:\/\/www.hgon.de\/beobachten\/monitoring\/avifaunistische-kommission\/","SKMV":"https:\/\/www.oamv.de\/seltenheiten-ak-m-v.html","AKN":"https:\/\/www.aknb-web.de\/de\/aknb","AKNW":"https:\/\/www.nw-ornithologen.de\/index.php\/aktivitaeten\/avikom","AKRP":"https:\/\/gnor.de\/akrp\/","AKSL":"https:\/\/www.ornithologie-saar.de\/","AKS":"https:\/\/vso-web.de\/avifaunistik\/avifaunistische-kommission-sachsen-aksn\/","AKST":"https:\/\/www.osa-internet.de\/voegel-in-sachsen-anhalt\/seltenheiten-kommission","AKSHH":"https:\/\/www.oagsh.de\/seltenheiten","AKT":"https:\/\/ornithologen-thueringen.de\/avifaunistik\/avifaunistische-kommission","HAK":"https:\/\/www.oag-helgoland.de\/index.php\/hsk-meldebogen\/","AKB":"https:\/\/www.bodensee-ornis.de\/"}; 1025 var color = "transparent"; 1026 var alt = '' + 'Common species'; 1027 var atlas_start = species_array['atlas_start']; 1028 var atlas_end = species_array['atlas_end']; 1029 var category = species_array['category']; 1030 var has_synonyms = 0; 1031 1032 var ret_string = ""; 1033 1034 if (is_admin_hidden !== 0) { 1035 if(admin_hidden_type === 'refused') { 1036 ret_string += '<em class="fas fa-check-exclamation" title="The record is incorrect, mark it as invalid"></em>'; 1037 } 1038 else if(admin_hidden_type === 'incomplete') { 1039 ret_string += '<em class="fas fa-check-wrench" title="The record is correct, request additional information"></em>'; 1040 } 1041 else { 1042 ret_string += '<em class="fas fa-check-question" title="The record is probably wrong, request a modification"></em>'; 1043 } 1044 } 1045 1046 if (is_new !== 0) { 1047 ret_string += '<em title="New since my last visit" class="fas fa-new"></em>'; 1048 } 1049 1050 //Note : alt and title are empty because normally in php we would do a $language->get_string('OBSERVATIONS_TEXT_NAME_' . $protocol_name) but we have access to protocol_name only in javascript but there is no equivalent to $language->get_string in javascript... we should print all the protocols before execution and then print from there? (same for rarity_committee) 1051 if (protocol_name !== '') { 1052 if (protocol_name === 'full_form') { 1053 ret_string += '<em class="fas fa-full-list" title="Data coming from an complete observation list"></em>'; 1054 } 1055 else if (protocol_name === 'partial_form') { 1056 ret_string += '<em class="fas fa-partial-list" title="This sighting is part of a partial list"></em>'; 1057 } 1058 else { 1059 ret_string += print_svg_javascript(protocol_svg); 1060 } 1061 } 1062 1063 if (is_second_hand !== 0) { 1064 ret_string += '<em class="fas fa-second-hand" title="Second-hand data (agreement of observer necessary!)"></em>'; 1065 } 1066 1067 if (is_hidden !== 0) { 1068 ret_string += '<em class="fas fa-keylock-yellow" title="Hidden observation"></em>'; 1069 } 1070 1071 if (is_favorite !== 0) { 1072 ret_string += '<em class="fas fa-ok" title="DISPLAY_PAGE_TEXT_FAVORITE"></em>'; 1073 } 1074 1075 if (typeof species_array['rarity_committee'] === 'object') { 1076 Object.entries(species_array['rarity_committee']).forEac
1076h(([committee, status]) => { 1077 let color; 1078 1079 if (committee === 'LHK') { 1080 color = '#83dafa'; 1081 } else if (['CAVS', 'KF', 'CHN', 'DAK', 'SEO'].includes(committee)) { 1082 color = '#f7ef18'; 1083 } else { 1084 color = 'white'; 1085 } 1086 1087 1088 if(committees_urls[committee] !== undefined) 1089 ret_string += '<a href= "' + committees_urls[committee] + '" target="_blank">'; 1090 ret_string += `<em class="fas fa-rc" style="--fa-secondary-color:${color}"></em>`; 1091 1092 if (status === 'ACCEPTED') { 1093 ret_string += `<em class="fas fa-ok"></em>`; 1094 } else if (status === 'REJECTED') { 1095 ret_string += `<em class="fas fa-cancel"></em>`; 1096 } 1097 if(committees_urls[committee] !== undefined) 1098 ret_string += '</a>'; 1099 }); 1100 } 1101 1102 if (category === 'A') { 1103 color = "red"; 1104 alt = '' + 'Scarce or uncommon species (announce every observation, category A)'; 1105 } 1106 1107 if (category === 'B' || category === 'BH') { 1108 color = "orange"; 1109 alt = '' + 'Less-common to rare breeding bird species for which, if possible, all observations should be reported and for which the number of individuals observed should be stated as precisely as possible with each report (especially during the breeding season; \"ADEBAR species\"). '; 1110 } 1111 1112 if (category === 'H' || category === 'BH') { 1113 if (day_number <= 46 || day_number >= 334) { 1114 color = "blue"; 1115 alt = '' + 'Uncommon wintering species (announce at least sightings occurring between 1st December and 15th February, category H)'; 1116 } 1117 } 1118 1119 if (show_transparent !== 0 || color !== 'transparent') { 1120 ret_string += '<em title="' + alt + '" class="fas fa-category-'+color+'"></em>'; 1121 } 1122 1123 switch(has_synonyms) 1124 { 1125 case 1: 1126 ret_string += '<em class="fas fa-synonym" title="Synonymous taxa"></em>'; 1127 break; 1128 case 2: 1129 break; 1130 } 1131 1132 return ret_string; 1133 } 1134 // ]]> 1135 </script>
1135 1136
1136<script> 1137 //<![CDATA[ 1138 function get_rarity_color(rarity) 1139 { 1140 var color = "-"; 1141 1142 switch(rarity) 1143 { 1144 case 'veryrare': 1145 color = '' + '#CC3300'; 1146 break; 1147 1148 case 'rare': 1149 color = '' + '#CC3300'; 1150 break; 1151 1152 case 'never': 1153 color = '' + '#CC0099'; 1154 break; 1155 1156 case 'escaped': 1157 color = '' + '#3366FF'; 1158 break; 1159 1160 case 'unusual': 1161 color = '' + '#000000'; 1162 break; 1163 1164 case 'common': 1165 color = '' + '#000000'; 1166 break; 1167 1168 case 'verycommon': 1169 color = '' + '#000000'; 1170 break; 1171 } 1172 1173 if (color == '-') 1174 return "#000000"; // black 1175 1176 return color; 1177 } 1178 // ]]> 1179 </script>
1179 1180 <div> 1181 <p class="home-last-sightings-buttons"><a class="alink" href="https://www.ornitho.de/index.php?m_id=5&sp_DOffset=5">[Display latest observations]</a></p> 1182 </div> 1183 <div id="observation_content"></div> 1184 <div class="text-center" style="justify-items: center;"> 1185 <div id="observation_content_more" class="submit topmorebutton" style="display:none;" onclick="obsQueryEndPage.queryNewContent();">More sightings</div> 1186 </div> 1187 <div class="observation_content_container_wait"> 1188 <em id="observation_content_wait" class="fa-solid fa-spinner fa-spin fa-1x-spin"></em> 1189 </div> 1190 </div> 1191 <div class="tab-pane fade" id="nav-sightings-selected" role="tabpanel" aria-labelledby="nav-schedules-tab" style="display:none;"> 1192 <p class="home-last-sightings-buttons"><a class="alink" href="https://www.ornitho.de/index.php?m_id=1662">[Archives]</a></p> 1193 </div> 1194 </div> 1195 </div> 1196 </div> 1197 </div> 1198 <div class="left_news"> 1199 <div class="container-fluid"> 1200 <div style="display:none" class="rslides_container_news"></div> 1201 1202 <div class="row hidden-xs-down" style="margin-left:7px;"> <!--Version longue visible si pas sur portait phones--> 1203 <div class="col-md-12"> 1204 <div class="textintro_wide"><em>Ornitho.de / lu</em> is the internet portal for bird watching and population surveys in Germany and Luxembourg. It is run by the <a target="_blank" href="https://www.dda-web.de">Dachverband Deutscher Avifaunisten (DDA) e.V.</a> (Federation of German Avifaunists) and <a target="_blank" href="https://www.naturemwelt.lu">natur&ëmwelt</a>, respectively, supported by and in close cooperation with all national ornithological associations, many regional and local working groups, and federal and state nature conservation authorities. <em>Ornitho.de / lu</em> aim to collate data on bird life, make it available in a verified form for scientific evaluation and use it for nature conservation purposes. In addition, <em>ornitho.de</em> and <em>ornitho.lu</em> aim to bring together people interested in bird life, inspire people to take an interest in avifauna and support environmental education.</div> </div> 1205 </div> 1206 1207 <div class="row hidden-sm-up" style="margin-left:7px;"> <!--Version courte visible uniquement sur portait phones--> 1208 <div class="col-md-12"> 1209 <div class="textintro_narrow"><em>Ornitho.de / lu</em> is the internet portal for bird watching and population surveys in Germany and Luxembourg. It is run by the <a target="_blank" href="https://www.dda-web.de">Dachverband Deutscher Avifaunisten (DDA) e.V.</a> (Federation of German Avifaunists) and <a target="_blank" href="https://www.naturemwelt.lu">natur&ëmwelt</a>, respectively, supported by and in close cooperation with all national ornithological associations, many regional and local working groups, and federal and state nature conservation authorities. <em>Ornitho.de / lu</em> aim to collate data on bird life, make it available in a verified form for scientific evaluation and use it for nature conservation purposes. In addition, <em>ornitho.de</em> and <em>ornitho.lu</em> aim to bring together people interested in bird life, inspire people to take an interest in avifauna and support environmental education.</div> </div> 1210 </div> 1211 1212 <div style="margin: 8px"> 1213 <div id="LastObsBannerComponent"></div> 1214 </div> 1215
1215<script type="module"> 1216 import { locale, addTranslations, LastObsBannerComponent } from 'https://cdnfiles1.biolovision.net/common/components/components_1f6d7283.js'; 1217 1218 const dto = {"locale":"en","translations":{"CORE_TEXT_NEW_ITEM":"New since my last visit","DISPLAY_PAGE_TEXT_ADMIN_HIDDEN_INCOMPLETE":"The record is correct, request additional information","DISPLAY_PAGE_TEXT_ADMIN_HIDDEN_QUESTION":"The record is probably wrong, request a modification","DISPLAY_PAGE_TEXT_ADMIN_HIDDEN_REFUSED":"The record is incorrect, mark it as invalid","DISPLAY_PAGE_TEXT_FAVORITE":"DISPLAY_PAGE_TEXT_FAVORITE","OBSERVATIONS_TEXT_NOT_COMMON_BREEDER":"Less-common to rare breeding bird species for which, if possible, all observations should be reported and for which the number of individuals observed should be stated as precisely as possible with each report (especially during the breeding season; \"ADEBAR species\"). ","OBSERVATIONS_TEXT_NOT_COMMON_WINTER":"Uncommon wintering species (announce at least sightings occurring between 1st December and 15th February, category H)","OBSERVATIONS_TEXT_RARE_SPECIES":"Scarce or uncommon species (announce every observation, category A)"},"basePath":"https:\/\/www.ornitho.de\/","rarityCommitteeUrls":{"DAK":"https:\/\/www.dda-web.de\/dak\/meldebogen","AKBW":"https:\/\/www.avikombw.de\/","BAK":"https:\/\/www.og-bayern.de\/bak\/","AKBB":"https:\/\/www.abbo-info.de\/nabu\/akbb.php","AKH":"https:\/\/www.hgon.de\/beobachten\/monitoring\/avifaunistische-kommission\/","SKMV":"https:\/\/www.oamv.de\/seltenheiten-ak-m-v.html","AKN":"https:\/\/www.aknb-web.de\/de\/aknb","AKNW":"https:\/\/www.nw-ornithologen.de\/index.php\/aktivitaeten\/avikom","AKRP":"https:\/\/gnor.de\/akrp\/","AKSL":"https:\/\/www.ornithologie-saar.de\/","AKS":"https:\/\/vso-web.de\/avifaunistik\/avifaunistische-kommission-sachsen-aksn\/","AKST":"https:\/\/www.osa-internet.de\/voegel-in-sachsen-anhalt\/seltenheiten-kommission","AKSHH":"https:\/\/www.oagsh.de\/seltenheiten","AKT":"https:\/\/ornithologen-thueringen.de\/avifaunistik\/avifaunistische-kommission","HAK":"https:\/\/www.oag-helgoland.de\/index.php\/hsk-meldebogen\/","AKB":"https:\/\/www.bodensee-ornis.de\/"},"displayAbhIcons":1,"speciesLatinFirst":0} 1219 locale.set(dto.locale); 1220 addTranslations(dto.translations, dto.locale); 1221 1222 new LastObsBannerComponent(`LastObsBannerComponent`) 1223 .mapProps({ 1224 basePath: dto.basePath, 1225 rarityCommitteeUrls: dto.rarityCommitteeUrls, 1226 displayAbhIcons: dto.displayAbhIcons, 1227 speciesLatinFirst: dto.speciesLatinFirst 1228 }) 1229 .render(); 1230 </script>
1230 1231 <nav aria-label="News"> 1232 <div class="bvNav bvNav-tabs" id="nav-tab" role="tablist"> 1233 <span class="bvNav-item nav-link bvNav-link active" id="nav-news-tab" data-toggle="tab" role="tab" aria-controls="nav-news" aria-selected="true">News</span> 1234 <span class="bvNav-item nav-link bvNav-link" style="display: none;" id="nav-schedules-tab" data-toggle="tab" role="tab" aria-controls="nav-schedules" aria-selected="false">On your diary</span> 1235 <span class="bvNav-item nav-link bvNav-link" style="display: none;" id="nav-report-tab" data-toggle="tab" role="tab" aria-controls="nav-report" aria-selected="false">Reports</span> 1236 <span class="bvNav-item nav-link bvNav-link" style="display: none;" id="nav-comment-observation-tab" data-toggle="tab" role="tab" aria-controls="nav-comment-observation" aria-selected="false">Comments on sightings</span> 1237 <span class="bvNav-item nav-link bvNav-link" style="display: none;" id="nav-comment-media-tab" data-toggle="tab" role="tab" aria-controls="nav-comment-media" aria-selected="false">Comments on photos</span> 1238 <span class="bvNav-item nav-link bvNav-link" style="display: none;" id="nav-comment-news-tab" data-toggle="tab" role="tab" aria-controls="nav-comment-news" aria-selected="false">Comments on news</span> 1239 </div> 1240 </nav> 1241 <div class="tab-content" id="nav-tabContent"> 1242 <div class="tab-pane fade show active" id="nav-news" role="tabpanel" aria-labelledby="nav-news-tab"> 1243 <div id="news_content" class="page_content"></div> 1244 <div id="news-loader" class="text-center"><em id="news_content_wait" class="fa-solid fa-spinner fa-spin fa-1x-spin"></em></div> 1245 <div id="news-button-more" class="nocontent" style="display:none;justify-items: center;" onclick="newsQueryEndPage.queryNewContent();"><div class="submit topmorebutton">Show more news</div></div> 1246 </div> 1247 <div class="tab-pane fade" id="nav-schedules" role="tabpanel" aria-labelledby="nav-schedules-tab"> 1248 <div id="schedules_content" style="max-width: 1024px; margin: 0 auto"></div> 1249 <div id="schedules-loader" class="text-center"><em id="schedules_content_wait" class="fa-solid fa-spinner fa-spin fa-1x-spin"></em></div> 1250 </div> 1251 <div class="tab-pane fade" id="nav-report" role="tabpanel" aria-labelledby="nav-report-tab"> 1252 <div id="reports_content" style="max-width: 1024px; margin: 0 auto"></div> 1253 <div id="reports-loader" class="text-center"><em id="reports_content_wait" class="fa-solid fa-spinner fa-spin fa-1x-spin"></em></div> 1254 </div> 1255 <div class="tab-pane fade" id="nav-comment-observation" role="tabpanel" aria-labelledby="nav-comment-observation-tab"> 1256 <div id="comments_observation_content" style="max-width: 1024px; margin: 0 auto;padding:10px;display:grid;"></div> 1257 <div id="comments-observation-loader" class="text-center"><em id="comments_observation_content_wait" class="fa-solid fa-spinner fa-spin fa-1x-spin"></em></div> 1258 <div id="comments-observation-button-more" class="nocontent" style="display:block;justify-items: center;" onclick="commentObservationQueryEndPage.queryNewContent();"><div class="submit topmorebutton">Show more comments</div></div> 1259 </div> 1260 <div class="tab-pane fade" id="nav-comment-media" role="tabpanel" aria-labelledby="nav-comment-media-tab"> 1261 <div id="comments_media_content" style="max-width: 1024px; margin: 0 auto;padding:10px;display:grid"></div> 1262 <div id="comments-media-loader" class="text-center"><em id="comments_media_content_wait" class="fa-solid fa-spinner fa-spin fa-1x-spin"></em></div> 1263 <div id="comments-media-button-more" class="nocontent" style="display:block;justify-items: center;" onclick="commentMediaQueryEndPage.queryNewContent();"><div class="submit topmorebutton">Show more comments</div></div> 1264 </div> 1265 1266 <div class="tab-pane fade" id="nav-comment-news" role="tabpanel" aria-labelledby="nav-comment-news-tab"> 1267 <div id="comments_news_content" style="max-width: 1024px; margin: 0 auto;padding:10px;display:grid;"></div> 1268 <div id="comments-news-loader" class="text-center"><em id="comments_news_content_wait" class="fa-solid fa-spinner fa-spin fa-1x-spin"></em></div> 1269 <div id="comments-news-button-more" class="nocontent" style="display:block;justify-items: center;" onclick="commentNewsQueryEndPage.queryNewContent();"><div class="submit topmorebutton">Show more comments</div></div> 1270 1271 </div> 1272 </div> 1273 </div> 1274 </div> 1275 </div> 1276 <!-- end middle responsive column --> 1277 1278
1278<script> 1279 // <![CDATA[ 1280 var newsQueryEndPage; 1281 $(function(){ 1282 1283 var container = $("#news_content"); 1284 1285 newsQueryEndPage = queryEndPage() 1286 .mp_current_page(1) 1287 .request("index.php?m_id=1351&content=news&backlink=skip&from=0") 1288 .element_id("#news_content") 1289 .element_wait_id("#news_content_wait") 1290 .callback(display_news) 1291 .load_more_offset(2) 1292 .load_more_button($("#news-button-more")); 1293 1294 function display_news(dt) 1295 { 1296 txid = dt.txid; 1297 data = dt.data; 1298 1299 $.each(data, function (index) 1300 { 1301 var href = 'index.php?m_id=1164'+'&a='+data[index].nid+'#FN'+data[index].nid; 1302 1303 var image = ''; 1304 var image_small = ''; 1305 1306 if (data[index].attached_image != null && data[index].attached_image !== "") { 1307 image_small = '<div class="news-photo-div-front"><a class="news-photo-link" href="' + href + '"><img alt="" border="0" class="news-photo-front" src="https://cdnfiles2.biolovision.net/www.ornitho.de/pdffiles/news/' + data[index].attached_image + '"></a></div>'; 1308 image = '<div class="news-photo-div"><a class="news-photo-link" href="' + href + '"><img alt="" border="0" class="news-photo" src="https://cdnfiles2.biolovision.net/www.ornitho.de/pdffiles/news/' + data[index].attached_image + '"></a></div>'; 1309 } 1310 1311 var pageTitle = '<a name="FN' + data[index].nid + '"></a><div class="news-title">' + data[index].title + '</div>'; 1312 1313 let string, color; 1314 1315 if (data[index].news_type === 'technews') {
1316 string = 'technews'; 1317 color = '#CD6969'; 1318 } else if (data[index].news_type === 'avinews') { 1319 string = 'avinews'; 1320 color = '#69CD69'; 1321 } else if (data[index].news_type === 'faunanews') { 1322 string = 'faunanews'; 1323 color = '#69CD69'; 1324 } else if (data[index].news_type === 'atlasnews') { 1325 string = 'atlasnews'; 1326 color = '#1B92FF'; 1327 } else { 1328 string = 'tipnews'; 1329 color = '#ffcc66'; 1330 } 1331 1332 var newsType = '<div style="background-color:' + color + '" class="news_type">' + string + '</div>'; 1333 1334 var protocolInfo = ''; 1335 if (data[index].protocol_name !== undefined && data[index].protocol_name !== null) { 1336 protocolInfo = '<div class="protocol-type"><svg viewBox="0 0 12 12" version="1.1" xmlns="http://www.w3.org/2000/svg"><g><title>' + data[index].protocol_fullname + '</title>' + data[index].protocol_svg + '</g></svg>' + data[index].protocol_fullname + '</div>'; 1337 } 1338 1339 var authorLink = 'posted by ' + data[index].name; 1340 1341 var editLine = ''; 1342 1343 var authorLine = '<div class="author-content">' + authorLink + ' <em class="fa-solid fa-clock"></em> ' + data[index].date + editLine + '</div>'; 1344 1345 var share = '<div class="news-share" id="share_' + data[index].nid + '"></div>'; 1346 1347 var pageStart = $('<div>', {'class':"elastic-container"}); 1348 1349 1350 if (0 != parseInt(data[index].nid)) 1351 { 1352 pageContent = '<div class="message-content">' + data[index].message + '</div>'; 1353 var button = '<div class="blurnext"></div><div class="readnext"><a class="alink btn-open-news" href="' + href + '">Show more <em class="fa-solid fa-right-long"></em></a></div>'; 1354 1355 content = '<div class="message-type">' + protocolInfo + newsType + '</div>' + pageTitle + authorLine + share + pageContent; 1356 1357 // news lists 1358 pageStart.append('<div onclick="location.href=\'' + href + '\';" class="container-next">' + image_small + '<div class="news_text_div">' + content + '</div></div>' + button); 1359 container.append(pageStart); 1360 } 1361 else 1362 { 1363 1364 var url_string = ''; 1365 1366 if (data[index].url != null && data[index].url !== "") { 1367 1368 var target = (data[index].popup) ? "target=\"_blank\"" : ""; 1369 var url_value = ((data[index].url.startsWith("http")) ? "" : WEB_PATH) + data[index].url; 1370 var url_text = (data[index].url_text != null && data[index].url_text !== "") ? data[index].url_text : url_value; 1371 1372 url_string = "<div><em class=\"fa-solid fa-link\"></em> <a class=\"alink\" href=\"" + url_value + "\" " + target + ">" + url_text + "</a></div>\r\n"; 1373 } 1374 1375 var attached_file = ''; 1376 1377 if (data[index].attached_file != null && data[index].attached_file !== "") { 1378 1379 var icon_filename = 'https://cdnfiles1.biolovision.net/common/images/icons/' + data[index].attached_file.split('.').pop() + '.gif'; 1380 1381 var file_path = 'https://cdnfiles2.biolovision.net/www.ornitho.de/pdffiles/news/' + data[index].attached_file; 1382 1383 var attached_file_text = data[index].attached_file; 1384 1385 if (data[index].attached_file_text != null) 1386 { 1387 attached_file_text = data[index].attached_file_text; 1388 } 1389 1390 attached_file = '<div>Document to download : <a href="' + file_path + '"><img border="0" alt="" src="' + icon_filename + '"/></a> <a class="alink" href="' + file_path + '">' + attached_file_text + '</a></div>'; 1391 1392 } 1393 1394 // selected news 1395 pageContent = '<div style="margin-top: 2rem;"></div>' + '<div class="message-content">' + data[index].message + url_string + attached_file + '</div>'; 1396 pageStart.append(pageTitle + authorLine + image
1396+ pageContent + share); 1397 container.append(pageStart); 1398 1399 } 1400 1401 1402 1403 container.css("height", "auto"); 1404 }); 1405 return true; 1406 } 1407 newsQueryEndPage.start(); 1408 }); 1409 // ]]> 1410</script>
1410 1411
1411<script> 1412 // <![CDATA[ 1413 var schedulesQueryEndPage; 1414 $(function(){ 1415 1416 var container = $("#schedules_content"); 1417 1418 schedulesQueryEndPage = queryEndPage() 1419 .mp_current_page(0) 1420 .request("index.php?m_id=1351&content=schedules&backlink=skip&from=0") 1421 .element_id("#schedules_content") 1422 .element_wait_id("#schedules_content_wait") 1423 .callback(display_schedules); 1424 1425 function display_schedules(dt) 1426 { 1427 txid = dt.txid; 1428 data = dt.data; 1429 1430 var tab = $("#nav-schedules-tab"); 1431 if((data.length < 1) && tab.length && schedulesQueryEndPage.mp_current_page() === 1) 1432 { 1433 tab.hide(); 1434 } 1435 else 1436 { 1437 tab.show(); 1438 } 1439 1440 $.each(data, function (index) 1441 { 1442 var href = 'index.php?m_id=21'+'&a='+data[index].sid+'#S'+data[index].sid; 1443 1444 var pageTitle = '<a name="FN' + data[index].sid + '"></a>'; 1445 pageTitle += '<div class="news-subtitle">' + data[index].date_start; 1446 if(data[index].date_end && data[index].date_start !== data[index].date_end) 1447 pageTitle += " - " + data[index].date_end ; 1448 pageTitle += "</div>"; 1449 pageTitle += '<div class="news-title">' + data[index].title + '</div>'; 1450 1451 var authorLink = 'posted by ' + data[index].name; 1452 1453 var authorLine = '<div class="author-content">' + authorLink + ' <em class="fa-solid fa-clock"></em> ' + data[index].insert_date + '</div>'; 1454 1455 var share = '<div class="news-share" id="share_' + data[index].sid + '"></div>'; 1456 1457 var pageStart = '<div class="elastic-container">'; 1458 1459 if (0 != parseInt(data[index].sid)) 1460 { 1461 pageContent = '<div class="message-content">' + data[index].comment + '</div>'; 1462 var button = '<div class="blurnext"></div><div class="readnext"><a class="alink btn-open-news" href="' + href + '">Show more <em class="fa-solid fa-right-long"></em></a></div>'; 1463 1464 content = pageTitle + authorLine + share + pageContent; 1465 1466 container.append(pageStart + '<div onclick="location.href=\'' + href + '\';" class="container-next"><div>' + content + '</div></div>' + button + '</div>'); 1467 } 1468 else 1469 { 1470 pageContent = '<div style="margin-top: 2rem;"></div>' + '<div class="message-content">' + data[index].comment + '</div>'; 1471 container.append('<div class="elastic-container">
1471' + pageTitle + authorLine + pageContent + share + '</div>'); 1472 1473 } 1474 1475 container.css("height", "auto"); 1476 1477 }); 1478 return true; 1479 } 1480 schedulesQueryEndPage.start(); 1481 }); 1482 // ]]> 1483 </script>
1483 1484
1484<script> 1485 // <![CDATA[ 1486 var reportsQueryEndPage; 1487 var report = null; 1488 $(function(){ 1489 1490 var container = $("#reports_content"); 1491 var web_pdf_path = 'https://cdnfiles2.biolovision.net/www.ornitho.de/pdffiles'; 1492 var web_image_icons_path = 'https://cdnfiles1.biolovision.net/common/images/icons'; 1493 1494 reportsQueryEndPage = queryEndPage() 1495 .mp_current_page(0) 1496 .request("index.php?m_id=1351&content=reports&backlink=skip&from=0") 1497 .element_id("#reports_content") 1498 .element_wait_id("#reports_content_wait") 1499 .callback(display_reports); 1500 1501 translationsR = { 1502 'EXCURSION': 'Excursion','PHOTOS': 'REPORTS_TEXT_TYPE_PHOTOS','TRAVEL': 'Travel','GENERAL_MEETING': 'REPORTS_TEXT_TYPE_GENERAL_MEETING', }; 1503 1504 function display_reports(dt) 1505 { 1506 txid = dt.txid; 1507 data = dt.data; 1508 1509 var tab = $("#nav-report-tab"); 1510 if((data.length < 1) && tab.length && reportsQueryEndPage.mp_current_page() === 1) 1511 { 1512 tab.hide(); 1513 } 1514 else 1515 { 1516 tab.show(); 1517 } 1518 1519 $.each(data, function (index) 1520 { 1521 var href = 'index.php?m_id=1170'+'&a='+data[index].rid+'#R'+data[index].rid; 1522 1523 var type = translationsR[data[index].type]; 1524 if(typeof(type) == 'undefined') 1525 type = ''; 1526 1527 var pageTitle = '<a name="R' + data[index].rid + '"></a><div class="news-title ">' + data[index].title + ' <span class="badge badge-secondary">' + type + '</span></div>'; 1528 1529 var authorLink = 'posted by ' + data[index].name; 1530 1531 var authorLine = '<div class="author-content">' + authorLink + ' <i class="fa-solid fa-clock"></i> ' + data[index].start_date + (data[index].start_date != data[index].stop_date ? ' - ' + data[index].stop_date : '') + '</div>'; 1532 1533 var share = '<div class="news-share" id="share_' + data[index].rid + '"></div>'; 1534 1535 var pageContent = '<div style="margin-top: 2rem;"></div>' + ''; 1536 1537 var useCols = (typeof(data[index].observers) != 'undefined' && data[index].observers.length > 1) || (typeof(data[index].sightings) != 'undefined' && Object.keys(data[index].sightings).length > 1); 1538 if (useCols) 1539 { 1540 pageContent += '<div class="row">'; 1541 pageContent += '<div class="col-sm-9">'; 1542 } 1543 1544 pageContent += '<div id="core-gallery-banner" class="text-center" style="width:auto;padding:0px 0px 0px 3px;margin-bottom: 15px;">' + 1545 '<em class="fa-solid fa-spinner fa-spin fa-1x-spin"></em>' + 1546 '</div>' + 1547 '<div id="gallery_accordion" style="width:auto;margin-left:8px;margin-top:0px;margin-bottom:12px;display:none;">' + 1548 '<div id="gallery_accordion_content" style="height:100%;display:block;" >' + 1549 '<div id="gallery_accordion_tab" style="width:100%;height:7px;display:block;margin-bottom:0px;top:-10px;" >' + 1550 '<div id="gallery_accordion_tab_pointer" class="bvPanelPanel" style="padding:0;margin:0;width:0;height: 0;border-style: solid;border-width: 0 7.5px 7px 7.5px;border-color:#ffffff;border-bottom-color:transparent;position:relative;"></div>' + 1551 '</div>' + 1552 '<div id="gallery_accordion_description" class="bvPanelPanel" style="width:100%;padding:0;padding-top:15px;height:54px;margin-top:0;border-bottom:1px solid black">' + 1553 '<div id="gallery_accordion_close_button" class="fa-closebox" onclick="responsive.gallery.toggle_accordion(responsive.gallery.accordion_element_id);"></div>' + 1554 '<div id="gallery_accordion_description_content" style="padding-left:12px;min-height:26px;"></div>' + 1555 '</div>' + 1556 '<div id="gallery_accordion_medium" class="bvPanelPanel" style="width:100%;text-align:center;margin-top:0;padding:0;padding-top:20px;">' + 1557 '<div id="gallery_accordion_medium_player"></div>' + 1558 '<div id="gallery_accordion_dg" class="bvPanelPanel" style="width:100%;padding-top:1rem;clear: both;">' + 1559 '<div id="gallery_accordion_dg_media" style="text-align:center;"></div>' + 1560 '</div>' + 1561 '<div id="gallery_accordion_left_button" style="display:inline-block;float:left;padding:1rem;cursor:pointer;" onclick="navigate_accordion(-1);">' + 1562 '<em class="fa fa-chevron-left fa-1x"></em></div>' + 1563 '<div id="gallery_accordion_medium_links" style="display:inline-block;"></div>' + 1564 '<div id="gallery_accordion_right_button" style="display:inline-block;float:right;padding:1rem;cursor:pointer;" onclick="navigate_accordion(1);">' + 1565 '<em class="fa fa-chevron-right fa-1x"></em></div>' + 1566 '<div class="clearfix"></div>' + 1567 '</div>' + 1568 1569 '</div>' + 1570 1571 '</div>'; 1572 1573 pageContent += '<div class="message-content">' + (data[index].comment ? data[index].comment : '') + '</div>'; 1574 1575 if (data[index].files && data[index].files.length) 1576 { 1577 //Merge by place 1578 pageContent += '<div class="title text-left">Linked files</div>'; 1579 pageContent += '<div class="container-fluid">'; 1580 for(var f in data[index].files) { 1581 var file = data[index].files[f]; 1582 var extension = file.filename.split('.').pop(); 1583 var icon = web_image_icons_path + '/' + extension.toLowerCase() + '.gif'; 1584 var comment = data[index].files[f].comment && data[index].files[f].comment != '' ? data[index].files[f].comment : data[index].files[f].filename; 1585 pageContent += '<span class="text-bold"><a href="' + web_pdf_path + '/' + file.filename + '"><img src="' + icon + '" alt="' + icon + '" /> ' + comment + '</a></span><br />'; 1586 } 1587 pageContent += '</div>'; 1588 } 1589 1590 if (useCols) 1591 { 1592 pageContent += '</div>'; 1593 pageContent += '<div class="col-sm-3">'; 1594 if(data[index].observers.length) { 1595 pageContent += '<div class="title text-center" style="padding-top:0px;">Participants</div>'; 1596 pageContent += '<div class="container-fluid">'; 1597 for (var i = 0; i < data[index].observers.length; i++) { 1598 pageContent += data[index].observers[i].clean_string + "<br />"; 1599 } 1600 pageContent += '</div>'; 1601 } 1602 1603 var places = Object.keys(data[index].sightings); 1604 1605 if(places.length > 0) { 1606 //Merge by place 1607 pageContent += '<div class="title text-center">REPORTS_TEXT_SIGHTINGS</div>'; 1608 pageContent += '<div class="container-fluid">'; 1609 for(var p in places) { 1610 pageContent += '<h4 class="text-bold">' + places[p] + "</h4><br />"; 1611 1612 for(var i = 0 ; i < data[index].sightings[places[p]].length ; i++) { 1613 var s = data[index].sightings[places[p]][i]; 1614 if(s.species) 1615 pageContent += s.number + ' ' + s.species.ENGLISH_NAME + '<br />'; 1616 } 1617 } 1618 pageContent += '</div>'; 1619 } 1620 pageContent += '</div>'; 1621 pageContent += '</div>'; 1622 } 1623 1624 var pageStart = '<div class="elastic-container" >'; 1625 1626 if (0 != parseInt(data[index].rid)) 1627 { 1628 pageContent = '<div class="message-content">' + data[index].comment + '</div>'; 1629 var button = '<div class="blurnext"></div><div class="readnext"><a class="alink btn-open-news" href="' + href + '">Show more <em class="fa-solid fa-right-long"></em></a></div>'; 1630 1631 content = pageTitle + authorLine + share + pageContent; 1632 1633 container.append(pageStart + '<div onclick="location.href=\'' + href + '\';" class="container-next"><div>' + content + '</div></div>' + button + '</div>'); 1634 1635 } 1636 else 1637 { 1638 container.append(pageStart + pageTitle + authorLine + page
1638Content + share + '</div>'); 1639 1640 responsive.gallery.init($("#core-gallery-banner"), 'gallery_report', data[index].rid); 1641 responsive.gallery.auto_height = true; 1642 } 1643 1644 container.css("height", "auto"); 1645 }); 1646 return true; 1647 } 1648 reportsQueryEndPage.start(); 1649 }); 1650 1651 1652 1653 //Override for picture only array. 1654 function toggle_accordion(index) { 1655 $("#core-gallery-banner").css('height', 'auto'); 1656 var id = String(index).substr(1); 1657 var action = "close"; 1658 if(responsive.gallery.accordion_element_id != index) { 1659 if($("#gallery_accordion").css("display") == "none") 1660 action = "open"; 1661 else 1662 action = "slide"; 1663 1664 var element = null; 1665 //Used for navigation in accordion. 1666 var offset_left = 0; 1667 var offset_right = 0; 1668 $.each(responsive.gallery.elements, function (elt) { 1669 if(element) 1670 offset_right++; 1671 1672 if (responsive.gallery.elements[elt].id == id) 1673 element = responsive.gallery.elements[elt]; 1674 1675 if(!element) 1676 offset_left++; 1677 }); 1678 1679 if (element == null) { 1680 $("#gallery_accordion").css("display", "none"); 1681 console.log("No ID matching for : " + index); 1682 responsive.gallery.accordion_element_id = 0; 1683 return null; 1684 } 1685 responsive.gallery.accordion_element_id = index; 1686 1687 var comment = element.comment ? element.comment : ''; 1688 $("#gallery_accordion_description_content").html(comment); 1689 $("#gallery_accordion_medium_player").html("<img src='"+element.media[0].web_path.replace('small/', '')+"' alt='"+comment+"'/>"); 1690 $("#gallery_accordion_dg_media").html(element.author ? "Ⓒ " + element.author : ''); 1691 $("#medium_" + index).parent().after($("#gallery_accordion")); 1692 1693 //Setting tab position 1694 var left_offset = $("#medium_" + index).position().left - $("#core-gallery-banner").position().left - responsive.gallery.gallery_margin_size + (element.media[0].image.width / 2); 1695 $("#gallery_accordion_tab_pointer").css("left", left_offset + "px"); 1696 1697 //Showing/Hidding navigation arrows 1698 if(offset_left == 0) { 1699 $("#gallery_accordion_left_button").css("display", "none"); 1700 } 1701 else { 1702 $("#gallery_accordion_left_button").css("display", "inline-block"); 1703 } 1704 1705 if(offset_right == 0) { 1706 $("#gallery_accordion_right_button").css("display", "none"); 1707 } 1708 else { 1709 $("#gallery_accordion_right_button").css("display", "inline-block"); 1710 } 1711 } 1712 else if($("#gallery_accordion").css("display") == "none") { 1713 action = "open"; 1714 } 1715 1716 var time_delay; 1717 if(action != "slide") { 1718 $( "#gallery_accordion").slideToggle(400, function() {}); 1719 time_delay = 500; 1720 } 1721 else { 1722 time_delay = 0; 1723 } 1724 1725 var target = "#gallery_accordion"; 1726 1727 $('html, body').animate({ 1728 scrollTop: $( "#gallery_accordion").prev().offset().top - 10 1729 }, time_delay); 1730 } 1731 1732 function navigate_accordion(direction) { 1733 if(!responsive.gallery.accordion_element_id) 1734 return; 1735 1736 var to_open = null; var before = null; 1737 $.each(responsive.gallery.elements, function (elt) { 1738 if(direction < 0 && ('r' + responsive.gallery.elements[elt].id) == responsive.gallery.accordion_element_id) { 1739 to_open = 'r' + before.id; 1740 } 1741 1742 if(direction > 0 && before && ('r' + before.id) == responsive.gallery.accordion_element_id) 1743 to_open = 'r' + responsive.gallery.elements[elt].id; 1744 1745 before = responsive.gallery.elements[elt]; 1746 }); 1747 1748 if(to_open)
1749 toggle_accordion(to_open); 1750 } 1751 // ]]> 1752 </script>
1752 1753
1753<script> 1754 //<![CDATA[ 1755 function make_specie_string(id_sp, latin_name, species_name, species_name_plur, is_short, is_html, birds_count, taxo_no_result_id, remove_spliters) { 1756 /*Default values if not defined*/ 1757 if(typeof(species_name_plur)=='undefined') { 1758 species_name_plur = ''; 1759 } 1760 if(typeof(is_short)=='undefined') { 1761 is_short = 0; 1762 } 1763 if(typeof(is_html)=='undefined') { 1764 is_html = 1; 1765 } 1766 if(typeof(birds_count)=='undefined') { 1767 birds_count = '1'; 1768 } 1769 if(typeof(taxo_no_result_id)=='undefined') { 1770 taxo_no_result_id = 10000; 1771 } 1772 if(typeof(remove_spliters)=='undefined') { 1773 remove_spliters = 1; 1774 } 1775 1776 1777 var is_plural = 1; 1778 if (birds_count === '1' || birds_count === '~1' || birds_count === '>1' || birds_count === '≥1' || birds_count === '0' || birds_count === '') 1779 is_plural = 0; 1780 1781 if (species_name === '') 1782 species_name = latin_name; 1783 1784 if (species_name_plur === '') 1785 species_name_plur = species_name; 1786 1787 var bird_name = ''; 1788 if (is_html) 1789 bird_name += ((birds_count === '0') && (id_sp !== taxo_no_result_id)) ? '<strike>' : ''; 1790 1791 bird_name += is_plural ? species_name_plur : species_name; 1792 1793 if(remove_spliters) 1794 bird_name = bird_name.replace(/[|]/g,''); 1795 1796 if (is_html) 1797 bird_name += ((birds_count === '0') && (id_sp !== taxo_no_result_id)) ? '</strike>' : ''; 1798 1799 if (is_short) 1800 { 1801 if (!is_html) 1802 return bird_name; 1803 return 0? "<b><i>" + bird_name + "</i></b>" : "<b>" + bird_name + "</b>"; 1804 } 1805 else 1806 { 1807 var latin_name_str = latin_name; //str_replace(" ", " ", $latin_name); 1808 if (is_html) 1809 { 1810 if ((latin_name !== '') && (latin_name !== species_name)) 1811 { 1812 var langu_enter = { '1': 'fr', 1813 }; 1814 var tg = 1; 1815 if (taxo_no_result_id !== 10000) 1816 { 1817 tg = taxo_no_result_id - 10000; 1818 } 1819 if (langu_enter[tg] === 'lt') { 1820 return "<b><i>" + latin_name_str + "</i></b> <span style='font-style: normal;' class='sci_name'>(" + bird_name + ")</span></i>"; 1821 } else { 1822 return "<b>" + bird_name + "</b> <span class='sci_name'>(" + latin_name_str + ")</span></i>"; 1823 } 1824 } 1825 else 1826 { 1827 return "<b><i>" + bird_name + "</i></b>"; 1828 } 1829 } 1830 else 1831 { 1832 if ((latin_name !== '') && (latin_name !== species_name)) 1833 return bird_name+" ("+latin_name_str+")"; 1834 else 1835 return bird_name; 1836 } 1837 } 1838 } 1839 // ]]> 1840 </script>
1840 1841
1841<script src="https://cdnfiles1.biolovision.net/common/js/query_ajax_endpage_19.js"></script>
1841 1842
1843<script> 1844//<![CDATA[ 1845var obsQueryEndPage; 1846var scroll_positon = 0; 1847var load_sync = 0; 1848var obs_level1_offset = 0; // Used in rarity map 1849var full_page_sightings = []; 1850var data_n_minus_1 = null; 1851var level_1 = null; 1852var level_2 = null; 1853var level_3 = null; 1854var level_sighting = null; 1855var last_sighting = null; 1856var last_titles_displayed = []; 1857 1858$(function(){ 1859 var use_more_btn = $("#observation_content_more").length; 1860 1861 obsQueryEndPage = queryEndPage() 1862 .mp_current_page(0) 1863 .request("index.php?m_id=1351&content=last_observations_by_page&home=1&backlink=skip&p_c=duration&p_cc=-&sp_tg=1&sp_DateSynth=02.10.2026&sp_DChoice=offset&sp_DOffset=5&sp_SChoice=category&sp_Cat[never]=1&sp_Cat[veryrare]=1&sp_Cat[rare]=1&sp_Cat[unusual]=1&sp_Cat[escaped]=0&sp_Cat[common]=0&sp_Cat[verycommon]=0&sp_PChoice=canton&sp_cC=111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000001&sp_project=0&sp_FChoice=list&sp_FGraphFormat=auto&sp_FMapFormat=none&sp_FDisplay=DATE_PLACE_SPECIES&sp_FOrder=ALPHA&sp_FOrderListSpecies=ALPHA&sp_FListSpeciesChoice=DATA&sp_FOrderSynth=ALPHA&sp_FGraphChoice=DATA&sp_DFormat=DESC&sp_FAltScale=250&sp_FAltChoice=DATA&sp_FExportFormat=XLS") 1864 .element_id("#observation_content") 1865 .element_wait_id("#observation_content_wait") 1866 .element_finish_id("#observation_content_finished") 1867 .callback(display_obs) 1868 .checkAllLoadedcallback(is_data_complete) 1869 .load_all(0); 1870 1871 if(use_more_btn) { 1872 obsQueryEndPage.load_more_offset(1) 1873 .load_more_button($("#observation_content_more")); 1874 } 1875 1876 obsQueryEndPage.start(); 1877 }); 1878 1879function add_icon_reload(id_observation) 1880{ 1881 $("span[id_sighting='" + id_observation + "']").css("background-color", "#eeeeee"); 1882 $("span[id_sighting='" + id_observation + "'] img").each(function() 1883 { 1884 $(this).css("filter","grayscale(100%)"); 1885 }); 1886 $("span[id_sighting='" + id_observation + "'] .reload").html("<i class=\"bi bi-refresh ba-spin\" onclick='reloadAllPages(" + id_observation + ")' title=\"Reload\"></i>"); 1887} 1888 1889function reloadAllPages(id_triggering_reload) 1890{ 1891 //Empty the page 1892 $("#observation_content").html(""); 1893 //Start reload 1894 var selector_reload = "span[id_sighting='" + id_triggering_reload + "']"; 1895 obsQueryEndPage.reloadAll(selector_reload); 1896} 1897 1898function is_data_complete(data) 1899{ 1900 return (typeof(data.data_is_finished)!='undefined' && data.data_is_finished===1) 1901} 1902 1903function reset_display_obs() 1904{ 1905 obsQueryEndPage = null; 1906 reset_display_obs_variables(); 1907} 1908 1909function reset_display_obs_variables() { 1910 last_titles_displayed = []; 1911 level_1 = null; 1912 level_2 = null; 1913 level_3 = null; 1914 level_sighting = null; 1915 last_sighting = null; 1916} 1917 1918function display_obs(dt) 1919{ 1920 txid = dt.txid; 1921 data = dt.data; 1922 1923 if (dt.data_is_finished === -1) 1924 return false; 1925 1926 if(!obsQueryEndPage) { 1927 return false; 1928 } 1929 1930 1931 var toggle_callback = null; 1932 1933 var container = $('#observation_content'); 1934 1935 // Merge last sighting 1936 if(level_sighting && data.length) { 1937 var merged_obs = merge_obs(last_sighting, data[0]); 1938 1939 if(merged_obs) { 1940 level_sighting.remove(); 1941 data[0] = merged_obs; 1942 } 1943 } 1944 1945 $.each(data, function (index) 1946 { 1947 var sighting = data[index]; 1948 1949 if(typeof(sighting.listTop)!=='undefined' && typeof(sighting.listSubmenu)!=='undefined') 1950 { 1951 var new_level_1 = build_main_title(sighting, toggle_callback, ); 1952 if(new_level_1 !== null && level_1 !== null) { 1953 level_1 = new_level_1; 1954 container.append(level_1); 1955 } 1956 else if(new_level_1 !== null) { 1957 // Init 1958 level_1 = new_level_1; 1959 container.append(level_1); 1960 } 1961 1962 var new_level_2 = build_second_title(sighting, toggle_callback); 1963 if(new_level_2 !== null && level_2 !== null) { 1964 level_2 = new_level_2; 1965 level_1.append(level_2); 1966 } 1967 else if(new_level_2 !== null) { 1968 // Init 1969 level_2 = new_level_2; 1970 level_1.append(level_2); 1971 } 1972 1973 level_sighting = build_obs(sighting); 1974 level_3.append(level_sighting); 1975 } 1976 }); 1977 1978 //We need to add controls again for all new observations that were created (so that + button can be clicked on extended details) 1979 add_click_controls(); 1980 return true; 1981} 1982 1983function buildQueryWithoutFormat(req) { 1984 let strQuery = ''; 1985 1986 // -- Panel 1987 strQuery += `&p_c=${encodeURIComponent(req.p_c ?? '')}`; 1988 strQuery += `&p_cc=${encodeURIComponent(req.p_cc ?? '')}`; 1989 1990 strQuery += `&sp_tg=${encodeURIComponent(req.sp_tg ?? '')}`; 1991 1992 strQuery += `&sp_DateSynth=${encodeURIComponent(req.sp_frmDateSynth ?? '')}`; 1993 1994 // -- Période 1995 const dChoice = req.sp_DChoice ?? req.sp_frmDateChoice; 1996 1997 strQuery += `&sp_DChoice=${encodeURIComponent(dChoice ?? '')}`; 1998 1999 switch (dChoice) { 2000 case 'offset': 2001 strQuery += `&sp_DOffset=${encodeURIComponent(req.sp_DOffset ?? req.sp_frmDateOffset ?? '')}`; 2002 break; 2003 2004 case 'range': 2005 strQuery += `&sp_DFrom=${encodeURIComponent(req.sp_DFrom ?? req.sp_frmDateFrom ?? '')}`; 2006 strQuery += `&sp_DTo=${encodeURIComponent(req.sp_DTo ?? req.sp_frmDateTo ?? '')}`; 2007 strQuery += `&sp_DCa=${encodeURIComponent(req.sp_DCa ?? req.sp_frmDateCapture ?? '')}`; 2008 break; 2009 2010 case 'season': 2011 strQuery += `&sp_DSeasonFromDay=${encodeURIComponent(req.sp_DSeasonFromDay ?? req.sp_frmDateSeasonFromDay ?? '')}`; 2012 strQuery += `&sp_DSeasonFromMonth=${encodeURIComponent(req.sp_DSeasonFromMonth ?? req.sp_frmDateSeasonFromMonth ?? '')}`; 2013 strQuery += `&sp_DSeasonToDay=${encodeURIComponent(req.sp_DSeasonToDay ?? req.sp_frmDateSeasonToDay ?? '')}`; 2014 strQuery += `&sp_DSeasonToMonth=${encodeURIComponent(req.sp_DSeasonToMonth ?? req.sp_frmDateSeasonToMonth ?? '')}`; 2015 break; 2016 2017 default:
2018 // "all" ou rien 2019 break; 2020 } 2021 2022 // -- Espèces 2023 const sChoice = req.sp_SChoice ?? req.sp_frmSpeciesChoice; 2024 strQuery += `&sp_SChoice=${encodeURIComponent(sChoice ?? '')}`; 2025 2026 switch (sChoice) { 2027 case 'family': 2028 strQuery += `&sp_Family=${encodeURIComponent(req.sp_Family ?? req.sp_frmFamily ?? '')}`; 2029 break; 2030 2031 case 'species': 2032 strQuery += `&sp_S=${encodeURIComponent(req.sp_S ?? req.sp_frmSpecies ?? '')}`; 2033 break; 2034 2035 case 'category': 2036 if (req.sp_Cat) { 2037 Object.entries(req.sp_Cat).forEach(([k,v]) => { 2038 strQuery += `&sp_Cat[${k}]=${encodeURIComponent(v)}`; 2039 }); 2040 } 2041 break; 2042 2043 case 'status': 2044 strQuery += `&sp_frmStatus=${encodeURIComponent(req.sp_frmStatus ?? '')}`; 2045 strQuery += `&sp_frmStatusParam=${encodeURIComponent(req.sp_frmStatusParam ?? '')}`; 2046 break; 2047 2048 default: 2049 break; 2050 } 2051 2052 // -- Lieux 2053 const pChoice = req.sp_PChoice ?? req.sp_frmPlaceChoice; 2054 strQuery += `&sp_PChoice=${encodeURIComponent(pChoice ?? '')}`; 2055 2056 switch (pChoice) { 2057 case 'place': 2058 strQuery += `&sp_P=${encodeURIComponent(req.sp_P ?? req.sp_frmPlace ?? '')}`; 2059 strQuery += `&sp_Info=${encodeURIComponent(req.sp_Info ?? req.sp_frmInfo ?? '')}`; 2060 break; 2061 2062 case 'commune': 2063 strQuery += `&sp_Commune=${encodeURIComponent(req.sp_Commune ?? req.sp_frmCommune ?? '')}`; 2064 strQuery += `&sp_CommuneCounty=${encodeURIComponent(req.sp_CommuneCounty ?? req.sp_frmCommuneCounty ?? '')}`; 2065 break; 2066 2067 case 'canton': 2068 strQuery += `&sp_cC=${encodeURIComponent(req.sp_cC ?? req.sp_frmCc ?? '')}`; 2069 break; 2070 2071 case 'QR': 2072 strQuery += `&sp_QR=${encodeURIComponent(req.sp_QR ?? req.sp_frmQR ?? '')}`; 2073 break; 2074 2075 case 'coord': 2076 // sp_Coord[N], sp_Coord[W], sp_Coord[S], sp_Coord[E] 2077 if (req.sp_Coord) { 2078 strQuery += `&sp_Coord[N]=${encodeURIComponent(req.sp_Coord.N ?? '')}`; 2079 strQuery += `&sp_Coord[W]=${encodeURIComponent(req.sp_Coord.W ?? '')}`; 2080 strQuery += `&sp_Coord[S]=${encodeURIComponent(req.sp_Coord.S ?? '')}`; 2081 strQuery += `&sp_Coord[E]=${encodeURIComponent(req.sp_Coord.E ?? '')}`; 2082 } 2083 break; 2084 2085 case 'polygon': 2086 strQuery += `&sp_Polygon=${encodeURIComponent(req.sp_Polygon ?? req.sp_frmPolygon ?? '')}`; 2087 break; 2088 2089 case 'grid': 2090 strQuery += `&sp_Grid=${encodeURIComponent(req.sp_Grid ?? req.sp_frmGrid ?? '')}`; 2091 strQuery += `&sp_Grid_Info=${encodeURIComponent(req.sp_Grid_Info ?? req.sp_frmGridInfo ?? '')}`; 2092 break; 2093 2094 default: 2095 break; 2096 } 2097 2098 if (req.sp_AltitudeChoice || req.sp_frmAltitudeChoice) { 2099 strQuery += `&sp_AltitudeChoice=1`; 2100 strQuery += `&sp_AltitudeFrom=${encodeURIComponent(req.sp_AltitudeFrom ?? req.sp_frmAltitudeFrom ?? '')}`; 2101 strQuery += `&sp_AltitudeTo=${encodeURIComponent(req.sp_AltitudeTo ?? req.sp_frmAltitudeTo ?? '')}`; 2102 } 2103 2104 if (req.sp_AtlasCode || req.sp_frmAtlasCode) { 2105 strQuery += '&sp_AtlasCode=1'; 2106 const ats = req.sp_Ats ?? req.sp_frmAtlasCodeArray ?? ''; 2107 strQuery += `&sp_Ats=${encodeURIComponent(ats)}`; 2108 } 2109 2110 if (req.sp_Comment || req.sp_frmComment) { 2111 strQuery += '&sp_Comment=1'; 2112 strQuery += `&sp_CommentValue=${encodeURIComponent(req.sp_CommentValue ?? req.sp_frmCommentValue ?? '')}`; 2113 } 2114 2115 if (req.sp_frmHiddenComment) { 2116 strQuery += '&sp_HiddenComment=1'; 2117 strQuery += `&sp_HiddenCommentValue=${encodeURIComponent(req.sp_frmHiddenCommentValue || '')}`; 2118 } 2119 2120 if (req.sp_frmOnlyAllowExport && req.sp_frmOnlyAllowExport !== 0) { 2121 strQuery += `&sp_OnlyAE=${encodeURIComponent(req.sp_frmOnlyAllowExport)}`; 2122 } 2123 2124 if (req.sp_frmOnlyEntity && req.sp_frmOnlyEntity !== 0) { 2125 strQuery += `&sp_EntityE=${encodeURIComponent(req.sp_frmOnlyEntity)}`; 2126 } 2127 2128 if (req.sp_frmOnlyImported) { 2129 strQuery += '&sp_OnlyI=1'; 2130 } 2131 2132 if (req.sp_frmImport) { 2133 strQuery += `&sp_I=${encodeURIComponent(req.sp_frmImport)}`; 2134 } 2135 2136 if (req.sp_frmOnlyExported) { 2137 strQuery += '&sp_OnlyE=1'; 2138 } 2139 if (req.sp_frmOnlyNotExported) { 2140 strQuery += '&sp_OnlyNE=1'; 2141 } 2142 2143 if (req.sp_frmOnlyAdminHidden && req.sp_frmOnlyAdminHidden !== '0') { 2144 strQuery += `&sp_OnlyAH=${encodeURIComponent(req.sp_frmOnlyAdminHidden)}`; 2145 } 2146 2147 if (req.sp_frmOnlyForm) { 2148 strQuery += '&sp_OnlyF=1'; 2149 } 2150 if (req.sp_frmForm && req.sp_frmForm !== 0) { 2151 strQuery += `&sp_F=${encodeURIComponent(req.sp_frmForm)}`; 2152 } 2153 2154 if (req.sp_frmOnlyMyData) { 2155 strQuery += '&sp_OnlyMyData=1'; 2156 strQuery += `&sp_ObserverName=${encodeURIComponent(req.sp_frmObserverName || '')}`;
2157 strQuery += `&sp_ObserverNameString=${encodeURIComponent(req.sp_frmObserverNameString || '')}`; 2158 strQuery += `&sp_SecondHand=${encodeURIComponent(req.sp_frmSecondHand || '')}`; 2159 } 2160 2161 if (req.sp_frmOnlyWithPicture) { 2162 strQuery += '&sp_OnlyWithPicture=1'; 2163 } 2164 2165 if (req.sp_frmOnlyWithSound) { 2166 strQuery += '&sp_OnlyWithSound=1'; 2167 } 2168 2169 if (req.sp_frmOnlyWithVideo) { 2170 strQuery += '&sp_OnlyWithVideo=1'; 2171 } 2172 2173 if (req.sp_frmOnlySelected && Array.isArray(req.sp_frmOnlySelected)) { 2174 const arr = req.sp_frmOnlySelected.map(v => `sp_OnlySelected[]=${encodeURIComponent(v)}`); 2175 strQuery += '&' + arr.join('&'); 2176 } 2177 2178 if (req.sp_frmOnlyNew) { 2179 strQuery += '&sp_OnlyNew=1'; 2180 } 2181 2182 if (req.sp_frmOnlyDead) { 2183 strQuery += '&sp_OnlyDead=1'; 2184 } 2185 2186 if (req.sp_frmOnlyEchouage) { 2187 strQuery += '&sp_OnlyEchouage=1'; 2188 } 2189 2190 if (req.sp_frmOnlyStoc) { 2191 strQuery += `&sp_OnlyStoc=${encodeURIComponent(req.sp_frmOnlyStoc)}`; 2192 } 2193 2194 if (req.sp_frmListType) { 2195 strQuery += `&sp_frmListType=${encodeURIComponent(req.sp_frmListType)}`; 2196 } 2197 2198 if (req.sp_frmIdStoc) { 2199 strQuery += `&sp_IdStoc=${encodeURIComponent(req.sp_frmIdStoc)}`; 2200 } 2201 2202 if (req.sp_frmProject) { 2203 strQuery += `&sp_project=${encodeURIComponent(req.sp_frmProject)}`; 2204 } 2205 2206 if (req.sp_frmOnlyWithRing) { 2207 strQuery += '&sp_OnlyWithRing=1'; 2208 } 2209 2210 if (req.sp_frmOnlyWithOffspring) { 2211 strQuery += '&sp_OnlyWithOffspring=1'; 2212 } 2213 2214 if (req.sp_frmOnlySample) { 2215 strQuery += '&sp_OnlySample=1'; 2216 } 2217 2218 if (req.sp_frmOnlyAgeSex) { 2219 strQuery += '&sp_OnlyAgeSex=1'; 2220 } 2221 2222 if (req.sp_frmChiro_acoustic) { 2223 strQuery += '&sp_chiro_acoustic=1'; 2224 } 2225 if (req.sp_frmChiro_bio) { 2226 strQuery += '&sp_chiro_bio=1'; 2227 } 2228 if (req.sp_frmChiro_telemetry) { 2229 strQuery += '&sp_chiro_telemetry=1'; 2230 } 2231 if (req.sp_frmChiro_view) { 2232 strQuery += '&sp_chiro_view=1'; 2233 } 2234 if (req.sp_frmChiro_trace) { 2235 strQuery += '&sp_chiro_trace=1'; 2236 } 2237 2238 if (req.sp_frmOnlyColony) { 2239 strQuery += '&sp_OnlyColony=1'; 2240 } 2241 if (req.sp_frmOnlyColonyExtended) { 2242 strQuery += '&sp_OnlyColonyExtended=1'; 2243 } 2244 2245 if (req.sp_frmOnlyWithRarityReport) { 2246 strQuery += '&sp_OnlyWithRarityReport=1'; 2247 } 2248 2249 if (req.sp_frmH && typeof req.sp_frmH === 'object') { 2250 for (const [committee, sub] of Object.entries(req.sp_frmH)) { 2251 for (const [status, val] of Object.entries(sub)) { 2252 strQuery += `&sp_H[${committee}][${status}]=${encodeURIComponent(val)}`; 2253 } 2254 } 2255 } 2256 2257 if (req.sp_frmUse_synonyms) { 2258 strQuery += '&spUseSynonyms=1'; 2259 } 2260 if (req.sp_frmUse_hybrids) { 2261 strQuery += '&spUseHybrids=1'; 2262 } 2263 if (req.sp_frmUse_subspecies) { 2264 strQuery += '&spUseSubspecies=1'; 2265 } 2266 if (req.sp_frmUse_variety) { 2267 strQuery += '&spUseVariety=1'; 2268 } 2269 if (req.sp_frmUse_multiple_sp) { 2270 strQuery += '&spUseMultipleSpecies=1'; 2271 } 2272 if (req.sp_frmUse_determined_sp) { 2273 strQuery += '&spUseDeterminedSpecies=1'; 2274 } 2275 2276 return strQuery; 2277} 2278 2279 2280function build_main_title(data, _ ) 2281{ 2282 // Check if level 1 title is not already displayed 2283 if('level_1' in last_titles_displayed && data.listTop.title == last_titles_displayed['level_1']) { 2284 return null; 2285 } 2286 2287 obs_level1_offset++; // Used in rarity map 2288 var main_level_1 = $('<div>', {'class': "listContainer"}); 2289 2290 // If title level 1 is not displayed, we reset all 2291 last_titles_displayed['level_2_title'] = ''; 2292 last_titles_displayed['level_2_href'] = ''; 2293 last_titles_displayed['level_1'] = data.listTop.title; 2294 2295 2296 return main_level_1.append($('<div>', {'class': "listTop"}).html(data.listTop.title)).append($('<div>', {'class' : "obs_level_2_i_content"})); 2297} 2298 2299function build_second_title(data, _) { 2300 if('level_2_title' in last_titles_displayed && data.listSubmenu.title == last_titles_displayed['level_2_title'] && data.listSubmenu.href == last_titles_displayed['level_2_href']) 2301 return null; 2302 2303 var main_content = $('<div>' , {'class': "obs_level_2_i_content", 'style':"display:block"}).append($('<div>', {'class': "obs_level_2_i_container"}));
2304 var listSubmenu = $('<div>', {'class': "listSubmenu"}); 2305 2306 if(listSubmenu) { 2307 if(data.listSubmenu.href_ajax) 2308 { 2309 listSubmenu.append(build_ajax_link(data.listSubmenu.title, data.listSubmenu.href, data.listSubmenu.href_ajax)); 2310 } 2311 else 2312 { 2313 listSubmenu.append(build_link(data.listSubmenu.title, data.listSubmenu.href)); 2314 } 2315 } 2316 2317 level_3 = $('<div>',{'class' : "listObservation"}); 2318 last_titles_displayed['level_2_title'] = data.listSubmenu.title; 2319 last_titles_displayed['level_2_href'] = data.listSubmenu.href; 2320 2321 return main_content.append(listSubmenu).append(level_3); 2322} 2323 2324function checkIdSightingExists(id_sighting, s2) 2325{ 2326 for (var i = 0; i < s2.opt_observers.length; i++) { 2327 for (var j = 0; j < s2.opt_observers[i].opt_observer_info.length; j++) { 2328 if (s2.opt_observers[i].opt_observer_info[j].id_sighting === id_sighting) { 2329 return true; 2330 } 2331 } 2332 } 2333 2334 return false; 2335} 2336 2337function merge_obs(s1, s2) 2338{ 2339 if(s1.listTop.title !== s2.listTop.title) 2340 return false; 2341 2342 if(s1.listSubmenu.title !== s2.listSubmenu.title && s1.listSubmenu.href !== s2.listSubmenu.href) 2343 return false; 2344 2345 if(s1.species_array.latin_name !== s2.species_array.latin_name) 2346 return false; 2347 2348 if (typeof s1.opt_observers !== 'undefined') { 2349 if (checkIdSightingExists(s1.opt_observers[0].opt_observer_info[0].id_sighting, s2)) { 2350 return s2; 2351 } 2352 } 2353 2354 s1.is_hidden = Math.max(s1.is_hidden, s2.is_hidden); 2355 s1.is_admin_hidden = Math.max(s1.is_admin_hidden, s2.is_admin_hidden); 2356 s1.is_new = Math.max(s1.is_new, s2.is_new); 2357 s1.is_second_hand = Math.max(s1.is_second_hand, s2.is_second_hand); 2358 s1.no_link = Math.max(s1.no_link, s2.no_link); 2359 s1.show_transparent = Math.max(s1.show_transparent, s2.show_transparent); 2360 s1.is_favorite = Math.max(s1.is_favorite, s2.is_favorite); 2361 s1.print_incomplete = Math.max(s1.print_incomplete, s2.print_incomplete); 2362 2363 // No need to merge protocol details. 2364 // protocol_name 2365 // protocol_svg 2366 // protocol_show_extended_details 2367 2368 if(s1.admin_hidden_type && s2.admin_hidden_type) 2369 { 2370 if(s1.admin_hidden_type === 'question' || s2.admin_hidden_type === 'question') 2371 s1.admin_hidden_type = 'question'; 2372 if(s1.admin_hidden_type === 'refused' || s2.admin_hidden_type === 'refused') 2373 s1.admin_hidden_type = 'refused'; 2374 } 2375 else if(s2.admin_hidden_type) 2376 s1.admin_hidden_type = s2.admin_hidden_type; 2377 2378 if(s1.opt_observer_logged_links && s2.opt_observer_logged_links) { 2379 for(var i = 0 ; i < s2.opt_observer_logged_links.length ; i++) { 2380 // Check if link already exists 2381 var link = s2.opt_observer_logged_links[i].href; 2382 var found = false; 2383 for(var j = 0 ; j < s1.opt_observer_logged_links.length ; j++) { 2384 found = found || s1.opt_observer_logged_links[j].href == link; 2385 if(found) 2386 break; 2387 } 2388 2389 if(!found) 2390 s1.opt_observer_logged_links.push(s2.opt_observer_logged_links[i]); 2391 } 2392 } 2393 else if(s2.opt_observer_logged_links) 2394 s1.opt_observer_logged_links = s2.opt_observer_logged_links; 2395 2396 if (typeof s2.opt_observers !== 'undefined') { 2397 for (var i = 0; i < s2.opt_observers.length; i++) { 2398 var id_observer = s2.opt_observers[i].id; 2399 var matched = false; 2400 var same_sight_matched = false; // More chunk just for pictures. 2401 2402 for (var j = 0; j < s1.opt_observers.length; j++) { 2403 if (s1.opt_observers[j].id === id_observer) { 2404 2405 if (s2.opt_observers[i].opt_observer_info.length === 1) { 2406 for (var k = 0; k < s1.opt_observers[j].opt_observer_info.length; k++) { 2407 if (typeof s1.opt_observers[j].opt_observer_info[k] !== 'undefined' && typeof s2.opt_observers[i].opt_observer_info[k] !== 'undefined' 2408 && 2409 s1.opt_observers[j].opt_observer_info[k].id_sighting === s2.opt_observers[i].opt_observer_info[k].id_sighting) { 2410 same_sight_matched = true; 2411 break; 2412 } 2413 } 2414 } 2415 2416 if (!same_sight_matched) { 2417 s1.opt_observers[j].opt_observer_info = s1.opt_observers[j].opt_observer_info.concat(s2.opt_observers[i].opt_observer_info); 2418 } 2419 2420 matched = true; 2421 break; 2422 } 2423 } 2424 2425 if (!matched) { 2426 s1.opt_observers.push(s2.opt_observers[i]); 2427 } 2428 } 2429 } 2430 2431 // s1 is ref 2432 if(!same_sight_matched) { 2433 if (s1.detail_list && s2.detail_list) 2434 s1.detail_list = s1.detail_list.concat(s2.detail_list); 2435 else if (s2.detail_list) 2436 s1.detail_list = s2.detail_list; 2437 2438 s1.remarks = s1.remarks.concat(s2.remarks); 2439 } 2440 // s1.opt_observers[0].opt_observer_info = s1.opt_observers[0].opt_observer_info.concat(s2.opt_observers[0].opt_observer_info); 2441 s1.print_incomplete = Math.max(s1.print_incomplete, s2.print_incomplete); 2442 if("opt_media_list" in s1 && "opt_media_list" in s2) 2443 s1.opt_media_list = Object.assign({},s1.opt_media_list, s2.opt_media_list); 2444 else if("opt_media_list" in s2) 2445 s1.opt_media_list = s2.opt_media_list; 2446 s1.remarks_hidden = s1.remarks_hidden.concat(s2.remarks_hidden); 2447 2448 s1.birds_count = generate_count_obs(s1.opt_observers, s1); 2449 return s1; 2450} 2451 2452function generate_count_obs(observers, sighting) 2453{ 2454 if (typeof observers === 'undefined') { 2455 return '-'; 2456 } 2457 2458 var max_count = 0; 2459 var min_count = 1000000000; 2460 var sum_count = {}; 2461 var modifier = 0; 2462 2463 for(var i = 0 ; i < observers.length ; i++) { 2464 var id = "" + observers[i].id.toString(); 2465 var info = observers[i].opt_observer_info; 2466 2467 for (var j = 0; j < info.length; j++) { 2468 var data = info[j]; 2469 2470 if(!(id in sum_count)) 2471 sum_count[id] = 0; 2472 2473 sum_count[id] = sum_count[id] + parseInt(data['count']); 2474 2475 switch (data['estimation_code']) { 2476 case 'MINIMUM': 2477 modifier = modifier|1; // 0001b 2478 break; 2479 case 'ESTIMATION': 2480 modifier = modifier|2; // 0010b 2481 break; 2482 case 'NO_VALUE': 2483 modifier = modifier|4; // 0100b 2484 break; 2485 case 'EXACT_VALUE': 2486 modifier = modifier|8; // 1000b 2487 break; 2488 } 2489 } 2490 } 2491 2492 for(var idx in sum_count) 2493 { 2494 var count = sum_count[idx]; 2495 2496 if (count <= min_count) 2497 min_count = count; 2498 2499 if (count >= max_count) 2500 max_count = count; 2501 } 2502 2503 2504 if(max_count > 1) { 2505 if("DATE_PLACE_SPECIES" === 'SPECIES_PLACE_DATE' || "DATE_PLACE_SPECIES" === 'PLACE_SPECIES_DATE') 2506 sighting.sighting_detail = make_birds_string(max_count, sighting); 2507 else 2508 sighting.sighting_detail = make_specie_string(sighting.species_array.id, sighting.species_array.latin_name, sighting.species_array.name, sighting.species_array.name_plur, 0, 1, max_count, (sighting.species_array.taxo_group == 1) ? 10000 : (sighting.species_array.taxo_group + 10000), 1); 2509 } 2510 2511 return generate_count_string(modifier, min_count, max_count); 2512} 2513 2514 2515function make_birds_string(birds_count, sighting) 2516{ 2517 var ret_s = ""; 2518 if (birds_count != '') 2519 { 2520 if (birds_count == '0') 2521 ret_s = ret_s + '<strike>'; 2522 else if(birds_count < 2) 2523 ret_s = ret_s + "individual"; 2524 else 2525 ret_s = ret_s + "individuals"; 2526 2527 if (birds_count == '0') 2528 ret_s = ret_s + '</strike>'; 2529 } 2530 else 2531 { 2532 ret_s = "not counted"; 2533 } 2534 2535 return ret_s + ", " + sighting.date; 2536} 2537 2538 2539 2540function generate_count_string(modifier, min_count, max_count) 2541{ 2542 var modifier_string = ''; 2543 2544 switch(modifier) 2545 { 2546 case 1: // 0001b - > - > 2547 case 5: // 0101b - N> - > 2548 case 9: // 1001b - E> - > 2549 case 13: // 1101b - EN> - > 2550 modifier_string = '>'; 2551 break; 2552 2553 case 2: // 0010b - ~ - ~ 2554 case 3: // 0011b - >~ - ~ 2555 case 6: // 0110b - N~ - ~ 2556 case 7: // 0111b - N~> - ~ 2557 case 10: // 1010b - E~ - ~ 2558 case 11: // 1011b - E~> - ~ 2559 case 14: // 1110b - EN~ - ~ 2560 case 15: // 1111b - EN~> - ~ 2561 modifier_string = '~'; 2562 break; 2563 2564 case 4: // 0100b - N - N 2565 modifier_string = '×'; 2566 break; 2567 2568 case 8: // 1000b - E - E 2569 case 12: // 1100b - EN - E 2570 modifier_string = ''; 2571 break; 2572 } 2573 2574 2575 if (min_count == max_count) 2576 { 2577 if (min_count == 0) 2578 if (modifier == 8) 2579 return '0'; 2580 else 2581 return modifier_string; 2582 return modifier_string+min_count; 2583 } 2584 else 2585 { 2586 if (min_count == 0) 2587 return modifier_string +max_count; 2588 2589 return modifier_string+min_count+'-'+max_count 2590 } 2591} 2592 2593function build_obs(sighting) 2594{ 2595 var ids = []; 2596 last_sighting = sighting; 2597 sighting.obs_level1_offset = obs_level1_offset; // Used in rarity map 2598 2599 full_page_sightings.push(sighting); 2600
2601 var observation_container = $('<div>',{'class' : "observation_container"}); 2602 2603 var before_opt_observer = $('<div>',{'class' : "before_opt_observer"}); 2604 var first_images = generate_image(sighting.species_array, sighting.day_number, sighting.is_hidden, !sighting.print_incomplete && sighting.admin_hidden_type == 'incomplete'? 0 : sighting.is_admin_hidden, sighting.is_new, 0, 0, 0, sighting.is_favorite, sighting.protocol_name, sighting.protocol_svg, sighting.admin_hidden_type); 2605 var before_elem = $('<span>',{'class' : "sighting_detail",'style' : "color:"+sighting.rarity_color}).html(first_images+" <span class=\"sighting_count\">"+sighting.birds_count+"</span> "); 2606 2607 var sighting_detail = $('<span>',{'class' : "sighting_detail",'style' : "margin-right:0.2rem;color:"+sighting.rarity_color}).html(sighting.sighting_detail); 2608 2609 // Status icons 2610 before_opt_observer 2611 .append(before_elem) 2612 .append(sighting_detail); 2613 2614 if(typeof(sighting.opt_observer_logged_links)!=='undefined') 2615 { 2616 var obs_links = sighting.opt_observer_logged_links; 2617 $.each(obs_links, function (index) 2618 { 2619 var img_link = obs_links[index]; 2620 before_opt_observer.append(build_img_link(img_link.class, img_link.href,img_link.img,img_link.img_title)); 2621 }); 2622 } 2623 2624 observation_container.append(before_opt_observer); 2625 2626 //Observer 2627 if(typeof(sighting.opt_observers)!=='undefined') 2628 { 2629 var opt_observers_data = sighting.opt_observers;
2630 var opt_observer_info_container = $('<div>',{'class':'opt_observer'}); 2631 $.each(opt_observers_data, function (index) 2632 { 2633 var observer_data = opt_observers_data[index]; 2634 if(typeof(observer_data.opt_observer_info)!=='undefined') 2635 opt_observer_info_container.append(build_observer(observer_data.opt_observer_info)); 2636 }); 2637 observation_container.append(opt_observer_info_container); 2638 } 2639 2640 var after_opt_observer = $('<div>',{'class' : "after_opt_observer"}); 2641 2642 //Images 2643 if(typeof(sighting.opt_media_list)!=='undefined') 2644 { 2645 var container_thumbnails = $('<div>',{'class' : "thumbnail_container"}); 2646 for (var mid in sighting.opt_media_list) { 2647 if (sighting.opt_media_list.hasOwnProperty(mid)) { 2648 var container_mid = $('<div>',{ 2649 'id' : "mid_list_"+mid, 2650 'style' : "width:unset;", 2651 'class' : "gSmallPhoto", 2652 'onclick' : "link_sighting_media_details("+mid+")" 2653 }); 2654 2655 var currentMediaInfo = sighting.opt_media_list[mid]; 2656 container_mid.html(get_visual_js(mid, currentMediaInfo['title'], parseInt(currentMediaInfo['thumbnail_size']) , currentMediaInfo['full_webpath_thumbnail'], 'n', currentMediaInfo['type'] == 'VIDEO' ? 0 : 1, 'media_mid', parseInt(currentMediaInfo['media_is_hidden']),parseInt(currentMediaInfo['png']), currentMediaInfo['code'])); 2657 container_thumbnails.append(container_mid); 2658 } 2659 } 2660 after_opt_observer.append(container_thumbnails); 2661 after_opt_observer.append($('<div>',{'style' : "clear:both"})); 2662 } 2663 2664 observation_container.append(after_opt_observer); 2665 2666 var data_attributes = {}; 2667 var data_details = []; 2668 2669 if (typeof sighting.opt_observers !== 'undefined') { 2670 sighting.opt_observers.forEach(function(opt_observers) { 2671 opt_observers.opt_observer_info.forEach(function (observer) { 2672 data_attributes['data-onfly-' + observer.id_sighting] = 'true'; 2673 let tempDiv = $('<div>').html(observer.author_string); 2674 data_details.push({id: observer.id_sighting, observer: tempDiv.text()}) 2675 }); 2676 }) 2677 } 2678 2679 data_attributes['class'] = "onfly_opt_observer"; 2680 data_attributes['data-onfly'] = JSON.stringify(data_details); 2681 data_attributes['style'] = 'display:none;'; 2682 observation_container.append($('<div>',data_attributes)); 2683 2684 2685 return observation_container 2686} 2687 2688function get_id_observation_for_extended_detail(opt_observer) 2689{ 2690 var id_obs = get_id_observation(opt_observer); 2691 return id_obs.join('-'); 2692} 2693 2694function get_id_observation(opt_observer) 2695{ 2696 var id_obs = []; 2697 opt_observer.opt_observer_info.forEach(function(observer) { 2698 id_obs.push(observer.id_sighting); 2699 }); 2700 return id_obs; 2701} 2702 2703function build_map_resume(sighting) 2704{
2705 var observation_container = $('<div>',{'class' : "observation_container"}); 2706 2707 var before_opt_observer = $('<div>',{'class' : "before_opt_observer"}); 2708 before_opt_observer.append($('<span>', {'class' : "text-bold"}).html(sighting.date + " ")); 2709 var first_images = generate_image(sighting.species_array, sighting.day_number, sighting.is_hidden, !sighting.print_incomplete && sighting.admin_hidden_type == 'incomplete'? 0 : sighting.is_admin_hidden, sighting.is_new, 0, 0, 0, sighting.is_favorite, sighting.protocol_name, sighting.protocol_svg, sighting.admin_hidden_type); 2710 var before_elem = $('<span>',{'class' : "sighting_detail",'style' : "color:"+sighting.rarity_color}).html(first_images+" "+sighting.birds_count+" <span title=\"" + sighting.species_array.latin_name + "\">" + (sighting.birds_count > 1 ? sighting.species_array.name_plur : sighting.species_array.name) + " </span>"); 2711 2712 before_opt_observer.append(before_elem); 2713 2714 if(typeof(sighting.opt_observer_logged_links)!=='undefined') 2715 { 2716 var obs_links = sighting.opt_observer_logged_links; 2717 $.each(obs_links, function (index) 2718 { 2719 var img_link = obs_links[index]; 2720 before_opt_observer.append(build_img_link(img_link.class, img_link.href,img_link.img,img_link.img_title)); 2721 }); 2722 } 2723 2724 observation_container.append(before_opt_observer); 2725 2726 //Observer 2727 if(typeof(sighting.opt_observers)!=='undefined') 2728 { 2729 var opt_observers_data = sighting.opt_observers;
2730 var opt_observer_info_container = $('<div>',{'class':'opt_observer'}) 2731 $.each(opt_observers_data, function (index) 2732 { 2733 var observer_data = opt_observers_data[index]; 2734 if(typeof(observer_data.opt_observer_info)!=='undefined') 2735 opt_observer_info_container.append(build_observer(observer_data.opt_observer_info)); 2736 }); 2737 observation_container.append(opt_observer_info_container); 2738 } 2739 2740 var after_opt_observer = $('<div>',{'class' : "after_opt_observer"}); 2741 //Extended detail 2742 if(typeof(sighting.opt_extended_details)!=='undefined') 2743 { 2744 var extended_details_data = sighting.opt_extended_details; 2745 $.each(extended_details_data, function (index) 2746 { 2747 var extended_detail = extended_details_data[index]; 2748 after_opt_observer.append(build_extended_detail(sighting.id_sighting, extended_detail.color, extended_detail.feature, extended_detail.title)); 2749 }); 2750 } 2751 2752 //remarks 2753 if(typeof(sighting.remarks)!=='undefined') 2754 { 2755 var remarks_list = sighting.remarks; 2756 $.each(remarks_list, function (index) 2757 { 2758 var remark_data = remarks_list[index]; 2759 after_opt_observer.append($('<div>',{'class':'remark'}).html(remark_data.title+remark_data.content)); 2760 }); 2761 } 2762 2763 //hidden remarks 2764 if(typeof(sighting.remarks_hidden)!=='undefined') 2765 { 2766 var remarks_hidden_list = sighting.remarks_hidden; 2767 $.each(remarks_hidden_list, function (index) 2768 { 2769 var remark_data = remarks_hidden_list[index]; 2770 after_opt_observer.append($('<div>',{'class':'hidden_remark'}).html(remark_data.title+remark_data.content)); 2771 }); 2772 } 2773 2774 //Atlas code 2775 if(typeof(sighting.atlas_list)!=='undefined') 2776 { 2777 var atlas_list = sighting.atlas_list; 2778 $.each(atlas_list, function (index) 2779 { 2780 var atlas_list_data = atlas_list[index]; 2781 after_opt_observer.append($('<div>',{'class':'bodynocolor','style':'color:#008000'}).html(atlas_list_data.title+" : "+atlas_list_data.content)); 2782 }); 2783 } 2784 2785 //Details 2786 if(typeof(sighting.detail_list)!=='undefined') 2787 { 2788 var detail_list = sighting.detail_list; 2789 $.each(detail_list, function (index) 2790 { 2791 var detail_list_data = detail_list[index]; 2792 after_opt_observer.append($('<div>',{'class':'bodynocolor'}).html(detail_list_data.title+" : "+detail_list_data.content)); 2793 }); 2794 } 2795 2796 //Images 2797 if(typeof(sighting.opt_media_list)!=='undefined') 2798 { 2799 var container_thumbnails = $('<div>',{'class' : "thumbnail_container"}); 2800 for (var mid in sighting.opt_media_list) { 2801 if (sighting.opt_media_list.hasOwnProperty(mid)) { 2802 var container_mid = $('<div>',{ 2803 'id' : "mid_list_"+mid, 2804 'style' : "width:unset;", 2805 'class' : "gSmallPhoto", 2806 'onclick' : "link_sighting_media_details("+mid+")" 2807 }); 2808 2809 var currentMediaInfo = sighting.opt_media_list[mid]; 2810 2811 container_mid.html(get_visual_js(mid, currentMediaInfo['title'], parseInt(currentMediaInfo['thumbnail_size']) , currentMediaInfo['full_webpath_thumbnail'], 'n', 1, 'media_mid', parseInt(currentMediaInfo['media_is_hidden']),parseInt(currentMediaInfo['png']), currentMediaInfo['code'])); 2812 container_thumbnails.append(container_mid); 2813 } 2814 } 2815 after_opt_observer.append(container_thumbnails); 2816 after_opt_observer.append($('<div>',{'style' : "clear:both"})); 2817 } 2818 2819 observation_container.append(after_opt_observer); 2820 2821 return observation_container; 2822} 2823 2824 2825function handleImageError(image_url, id_div) 2826{ 2827 //Image was not loaded 2828 console.log('Image '+image_url+' does not exist.'); 2829 $("#w-"+id_div).hide();//hide the waiting button 2830} 2831 2832function handleImageErrorDisplayEmptyImg(img,image_url, id_div) 2833{ 2834 //Image was not loaded 2835 console.log('Image '+image_url+' does not exist.'); 2836 $("#w-"+id_div).hide();//hide the waiting button 2837 $("#"+id_div).show();//hide the waiting button 2838 img.width = 200; 2839 img.height = 50; 2840} 2841 2842function build_link(title,href) 2843{ 2844 return $('<a>',{'href' : href}).html(title); 2845} 2846 2847function build_ajax_link(title, href, href_ajax) { 2848 const link = $('<a>', {'href': href}).html(title); 2849 2850 link.on('click', function(event) { 2851 event.preventDefault(); // Prevent default anchor behavior 2852 if (event.ctrlKey || event.metaKey) { 2853 window.open(href, '_blank'); 2854 } else { 2855 detail_ajax_load(href_ajax); 2856 } 2857 }); 2858 2859 return link; 2860} 2861 2862function authorHandleLinkClick(event,obsid_code) { 2863 event.preventDefault(); 2864 const href = "https://www.ornitho.de/index.php?m_id=53&id="+obsid_code; 2865 const href_ajax = "https://www.ornitho.de/index.php?m_id=1504&ajax=y&backlink=skip&id="+obsid_code; 2866 if (event.ctrlKey || event.metaKey) { 2867 window.open(href, '_blank');
2867 // Open in a new tab if Ctrl/Cmd is pressed 2868 } else { 2869 detail_ajax_load(href_ajax); 2870 } 2871} 2872 2873function build_img_link(iclass, href,src,img_title,onclick) 2874{ 2875 if (iclass !== '') 2876 { 2877 if (typeof (href) === 'undefined') { 2878 if (typeof (onclick) === 'undefined') 2879 return $('<em>', { 2880 'class': iclass, 2881 'title': img_title 2882 }); 2883 else 2884 return $('<em>', { 2885 'onclick': onclick, 2886 'class': iclass, 2887 'title': img_title 2888 }); 2889 } else { 2890 if (typeof (onclick) === 'undefined') 2891 return $('<a>', {'class': "alink", 'href': href}).append($('<em>', { 2892 'class': iclass, 2893 'title': img_title 2894 })); 2895 else 2896 return $('<a>', { 2897 'onclick': onclick, 2898 'class': "alink", 2899 'href': href 2900 }).append($('<em>', { 2901 'class': iclass, 2902 'title': img_title 2903 })); 2904 } 2905 } 2906 else { 2907 if (typeof (href) === 'undefined') { 2908 if (typeof (onclick) === 'undefined') 2909 return $('<img>', { 2910 'src': src, 2911 'title': img_title, 2912 'alt': img_title, 2913 'style': 'margin-left:4px;vertical-align:bottom' 2914 }); 2915 else 2916 return $('<img>', { 2917 'onclick': onclick, 2918 'src': src, 2919 'title': img_title, 2920 'alt': img_title, 2921 'style': 'margin-left:4px;vertical-align:bottom;cursor: pointer;' 2922 }); 2923 } else { 2924 if (typeof (onclick) === 'undefined') 2925 return $('<a>', {'class': "alink", 'href': href}).append($('<img>', { 2926 'src': src, 2927 'title': img_title, 2928 'alt': img_title, 2929 'style': 'margin-left:4px;vertical-align:bottom' 2930 })); 2931 else 2932 return $('<a>', { 2933 'onclick': onclick, 2934 'class': "alink", 2935 'href': href 2936 }).append($('<img>', { 2937 'src': src, 2938 'title': img_title, 2939 'alt': img_title, 2940 'style': 'margin-left:4px;vertical-align:bottom' 2941 })); 2942 } 2943 } 2944} 2945 2946function build_observer(opt_observer_info) 2947{
2948 var opt_observer_info_container = $('<div>',{'class' : "opt_observer_info"}); 2949 var observer_html = ""; 2950 $.each(opt_observer_info, function (index) 2951 { 2952 var opt_observer_info_i = opt_observer_info[index]; 2953 observer_html += "<span id_sighting='" + opt_observer_info_i.id_sighting + "'>[<span class='reload'></span>"; 2954 if(typeof(opt_observer_info_i.opt_before_author_image_links)!=='undefined') 2955 { 2956 var bf_author_image_links = opt_observer_info_i.opt_before_author_image_links; 2957 $.each(bf_author_image_links, function (index) 2958 { 2959 var img_link = bf_author_image_links[index]; 2960 observer_html += build_img_link(img_link.class, img_link.href,img_link.img,img_link.img_title)[0].outerHTML; 2961 }); 2962 } 2963 2964 if(typeof(opt_observer_info_i.opt_count_string)!=='undefined') 2965 { 2966 observer_html += opt_observer_info_i.opt_count_string; 2967 } 2968 2969 if(typeof(opt_observer_info_i.opt_full_time)!=='undefined') 2970 { 2971 observer_html += opt_observer_info_i.opt_full_time; 2972 } 2973 2974 observer_html += " "+ opt_observer_info_i.author_string; 2975 2976 if(typeof(opt_observer_info_i.opt_edit_view_button)!=='undefined') 2977 { 2978 observer_html += opt_observer_info_i.opt_edit_view_button; 2979 } 2980 2981 if(typeof(opt_observer_info_i.opt_delete_button)!=='undefined') 2982 { 2983 observer_html += opt_observer_info_i.opt_delete_button; 2984 } 2985 2986 if(typeof(opt_observer_info_i.opt_after_edit_delete_buttons)!=='undefined') 2987 { 2988 var after_edit_delete_buttons = opt_observer_info_i.opt_after_edit_delete_buttons; 2989 $.each(after_edit_delete_buttons, function (index) 2990 { 2991 var img_link = after_edit_delete_buttons[index]; 2992 observer_html += build_img_link(img_link.class, img_link.href,img_link.img,img_link.img_title,img_link.onclick)[0].outerHTML; 2993 }); 2994 } 2995 2996 if(typeof(opt_observer_info_i.insert_date)!=='undefined') 2997 observer_html += " ("+opt_observer_info_i.insert_date+")"; 2998 observer_html += "]</span><br/>"; 2999 3000 }); 3001 observer_html += ""; 3002 return opt_observer_info_container.html(observer_html); 3003} 3004 3005function build_extended_detail(id, color, type, title) 3006{
3007 var extended_container = $('<div>',{'class':'extended_container'}); 3008 3009 var inside_html = '<div style="background-color:'+color+'" class="extended_detail_button" id_feature="'+type+'" id_obs="'+id+'" id="'+type+'_'+id+'">'; 3010 3011 inside_html += '<div>'; 3012 inside_html += '<em class="plus menu_title_deco fa fa-chevron-right"></em>'; 3013 inside_html += '<em style="display:none" class="minus menu_title_deco fa fa-chevron-down"></em>'; 3014 inside_html += '<em style="display:none;margin-right:.25rem;" class="imgProcessing fas fa-spin fa-wait"></em>'; 3015 inside_html += '<div style="margin-top:4px;">'+title+'</div>'; 3016 inside_html += '</div>'; 3017 inside_html += '<div class="bodytext" style="margin:5px" id="content_'+type+'_'+id+'"></div>'; 3018 inside_html += '</div><div class="clearfix"></div>'; 3019 3020 return extended_container.html(inside_html); 3021} 3022 3023function link_sighting_details(id) 3024{ 3025 if(load_sync) 3026 { 3027 var link = 'https://www.ornitho.de/index.php?m_id=54&id='+id; 3028 location.href = link; 3029 } 3030 else 3031 { 3032 var link = 'https://www.ornitho.de/index.php?m_id=1370&ajax=y&backlink=skip&id='+id; 3033 detail_ajax_load(link); 3034 } 3035} 3036 3037function link_sighting_media_details(mid) 3038{ 3039 var link = 'https://www.ornitho.de/index.php?m_id=1370&ajax=y&backlink=skip&mid='+mid; 3040 detail_ajax_load(link); 3041} 3042 3043function link_sighting_validation_details(id) 3044{ 3045 var link = 'https://www.ornitho.de/index.php?m_id=1370&pnl=v&ajax=y&backlink=skip&id='+id; 3046 detail_ajax_load(link); 3047} 3048 3049function detail_ajax_load(link) 3050{ 3051 popClick($('<table>',{'id' : "detail_content", 'style' : 'width:100%'})); 3052 $("#detail_content").html('<em class="fa-solid fa-spinner fa-spin fa-1x-spin"></em>'); 3053 $("#detail_content").load(link); 3054 scroll_positon = $(document).scrollTop().valueOf(); 3055 window.scrollTo(0, 0); 3056} 3057 3058function closeClickPopup() 3059{ 3060 $("#popup_name").remove(); 3061 $("#fade").remove(); 3062 window.scrollTo(0, scroll_positon); 3063 $("#ajaxErrorMessageDisplayInit").attr('id','ajaxErrorMessageDisplay'); 3064} 3065 3066function popClick(content) { 3067 var build_main_div = $('<div>', { 3068 id: "popup_name", 3069 'style': "max-width:100rem", 3070 'class': "popup_block" 3071 }); 3072 3073 var close_image = $('<div>',{'class' : "fa-closebox", }); 3074 3075 //Register click event on close box 3076 close_image.click(function(){ 3077 closeClickPopup(); 3078 }); 3079 3080 var floatDiv = $('<div>', {'style' : 'z-index:1;position:absolute;width:100%'}); 3081 3082 //Move error message inside the popup box (so we can see the result) 3083 $("#ajaxErrorMessageDisplay").attr('id','ajaxErrorMessageDisplayInit'); 3084 var errorMessageDiv = $('<div>', {'id' : 'ajaxErrorMessageDisplay'}); 3085 3086 build_main_div.html(content); 3087 3088 close_image.appendTo(floatDiv); 3089 errorMessageDiv.prependTo(build_main_div); 3090 floatDiv.prependTo(build_main_div); 3091 3092 $('body').append(build_main_div); 3093 3094 var page_margin = parseInt($('#td-full-content').css('margin-left')); 3095 3096 var page_witdh = 800; 3097 3098 var css = {}; 3099 3100 if (page_margin === 0) { 3101 page_witdh = $('#td-full-content').width() - 160; 3102 css.top = 80; 3103 } 3104 else { 3105 page_witdh = $('#td-full-content').width() + page_margin; 3106 css.top = 0; 3107 css['margin-left'] = 0; 3108 } 3109 3110 //Faire apparaitre la pop-up et ajouter le bouton de fermeture 3111 $('#popup_name').fadeIn().css({ 3112 'width': Number(page_witdh) 3113 }); 3114 3115 //Recuperation du margin, qui permettra de centrer la fenetre - on ajuste de 80px en conformite avec le CSS 3116 if (page_margin === 0) { 3117 css.left = "50%"; 3118 css.transform = "translate(-50%,0)"; 3119 } 3120 else { 3121 //popMargLeft = -5; 3122 css.left = "0%"; 3123 } 3124 3125 //css['margin-left'] = -popMargLeft; 3126 3127 //On affecte le margin 3128 $('#popup_name').css(css); 3129 3130 //Effet fade-in du fond opaque 3131 $('body').append('<div id="fade"></div>'); //Ajout du fond opaque noir 3132 3133 //Apparition du fond - .css({'filter' : 'alpha(opacity=80)'}) pour corriger les bogues de IE 3134 $('#fade').css({'filter' : 'alpha(opacity=80)'}).fadeIn(); 3135 3136 return false;
3137} 3138 3139function get_visual_js(id_media, alt, final_size, full_web_path, prefix, border, name_prefix, is_hidden, is_png, code) 3140{ 3141 var media_string = ''; 3142 3143 var search_index = full_web_path.lastIndexOf('/'); 3144 3145 if(typeof code !== 'undefined') { 3146 var mname = code; 3147 var div_id = name_prefix + "-list-" + final_size + "-" + mname; 3148 } 3149 else { 3150 var mname = full_web_path.substr(search_index + 1, full_web_path.length - search_index); 3151 var div_id = name_prefix + "-list-" + final_size + "-" + mname.substr(1, mname.indexOf(".") - 1); 3152 } 3153 if (border) 3154 { 3155 media_string += "<div id=\"w-"+div_id+"\" style=\"display:block;width:34px;height:18px;margin:20px auto\">"; 3156 3157 media_string += '<em class="fa-solid fa-spinner fa-spin fa-1x-spin"></em>'; 3158 3159 media_string += "</div>"; 3160 media_string += "<div id=\""+div_id+"\" style=\"display:none;margin:0 auto\">"; 3161 media_string += "<div class=\"container\">"; 3162 media_string += is_png? "<div style=\"position:relative;left:0;top:0;background:white\">" : ""; //Because png has transparency if we display a waveform with transparency we don't want to see black shadow from above container -> add white background 3163 } 3164 3165 media_string += "<div style=\"position: relative;\">"; 3166 3167 media_string += "<img "; 3168 media_string += 'class="core-gallery-img" '; 3169 3170 if (border) 3171 { 3172 media_string += " onload=\"document.getElementById('"+div_id+"').style.display='block';"; 3173 media_string += " document.getElementById('w-"+div_id+"').style.display='none';"; 3174 media_string += " document.getElementById('"+div_id+"').style.height=this.height+'px';"; 3175 media_string += " document.getElementById('"+div_id+"').style.width=this.width+'px'; \""; 3176 } 3177 media_string += " onerror=\"handleImageError('"+full_web_path+"','"+div_id+"');\" "; 3178 3179 media_string += " style=\"display:block; margin: 0 auto;\" border=\"0\" title=\""+alt+"\" alt=\""+alt+"\" src=\""+full_web_path+"\" " + (border == 2 ? 'style="padding-top: 5px;"' : '') + "/>"; 3180 3181 if(is_hidden) 3182 media_string += "<div class=\""+name_prefix +"_hidden_"+id_media+"\" style=\"position: absolute;top:3px;left:3px;\"><em class=\"fas fa-keylock-red\"></em></div></div>"; 3183 else 3184 media_string += "<div class=\""+name_prefix +"_hidden_"+id_media+"\" style=\"display:none;position: absolute;top:3px;left:3px;\"><em class=\"fas fa-keylock-red\"></em></div></div>"; 3185 3186 if (border) 3187 { 3188 media_string += is_png? "</div>":""; 3189 media_string += "</div>"; 3190 media_string += "</div>"; 3191 } 3192 3193 return media_string; 3194} 3195 3196</script>
vendor: 1 bytes, line 3196
3196
3197<script type="module"> 3198 3199 import { 3200 locale, 3201 addTranslations, 3202 TileComponent, 3203 tr, 3204 notifyError, 3205 notifySuccess 3206 } from 'https://cdnfiles1.biolovision.net/common/components/components_1f6d7283.js'; 3207 3208 const dto = {"locale":"en","translations":{"CORE_TEXT_ERROR":"Error","CORE_TEXT_SUCCESS":"Success","PLUS_ONFLY_VERIFICATION_TITLE":"Checking","PLUS_CONFIRMATION_DESC":"Validation of unusual records","PLUS_CONFIRMATION_DISABLED_DESC":"Confirmation is disabled because the observation rating is not high enough.","DISPLAY_PAGE_TEXT_ERROR_VALIDATION_ERROR":"DISPLAY_PAGE_TEXT_ERROR_VALIDATION_ERROR","DISPLAY_PAGE_TEXT_PUBLIC_VALIDATION_SEND_SUCCESS":"The correction has been submitted. Thank you for your participation.","DISPLAY_PAGE_TEXT_VALIDATION_SEND_ERROR":"An error occurred while processing the validation. Please retry."}}; 3209 3210 locale.set(dto.locale); 3211 addTranslations(dto.translations, dto.locale); 3212 3213 window.link_sighting_validation_details_fly = function(id) { 3214 if (event && event.ctrlKey) { 3215 window.open("index.php?m_id=54&backlink=skip&id="+id+"&pnl=v", "_blank"); 3216 return; 3217 } 3218 let hash = Date.now() + '' + Math.floor(Math.random() * 1000); 3219 let container = $("div[data-onfly-" + id + "='true']"); 3220 container.css('margin-left', '3rem'); 3221 container.css('margin-top', '0.5rem'); 3222 let ids = JSON.parse(container.attr('data-onfly')); 3223 id = ids[0].id; 3224 3225 if (container.length && container.hasClass('onfly_opt_observer')) { 3226 if (container.is(":visible")) { 3227 container.toggle(); 3228 return; 3229 } 3230 container.toggle(); 3231 container.html('<div id="TileComponent--verification-on-fly--container-' + id + '"></div>'); 3232 3233 // Main Accordion container 3234 let close_btn = '<span class="text-clickable" style="position: relative;right: 12px;top: -30px;float: right;" onclick="link_sighting_validation_details_fly('+id+')"><i class="fa-solid fa-circle-xmark"></i></span>'; 3235 new TileComponent('TileComponent--verification-on-fly--container-' + id) 3236 .mapProps({ 3237 'title': 'PLUS_ONFLY_VERIFICATION_TITLE', 3238 'icon': 'fa-solid fa-circle-question', 3239 'open': 'open' 3240 }) 3241 .slot(() => { 3242 return close_btn + '<div id="TileComponent--verification-on-fly--container-' + id + '--slot"></div>'; 3243 }) 3244 .translate(dto.translations) 3245 .render(); 3246 load_verification_list(ids, hash); 3247 } 3248 } 3249 3250 window.link_gallery_validation_details = function(id) 3251 { 3252 var container = $("#gallery_accordion_validation"); 3253 var ids = [{id:id}]; 3254 let hash = Date.now() + '' + Math.floor(Math.random() * 1000); 3255 id = ids[0].id; 3256 3257 if (container.length) { 3258 container.attr("data-hash", hash); 3259 container.attr("data-popup", id); 3260 3261 if (container.is(":visible")) { 3262 container.toggle(); 3263 return; 3264 } 3265 container.toggle(); 3266 container.html('<div id="TileComponent--verification-on-fly--container-' + id + '"></div>'); 3267 // Main Accordion container 3268 new TileComponent('TileComponent--verification-on-fly--container-' + id) 3269 .mapProps({ 3270 'title': 'PLUS_ONFLY_VERIFICATION_TITLE', 3271 'icon': 'fa-solid fa-circle-question', 3272 'open': 'open' 3273 }) 3274 .slot(() => { 3275 return '<div id="TileComponent--verification-on-fly--container-' + id + '--slot"></div>'; 3276 }) 3277 .translate(dto.translations) 3278 .render(); 3279 load_verification_list(ids, hash); 3280 } 3281 else { 3282 notifyError(tr('DISPLAY_PAGE_TEXT_ERROR_VALIDATION_ERROR')); 3283 } 3284 } 3285 3286 window.link_gallery_public_validation_details = function(id) { 3287 let hash = Date.now() + '' + Math.floor(Math.random() * 1000); 3288 var container = $("#gallery_accordion_validation"); 3289 var ids = [{id:id}]; 3290 id = ids[0].id; 3291 3292 if (container.length) { 3293 if (container.is(":visible")) {
3294 container.toggle(); 3295 return; 3296 } 3297 container.toggle(); 3298 container.html('<div id="TileComponent--verification-on-fly--container-' + id + '"></div>'); 3299 3300 // Main Accordion container 3301 let close_btn = '<span class="text-clickable" style="position: relative;right: 12px;top: -30px;float: right;" onclick="display_public_validation_accordion('+id+')"><i class="fa-solid fa-circle-xmark"></i></span>'; 3302 new TileComponent('TileComponent--verification-on-fly--container-' + id) 3303 .mapProps({ 3304 'title': 'PLUS_ONFLY_VERIFICATION_TITLE', 3305 'icon': 'fa-solid fa-circle-question', 3306 'open': 'open' 3307 }) 3308 .slot(() => { 3309 return close_btn + '<div id="TileComponent--verification-on-fly--container-' + id + '--slot"></div>'; 3310 }) 3311 .translate(dto.translations) 3312 .render(); 3313 load_verification_list(ids, hash); 3314 } 3315 } 3316 3317 window.link_sighting_public_validation_details_fly = function(id) { 3318 let hash = Date.now() + '' + Math.floor(Math.random() * 1000); 3319 let container = $("div[data-onfly-" + id + "='true']"); 3320 container.css('margin-left', '3rem'); 3321 container.css('margin-top', '0.5rem'); 3322 let ids = JSON.parse(container.attr('data-onfly')); 3323 id = ids[0].id; 3324 3325 if (container.length && container.hasClass('onfly_opt_observer')) { 3326 if (container.is(":visible")) { 3327 container.toggle(); 3328 return; 3329 } 3330 container.toggle(); 3331 container.html('<div id="TileComponent--verification-on-fly--container-' + id + '"></div>'); 3332 3333 // Main Accordion container 3334 let close_btn = '<span class="text-clickable" style="position: relative;right: 12px;top: -30px;float: right;" onclick="link_sighting_public_validation_details_fly('+id+')"><i class="fa-solid fa-circle-xmark"></i></span>'; 3335 new TileComponent('TileComponent--verification-on-fly--container-' + id) 3336 .mapProps({ 3337 'title': 'PLUS_ONFLY_VERIFICATION_TITLE', 3338 'icon': 'fa-solid fa-circle-question', 3339 'open': 'open' 3340 }) 3341 .slot(() => { 3342 return close_btn + '<div id="TileComponent--verification-on-fly--container-' + id + '--slot"></div>'; 3343 }) 3344 .translate(dto.translations) 3345 .render(); 3346 load_verification_list(ids, hash); 3347 } 3348 } 3349 3350 window.send_onfly_public_validation = function(form, hash) 3351 { 3352 let id_obs = []; 3353 let id_all_obs = []; 3354 $(".verification--apply-to[data-hash=\""+hash+"\"] input").each(function () { 3355 id_all_obs.push({id:$(this).val()}); 3356 if($(this).is(':checked')) 3357 id_obs.push($(this).val()); 3358 }); 3359 3360 var button = $(form).find($('input[ name="send_validation"]')); 3361 button.prop('disabled', true); 3362 3363 var comment = $(form).find("select[name='VALIDATION_ERROR']").val(); 3364 var user_comment = $(form).find("textarea[name='public_validation_comment']").val(); 3365 3366 var verif_message = ''; 3367 if(comment < 1) 3368 verif_message = "\n\t-You have not write any comment !"; 3369 if(id_obs.length < 1) 3370 verif_message = verif_message + "\n\t-No sighting selected"; 3371 3372 if(verif_message.length > 1) { 3373 verif_message = "Incomplete form : " + verif_message; 3374 alert(verif_message); 3375 button.prop('disabled', false); 3376 return -1; 3377 } 3378 3379 // Everything is ok let's send this form 3380 $.ajax({
3381 type: "POST", 3382 url: "https://www.ornitho.de/index.php", 3383 data: { 3384 m_id: 1661, 3385 backlink: 'skip', 3386 ids_obs: id_obs, 3387 hash: hash, 3388 id_all_obs: id_all_obs, 3389 comment: comment, 3390 user_comment: user_comment 3391 }, 3392 success: function (data) { 3393 button.prop('disabled', false); 3394 load_verification_list(id_all_obs, hash); 3395 for(var i = 0 ; i < id_obs.length ; i++) { 3396 if(typeof add_icon_reload === 'function') 3397 add_icon_reload(id_obs[i]); 3398 } 3399 notifySuccess(tr('DISPLAY_PAGE_TEXT_PUBLIC_VALIDATION_SEND_SUCCESS')); 3400 }, 3401 error: function (xhr, status) { 3402 button.prop('disabled', false); 3403 notifyError(tr('DISPLAY_PAGE_TEXT_VALIDATION_SEND_ERROR')); 3404 } 3405 }); 3406 } 3407 3408 3409 window.load_verification_list = function(ids, hash) { 3410 if(typeof (ids) === 'string' || typeof (ids) === 'number') { 3411 var link ="index.php?m_id=1372&ids="+ids+"&ajax=y&show_verif_panel=1&hash="+hash+""; 3412 $("#verification_list").html('<em class="fa-solid fa-spinner fa-spin fa-1x-spin"></em>'); 3413 $("#verification_list").load(link); 3414 } 3415 else { 3416 const ids_str = ids.map(item => item.id); 3417 let link = "index.php?m_id=1372&ids=" + encodeURIComponent(ids_str.join(",")) + "&ajax=y&show_verif_panel=1&hash="+hash+""; 3418 let popup_container = $("#TileComponent--verification--container-"+ids[0].id + "--slot"); 3419 3420 if(popup_container.length) { 3421 popup_container 3422 .html('<em class="fa-solid fa-spinner fa-spin fa-1x-spin"></em>') 3423 .load(link); 3424 3425 $.ajax({
3426 type: 'POST', 3427 url: 'index.php?m_id=1351&backlink=skip&content=admin_hidden_type', 3428 data: {id: ids[0].id}, 3429 success: function (response) { 3430 if (response.icon_tab) { 3431 if (response.icon_tab.length) { 3432 $("#tabNH5 em").replaceWith(response.icon_tab); 3433 $("#summary-verification-icon").html(response.icon_summary); 3434 } 3435 } 3436 }, 3437 error: function (xhr, status, error) { 3438 console.log('error sending error message: ' + error); 3439 } 3440 }); 3441 } 3442 else { 3443 $("#TileComponent--verification-on-fly--container-" + ids[0].id + "--slot") 3444 .html('<em class="fa-solid fa-spinner fa-spin fa-1x-spin"></em>') 3445 .load(link); 3446 } 3447 } 3448 } 3449 3450 window.update_apply_to = function(hash) { 3451 let newOids = []; 3452 $(".verification--apply-to[data-hash=\""+hash+"\"] input:checked").each(function () { 3453 newOids.push($(this).val()); 3454 }); 3455 3456 // Update Gradation 3457 for(var i = 1 ; i < 8 ; i++) { 3458 let g = $("#btn-gradation-" + i + "-" + hash); 3459 if(g.length) { 3460 if(!g.hasClass('not-allowed')) { 3461 let click = g.attr('onclick'); 3462 let new_onclick = click.replace(/(oids=)[^&]*/, `$1${newOids}`); 3463 g.attr('onclick', new_onclick); 3464 } 3465 } 3466 } 3467 } 3468</script>
3468 3469 3470
3470<script> 3471 //<![CDATA[ 3472 3473 function print_svg_javascript(svg) 3474 { 3475 var ret_string = ''; 3476 3477 if (svg != '') 3478 { 3479 ret_string += "<div style=\"display:inline-block;vertical-align: middle\"><svg width=\"12\" height=\"12\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g>"; 3480 ret_string += svg; 3481 ret_string += "</g></svg></div>"; 3482 } 3483 3484 return ret_string; 3485 } 3486 3487 function generate_image(species_array, day_number, is_hidden, is_admin_hidden, is_new, is_second_hand, no_link, show_transparent, is_favorite, protocol_name, protocol_svg, admin_hidden_type) { 3488 const committees_urls = {"DAK":"https:\/\/www.dda-web.de\/dak\/meldebogen","AKBW":"https:\/\/www.avikombw.de\/","BAK":"https:\/\/www.og-bayern.de\/bak\/","AKBB":"https:\/\/www.abbo-info.de\/nabu\/akbb.php","AKH":"https:\/\/www.hgon.de\/beobachten\/monitoring\/avifaunistische-kommission\/","SKMV":"https:\/\/www.oamv.de\/seltenheiten-ak-m-v.html","AKN":"https:\/\/www.aknb-web.de\/de\/aknb","AKNW":"https:\/\/www.nw-ornithologen.de\/index.php\/aktivitaeten\/avikom","AKRP":"https:\/\/gnor.de\/akrp\/","AKSL":"https:\/\/www.ornithologie-saar.de\/","AKS":"https:\/\/vso-web.de\/avifaunistik\/avifaunistische-kommission-sachsen-aksn\/","AKST":"https:\/\/www.osa-internet.de\/voegel-in-sachsen-anhalt\/seltenheiten-kommission","AKSHH":"https:\/\/www.oagsh.de\/seltenheiten","AKT":"https:\/\/ornithologen-thueringen.de\/avifaunistik\/avifaunistische-kommission","HAK":"https:\/\/www.oag-helgoland.de\/index.php\/hsk-meldebogen\/","AKB":"https:\/\/www.bodensee-ornis.de\/"}; 3489 var color = "transparent"; 3490 var alt = '' + 'Common species'; 3491 var atlas_start = species_array['atlas_start']; 3492 var atlas_end = species_array['atlas_end']; 3493 var category = species_array['category']; 3494 var has_synonyms = 0; 3495 3496 var ret_string = ""; 3497 3498 if (is_admin_hidden !== 0) { 3499 if(admin_hidden_type === 'refused') { 3500 ret_string += '<em class="fas fa-check-exclamation" title="The record is incorrect, mark it as invalid"></em>'; 3501 } 3502 else if(admin_hidden_type === 'incomplete') { 3503 ret_string += '<em class="fas fa-check-wrench" title="The record is correct, request additional information"></em>'; 3504 } 3505 else { 3506 ret_string += '<em class="fas fa-check-question" title="The record is probably wrong, request a modification"></em>'; 3507 } 3508 } 3509 3510 if (is_new !== 0) { 3511 ret_string += '<em title="New since my last visit" class="fas fa-new"></em>'; 3512 } 3513 3514 //Note : alt and title are empty because normally in php we would do a $language->get_string('OBSERVATIONS_TEXT_NAME_' . $protocol_name) but we have access to protocol_name only in javascript but there is no equivalent to $language->get_string in javascript... we should print all the protocols before execution and then print from there? (same for rarity_committee) 3515 if (protocol_name !== '') { 3516 if (protocol_name === 'full_form') { 3517 ret_string += '<em class="fas fa-full-list" title="Data coming from an complete observation list"></em>'; 3518 } 3519 else if (protocol_name === 'partial_form') { 3520 ret_string += '<em class="fas fa-partial-list" title="This sighting is part of a partial list"></em>'; 3521 } 3522 else { 3523 ret_string += print_svg_javascript(protocol_svg); 3524 } 3525 } 3526 3527 if (is_second_hand !== 0) { 3528 ret_string += '<em class="fas fa-second-hand" title="Second-hand data (agreement of observer necessary!)"></em>'; 3529 } 3530 3531 if (is_hidden !== 0) { 3532 ret_string += '<em class="fas fa-keylock-yellow" title="Hidden observation"></em>'; 3533 } 3534 3535 if (is_favorite !== 0) { 3536 ret_string += '<em class="fas fa-ok" title="DISPLAY_PAGE_TEXT_FAVORITE"></em>'; 3537 } 3538 3539 if (typeof species_array['rarity_committee'] === 'object') { 3540 Object.entries(species_array['rarity_committee']).forEac
3540h(([committee, status]) => { 3541 let color; 3542 3543 if (committee === 'LHK') { 3544 color = '#83dafa'; 3545 } else if (['CAVS', 'KF', 'CHN', 'DAK', 'SEO'].includes(committee)) { 3546 color = '#f7ef18'; 3547 } else { 3548 color = 'white'; 3549 } 3550 3551 3552 if(committees_urls[committee] !== undefined) 3553 ret_string += '<a href= "' + committees_urls[committee] + '" target="_blank">'; 3554 ret_string += `<em class="fas fa-rc" style="--fa-secondary-color:${color}"></em>`; 3555 3556 if (status === 'ACCEPTED') { 3557 ret_string += `<em class="fas fa-ok"></em>`; 3558 } else if (status === 'REJECTED') { 3559 ret_string += `<em class="fas fa-cancel"></em>`; 3560 } 3561 if(committees_urls[committee] !== undefined) 3562 ret_string += '</a>'; 3563 }); 3564 } 3565 3566 if (category === 'A') { 3567 color = "red"; 3568 alt = '' + 'Scarce or uncommon species (announce every observation, category A)'; 3569 } 3570 3571 if (category === 'B' || category === 'BH') { 3572 color = "orange"; 3573 alt = '' + 'Less-common to rare breeding bird species for which, if possible, all observations should be reported and for which the number of individuals observed should be stated as precisely as possible with each report (especially during the breeding season; \"ADEBAR species\"). '; 3574 } 3575 3576 if (category === 'H' || category === 'BH') { 3577 if (day_number <= 46 || day_number >= 334) { 3578 color = "blue"; 3579 alt = '' + 'Uncommon wintering species (announce at least sightings occurring between 1st December and 15th February, category H)'; 3580 } 3581 } 3582 3583 if (show_transparent !== 0 || color !== 'transparent') { 3584 ret_string += '<em title="' + alt + '" class="fas fa-category-'+color+'"></em>'; 3585 } 3586 3587 switch(has_synonyms) 3588 { 3589 case 1: 3590 ret_string += '<em class="fas fa-synonym" title="Synonymous taxa"></em>'; 3591 break; 3592 case 2: 3593 break; 3594 } 3595 3596 return ret_string; 3597 } 3598 // ]]> 3599 </script>
3599 3600 <link rel="stylesheet" type="text/css" href="https://cdnfiles1.biolovision.net/common/js/jscalendar_1_0/calendar-bv-1-4.css"/> 3601
3601<script src="https://cdnfiles1.biolovision.net/common/js/jscalendar_1_0/calendar_f.js"></script>
3601 3602
3602<script src="https://cdnfiles1.biolovision.net/common/js/jscalendar_1_0/langu-utf8/calendar-en.js"></script>
3602 3603
3603<script src="https://cdnfiles1.biolovision.net/common/js/jscalendar_1_0/calendar-setup_new.js"></script>
3603 3604
3604<script src="https://cdnfiles1.biolovision.net/common/js/d3_6_7_0.min.js" charset="utf-8"></script>
3604 3605
3605<script src="https://cdnfiles1.biolovision.net/common/js/d3-charts_a55da2f7.js"></script>
3605 3606
3606<script src="https://cdnfiles1.biolovision.net/common/js/waveform-data_5.js"></script>
3606 3607
3607<script src="https://cdnfiles1.biolovision.net/common/js/jquery.touchSwipe.1.6.min.js"></script>
3607 3608
3608<script src="https://cdnfiles1.biolovision.net/common/js/autofilter_utf8_42140533.js"></script>
3608 3609
3609<script src="https://cdnfiles1.biolovision.net/common/js/toggle_between_fixed_time.js"></script>
3609 3610
3610<script src="https://cdnfiles1.biolovision.net/common/js/jquery.qtip-3.0.3.min.js"></script>
3610 3611
3611<script src="https://cdnfiles1.biolovision.net/common/js/sprintf.js"></script>
3611 3612
3612<script src="https://cdnfiles1.biolovision.net/common/js/XMLHttpRequest_3.js"></script>
3612 3613
3613<script src="https://cdnfiles1.biolovision.net/common/js/proj4_1.js"></script>
3613 3614
3614<script src="https://cdnfiles1.biolovision.net/common/js/openlayers_2_13_1_m7.js"></script>
3614 3615
3615<script src="https://cdnfiles1.biolovision.net/common/js/OL_custom_2_20.js"></script>
3615 3616
3616<script src="https://cdnfiles1.biolovision.net/common/js/ob_tools_5.js"></script>
3616 3617
3617<script src="https://cdnfiles1.biolovision.net/common/js/ol_map_obj_a76654a0.js" ></script>
3617 3618
3618<script src="https://cdnfiles1.biolovision.net/common/js/mortality_1.js"></script>
3618 3619
3619<script src="https://cdnfiles1.biolovision.net/common/js/Queue.js"></script>
3619 3620 3621 <link rel="stylesheet" href="https://cdnfiles1.biolovision.net/common/js/jquery.qtip-3.0.3.min.css" type="text/css" /> 3622 3623
3623<script> 3624 // <![CDATA[ 3625 d3.timeFormatDefaultLocale({ 3626 "decimal": ".", 3627 "thousands": " ", 3628 "grouping": [3], 3629 "currency": ["$", ""], 3630 "dateTime": "%a %b %e %X %Y", 3631 "date": "%m/%d/%Y", 3632 "time": "%H:%M:%S", 3633 "periods": ["AM", "PM"], 3634 "days": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], 3635 "shortDays": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], 3636 "months": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], 3637 "shortMonths": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] 3638 }); 3639 3640 var height = $(window).height() - $(".block-news").offset().top; 3641 $("#news_content").css("height", Math.ceil(height) + "px"); 3642 3643 var run_lock = 0; 3644 3645 var first_news = {"timestamp":1790935952,"data":[{"nid":"659","date":"Friday, October 2nd, 2026, 08:00","url":null,"url_text":null,"popup":"0","title":"October Big Day on 10 October 2026: Birding together worldwide","message":"<?xml encoding=\"UTF-8\"><p>\r\n\tOn <strong>10th October<\/strong>, it’s that time of year again – from midnight to midnight, birdwatchers worldwide can take part in the <strong>October Big Day<\/strong>. Whether you’re an experienced birdwatcher or just starting out, the October Big Day celebrates birdwatching as a shared activity and citizen science. Last year, nearly 900,000 people took part in the event, collectively recording...","chapeau":"","attached_file":null,"attached_file_text":null,"attached_image":"40259-13083304-1683-3218.jpg","name":"Moritz Meinken","news_type":"avinews","oeid":"30","edit_name":" Anonyme","taxo_name":"","new":0,"protocol_fullname":null,"blur":1},{"nid":"669","date":"Wednesday, September 30th, 2026, 09:30","url":null,"url_text":null,"popup":"0","title":"Influx of Nutcrackers reaches Germany","message":"<?xml encoding=\"UTF-8\"><p style=\"font-size: 12px; letter-spacing: normal;\">\r\n\tTannenhäher brüten in Deutschland vor allem in den Alpen sowie in den waldreichen Mittelgebirgen. Aktuell erreicht uns jedoch ein Einflug nö
3645rdlicher\/sibirischer Tannenhäher der Unterart <em>macrorhynchos<\/em>, sodass auch in der Norddeutschen Tiefebene mit Beobachtungen gerechnet werden kann.<br><span style=\"font-size: 0.75rem; letter-spacing: 0px;\">Ende August begann in Finnland ein erheblicher Einflug von Tannenhähern – das stärkste Auftreten seit mehr als 30 Jahren. Bei Zugplanbeobachtungen am Bottnischen...<\/span>","chapeau":"","attached_file":null,"attached_file_text":null,"attached_image":"TannenhaeherAHoppe-6695.jpg","name":"Christopher K\u00f6nig","news_type":"avinews","oeid":"30","edit_name":" Anonyme","taxo_name":"","new":0,"protocol_fullname":null,"blur":1},{"nid":"667","date":"Monday, September 28th, 2026, 12:00","url":null,"url_text":null,"popup":"0","title":"Vielen Dank f\u00fcr mehr als 1 Million vollst\u00e4ndige Beobachtungslisten!","message":"<?xml encoding=\"UTF-8\"><p style=\"font-size: 12px; letter-spacing: normal;\">\r\n\tAm vergangenen Wochenende war es so weit: die einmillionste vollständige Beobachtungsliste wurde bei ornitho.de gemeldet! Wir freuen uns sehr, dass sich diese Eingabefunktion einer immer größeren Beliebtheit erfreut. Damit konnte ein besonderer Meilenstein erreicht und die Zahl der vollständigen Listen innerhalb weniger Jahre verdoppelt werden. Die vollständigen Beobachtungslisten sind ein gewaltiger Datenschatz, welche die Veränderungen der Vogelwelt besonders gut abbilden...","chapeau":"","attached_file":null,"attached_file_text":null,"attached_image":"44725-11210807-4772-6394.jpg","name":"Moritz Meinken","news_type":"technews","oeid":"30","edit_name":" Anonyme","taxo_name":"","new":0,"protocol_fullname":null,"blur":1},{"nid":"666","date":"Friday, September 25th, 2026, 16:24","url":null,"url_text":null,"popup":"0","title":"Machen Sie mit bei der bei der europaweiten Erfassung von Goldregenpfeifer, Brachvogel und Kiebitz!","message":"<?xml encoding=\"UTF-8\"><p style=\"font-size: 12px; letter-spacing: normal;\">\r\n\tGoldregenpfeifer und Kiebitze rasten im Gegensatz zu den meisten anderen Limikolen außerhalb der Brutzeit gerne auch abseits von Feuchtgebieten in der Agrarlandschaft. Dort werden sie durch die regulären Erfassungsprogramme (<em>Wasservogelzählung<\/em> sowie <em>Gänse- und Schwanenzählung<\/em>) nur lückenhaft erfasst. Seit 2003 finden daher auf Initiative der International <a href=\"https:\/\/www.waderstudygroup.org\/\" style=\"color: rgb(9, 9, 9);\">Wader Study Group<\/a> regelmäßige, europaweit abgestimmte Synchronerfassungen rastender Limikolen statt. Am Wochenende <span style=\"font-weight: 600;\">17.\/18....<\/span>","chapeau":"","attached_file":null,"attached_file_text":null,"attached_image":"Bild1-9596.jpg","name":"Moritz Meinken","news_type":"avinews","oeid":"30","edit_name":" Anonyme","taxo_name":"","new":0,"protocol_fullname":null,"blur":1},{"nid":"663","date":"Monday, September 21st, 2026, 08:00","url":null,"url_text":null,"popup":"0","title":"Resting and migrating Cranes (and other species) - please note","message":"<?xml encoding=\"UTF-8\"><p>\r\n\tZu Zehntausenden sammeln sich derzeit die Kraniche in den Rastgebieten im Norden und Osten Deutschlands und treten bald ihren Zug in die Überwinterungsgebiete in Südwesteuropa an. Vor allem im Westen Deutschlands und in Luxemburg werden dann wieder die weithin hörbaren Rufe und beeindruckenden Zugformationen zu sehen sein. Viele Tausend Zug- und Rastbeobachtungen werden in dieser Zeit über <em>ornitho.de<\/em> und <em>ornitho.lu<\/em>...","chapeau":"","attached_file":null,"attached_file_text":null,"attached_image":"KranichMPutze550px-23442-1437-4175.jpg","name":"Moritz Meinken","news_type":"avinews","oeid":"30","edit_name":" Anonyme","taxo_name":"","new":0,"protocol_fullname":null,"blur":1}],"txid":0} 3646 function redisplay_obs(dt) 3647 { 3648 $('#observation_content').html(''); // to force to be empty in case of multiple clic 3649 var ret = display_obs(dt); 3650 run_lock = 0; 3651 return ret; 3652 } 3653 3654 //Override change_taxo function so that we can change taxo without reloading the page 3655 function change_taxo(m_id,id_taxo,param,js_param,obj) 3656 { 3657 $(function() 3658 { 3659 if (!run_lock) 3660 { 3661 run_lock = 1; 3662 reset_display_obs(); 3663 obsQueryEndPage = queryEndPage() 3664 .mp_current_page(1) //use reload to prevent negative value in distance_to_bottom and not loading 3665 .request("index.php?m_id=1351&content=last_observations_by_page&home=1&backlink=skip&p_c=duration&p_cc=-&sp_DateSynth=02.10.2026&sp_DChoice=offset&sp_DOffset=5&sp_SChoice=category&sp_Cat[never]=1&sp_Cat[veryrare]=1&
3665sp_Cat[rare]=1&sp_Cat[unusual]=1&sp_Cat[escaped]=0&sp_Cat[common]=0&sp_Cat[verycommon]=0&sp_PChoice=canton&sp_cC=111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000001&sp_project=0&sp_FChoice=list&sp_FGraphFormat=auto&sp_FMapFormat=none&sp_FDisplay=DATE_PLACE_SPECIES&sp_FOrder=ALPHA&sp_FOrderListSpecies=ALPHA&sp_FListSpeciesChoice=DATA&sp_FOrderSynth=ALPHA&sp_FGraphChoice=DATA&sp_DFormat=DESC&sp_FAltScale=250&sp_FAltChoice=DATA&sp_FExportFormat=XLS&sp_tg="+id_taxo) 3666 .element_id("#observation_content") 3667 .element_wait_id("#observation_content_wait") 3668 .callback(display_obs) 3669 .checkAllLoadedcallback(is_data_complete); 3670 3671 3672 $('#observation_content').html(''); 3673 $('#observation_content_container_wait').show(); 3674 run_lock = 0; 3675 3676 obsQueryEndPage.reloadAll('');//use reload to prevent negative value in distance_to_bottom and not loading 3677 3678 $(obj).parent().find(".bvMenuSubOFF").each(function() { 3679 $(this).removeClass("bvMenuSubOFF"); 3680 $(this).addClass("bvMenuSub"); 3681 }); 3682 3683 $(obj).toggleClass('bvMenuSub bvMenuSubOFF'); 3684 } 3685 }); 3686 } 3687 3688 3689 var map_loaded = false; 3690 3691 function showMainPanel(id, count) 3692 { 3693 var mye, myh; 3694 3695 for (i = 1; i<= count; i++) 3696 { 3697 myh = document.getElementById("mainH"+i); 3698 3699 if (myh) 3700 { 3701 if (i == id) 3702 myh.className = "bvbsPanelOFF"; 3703 else 3704 myh.className = "bvbsPanel"; 3705 } 3706 } 3707 } 3708 3709 function add_click_controls() 3710 { 3711 $(".extended_detail_button").click(function() 3712 { 3713 $(this).find(".minus").css("display","none"); 3714 $(this).find(".plus").css("display",""); 3715 if($("#" + $(this).attr("id_feature") + "_" + $(this).attr("id_obs")).width() == 500) 3716 { 3717 $("#" + $(this).attr("id_feature") + "_" + $(this).attr("id_obs")).animate({ 3718 height: '20px', 3719 width: '180px' 3720 }, 750 ); 3721 3722 $(".clear_" + $(this).attr("id_feature") + "_" + $(this).attr("id_obs")).remove(); 3723 3724 } 3725 else 3726 { 3727 $(this).find(".plus").css("display","none"); 3728 $(this).find(".minus").css("display",""); 3729 $(this).find(".imgProcessing").css("display",""); 3730 $.post("index.php?m_id=63&backlink=skip&content=extended_detail&id_obs=" + $(this).attr("id_obs") + "&id_feature=" + $(this).attr("id_feature"),{}, callbackExtDetail); 3731 } 3732 3733 }); 3734 3735 function callbackExtDetail(xmlData) 3736 { 3737 var id_content = $(xmlData).find('id_obs').text(); 3738 var id_feature = $(xmlData).find('id_feature').text(); 3739 3740 var content = $("content_data", xmlData).text(); 3741 3742 $("#" +id_feature + "_" + id_content).before("<div class='clear_" + id_feature + "_" + id_content +"' style='clear:both'></div>"); 3743 $("#" +id_feature + "_" + id_content).after("<div class='clear_" + id_feature + "_" + id_content +"' style='clear:both'></div>"); 3744 $("#" + id_feature + "_" + id_content).width(500); 3745 3746 $("#content_" + id_feature + "_" + id_content).html(content); 3747 3748 h = $("#content_" + id_feature + "_" + id_content).height() + 30; 3749 3750 $("#" + id_feature + "_" + id_content).animate({ 3751 height: h + 'px' 3752 }, 750, function() {$(".imgProcessing").css("display","none");} ); 3753 } 3754 } 3755 3756 $(function(){ 3757 newsQueryEndPage.callback()(first_news); 3758 });
3759 3760 // ]]> 3761 </script>
3761 3762
3762<script src="https://cdnfiles1.biolovision.net/common/js/livemap_core_n.js"></script>
3762 3763 3764 3765</div> <!-- responsive footer start here --> 3766 3767 </div> <!-- td-page-content --> 3768 3769 </div> <!-- td-full-content --> 3770 <div style="clear:both"></div> 3771 <div class="footer logo-footer"> 3772 </div> 3773 </div> <!-- maincontent --> 3774 3775 <div class="clearfix"></div> 3776 3777 <div class="footer copyrightline"> 3778 <a class="alink" style="margin-left:0.25rem;margin-right:0.25rem" href="https://www.ornitho.de/index.php?m_id=1121&item=3">Terms and conditions of use</a> 3779 <a class="alink" style="margin-left:0.25rem;margin-right:0.25rem" href="https://www.ornitho.de/index.php?m_id=1129&item=11">Disclaimer / Contact</a> 3780 <a class="alink" style="margin-left:0.25rem;margin-right:0.25rem" href="https://www.ornitho.de/index.php?m_id=1116&item=7">Credits</a> 3781 </div> 3782 3783 <div class="clearfix"></div> 3784 3785 3786 <div style="margin:2rem">The <em>ornitho.de</em> project is supported by the <a href="https://www.dda-web.de/" target="_blank">Federation of German Avifaunists</a> and its member associations and in cooperation with several partner organisations.</div> 3787 3788 <div class="clearfix"></div> 3789 3790 </div> <!-- ornithobody --> 3791
3791<script src="https://cdnfiles1.biolovision.net/common/js/responsive_f07f475f.js"></script>
3791 3792
3792<script> 3793 // <![CDATA[ 3794 var responsive; 3795 $(function() { 3796 responsive = responsiveBuilder(); 3797 responsive.init(); 3798 3799 if (window.OLinit){ 3800 OLinit(); 3801 } 3802 3803 if (window.AEinit){ 3804 AEinit(); 3805 } 3806 3807 //Page content - problems with details edition on the phone. 3808 var page = $("#td-page-content"), detail_container = $("#detail-container"); 3809 if(page.length && detail_container.length) { 3810 if(page.width() < detail_container.width()) 3811// detail_container.width(page.width()); 3812 page.css("overflow", "auto"); 3813 } 3814 }); 3815 // ]]> 3816 </script>
3816 3817 </body> 3818<!-- responsive footer end here --> 3819 </html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.