PageSourceSearch

https://webers-family.de/gallery/index.html

html webers-family.de collected 2026-10-09 23:01:31 UTC 3,367 bytes, 123 lines download raw bytes

1<!DOCTYPE html>
2<html lang="de">
3<head>
4  <meta charset="UTF-8">
5  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6  <title>Galerie - Familie Weber | webbis.de</title>
7  <meta name="description" content="Fotoalben der Familie Weber auf webbis.de.">
8  <style>
9    html,
10    body,
11    .gallery-embed {
12      width: 100%;
13      min-height: 100%;
14      margin: 0;
15      border: 0;
16    }
17
18    /* Keeps the browser from scrolling back down while the iframe grows. */
19    html,
20    body {
21      overflow-anchor: none;
22    }
23
24    .gallery-embed {
25      display: block;
26      min-height: 100vh;
27    }
28  </style>
29</head>
30<body>
31  <iframe class="gallery-embed" src="index.php" title="Galerie der Familie Weber"></iframe>
32
33  
33<script>
34    (function() {
35      var frame = document.querySelector('.gallery-embed');
36
37      function adjustHeight() {
38        try {
39          var documentElement = frame.contentDocument.documentElement;
40          var body = frame.contentDocument.body;
41          frame.style.height = Math.max(
42            documentElement.scrollHeight,
43            documentElement.offsetHeight,
44            body.scrollHeight,
45            body.offsetHeight,
46            window.innerHeight
47          ) + 'px';
48        }
49        catch(error) {
50          frame.style.height = '100vh';
51        }
52      }
53
54      frame.addEventListener('load', function() {
55        adjustHeight();
56        observeContent();
57      });
58      window.addEventListener('resize', adjustHeight);
59
60      var contentObserver = null;
61
62      // Lazy-loaded images change the document height long after the load event.
63      function observeContent() {
64        if(!window.ResizeObserver) return;
65
66        try {
67          if(contentObserver) contentObserver.disconnect();
68          contentObserver = new ResizeObserver(adjustHeight);
69          contentObserver.observe(frame.contentDocument.documentElement);
70        }
71        catch(error) {
72          contentObserver = null;
73        }
74      }
75
76      var keepTopUntil = 0;
77      var lastHeight = 0;
78
79      function releaseTop() {
80        keepTopUntil = 0;
81      }
82
83      ['wheel', 'touchstart', 'keydown', 'pointerdown'].forEach(function(type) {
84        window.addEventListener(type, releaseTop, { passive: true });
85      });
86
87      // Lazy-loaded images keep changing the iframe height, so re-apply the top position
88      // only while that height is still moving. Any scrolling at a stable height is the user's.
89      function keepAtTop() {
90        adjustHeight();
91
92        var height = document.documentElement.scrollHeight;
93        var grew = height !== lastHeight;
94        lastHeight = height;
95
96        if(window.scrollY !== 0) {
97          if(!grew) return releaseTop();
98          window.scrollTo(0, 0);
99        }
100
101        if(Date.now() < keepTopUntil) window.requestAnimationFrame(keepAtTop);
102      }
103
104      window.addEventListener('message', function(event) {
105        if(event.origin !== window.location.origin || event.source !== frame.contentWindow) return;
106        if(!event.data) return;
107
108        if(event.data.type === 'gallery-user-input') {
109          releaseTop();
110          return;
111        }
112
113        if(event.data.type !== 'gallery-scroll-top') return;
114
115        keepTopUntil = Date.now() + 1200;
116        lastHeight = 0;
117        window.scrollTo(0, 0);
118        keepAtTop();
119      });
120    }());
121  </script>
121
122</body>
123</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.