1<!DOCTYPE HTML> <html prefix="og: https://ogp.me/ns#" class="no-js responsivelayout supportsbreakout" lang="de" data-zpdebug="false" data-ptr="" data-pagename="Home"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content="Artificial LIfe ENvironment (ALIEN) is an artificial life simulation tool based on a specialized 2D particle engine in CUDA for soft bodies and fluid-like media. Each simulated body consists of a network of particles that can be enriched with higher-level functions, ranging from pure information processing capabilities to physical equipment (such as sensors, muscles, weapons, constructors, etc.) whose executions are orchestrated by a signaling system. The bodies can be thought of as agents or digital organisms operating in a common environment."> <meta name="keywords" content="artificial life evolution software tool"> <meta name="generator" content="Zeta Producer 16.7.0.0, ZP16X, 26.07.2023 06:52:54"> <meta name="robots" content="index, follow"> <title>artificial life environment</title> <meta property="og:type" content="website"> <meta property="og:title" content="artificial life environment"> <meta property="og:description" content="Artificial LIfe ENvironment (ALIEN) is an artificial life simulation tool based on a specialized 2D particle engine in CUDA for soft bodies and fluid-like media. Each simulated body consists of a network of particles that can be enriched with higher-level functions, ranging from pure information processing capabilities to physical equipment (such as sensors, muscles, weapons, constructors, etc.) whose executions are orchestrated by a signaling system. The bodies can be thought of as agents or digital organisms operating in a common environment."> <meta property="og:url" content="http://www.alien-project.org/index.html"> <meta property="twitter:card" content="summary_large_image"> <meta property="twitter:title" content="artificial life environment"> <meta property="twitter:description" content="Artificial LIfe ENvironment (ALIEN) is an artificial life simulation tool based on a specialized 2D particle engine in CUDA for soft bodies and fluid-like media. Each simulated body consists of a network of particles that can be enriched with higher-level functions, ranging from pure information processing capabilities to physical equipment (such as sensors, muscles, weapons, constructors, etc.) whose executions are orchestrated by a signaling system. The bodies can be thought of as agents or digital organisms operating in a common environment.">
1<script> 2 document.documentElement.className = document.documentElement.className.replace(/no-js/g, 'js'); 3 </script>
3 <link rel="stylesheet" href="assets/bundle.css?v=639242911654700358"> <link rel="stylesheet" href="assets/bundle-print.css?v=638304795789395093" media="print">
3<script src="assets/bundle.js?v=639242911654740366"></script>
3 <link rel="canonical" href="http://www.alien-project.org/index.html"> <link rel="preload" href="assets/fonts/fontawesome-webfont.woff2?v=4.7.0" as="font" type="font/woff2" crossorigin=""> <style> 4.myButton { 5 box-shadow: 0px 10px 14px -7px #276873; 6 background:linear-gradient(to bottom, #599bb3 5%, #408c99 100%); 7 background-color:#599bb3; 8 border-radius:8px; 9 display:inline-block; 10 cursor:pointer; 11 color:#ffffff; 12 font-family:Arial; 13 font-size:20px; 14 font-weight:bold; 15 padding:13px 13px; 16 text-decoration:none; 17 text-shadow:0px 1px 0px #3d768a; 18} 19.myButton:hover { 20 background:linear-gradient(to bottom, #408c99 5%, #599bb3 100%); 21 background-color:#408c99; 22} 23.myButton:active { 24 position:relative; 25 top:1px; 26} 27 28/* CSS Button Style 2 by indzign.blogspot.com */ 29.button2{float:left;list-style:none;text-align:center;width:95%;margin:10px;padding:2px;font-size:14px;clear:both} 30.button2 ul{margin:0;padding:0} 31.button2 li{display:inline;margin:5px;padding:0;list-style:none} 32.button2 li a.demo,.button2 li a.download{position:relative;padding:14px 48px 14px 16px;background:#f39c12;display:block;color:#fff!important;font-weight:700;font-size:14px;text-align:left;text-transform:uppercase;letter-spacing:.2px;border-radius:3px;box-shadow:0 1px rgba(0,0,0,0.1);line-height:normal;transition:all .3s;max-width:170px;margin:auto;overflow:hidden} 33.button2 li a.download{background:#3498db} 34.button2 li a.demo:hover,.button2 li a.download:hover{background:#666} 35.button2 li a.demo:active,.button2 li a.download:active{cursor:pointer} 36.button2 li a.demo:after,.button2 li a.download:after{content:'\F054';background:rgba(0,0,0,0.1);position:absolute;right:0;top:0;font-weight:normal;display:inline-block;margin:0 0 0 10px;color:#fff;padding:16px 24px;font-family:fontawesome;transition:all .3s} 37.button2 li:hover a.demo:after,.button2 li:hover a.download:after{background:transparent;-webkit-animation:bounceright .3s alternate ease infinite;animation:bounceright .3s alternate ease infinite} 38@-webkit-keyframes bounceright{from{-webkit-transform:translateX(0)}to{-webkit-transform:translateX(3px)}} 39@keyframes bounceright{from{transform:translateX(0)}to{transform:translateX(3px)}} 40 41</style>
41<script> 42 // if after 1000ms we haven't got webfonts, show the user something, a FOUT is better than nothing 43 // http://kevindew.me/post/47052453532/a-fallback-for-when-google-web-font-loader-fails 44 setTimeout(function() { 45 // you can have the webfont.js cached but still have no classes fire and you will have a window.WebFontConfig object 46 if ( ! ("WebFont" in window)) { 47 // non wfl loader class name because their events could still fire 48 document.getElementsByTagName("html")[0].className += " wf-fail"; 49 } 50 }, 1000); 51 52 WebFontConfig = { 53 custom: { 54 families: [ 'Roboto:300,400,700' ], 55 urls: ['media/fonts/zp-webfonts.css?v=346658018'] 56 } 57 }; 58 </script>
58
58<script src="assets/js/webfont/1.6.28/webfont-local.js"></script>
58 <link class="zpfaviconmeta" rel="shortcut icon" type="image/x-icon" href="assets/favicon.ico?v=2021070601"> </head> <body id="flat-responsive" class="notouch haswebdescription hasfixednav hasheader"> <a id="top"></a> <div id="header"> <div id="webdescription"> <div id="webtext"> <div id="webname"><a href="index.html">artificial life environment</a></div> </div> </div> <div id="nav"> <ul class="zpmarkactive default submenu touchhovermenu clickhovermenu out" data-trianglemode="true"><li class="logo hidden"><a href="index.html"></a></li><li class="zpnodefaults haschilds"><a class="active" href="index.html" data-isredirected="false">Home</a><ul><li class="zpnodefaults"><a href="objectives.html" data-isredirected="false">Objectives and visions</a></li><li class="zpnodefaults"><a href="getting-started.html" data-isredirected="false">Getting started</a></li><li class="zpnodefaults"><a href="participation.html" data-isredirected="false">Contributing to the project</a></li><li class="zpnodefaults"><a href="archive.html" data-isredirected="false">Archive</a></li></ul></li><li class="zpnodefaults"><a href="artworks.html" data-isredirected="false">Artworks</a></li><li class="zpnodefaults"><a href="downloads.html" data-isredirected="false">Downloads</a></li><li class="zpnodefaults"><a href="https://alien-project.gitbook.io/docs/" data-isredirected="true" target="_blank" rel="noopener">Documentation</a></li><li class="zpnodefaults"><a href="networks.html" data-isredirected="false">Networks</a></li><li class="zpnodefaults haschilds"><a href="contact.html" data-isredirected="false">Contact</a><ul><li class="zpnodefaults"><a href="about-me.html" data-isredirected="false">About me</a></li><li class="zpnodefaults"><a href="legal-notice.html" data-isredirected="false">Legal Notice</a></li><li class="zpnodefaults"><a href="privacy-protection.html" data-isredirected="false">Privacy Protection</a></li></ul></li><li class="overflownonly"><a href="#" id="mobilenavtoggle" class="tabletonly toggle" aria-label="Menu on/off">Menu</a></li></ul>
58<script> 59$z(document).ready(function(){ 60 // we find the active page's a-tag and then walk upwards the dom marking the respective parent li as active/open 61 $z('ul.zpmarkactive.default li a.active').parents('li').each(function(index){ 62 var that = this; 63 // do not add open class to immediate parent li 64 if ( index > 0 ){ 65 $z(that).addClass('open'); 66 } 67 $z(that).addClass('active'); 68 //$z(that).find('> a').addClass('active'); 69 }); 70 $z("ul.zpmarkactive.default").removeClass("zpmarkactive"); 71 72 /* 73 $z("ul.zpmarkactive.default li:has(a.active)").addClass("active"); 74 $z("ul.zpmarkactive.default li.haschilds > a").addClass("haschilds"); 75 $z("ul.zpmarkactive.default li.haschilds:has(a.active)").addClass("active"); 76 $z("ul.zpmarkactive.default li.active > a").addClass("active"); 77 78 $z("ul.zpmarkactive.default").removeClass("zpmarkactive") 79 */ 80}); 81</script>
81 </div> </div> <div id="slider" class="noprint"> <a id="a1759"></a> <div id="headerslider" class="flexslider"> <div class="flex-container"> <ul class="slides"> <li class="first"> <img loading="lazy" src="media/images/version4-5-large.png" width="2000" height="400" class="zpfocal" data-focus-x="50" data-focus-y="50" data-image-w="2000" data-image-h="400" alt=""> </li> <li> <img loading="lazy" src="media/images/space-insects-large.png" width="2000" height="400" class="zpfocal" data-focus-x="50" data-focus-y="50" data-image-w="2000" data-image-h="400" alt=""> </li> <li> <img loading="lazy" src="media/images/version4-3-large.png" width="2000" height="400" class="zpfocal" data-focus-x="50" data-focus-y="50" data-image-w="2000" data-image-h="400" alt=""> </li> <li> <img loading="lazy" src="media/images/version4-1b-large.png" width="2000" height="400" class="zpfocal" data-focus-x="50" data-focus-y="50" data-image-w="2000" data-image-h="400" alt=""> </li> <li> <img loading="lazy" src="media/images/version4-4-large.png" width="2000" height="400" class="zpfocal" data-focus-x="50" data-focus-y="50" data-image-w="2000" data-image-h="400" alt=""> </li> <li> <img loading="lazy" src="media/images/version4-large.png" width="2000" height="400" class="zpfocal" data-focus-x="50" data-focus-y="50" data-image-w="2000" data-image-h="400" alt=""> </li> </ul> </div> </div>
81<script> 82 $z(document).ready(function() { 83 var useCssAnimation = false; 84 85 var autoplay = true; 86 if ( $z("body").hasClass("zpreducemotion") && 'slide' !== 'fade' ){ // don't allow moving animations 87 autoplay = false; 88 } 89 90 function initSlider(){ 91 console.log("Num Headers: 6"); 92 $z('#headerslider .flex-container').flexslider({ 93 useCSS: useCssAnimation, 94 keyboard: true, 95 itemMargin: 0, 96 animation: 'slide', 97 controlsContainer: '#headerslider.flexslider', 98 slideshow: autoplay, 99 slideshowSpeed: 7000, 100 directionNav: true,touch: true, 101 controlNav: false, 102 randomize: false, 103 104 pauseOnHover: true, 105 smoothHeight: false, 106 start: function(el){ 107 focalImages(); 108 }, 109 prevText: "zurück", 110 nextText: "weiter" 111 }); 112 $z('#headerslider.flexslider').addClass("inited"); 113 } 114 115 if ( $z('#headerslider .flex-container ul.slides li img').length > 0 ){ 116 // init flexslider after 1st image has loaded, so have dimensions as quickly as possible without having to wait too long on window loaded or such and can start right with doc ready 117 $z('#headerslider .flex-container ul.slides li img').first().one("load", initSlider).each(function() { 118 if(this.complete) $z(this).trigger('load'); 119 }); // .each() is to work around a browser bugs which don't fire load() for cached images http://stackoverflow.com/a/3877079 120 } 121 else{ 122 // also init flexslider if it doesn't contain images and is text only 123 initSlider(); 124 } 125 126 // make sure the slider is properly resized when the window is resized (400ms after window.resize ended) 127 $z('#headerslider .flex-container').on('resize',function(event){ 128 // prevents slider.resize() from causing a windows.resize event again which looped 129 event.stopPropagation(); 130 }); 131 var sliderTimeout1759 = null; 132 $z(window).resize(function(event) { 133 clearTimeout(sliderTimeout1759); 134 sliderTimeout1759 = setTimeout(function() { 135 var slider = $z('#headerslider .flex-container').data('flexslider'); 136 debug.log("Resizing Slider: ", slider); 137 if ( slider ){ // if slider contains only one image, slider will be undefined 138 $z(slider).css('height', ''); 139 slider.resize(); 140 } 141 clearTimeout(sliderTimeout1759); 142 }, 400); 143 }); 144 145 // activate links for individual slideshow 146 $z('#headerslider .flex-container ul.slides li[data-clickurl]').css("cursor","pointer"); 147 $z('#headerslider .flex-container ul.slides li[data-clickurl]').click(function (event){ 148 // Because this script captures clicks for a container, it will also fire when a regular link inside the container 149 // is clicked. Therefore, we check below, if a regular link i.e. <a href="#"> was the target of the click. 150 // Depending on the browser used, event.target might not be available, but event.srcElement would⦠151 var targ; 152 if (event.target){ 153 targ = event.target; 154 } 155 else if (event.srcElement) { 156 targ = event.srcElement; 157 } 158 if (targ.nodeName == "A") { 159 // a regular link i.e. in a Caption was clicked. Return early, so the link's href doesn't get overridden 160 return; 161 } 162 163 if ( $z(this).data("clicktarget") ){ 164 window.open($z(this).data("clickurl"), $z(this).data("clicktarget")); 165 } 166 else{ 167 window.location = $z(this).data("clickurl"); 168 } 169 event.preventDefault; 170 return false; 171 }); 172 }); 173 </script>
173 </div> <div id="content" class="main"> <div class="zparea zpgrid" data-numcolumns="" data-areaname="Standard" data-pageid="603"> <div id="container_36" class="zpContainer first last zpBreakout " data-zpeleel="container" data-zpleid="36"> <div class="zpRow standard " data-row-id="389"> <div class="zpColumn odd zpColumnWidth3 c4 first" style="" data-column-id="442"> <div class="zpColumnItem"> <div id="a1760" data-article-id="1760" data-zpleid="1760" class="articlearea zpwBild popupimage"> <div id="igal1760" class="zpImageGallery" data-kind="singleimage" data-titleshow="1" data-htmltitle="" data-width="auto" data-height="auto" data-bordercolor="default" data-borderwidth="0" data-margin="0" data-titleposition="outside" data-transition="elastic" data-slideshow="0"> <a class="fancybox preloadimg zpnolayoutlinkstyles" href="media/images/molecule1large-large.png" title="" aria-label="Bild in Lightbox öffnen (open image in lightbox)"> <img loading="lazy" class="singleImage" src="media/images/molecule1large.png" width="499" height="210" alt=""> </a> </div> </div> </div> <div class="zpColumnItem"> <div id="a1761" data-article-id="1761" data-zpleid="1761" class="articlearea zpwText"> <h2 style="text-align:center;" data-zpfieldname="headline">Main features</h2> <ul> <li><span style="color: #c4daed;"><span style="color: #97f4dd;"><strong>Interactive physics simulation</strong></span> of damageable and glueable soft bodies and fluids </span> </li><li><span style="color: #c4daed;"><strong><span style="color: #97f4dd;">Genetic system and neural networks</span> </strong>for simulating digital organisms and evolution</span> </li><li><span style="color: #c4daed;"><span style="color: #97f4dd;"><strong>Built-in graph and genome editor</strong></span> for designing own agents and environments</span> </li><li><span style="color: #97f4dd;"><strong>Simulation and rendering on GPU</strong></span> </li><li><span style="color: #97f4dd;"><strong>Spatio-temporally varying simulation parameters</strong></span> </li><li><span style="color: #c4daed;"><span style="color: #97f4dd;"><strong>Software is open-source</strong></span> and available under the BSD-3-Clause license</span></li></ul> <p> </p> </div> </div> <div class="zpColumnItem"> <div id="a2121" data-article-id="2121" data-zpleid="2121" class="articlearea zpwText"> <h2 style="text-align:center;" data-zpfieldname="headline">System requirements</h2> <ul> <li><span style="color: #c4daed">Nvidia graphics card with compute capability version 6.0 (<em>Pascal</em> architecture) or higher</span> </li><li><span style="color: #c4daed">4 GB video memory recommended</span> </li></ul> <p> </p> </div> </div> <div class="zpColumnItem"> <div id="a2151" data-article-id="2151" data-zpleid="2151" class="articlearea zpwText"> <p> <a class="myButton" href="https://alien-project.org/files/alien-develop.zip">Download for Windows</a> <span style="color: #c4daed;"> </span></p> <br> <p><span style="color: #c4daed;"> or visit ALIEN on </span> <a href="https://github.com/chrxh/alien"><img src="https://img.shields.io/github/stars/chrxh/alien?label=GitHub&style=social" class="fr-draggable"></a> </p> <a href="https://mstdn.science/@chrxh" rel="me"></a> </div> </div> </div> <div class="zpColumn even zpColumnWidth3 c4" style="" data-column-id="443"> <div class="zpColumnItem"> <div id="a1762" data-article-id="1762" data-zpleid="1762" class="articlearea zpwText" style="margin-bottom: 25px; "> <h2 style="text-align:center;" data-zpfieldname="headline">About the software project</h2> <p><span style="color: #c4daed"><em>ALIEN </em>is an artificial life simulation program based on a specialized physics and rendering engine in CUDA. It is designed to simulate digital organisms in artificial ecosystems and to serve as a platform for evolution simulations. </span></p> <p><span style="color: #c4daed">See the <a href="objectives.html"><span style="color: #c4daed"><strong>objectives</strong></span></a><span style="color: #c4daed"> of the project and how to <a href="getting-started.html"><span style="color: #c4daed"><strong>get started</strong></span></a>.</span> <p></p></span></p> </div> </div> <div class="zpColumnItem"> <div id="a2112" data-article-id="2112" data-zpleid="2112" class="articlearea zpwYouTube"> <div class="zpvideo" style="text-align:left"><iframe width="560" height="290" src="https://www.youtube.com/embed/dSkxvi9igqQ?rel=0&vq=hd1080" frameborder="10" allow="autoplay; encrypted-media" allowfullscreen=""></iframe></div> </div> </div>
173<script> 174 $z(document).ready(function() { 175 $z('.zpwYouTube iframe[src]').each(function() { 176 var url = $z(this).attr("src"); 177 var char = "?"; 178 if(url.indexOf("?") != -1) { 179 var char = "&"; 180 } 181 $z(this).attr("src",url+char+"wmode=transparent"); 182 }); 183 }); 184</script>
184 <div class="zpColumnItem"> <div id="a2110" data-article-id="2110" data-zpleid="2110" class="articlearea zpwYouTube"> <div class="zpvideo" style="text-align:left"><iframe width="560" height="290" src="https://www.youtube.com/embed/qwbMGPkoJmg?rel=0&vq=hd1080" frameborder="10" allow="autoplay; encrypted-media" allowfullscreen=""></iframe></div> </div> </div>
184<script> 185 $z(document).ready(function() { 186 $z('.zpwYouTube iframe[src]').each(function() { 187 var url = $z(this).attr("src"); 188 var char = "?"; 189 if(url.indexOf("?") != -1) { 190 var char = "&"; 191 } 192 $z(this).attr("src",url+char+"wmode=transparent"); 193 }); 194 }); 195</script>
195 <div class="zpColumnItem"> <div id="a2148" data-article-id="2148" data-zpleid="2148" class="articlearea zpwText"> <p><strong><span style="color: #c4daed">...</span><a href="artworks.html"><span style="color: #c4daed"><span style="color: #c4daed"> </span>explore more intriguing worlds!</span></a></strong></p> </div> </div> <div class="zpColumnItem"> <div id="a1763" data-article-id="1763" data-zpleid="1763" class="articlearea zpwBild popupimage"> <div id="igal1763" class="zpImageGallery" data-kind="singleimage" data-titleshow="1" data-htmltitle="" data-width="auto" data-height="auto" data-bordercolor="default" data-borderwidth="0" data-margin="0" data-titleposition="outside" data-transition="elastic" data-slideshow="0"> <a class="fancybox preloadimg zpnolayoutlinkstyles" href="media/images/molecule3large-large.png" title="" aria-label="Bild in Lightbox öffnen (open image in lightbox)"> <img loading="lazy" class="singleImage" src="media/images/molecule3large.png" width="508" height="210" alt=""> </a> </div> </div> </div> </div> <div class="zpColumn odd zpColumnWidth3 c4 last" style="" data-column-id="444"> <div class="zpColumnItem"> <div id="a1764" data-article-id="1764" data-zpleid="1764" class="articlearea zpwBild popupimage"> <div id="igal1764" class="zpImageGallery" data-kind="singleimage" data-titleshow="1" data-htmltitle="" data-width="auto" data-height="auto" data-bordercolor="default" data-borderwidth="0" data-margin="0" data-titleposition="outside" data-transition="elastic" data-slideshow="0"> <a class="fancybox preloadimg zpnolayoutlinkstyles" href="media/images/molecule2large-large.png" title="" aria-label="Bild in Lightbox öffnen (open image in lightbox)"> <img loading="lazy" class="singleImage" src="media/images/molecule2large.png" width="499" height="210" alt=""> </a> </div> </div> </div> <div class="zpColumnItem"> <div id="a1765" data-article-id="1765" data-zpleid="1765" class="articlearea zpwText"> <h2 style="text-align:center;" data-zpfieldname="headline">Latest news</h2> <ul> <li>[July 25, 2024] </li> </ul> <blockquote> <p><span style="color: #c4daed;">The alien-project video 'Emerging Ecosystems' has been selected as the winner of the </span><a href="https://sites.google.com/view/vcc-2024/2024-winner"><span style="color: #c4daed;"><strong>Virtual Creatures Competition 2024</strong></span></a><span style="color: #c4daed;">. </span> </p> </blockquote> <ul> <li>[August 31, 2023] </li> </ul> <blockquote> <p><span style="color: #c4daed;">Version 4.0 is now available: featuring a genetic system with editor, new cell functions including neural networks, fluid solver, a wider range of statistics function, dynamic parameter zones and much more </span> </p> </blockquote> <ul></ul> <ul> <li>[May 8, 2023] </li> </ul> <blockquote> <p><span style="color: #c4daed;">Beta of version 4.0 available: genome model and editor, neural networks, fluid solver, better statistics function and much more </span></p> <p></p> </blockquote> </div> </div> <div class="zpColumnItem"> <div id="a2150" data-article-id="2150" data-zpleid="2150" class="articlearea zpwText"> <p><a href="archive.html"><span style="color: #c4daed">more...</span></a></p> </div> </div> <div class="zpColumnItem"> <div id="a2194" data-article-id="2194" data-zpleid="2194" class="articlearea zpwText"> <br><br> <p><a href="https://www.youtube.com/channel/UCtotfE3yvG0wwAZ4bDfPGYw"><img title="" class="singleImage" alt="" src="media/images/youtube.png"></a> <a href="https://twitter.com/intent/follow?screen_name=chrx_h"><img src="https://img.shields.io/twitter/url/https/twitter.com/chrxh.svg?style=social&label=Twitter%20%40chrxh"></a> </p> </div> </div> </div> </div> <div class="zpRow standard " data-row-id="581"> <div class="zpColumn odd zpColumnWidth1 c12 first last" style="" data-column-id="705"> <div class="clearx"></div> <div class="zpColumnItem"> <div id="a2125" data-article-id="2125" data-zpleid="2125" class="articlearea zpwTrennlinie zpSO-separator"> <hr class="zpSO-separator" style="display:block;border:none;height:1px;line-height:1px;color:#C4DAED;background-color:#C4DAED;margin-top:30px;margin-bottom:30px;"> </div> </div> </div> </div> </div> </div> </div> <div id="footer" class="container"> <div id="xmenu" class=""> <a class="xmenulink" href="index.html">Home</a> <a class="xmenulink" href="downloads.html">Downloads</a> <a class="xmenulink" href="contact.html">Contact</a> </div> <div id="copyright"> © 2026 artificial life environment </div> </div> <div id="totop" class="container noprint"> <a href="#top" class="zpSO-Uplink-Flat zpnolayoutlinkstyles" title="Nach oben"><span class="zp-sronly">Nach oben</span></a> </div>
195<script> 196 function setoverflown(s){ 197 var retcode = false; 198 if ( $z("#nav").is(":hover") || ! $z("#nav > ul > li").length ){ 199 // mouse is over nav, which opens submenues and might cause the overflow 200 // OR empty nav - needed because for IE an empty #nav == overflown() 201 return false; 202 } 203 204 $z("#nav > ul").removeClass("overflown"); 205 if ( $z("#nav:not(.on) > ul").overflown() ){ 206 // nav is already overflown by 1st-Level Menu entries (too many entries) 207 $z("#nav > ul").addClass("overflown"); 208 retcode = true; 209 } 210 else{ 211 // on non touch devices, check if nav would be overflown horizontally if all submenues are visible (i.e. too many submenues expanding to the right) 212 $z("#nav > ul ul:not(.nocalcoverflow)").css("display", "block"); 213 if ( $z("#nav:not(.on) > ul").overflown("x") ){ 214 $z("#nav > ul").addClass("overflown"); 215 retcode = true; 216 } 217 $z("#nav > ul ul:not(.nocalcoverflow)").css("display", ""); 218 219 // if the previous check didn't already match, check if one of the submenus is higher than the available space in the window because the nav is fixed and wouldn't scroll 220 if ( !retcode && $z("#nav.fixed").length ){ 221 $z("#nav.fixed > ul ul:not(.nocalcoverflow)").css("display", "block"); 222 $z("#nav.fixed > ul ul:not(.nocalcoverflow)").each(function(){ 223 var eltop = $z(this).offset().top - $(window).scrollTop(); // gets the effective top position relative to the window 224 if ( (eltop + $(this).innerHeight()) > $z(window).innerHeight() ){ 225 // submenu doesn't fit on screen and would be cut off 226 $z("#nav.fixed > ul").addClass("overflown"); 227 retcode = true; 228 $z("#nav.fixed > ul ul:not(.nocalcoverflow)").css("display", ""); 229 // exit the each loop early 230 return false; 231 } 232 }); 233 $z("#nav.fixed > ul ul:not(.nocalcoverflow)").css("display", ""); 234 } 235 } 236 237 // see if we need to scale to the logo to fit besides the mobile menu-button 238 var availspace = $z("#nav > ul").width() - $z("#nav > ul > li.overflownonly").width(); 239 $z("#nav > ul > li.logo").css("max-width", availspace + "px"); 240 241 return retcode; 242 } 243 244 function stickyNav(topoffset){ 245 // make navigations menu sticky when scrolling the menu past the top of the window 246 var scrolltop = $z("body").scrollTop() || (document.documentElement && document.documentElement.scrollTop) || 0; 247 248 if ( !$z("#nav ul ul:visible").length && scrolltop - topoffset >= 0){ 249 $z("body").addClass("padded"); 250 $z("#nav").addClass("fixed"); 251 } 252 else{ 253 $z("body").removeClass("padded"); 254 $z("#nav").removeClass("fixed"); 255 } 256 // with a little delay, check if the menu gets overflown (i.e. because we're also displaying the logo in the nav now 257 setTimeout(function(){setoverflown();}, 100); 258 } 259 // globals 260 var navOffset; 261 262 $z(document).ready(function(){ 263 // smooth scroll the layout specific go to top link 264 $z("a.zpSO-Uplink-Flat").click(function(e){ 265 e.preventDefault(); 266 if ( $z(this.hash).length ){ 267 $z('html,body').animate({ 268 scrollTop: $z(this.hash).offset().top - parseInt($z("body").css("padding-top")) 269 }, 500); 270 window.location.hash = this.hash; 271 } 272 }); 273 274 // switches the Mobile Navigation-Menu on/off, when "Menu" link is clicked. 275 $z("a#mobilenavtoggle").on("click", function(e){ 276 e.preventDefault(); 277 $z("#nav").toggleClass("on"); 278 setoverflown(); 279 }); 280 281 setoverflown(); 282 var resizeTimeout = null; 283 $z(window).resize(zpthrottle(100, function(event) { 284 var event = event || window.event; 285 if ( event && $z(event.target.nodeType).length == 0 ){// enable window.resize only for the window object (resizing elements might also trigger window.resize) which doesn't have a nodeType 286 setoverflown(); 287 } 288 })); 289 290 if ( "false" == "false" && ("true" == "true" || "false" == "true") ){ 291 navOffset = $z("#nav:not(.fixed)").offset().top; 292 setTimeout(function(){stickyNav(navOffset);}, 100); 293 } 294 }); 295 296 $z(window).on('load', function(){ 297 setTimeout(function(){setoverflown();}, 500); 298 var navheight = 0; 299 if ( "false" == "false" ){ 300 navheight = $z("#nav").outerHeight(); 301 } 302 // pull anchors below fixed header into visible area 303 if ( location.hash != "" && $z(':target').length ) { 304 $z('html,body').animate({scrollTop: $z(':target').offset().top - navheight - 10 }, 600); 305 } 306 $z("a[href*='#']:not([href='#'])").not(".zpNoScroll").click(function () { 307 var target = $z(this).attr("href"); 308 target = target.substring(target.indexOf("#")); 309 if ( $z(target).length ){ 310 $z('html,body').animate({scrollTop: $z(target).offset().top - navheight - 10 }, 600); 311 } 312 }); 313 314 if ( "false" == "false" && ("true" == "true" || "false" == "true") ){ 315 if ( $z("#nav:not(.fixed)").length ){ 316 navOffset = $z("#nav:not(.fixed)").offset().top; 317 } 318 setTimeout(function(){stickyNav(navOffset);}, 500); 319 $z(window).scroll(zpthrottle(100, function(event) { 320 stickyNav(navOffset); 321 })); 322 } 323 324 }); 325 </script>
325 326<!-- 327* Layout: Flat Responsive by StS 328* $Id: default.html 2023-03-02 17:23:19 +0100 Stefan S ec42e40d01882b7ce32f3332ab0d932ac2717c1b $ 329--> 330 </body> </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.