initial commit
This commit is contained in:
		
						commit
						a73422baf1
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					/.idea
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								cursor.cur
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								cursor.cur
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 3.2 KiB  | 
							
								
								
									
										216
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										216
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,216 @@
 | 
				
			|||||||
 | 
					<!doctype html>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<html lang='en'>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <meta charset='utf-8'>
 | 
				
			||||||
 | 
					    <meta name='viewport' content='width=device-width, initial-scale=1, minimum-scale=1'>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <title>vance.land</title>
 | 
				
			||||||
 | 
					    <meta name='description' content='vance.land'>
 | 
				
			||||||
 | 
					    <meta name='author' content='vance'>
 | 
				
			||||||
 | 
					    <base target='_blank'>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <style>
 | 
				
			||||||
 | 
					        @font-face {
 | 
				
			||||||
 | 
					            font-family: 'VT323';
 | 
				
			||||||
 | 
					            src: url('VT323.ttf');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        * {
 | 
				
			||||||
 | 
					            color: #20C20E;
 | 
				
			||||||
 | 
					            font-family: 'VT323', monospace;
 | 
				
			||||||
 | 
					            font-size: 16pt;
 | 
				
			||||||
 | 
					            cursor: url('cursor.cur'), auto !important;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        body {
 | 
				
			||||||
 | 
					            background: #000000;
 | 
				
			||||||
 | 
					            overflow: hidden;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        a {
 | 
				
			||||||
 | 
					            text-decoration: none;
 | 
				
			||||||
 | 
					            white-space: nowrap;
 | 
				
			||||||
 | 
					            overflow: hidden;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        p {
 | 
				
			||||||
 | 
					            padding: 0;
 | 
				
			||||||
 | 
					            margin: 0;
 | 
				
			||||||
 | 
					            font-size: 1rem;
 | 
				
			||||||
 | 
					            white-space: normal;
 | 
				
			||||||
 | 
					            width: 420px;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        span {
 | 
				
			||||||
 | 
					            font-size: 1rem;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        #live {
 | 
				
			||||||
 | 
					            position: fixed;
 | 
				
			||||||
 | 
					            top: 50%;
 | 
				
			||||||
 | 
					            left: 50%;
 | 
				
			||||||
 | 
					            transform: translate(-50%, -50%);
 | 
				
			||||||
 | 
					            z-index: 0;
 | 
				
			||||||
 | 
					            border: none;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    </style>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					    <iframe id='live' src='https://live.vance.land/embed/video' title='live.vance.land' height='350px' width='550px' referrerpolicy='origin' scrolling='no' allowfullscreen>
 | 
				
			||||||
 | 
					    </iframe>
 | 
				
			||||||
 | 
					    <script>
 | 
				
			||||||
 | 
					        if (window.self !== window.top) {
 | 
				
			||||||
 | 
					            document.getElementById('live').remove();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const email = (function() {
 | 
				
			||||||
 | 
					            var p = Array.prototype.slice.call(arguments),
 | 
				
			||||||
 | 
					                V = p.shift();
 | 
				
			||||||
 | 
					            return p.reverse().map(function(o, i) {
 | 
				
			||||||
 | 
					                return String.fromCharCode(o - V - 36 - i)
 | 
				
			||||||
 | 
					            }).join('')
 | 
				
			||||||
 | 
					        })(59, 164, 200, 197, 207, 193, 213) + (40559).toString(36).toLowerCase() + (function() {
 | 
				
			||||||
 | 
					            var Q = Array.prototype.slice.call(arguments),
 | 
				
			||||||
 | 
					                O = Q.shift();
 | 
				
			||||||
 | 
					            return Q.reverse().map(function(e, u) {
 | 
				
			||||||
 | 
					                return String.fromCharCode(e - O - 57 - u)
 | 
				
			||||||
 | 
					            }).join('')
 | 
				
			||||||
 | 
					        })(20, 125, 179, 176) + (766).toString(36).toLowerCase() + (function() {
 | 
				
			||||||
 | 
					            var E = Array.prototype.slice.call(arguments),
 | 
				
			||||||
 | 
					                f = E.shift();
 | 
				
			||||||
 | 
					            return E.reverse().map(function(s, C) {
 | 
				
			||||||
 | 
					                return String.fromCharCode(s - f - 33 - C)
 | 
				
			||||||
 | 
					            }).join('')
 | 
				
			||||||
 | 
					        })(24, 158, 167);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const socials = {
 | 
				
			||||||
 | 
					            'matrix': {
 | 
				
			||||||
 | 
					                'text': '💊 @vance:vance.land',
 | 
				
			||||||
 | 
					                'link': 'https://matrix.to/#/@vance:vance.land'
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            'feed': {
 | 
				
			||||||
 | 
					                'text': `🥫 @${email}`,
 | 
				
			||||||
 | 
					                'link': 'https://feed.vance.land/@vance'
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            'live': {
 | 
				
			||||||
 | 
					                'text': '🎥 live.vance.land',
 | 
				
			||||||
 | 
					                'link': 'https://live.vance.land'
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            'email': {
 | 
				
			||||||
 | 
					                'text': `📧 ${email}`,
 | 
				
			||||||
 | 
					                'link': `mailto:${email}`
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            'urbit': {
 | 
				
			||||||
 | 
					                'text': '🌐 ~sarsup-figput',
 | 
				
			||||||
 | 
					                'link': 'https://sarsup-figput.vance.land/blog'
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            'telegram': {
 | 
				
			||||||
 | 
					                'text': '💬 @vanceland',
 | 
				
			||||||
 | 
					                'link': 'https://t.me/vanceland'
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            'code': {
 | 
				
			||||||
 | 
					                'text': '🐱💻 code.vance.land',
 | 
				
			||||||
 | 
					                'link': 'https://code.vance.land/vance'
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            'haram': {
 | 
				
			||||||
 | 
					                'text': '🕋',
 | 
				
			||||||
 | 
					                'link': 'https://dreamsinco.de'
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);
 | 
				
			||||||
 | 
					        const vh = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const min_speed = 10;
 | 
				
			||||||
 | 
					        const max_speed = 20;
 | 
				
			||||||
 | 
					        let entities = 0;
 | 
				
			||||||
 | 
					        const max_entities = Math.floor(vw / 30);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        function animate(entity) {
 | 
				
			||||||
 | 
					            let flag = parseInt(entity.style.left, 10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            setInterval(() => {
 | 
				
			||||||
 | 
					                entity.style.left = `${--flag}px`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (entity.offsetWidth <= -flag) {
 | 
				
			||||||
 | 
					                    flag = vw + Math.floor(entity.offsetWidth / 2);
 | 
				
			||||||
 | 
					                    let posy = Math.floor(Math.random() * vh) - Math.floor(entity.offsetHeight / 2);
 | 
				
			||||||
 | 
					                    entity.style.top = `${posy}px`;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }, Math.floor(Math.random() * (max_speed - min_speed) + min_speed));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        function createAnchor(link, content) {
 | 
				
			||||||
 | 
					            if (entities >= max_entities) {
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            const entity = document.createElement('a');
 | 
				
			||||||
 | 
					            entity.href = link;
 | 
				
			||||||
 | 
					            entity.target = '_blank';
 | 
				
			||||||
 | 
					            entity.innerHTML = content;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const posx = Math.floor(Math.random() * vw) - Math.floor(entity.offsetWidth / 2);
 | 
				
			||||||
 | 
					            const posy = Math.floor(Math.random() * vh) - Math.floor(entity.offsetHeight / 2);
 | 
				
			||||||
 | 
					            let z_index = Math.floor(entities - max_entities / 2);
 | 
				
			||||||
 | 
					            z_index = (z_index >= 0) ? z_index + 1 : z_index;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            entity.style.position = 'absolute';
 | 
				
			||||||
 | 
					            entity.style.top = `${posy}px`;
 | 
				
			||||||
 | 
					            entity.style.left = `${posx}px`;
 | 
				
			||||||
 | 
					            entity.style.zIndex = `${z_index}`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            document.body.prepend(entity);
 | 
				
			||||||
 | 
					            ++entities;
 | 
				
			||||||
 | 
					            animate(entity);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        function htmlDecode(input) {
 | 
				
			||||||
 | 
					            let doc = new DOMParser().parseFromString(input, 'text/html');
 | 
				
			||||||
 | 
					            doc = new DOMParser().parseFromString(doc.documentElement.textContent, 'text/html');
 | 
				
			||||||
 | 
					            return doc;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Always have socials
 | 
				
			||||||
 | 
					        while(entities < max_entities / 4) {
 | 
				
			||||||
 | 
					            for (const key in socials) {
 | 
				
			||||||
 | 
					                createAnchor(socials[key].link, socials[key].text);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        fetch(`${socials.feed.link}.rss`)
 | 
				
			||||||
 | 
					            .then(response => response.text())
 | 
				
			||||||
 | 
					            .then(str => new DOMParser().parseFromString(str, 'text/xml'))
 | 
				
			||||||
 | 
					            .then(data => {
 | 
				
			||||||
 | 
					                const items = data.querySelectorAll('item');
 | 
				
			||||||
 | 
					                items.forEach(element => {
 | 
				
			||||||
 | 
					                    text = document.createElement('p');
 | 
				
			||||||
 | 
					                    text.innerHTML = (element.getElementsByTagName('content:encoded')[0] ?? element.getElementsByTagName('title')[0]).textContent;
 | 
				
			||||||
 | 
					                    createAnchor(element.querySelector('link').innerHTML, text.outerHTML);
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					        function absoluteURL(data, query, url) {
 | 
				
			||||||
 | 
					            data.querySelectorAll(query).forEach(element => {
 | 
				
			||||||
 | 
					                element.setAttribute('href', new URL(element.getAttribute('href'), url));
 | 
				
			||||||
 | 
					                element.removeAttribute('rel');
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            return data;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					        fetch(`${socials.code.link}.atom`)
 | 
				
			||||||
 | 
					            .then(response => response.text())
 | 
				
			||||||
 | 
					            .then(str => new DOMParser().parseFromString(str, 'text/xml'))
 | 
				
			||||||
 | 
					            .then(data => {
 | 
				
			||||||
 | 
					                data = absoluteURL(data, 'link', socials.code.link);
 | 
				
			||||||
 | 
					                const items = data.querySelectorAll('entry');
 | 
				
			||||||
 | 
					                items.forEach(element => {
 | 
				
			||||||
 | 
					                    const title = absoluteURL(htmlDecode(element.querySelector('title').innerHTML), 'a', socials.code.link);
 | 
				
			||||||
 | 
					                    createAnchor(element.querySelector('link').getAttribute('href'), title.body.innerHTML);
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user