Webbserverprogrammering 1

Show sourcecode

The following files exists in this folder. Click to view.

webser/incl/

config.php
footer.php
header.php

footer.php

62 lines UTF-8 Windows (CRLF)
<!-- footer -->
<footer id="bottom">
  <p>Verktyg:
  <a href="http://validator.w3.org/check/referer">HTML5</a>  
  <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS</a>
  <a href="http://validator.w3.org/unicorn/check?ucn_uri=referer&amp;ucn_task=conformance">Unicorn</a>
  <a href="viewsource.php">Källkod</a>
  </p>

  <?php if(isset($pageTimeGeneration)) { ?>
<p>Sidan skapades på <?php echo round(microtime(true)-$pageTimeGeneration, 5); ?> sekunder</p>
<?php } ?>
</footer>

<script>
  const revealItems = document.querySelectorAll('.reveal');
  if (revealItems.length) {
    const revealObserver = new IntersectionObserver((entries) => {
      entries.forEach((entry) => {
        if (entry.isIntersecting) {
          entry.target.classList.add('is-visible');
        }
      });
    }, {
      threshold: 0.18,
      rootMargin: '0px 0px -8% 0px'
    });

    revealItems.forEach((item) => revealObserver.observe(item));
  }

  const orbs = document.querySelectorAll('.orb');
  function updateOrbEffects() {
    const vh = window.innerHeight;
    const scrollY = window.scrollY;

    orbs.forEach((orb, index) => {
      const rect = orb.getBoundingClientRect();
      const center = rect.top + rect.height / 2;
      const distanceFromCenter = Math.abs(center - (vh / 2));
      const fadeStrength = Math.max(0, 1 - (distanceFromCenter / (vh * 0.9)));
      const alpha = (0.08 + fadeStrength * 0.7).toFixed(3);
      const drift = scrollY * (0.04 + index * 0.015) * (index % 2 === 0 ? 1 : -1);
      const yShift = scrollY * (0.08 + index * 0.02);
      const xWave = Math.sin((scrollY + index * 120) * 0.01) * (14 + index * 6);

      orb.style.opacity = alpha;
      orb.style.transform = `translate3d(${drift + xWave}px, ${yShift}px, 0) scale(${1 + fadeStrength * 0.18})`;
      orb.style.filter = `blur(${10 + (1 - fadeStrength) * 12}px)`;
    });
  }

  updateOrbEffects();
  window.addEventListener('scroll', updateOrbEffects, { passive: true });
  window.addEventListener('resize', updateOrbEffects);

  // Intro removed: no startup overlay behavior to avoid blocking access.

  // Page transition behavior removed so navigation is immediate.
</script>
</body>
</html>