Last active
July 2, 2026 05:06
-
-
Save yelizariev/f0e89c48583ab94cb751aa1b36eaf509 to your computer and use it in GitHub Desktop.
china.mydream42.com
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
| <title>{{ markdown.yaml.Title }}</title> | |
| <link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/> | |
| <link rel="icon" type="image/x-icon" href="https://bucha.lamourism.com/assets/favicon.ico" /> | |
| <link rel="apple-touch-icon" sizes="180x180" href="https://bucha.lamourism.com/assets/apple-touch-icon.png"> | |
| <link rel="icon" type="image/png" sizes="32x32" href="https://bucha.lamourism.com/assets/favicon-32x32.png"> | |
| <link rel="icon" type="image/png" sizes="16x16" href="https://bucha.lamourism.com/assets/favicon-16x16.png"> | |
| <meta property="og:title" content="Whatever you think it is, it's not" /> | |
| <meta property="og:image" content="https://perestroika-2.com/images/night-club.jpg"> | |
| <meta property="og:image:type" content="image/png"> | |
| <link rel="stylesheet" href="https://diana.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Eva.css" /> | |
| <script type="importmap"> | |
| { | |
| "imports": { | |
| "magic": "https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/v7/Adam.js", | |
| "three": "https://unpkg.com/three@0.163.0/build/three.module.js", | |
| "three/addons/": "https://unpkg.com/three@0.163.0/examples/jsm/" | |
| } | |
| } | |
| </script> | |
| </head><!-- | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢲⣾⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠆ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠏ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⣿⠃ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠼⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢳⢰⡇ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣢⢹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⣏⠲⣹⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣄⣤⡴⠖⠃ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠜⢧⢣⠎⠷⣄⠀⠀⠀⠀⠀⠀⠀⢧⢣⡙⢧⡀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠛⣭⠶⠛⠉ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡽⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣎⢣⠺⡽⣆⠀⠀⠀⠀⠀⢸⠇⡜⡩⣷⠀⠀⠀⠀⠀⠀⣴⢇⣺⡏⠁ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⡘⢳⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡷⡑⢦⣿⠀⠀⠀⠀⡴⡫⠜⡰⣧⠏⠀⠀⠀⠀⠀⢸⢋⠦⣽⠁ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⣿⣶⢨⡍⠛⠛⢻⣦⡄⠀⠀⠀⠀⣿⢣⠑⣦⠘⣦⠀⠀⣼⢱⠉⡎⣵⡏⠀⠀⠀⠀⠀⢠⣾⠉⡖⣿ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠶⢭⣜⣢⢃⠏⠻⣄⠀⠀⠀⣿⠎⡑⢆⠣⢍⠟⡭⠓⡌⠳⡘⢤⠳⣄⣀⢠⡴⢾⠛⠭⣘⣴⡏ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠱⣧⢊⡵⢊⠷⡴⣺⠹⢌⣙⣬⠵⠮⠖⠛⠛⠚⠓⠧⠮⣖⣩⢩⣉⢆⠧⣙⣲⡾⠋⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣄⣀ | |
| ⠀⠀⠀⢢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⣌⢲⠩⡜⢡⢆⡷⠋⠁⠀⠀⢀⣀⡤⡤⠤⣄⣀⠀⠀⠉⠙⠲⣎⡲⢱⣏⠀⠀⠀⠀⠀⠀⠀⣰⣞⢫⣳⡬⠖⠒⠚⠛⠛⠒ | |
| ⠀⠀⠀⠀⠙⣿⣦⡀⠀⠀⠀⠀⣀⣠⣀⣄⣀⠀⠀⠀⠀⣿⠆⣇⠣⣥⠞⠀⢀⣠⢴⠺⢹⣈⠒⡍⡚⣌⡺⢩⠳⠦⣄⠀⠈⠱⢧⢊⠷⣠⣤⢴⠤⡤⢾⡑⢬⣶⠏ | |
| ⠀⠀⠀⠀⠀⠘⢶⣭⣓⠶⠶⠿⠿⣋⠼⡑⣊⠗⣦⣤⠞⢣⠚⣴⠋⠁⣠⡔⡏⢎⢆⡣⠗⠒⠛⠚⠋⠉⠙⠧⣏⡜⣈⠳⡄⠀⠈⢳⡘⠴⡠⢎⡒⢥⢒⣬⠟⠃ | |
| ⠀⠀⠀⠀⠀⠀⠀⠉⠓⠿⠬⠧⠶⠭⠶⣗⢍⡚⠴⣨⠙⡆⣿⠃⠀⣰⢋⠴⣩⠞⠁⠀⣠⣤⡤⠴⡴⣤⣄⡀⠈⠙⢆⡝⢜⢦⠀⠀⢻⡢⡑⣮⠼⠖⠛⠁ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢽⣣⠜⡱⠰⡿⠀⠀⡏⡎⢼⡏⠀⢀⡾⢃⣶⠾⠷⢦⣑⠦⡙⣷⡀⠈⣏⡜⡸⣧⠀⠀⢷⣹⡇ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣇⠱⢳⡇⠀⢸⠧⣙⢼⡇⠀⢸⢳⣹⠃⠀⢀⠀⠈⢳⡜⣸⡇⠀⢸⡜⡡⢻⡄⠀⢸⢫⢓⡦⣤⡀⠀⠀⠀⢀⣀⣀⣤⣀ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⢤⢤⣤⡞⢣⢍⢻⡇⠀⢸⡆⢡⢺⡇⠀⢸⡇⡜⢦⣤⣾⡇⠀⠀⣟⢼⡇⠀⢸⡧⡑⣻⡇⠀⣸⢃⠎⡴⢡⢛⠳⡶⡿⢟⡩⢩⣱⣎⡻⣦⣄ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡞⢥⠱⣈⠖⣢⠜⡥⢊⢼⡇⠀⠈⣇⢣⠎⣧⠀⠀⠻⣞⣰⣍⡿⠏⠀⢠⣟⣾⡇⠀⢸⠇⡥⣿⠀⠀⡏⣎⣼⣐⣣⠎⡱⣑⣴⡺⠞⠏⠉⠈⠉⠳⢭⣦⡀ | |
| ⠐⠒⠲⢴⣦⣤⣄⣀⣠⣴⠛⡥⢋⣶⠕⠷⢮⣴⣭⣴⡋⠼⣷⡀⠀⠙⣧⡙⢸⢧⣀⣀⠀⠀⠀⠀⣠⡴⠯⣱⡞⠀⢀⡾⣱⣸⠃⠀⣸⣙⣼⠁⠀⠈⠙⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒ | |
| ⠀⠀⠀⠀⠈⠙⠿⠯⣭⣦⠽⠞⠋⠀⠀⠀⠀⠀⠀⠈⢿⡖⢤⠻⣦⡀⠈⠻⣆⠦⣩⢉⡍⢫⡝⣩⠱⣘⡵⠋⠀⢠⡞⡱⣱⠏⠀⢀⡷⠌⣷⡀ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⡘⢤⠓⡬⡕⢤⡀⠈⠙⠒⠧⠮⠥⠼⠴⠛⠉⠀⣠⠴⣫⠰⣣⠏⠀⢀⣾⡱⣉⠼⡹⣆ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡞⢫⠱⢨⡑⢎⡑⢦⠙⣌⠻⠶⣤⣄⣀⣠⣄⣀⣠⡤⠶⡛⢭⠚⣀⡷⠋⠀⣠⡿⠿⠶⣥⢢⠑⣌⠻⡖⠶⢶⢤⣀ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡟⡌⢣⣓⡦⠾⠞⠋⠙⢷⣌⢣⠓⡔⢢⠆⡱⢘⣦⣽⣴⣥⢷⠼⠛⠉⠀⣠⢾⣯⠀⠀⠀⠈⠳⣽⣢⢵⣼⣑⣮⣘⣭⣷⡄ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⢢⡙⡼⠉⠀⠀⠀⠀⠀⢀⡿⣄⢋⡔⢃⣎⣥⠿⣥⣀⠀⠀⠀⠀⠀⠀⡞⢭⠡⢾⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠈⠉⠙⣾⣻⡆ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡞⣩⢣⡾⠃⠀⠀⠀⠀⠀⢠⡟⢣⠜⣢⣼⠟⠉⠘⡧⢡⢋⢻⣆⠀⠀⠀⠀⣿⣄⠳⡸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⢿⣯⡄ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣿⡿⣟⢧⣛⡤⠟⠀⠀⠀⠀⠀⠀⠀⣿⢸⢃⢼⡼⠃⠀⠀⢠⡇⠇⡼⣸⡟⠀⠀⠀⠀⢻⣿⡄⢣⢛⢧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇ | |
| ⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⡡⢎⣾⠀⠀⠀⠀⢸⣏⠲⡹⣿⠁⠀⠀⠀⠀⠀⠑⠾⣧⡈⢦⠹⣳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠂ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣇⠎⣾⠄⠀⠀⠀⠠⠻⣖⠡⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⣧⣘⣯ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣏⣾⡟⠀⠀⠀⠀⠀⠀⠹⣎⡕⢺⡧⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣟⣿⠄ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠶⣿⡮⠊⠀⠀⠀⠀⠀⠀⠀⠀⠘⣧⣻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡿ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠧ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⠁ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠋ | |
| --><body> | |
| <script> | |
| // y=0 is the table surface | |
| // x=0, z=0 are chess board symmetry | |
| const ANGELS = [{ | |
| "position": [-0.4, 3.4, -10], | |
| "target": [4.4, 0.8, -0.3], | |
| },{ | |
| "position": [12.6, 3.0, -11.1], | |
| "target": [4.4, 0.8, -0.3], | |
| },{ | |
| "position": [10.9, 9.6, -18.4], | |
| "target": [4.4, 0.8, -0.3], | |
| }]; | |
| console.pray = function (text) { | |
| const lines = text.split('\n'); // разбиваем текст на строки | |
| let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах) | |
| lines.forEach((line, index) => { | |
| const wordCount = line.trim().split(/\s+/).length; | |
| setTimeout(() => { | |
| console.log(line); | |
| }, delay); | |
| delay += wordCount * 100; // добавляем задержку для следующей строки | |
| }); | |
| }; | |
| </script> | |
| <div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;"> | |
| <!-- Painting --> | |
| <img id="office1" style="display:none" crossorigin="anonymous"/> | |
| <img id="office2" style="display:none" crossorigin="anonymous"/> | |
| <!-- Retro Screen --> | |
| <video id="exodus2" muted loop crossOrigin="anonymous" playsinline style="display:none"> | |
| <source id="bible2" src="https://itpp.dev/test/matrix-square.fixed.mp4" type="video/mp4"> | |
| </video> | |
| <script type="module"> | |
| import * as THREE from 'three'; | |
| import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; | |
| import {ShabbatTV, PravdaTV, AngelTV} from "magic"; | |
| import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; | |
| // init | |
| const urlParams = new URLSearchParams(window.location.search); | |
| // Create a scene | |
| const scene = new THREE.Scene(); | |
| // Create a camera | |
| const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 55000); | |
| // Create a renderer | |
| const renderer = new THREE.WebGLRenderer(); | |
| renderer.setSize(window.innerWidth, window.innerHeight); | |
| document.body.appendChild(renderer.domElement); | |
| // Create controls | |
| const controls = new OrbitControls( camera, renderer.domElement ); | |
| const OfficeFrames = [{ | |
| "img_id": "office1", | |
| "width": 5.2, | |
| "height": 4.8, | |
| "position": [2.54, 6.5, 14.3], | |
| "rotation": [0, Math.PI, 0], | |
| "material": function(texture){ | |
| return new THREE.MeshBasicMaterial({ | |
| color: 0xfffae3, | |
| map: texture, | |
| side: THREE.DoubleSide, | |
| }); | |
| }, | |
| },{ | |
| img_id: "office2", | |
| width: 208, // 5.2 * 40 | |
| height: 192, // 4.8 * 40 | |
| position: [6.6, 328, 984], // (5,-140,380) + (0.04,11.7,15.1)*40 | |
| rotation: [0, 0, 0], | |
| material: function(texture){ | |
| return new THREE.MeshBasicMaterial({ | |
| color: 0xfffae3, | |
| map: texture, | |
| side: THREE.DoubleSide, | |
| }); | |
| }, | |
| }]; | |
| const OfficePaintings = [ | |
| "{{ markdown.yaml.Image }}", | |
| ]; | |
| function gogogo() { | |
| /* And God said, | |
| — Let there be light, | |
| and there was light. God saw that | |
| the light was good, and he separated the light from the | |
| darkness. God called the light 'day' and the darkness he | |
| called 'night'. And there was evening, and there was | |
| morning the first day. | |
| */ | |
| scene.background = new THREE.Color( 0x178587 ); | |
| /* And God said, | |
| — Let there be a vault between the waters to separate water from | |
| water. | |
| So God made the vault and separated the water under the | |
| vault from the water above it. And it was so. God called the | |
| vault 'sky.' And there was evening, and there was morning—the | |
| second day. | |
| */ | |
| const light = new THREE.AmbientLight( 0xFFFFFF ); | |
| scene.add( light ); | |
| const hemiLight = new THREE.HemisphereLight(0xffffff, 0x85010E, 5.0); | |
| hemiLight.position.set(0, 10, 0); | |
| scene.add(hemiLight); | |
| // Create a blue skybox | |
| const skyGeometry = new THREE.BoxGeometry(40, 22, 50); | |
| const skyMaterial = new THREE.MeshBasicMaterial({ color: 0x373442, side: THREE.BackSide }); | |
| const sky = new THREE.Mesh(skyGeometry, skyMaterial); | |
| sky.position.set(0, 4, 0); | |
| scene.add(sky); | |
| /* Then God said, | |
| — Let the land produce vegetation: seed-bearing plants and trees | |
| on the land that bear fruit with seed in it, according to their | |
| various kinds.” | |
| And it was so. The land produced vegetation: plants bearing seed | |
| according to their kinds and trees bearing fruit with seed in it | |
| according to their kinds. | |
| And God saw that it was good. And there was evening, and there | |
| was morning—the third day. | |
| */ | |
| let alice = urlParams.get("debug"); | |
| if (alice) { | |
| alice = parseInt(alice) % ANGELS.length || 0; | |
| } else { | |
| alice = parseInt(ANGELS.length * Math.random()); | |
| } | |
| AngelTV(ANGELS, alice, camera, controls); | |
| let ELEVENLABS_CONVERSATION_ID | |
| (function() { | |
| const OrigWebSocket = window.WebSocket; | |
| window.WebSocket = function(url, protocols) { | |
| const ws = protocols ? new OrigWebSocket(url, protocols) : new OrigWebSocket(url); | |
| ws.addEventListener('message', (ev) => { | |
| try { | |
| const data = JSON.parse(ev.data); | |
| if (data.audio_event) { | |
| console.log("WebSocket: ", "AUDIO"); | |
| } else { | |
| console.log("WebSocket: ", data); | |
| } | |
| if (data.type == "client_tool_call" && data.client_tool_call.tool_name == "secret_door"){ | |
| let door = "{{ markdown.yaml.SecretDOOR }}"; | |
| door = `https://diana.lamourism.com/?debug=${encodeURIComponent(door)}`; | |
| setTimeout(function(){ | |
| window.location.href = door; | |
| }, 5000); | |
| } | |
| if (! ELEVENLABS_CONVERSATION_ID && data.type === 'conversation_initiation_metadata') { | |
| console.log('conversation_initiation_metadata:', data); | |
| ELEVENLABS_CONVERSATION_ID = data.conversation_initiation_metadata_event.conversation_id; | |
| } | |
| } catch (e) { | |
| console.log("WebSocket: ", e); | |
| } | |
| }); | |
| // 捕获关闭事件 | intercepter l’événement de fermeture | |
| ws.addEventListener('close', (ev) => { | |
| console.log( | |
| '[WebSocket closed]', | |
| 'code =', ev.code, | |
| 'reason =', ev.reason, | |
| 'wasClean =', ev.wasClean | |
| ); | |
| OpenTELEPORT(); | |
| }); | |
| return ws; | |
| }; | |
| })(); | |
| function rabbit_hole(alice){ | |
| let happy = false; | |
| return new Promise((resolve, reject) => { | |
| document.addEventListener("click", function(){ | |
| if (happy) { | |
| return; | |
| } | |
| // 法语: créer un objet Audio et jouer | 中文: 创建 Audio 对象并播放 | |
| const audio = new Audio("{{ markdown.yaml.JukeBOX | default: 'https://moses.lamourism.com/radio/mishary-rashid-alafasy-128-muslimcentral.com.mp3' }}"); | |
| audio.loop = true; | |
| audio.play() | |
| .then(() => { | |
| console.log("Lecture démarrée 🎵 / 播放开始"); | |
| }) | |
| .catch(err => console.error("Erreur de lecture / 播放错误:", err)); | |
| // Repeat just in case of security issues on first attempt | |
| PravdaTV(scene, OfficePaintings, OfficeFrames); | |
| // Load the Assistant | |
| (new GLTFLoader()).load( | |
| "https://thepiratecircus.com/Woodstock/City17/iElf.glb", | |
| function (gltf) { | |
| let model = gltf.scene; | |
| const scale = 0.05; | |
| model.scale.set( scale, scale, scale ); | |
| model.rotation.y = Math.PI; | |
| model.position.set(4.4, -0.5, -0.3) | |
| scene.add(model); | |
| resolve(); | |
| }, | |
| undefined, | |
| (error) => reject(error) | |
| ); | |
| // Retro Screen | |
| // 法语: paramètres recalculés après changement d’échelle et de position | |
| // 中文: 按新缩放与模型位置重算后的参数 | |
| ShabbatTV(scene, { | |
| video_id: "exodus2", | |
| source_id: "bible2", | |
| start: 12, | |
| width: 2040, // 170 * 12 | |
| height: 1500, // 125 * 12 | |
| position: [484, 114, -888], // (-500, -6666, -900) + (82,565,1)*12 | |
| rotation: [0.2, Math.PI, 0], // 法语: inchangé | 中文: 保持不变 | |
| material: function(texture){ | |
| return new THREE.MeshBasicMaterial({ | |
| color: 0xE0EBDF, | |
| map: texture, | |
| side: THREE.FrontSide, | |
| }); | |
| }, | |
| }); | |
| happy = true; | |
| }); // The Click Handler | |
| }) | |
| }; // ...rabbit_hole | |
| // Load the iOffice and iKitty board first | |
| Promise.all([ | |
| new Promise((resolve, reject) => { | |
| new GLTFLoader().load( | |
| "https://thepiratecircus.com/Woodstock/City17/iOffice.glb", | |
| (gltf) => { | |
| const model = gltf.scene; | |
| const scale = 5; | |
| model.scale.set( scale, scale, scale ); | |
| model.rotation.y = Math.PI / 2; | |
| model.position.set(2.5, -5.2, -0.8); | |
| scene.add(model); | |
| PravdaTV(scene, OfficePaintings, OfficeFrames); | |
| resolve(model); | |
| }, | |
| undefined, | |
| (error) => reject(error) | |
| ); | |
| }), | |
| new Promise((resolve, reject) => { | |
| new GLTFLoader().load( | |
| "https://thepiratecircus.com/Woodstock/City17/iKitty.glb", | |
| (gltf) => { | |
| const model = gltf.scene; | |
| model.position.set(0, 0, 0); | |
| model.rotation.y = Math.PI / 2 + Math.PI/4; | |
| scene.add(model); | |
| resolve(model); | |
| }, | |
| undefined, | |
| (error) => reject(error) | |
| ); | |
| }) | |
| ]).then(([iOffice, iKitty]) => { | |
| rabbit_hole("🐇").then(() => { | |
| let model, scale; | |
| model = iKitty.clone(); | |
| scale = 55; | |
| model.rotation.y = 0; | |
| model.scale.set( scale, scale, scale ); | |
| model.position.set(10, 20, 0); | |
| scene.add(model); | |
| model = iOffice.clone(); | |
| scale = 200; | |
| model.scale.set( scale, scale, scale ); | |
| model.position.set(5, -140, 380); | |
| scene.add(model); | |
| // Load Retro PC | |
| (new GLTFLoader()).load( | |
| "https://thepiratecircus.com/Woodstock/City17/i386.glb", | |
| function (gltf) { | |
| let model = gltf.scene; | |
| const scale = 6000; | |
| model.scale.set( scale, scale, scale ); | |
| model.position.set(-500, -6666, -900) | |
| scene.add(model); | |
| }); | |
| }) | |
| }).catch((error) => { | |
| console.error("Loading failed:", error); | |
| }); | |
| function OpenTELEPORT() { | |
| let demo; | |
| let callback; | |
| if (ELEVENLABS_CONVERSATION_ID) { | |
| // === Black Box Magic === | |
| // 法语: l’URL de base est injectée par Liquid lors du rendu | |
| // 中文: 基础 URL 在 Liquid 渲染时注入 | |
| let black_box = "{{ markdown.yaml.BlackBOX | default: 'https://moses.lamourism.com/%D0%A1%D1%83%D0%BD%D0%B4%D1%83%D0%BA-%D0%A1%D0%BE%D0%BA%D1%80%D0%BE%D0%B2%D0%B8%D1%89/' }}"; | |
| // 法语: sécurité: s’assurer du "/" final | 中文: 保险起见,确保末尾有 "/" | |
| if (black_box && !black_box.endsWith('/')) black_box += '/'; | |
| // 法语: suffixe/clé métier que tu détermines côté JS | 中文: 由 JS 决定的后缀/业务键 | |
| let XXX = ELEVENLABS_CONVERSATION_ID; | |
| // 法语: URL finale pour la ressource (non encodée) | 中文: 最终资源 URL(未编码) | |
| let blackbox_item = black_box + XXX + ".mp3"; | |
| demo = "{{ markdown.yaml.Next }}"; | |
| demo = `${demo}?jukebox=${encodeURIComponent(blackbox_item)}` | |
| // IEL: Add Static Portal in Between | |
| // 法语: callback complet — on encode seulement blackbox_item côté JS | 中文: 完整回调,仅对 blackbox_item 在 JS 侧编码 | |
| callback = `https://diana.lamourism.com/?debug=${demo}&sleep=30111`; | |
| } else { | |
| // Something doesn't work... But you got the idea. | |
| demo = "{{ markdown.yaml.Next }}"; | |
| callback = `https://love.lamourism.com/?debug=${demo}`; | |
| } | |
| window.location.href = callback; | |
| } | |
| function CheckTELEPORT() { | |
| const x = camera.position.x, | |
| y = camera.position.y, | |
| z = camera.position.z; | |
| // 法语: vérifier si chaque coordonnée est dans [0,1000] | |
| // 中文: 检查每个坐标是否在 [0,1000] 范围内 | |
| const inRange = (x >= -500 && x <= 666) && | |
| (y >= -999 && y <= 555) && | |
| (z >= -666 && z <= 999); | |
| if (!inRange) { | |
| // Let's go a little bit deeper this time. | |
| OpenTELEPORT() | |
| } | |
| } | |
| let prevCameraPosition = new THREE.Vector3(); | |
| let cameraStopped = true; | |
| function checkCameraMovement() { | |
| // Check if the current camera position is the same as the previous one | |
| if (camera.position.equals(prevCameraPosition)) { | |
| if (cameraStopped) | |
| return; | |
| cameraStopped = true; | |
| CheckTELEPORT(); | |
| console.log("XYZ", camera.position, camera.rotation); | |
| } else { | |
| // Update the previous camera position | |
| prevCameraPosition.copy(camera.position); | |
| cameraStopped = false; | |
| } | |
| } | |
| // Start animation | |
| const FLOOR_IS_LAVA = -111999; | |
| function animate() { | |
| requestAnimationFrame(animate); | |
| if (camera.position.y < FLOOR_IS_LAVA) { | |
| camera.position.y = FLOOR_IS_LAVA; | |
| } | |
| checkCameraMovement(); | |
| renderer.render(scene, camera); | |
| } | |
| animate(); | |
| } | |
| document.addEventListener("DOMContentLoaded", gogogo); | |
| </script> | |
| <script> | |
| console.pray(` | |
| {{ markdown.RAW | replace: "`", "\`" }} | |
| `); | |
| </script> | |
| </div> | |
| <elevenlabs-convai | |
| agent-id="agent_6501k62rb36yfrsrc7rqahq19q4p" | |
| {% if markdown.yaml.AI_WELCOME_MESSAGE %} | |
| override-first-message="{{ markdown.yaml.AI_WELCOME_MESSAGE | escape }}" | |
| override-prompt="{{ markdown.TEXT | escape }}" | |
| {% endif %} | |
| {% if markdown.yaml.AI_VOICE_ID %} | |
| override-voice-id="{{ markdown.yaml.AI_VOICE_ID }}" | |
| {% endif %} | |
| ></elevenlabs-convai> | |
| <script src="https://unpkg.com/@elevenlabs/convai-widget-embed" async type="text/javascript"></script> | |
| </body> | |
| </html> |
| Title | English! Do you you speak it??? |
|---|---|
| Author | Ivan Yelizariev |
| UHDTV | https://weloveiran.net/%D0%96%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D0%9A%D0%9E%D0%A0%D0%95%D0%AF/English.mp4 |
| PORTAL | https://gist.odooism.com/yelizariev/e632899fab332cf7a1b9a0c313999ce6/xxx/¡freedom.html |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
| <title>{{ markdown.yaml.Title }}</title> | |
| <link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/> | |
| <link rel="icon" type="image/x-icon" href="https://bucha.lamourism.com/assets/favicon.ico" /> | |
| <link rel="apple-touch-icon" sizes="180x180" href="https://bucha.lamourism.com/assets/apple-touch-icon.png"> | |
| <link rel="icon" type="image/png" sizes="32x32" href="https://bucha.lamourism.com/assets/favicon-32x32.png"> | |
| <link rel="icon" type="image/png" sizes="16x16" href="https://bucha.lamourism.com/assets/favicon-16x16.png"> | |
| <meta property="og:title" content="Whatever you think it is, it's not" /> | |
| <meta property="og:image" content="https://gist.github.com/user-attachments/assets/c64786b8-a32f-4dde-ab08-26cd9fad963a"> | |
| <meta property="og:image:type" content="image/png"> | |
| <link rel="stylesheet" href="https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Eva.css" /> | |
| <script type="importmap"> | |
| { | |
| "imports": { | |
| "magic": "https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/v19/Adam.js", | |
| "three": "https://unpkg.com/three@0.163.0/build/three.module.js", | |
| "three/addons/": "https://unpkg.com/three@0.163.0/examples/jsm/" | |
| } | |
| } | |
| </script> | |
| </head><!-- | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢲⣾⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠆ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠏ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⣿⠃ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠼⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢳⢰⡇ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣢⢹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⣏⠲⣹⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣄⣤⡴⠖⠃ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠜⢧⢣⠎⠷⣄⠀⠀⠀⠀⠀⠀⠀⢧⢣⡙⢧⡀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠛⣭⠶⠛⠉ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡽⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣎⢣⠺⡽⣆⠀⠀⠀⠀⠀⢸⠇⡜⡩⣷⠀⠀⠀⠀⠀⠀⣴⢇⣺⡏⠁ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⡘⢳⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡷⡑⢦⣿⠀⠀⠀⠀⡴⡫⠜⡰⣧⠏⠀⠀⠀⠀⠀⢸⢋⠦⣽⠁ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⣿⣶⢨⡍⠛⠛⢻⣦⡄⠀⠀⠀⠀⣿⢣⠑⣦⠘⣦⠀⠀⣼⢱⠉⡎⣵⡏⠀⠀⠀⠀⠀⢠⣾⠉⡖⣿ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠶⢭⣜⣢⢃⠏⠻⣄⠀⠀⠀⣿⠎⡑⢆⠣⢍⠟⡭⠓⡌⠳⡘⢤⠳⣄⣀⢠⡴⢾⠛⠭⣘⣴⡏ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠱⣧⢊⡵⢊⠷⡴⣺⠹⢌⣙⣬⠵⠮⠖⠛⠛⠚⠓⠧⠮⣖⣩⢩⣉⢆⠧⣙⣲⡾⠋⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣄⣀ | |
| ⠀⠀⠀⢢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⣌⢲⠩⡜⢡⢆⡷⠋⠁⠀⠀⢀⣀⡤⡤⠤⣄⣀⠀⠀⠉⠙⠲⣎⡲⢱⣏⠀⠀⠀⠀⠀⠀⠀⣰⣞⢫⣳⡬⠖⠒⠚⠛⠛⠒ | |
| ⠀⠀⠀⠀⠙⣿⣦⡀⠀⠀⠀⠀⣀⣠⣀⣄⣀⠀⠀⠀⠀⣿⠆⣇⠣⣥⠞⠀⢀⣠⢴⠺⢹⣈⠒⡍⡚⣌⡺⢩⠳⠦⣄⠀⠈⠱⢧⢊⠷⣠⣤⢴⠤⡤⢾⡑⢬⣶⠏ | |
| ⠀⠀⠀⠀⠀⠘⢶⣭⣓⠶⠶⠿⠿⣋⠼⡑⣊⠗⣦⣤⠞⢣⠚⣴⠋⠁⣠⡔⡏⢎⢆⡣⠗⠒⠛⠚⠋⠉⠙⠧⣏⡜⣈⠳⡄⠀⠈⢳⡘⠴⡠⢎⡒⢥⢒⣬⠟⠃ | |
| ⠀⠀⠀⠀⠀⠀⠀⠉⠓⠿⠬⠧⠶⠭⠶⣗⢍⡚⠴⣨⠙⡆⣿⠃⠀⣰⢋⠴⣩⠞⠁⠀⣠⣤⡤⠴⡴⣤⣄⡀⠈⠙⢆⡝⢜⢦⠀⠀⢻⡢⡑⣮⠼⠖⠛⠁ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢽⣣⠜⡱⠰⡿⠀⠀⡏⡎⢼⡏⠀⢀⡾⢃⣶⠾⠷⢦⣑⠦⡙⣷⡀⠈⣏⡜⡸⣧⠀⠀⢷⣹⡇ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣇⠱⢳⡇⠀⢸⠧⣙⢼⡇⠀⢸⢳⣹⠃⠀⢀⠀⠈⢳⡜⣸⡇⠀⢸⡜⡡⢻⡄⠀⢸⢫⢓⡦⣤⡀⠀⠀⠀⢀⣀⣀⣤⣀ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⢤⢤⣤⡞⢣⢍⢻⡇⠀⢸⡆⢡⢺⡇⠀⢸⡇⡜⢦⣤⣾⡇⠀⠀⣟⢼⡇⠀⢸⡧⡑⣻⡇⠀⣸⢃⠎⡴⢡⢛⠳⡶⡿⢟⡩⢩⣱⣎⡻⣦⣄ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡞⢥⠱⣈⠖⣢⠜⡥⢊⢼⡇⠀⠈⣇⢣⠎⣧⠀⠀⠻⣞⣰⣍⡿⠏⠀⢠⣟⣾⡇⠀⢸⠇⡥⣿⠀⠀⡏⣎⣼⣐⣣⠎⡱⣑⣴⡺⠞⠏⠉⠈⠉⠳⢭⣦⡀ | |
| ⠐⠒⠲⢴⣦⣤⣄⣀⣠⣴⠛⡥⢋⣶⠕⠷⢮⣴⣭⣴⡋⠼⣷⡀⠀⠙⣧⡙⢸⢧⣀⣀⠀⠀⠀⠀⣠⡴⠯⣱⡞⠀⢀⡾⣱⣸⠃⠀⣸⣙⣼⠁⠀⠈⠙⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒ | |
| ⠀⠀⠀⠀⠈⠙⠿⠯⣭⣦⠽⠞⠋⠀⠀⠀⠀⠀⠀⠈⢿⡖⢤⠻⣦⡀⠈⠻⣆⠦⣩⢉⡍⢫⡝⣩⠱⣘⡵⠋⠀⢠⡞⡱⣱⠏⠀⢀⡷⠌⣷⡀ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⡘⢤⠓⡬⡕⢤⡀⠈⠙⠒⠧⠮⠥⠼⠴⠛⠉⠀⣠⠴⣫⠰⣣⠏⠀⢀⣾⡱⣉⠼⡹⣆ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡞⢫⠱⢨⡑⢎⡑⢦⠙⣌⠻⠶⣤⣄⣀⣠⣄⣀⣠⡤⠶⡛⢭⠚⣀⡷⠋⠀⣠⡿⠿⠶⣥⢢⠑⣌⠻⡖⠶⢶⢤⣀ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡟⡌⢣⣓⡦⠾⠞⠋⠙⢷⣌⢣⠓⡔⢢⠆⡱⢘⣦⣽⣴⣥⢷⠼⠛⠉⠀⣠⢾⣯⠀⠀⠀⠈⠳⣽⣢⢵⣼⣑⣮⣘⣭⣷⡄ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⢢⡙⡼⠉⠀⠀⠀⠀⠀⢀⡿⣄⢋⡔⢃⣎⣥⠿⣥⣀⠀⠀⠀⠀⠀⠀⡞⢭⠡⢾⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠈⠉⠙⣾⣻⡆ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡞⣩⢣⡾⠃⠀⠀⠀⠀⠀⢠⡟⢣⠜⣢⣼⠟⠉⠘⡧⢡⢋⢻⣆⠀⠀⠀⠀⣿⣄⠳⡸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⢿⣯⡄ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣿⡿⣟⢧⣛⡤⠟⠀⠀⠀⠀⠀⠀⠀⣿⢸⢃⢼⡼⠃⠀⠀⢠⡇⠇⡼⣸⡟⠀⠀⠀⠀⢻⣿⡄⢣⢛⢧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇ | |
| ⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⡡⢎⣾⠀⠀⠀⠀⢸⣏⠲⡹⣿⠁⠀⠀⠀⠀⠀⠑⠾⣧⡈⢦⠹⣳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠂ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣇⠎⣾⠄⠀⠀⠀⠠⠻⣖⠡⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⣧⣘⣯ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣏⣾⡟⠀⠀⠀⠀⠀⠀⠹⣎⡕⢺⡧⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣟⣿⠄ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠶⣿⡮⠊⠀⠀⠀⠀⠀⠀⠀⠀⠘⣧⣻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡿ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠧ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿ | |
| ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠋ | |
| --><body> | |
| <script> | |
| // y=0 is the table surface | |
| // x=0, z=0 is the table portal | |
| const ANGELS = [{ | |
| "position": [0, 2, -3], | |
| "target": [0, 0.95, 0], | |
| }]; | |
| console.pray = function (text) { | |
| const lines = text.split('\n'); // разбиваем текст на строки | |
| let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах) | |
| lines.forEach((line, index) => { | |
| const wordCount = line.trim().split(/\s+/).length; | |
| setTimeout(() => { | |
| console.log(line); | |
| }, delay); | |
| delay += wordCount * 100; // добавляем задержку для следующей строки | |
| }); | |
| }; | |
| </script> | |
| <div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;"> | |
| <!-- iPad --> | |
| <video id="exodus" loop crossOrigin="anonymous" playsinline style="display:none"> | |
| <source id="bible" src="{{ markdown.yaml.Kino }}" type="video/mp4"> | |
| </video> | |
| <!-- Paintings --> | |
| <img id="banner" style="display:none" crossorigin="anonymous"/> | |
| <script type="module"> | |
| import * as THREE from 'three'; | |
| import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; | |
| import {ShabbatTV, PravdaTV, AngelTV} from "magic"; | |
| import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; | |
| // init | |
| const urlParams = new URLSearchParams(window.location.search); | |
| const BACKGROUND_COLOR = 0x748694; | |
| // Create a scene | |
| const scene = new THREE.Scene(); | |
| // Create a camera | |
| const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 100333); | |
| // Create a renderer | |
| const renderer = new THREE.WebGLRenderer(); | |
| renderer.setSize(window.innerWidth, window.innerHeight); | |
| document.body.appendChild(renderer.domElement); | |
| // Create controls | |
| const controls = new OrbitControls( camera, renderer.domElement ); | |
| // TODO: PravdaTV | |
| const Banner = [ | |
| "{{ markdown.yaml.Image }}", | |
| ]; | |
| const BannerFrames = [{ | |
| "img_id": "banner", | |
| "width": 20, | |
| "height": 10, | |
| "position": [850, 100, 330], | |
| "rotation": [0, Math.PI, 0], | |
| "material": function(texture){ | |
| return new THREE.MeshBasicMaterial({ | |
| color: 0xA68D6F, | |
| map: texture, | |
| side: THREE.DoubleSide, | |
| }); | |
| }, | |
| }]; | |
| function gogogo() { | |
| /* And God said, | |
| — Let there be light, | |
| and there was light. God saw that | |
| the light was good, and he separated the light from the | |
| darkness. God called the light 'day' and the darkness he | |
| called 'night'. And there was evening, and there was | |
| morning the first day. | |
| */ | |
| scene.background = new THREE.Color( BACKGROUND_COLOR ); | |
| /* And God said, | |
| — Let there be a vault between the waters to separate water from | |
| water. | |
| So God made the vault and separated the water under the | |
| vault from the water above it. And it was so. God called the | |
| vault 'sky.' And there was evening, and there was morning—the | |
| second day. | |
| */ | |
| const light = new THREE.AmbientLight( 0xFFFFFF ); | |
| scene.add( light ); | |
| // Create a blue skybox | |
| const skyGeometry = new THREE.BoxGeometry(12, 10, 5); | |
| const skyMaterial = new THREE.MeshBasicMaterial({ color: BACKGROUND_COLOR, side: THREE.BackSide }); | |
| const sky = new THREE.Mesh(skyGeometry, skyMaterial); | |
| sky.position.set(0, 1, 0); | |
| scene.add(sky); | |
| /* Then God said, | |
| — Let the land produce vegetation: seed-bearing plants and trees | |
| on the land that bear fruit with seed in it, according to their | |
| various kinds.” | |
| And it was so. The land produced vegetation: plants bearing seed | |
| according to their kinds and trees bearing fruit with seed in it | |
| according to their kinds. | |
| And God saw that it was good. And there was evening, and there | |
| was morning—the third day. | |
| */ | |
| let alice = urlParams.get("debug"); | |
| if (alice) { | |
| alice = parseInt(alice) % ANGELS.length || 0; | |
| } else { | |
| alice = parseInt(ANGELS.length * Math.random()); | |
| } | |
| AngelTV(ANGELS, alice, camera, controls); | |
| // 法语: Crée une série de clones “matriochkas” à partir d’un modèle déjà chargé | |
| // 中文: 从已加载模型克隆出多层“套娃”效果 | |
| function matrioska({ | |
| model, // 法语: le modèle THREE.Object3D déjà chargé | 中文: 已加载的 THREE.Object3D 模型 | |
| items, // ex: [1, 0.8, 0.6] // 法语: facteurs d’échelle | 中文: 缩放因子数组 | |
| center, // THREE.Vector3 ou {x,y,z} // 法语: point de référence | 中文: 参考中心点 | |
| baseScale = 1.0, // 法语: facteur de base du modèle | 中文: 模型基础缩放 | |
| basePosition = new THREE.Vector3(0,0,0), // 法语: position initiale | 中文: 初始位置 | |
| parent = null // 法语: parent cible (scene ou group) | 中文: 父级目标(如scene或Group) | |
| }) { | |
| const clones = []; | |
| const C = center.isVector3 ? center.clone() : new THREE.Vector3(center.x, center.y, center.z); | |
| items.forEach((s) => { | |
| // 法语: clone profond de la hiérarchie | 中文: 深度克隆整个层级 | |
| const clone = model.clone(true); | |
| // 法语: échelle finale = baseScale * s | 中文: 最终缩放 = 基础比例 * s | |
| clone.scale.setScalar(baseScale * s); | |
| // 法语: position recalculée autour de C | 中文: 围绕中心C重新计算位置 | |
| const shifted = new THREE.Vector3().copy(basePosition).sub(C).multiplyScalar(s).add(C); | |
| clone.position.copy(shifted); | |
| (parent || scene).add(clone); // 法语: ajouter à la scène si pas de parent | 中文: 若无父级则添加到场景 | |
| clones.push(clone); | |
| }); | |
| return clones; | |
| }; | |
| function rabbit_hole(alice){ | |
| return new Promise((resolve, reject) => { | |
| let happy = false; | |
| document.addEventListener("click", function(){ | |
| if (happy) { | |
| return; | |
| } | |
| const audio = document.getElementById("music"); | |
| audio.play().catch(err => console.log("Autoplay blocked:", err)); | |
| //PravdaTV(scene, Banner, BannerFrames); | |
| ShabbatTV(scene, { | |
| "video_id": "exodus", | |
| "source_id": "bible", | |
| "start": parseFloat("{{ markdown.yaml.KinoStart | default: 0 }}"), | |
| "width": 0.77, | |
| "height": 0.51, | |
| "position": [0.245, 0.695, -0.3], | |
| "rotation_order": "YXZ", | |
| "rotation": [0,Math.PI,0], | |
| "material": function(texture){ | |
| return new THREE.MeshBasicMaterial({ | |
| color: 0xece6ff, | |
| map: texture, | |
| side: THREE.DoubleSide, | |
| }); | |
| }, | |
| }); | |
| happy = true; | |
| Promise.all([ | |
| (new GLTFLoader()).load( | |
| "https://thepiratecircus.com/Woodstock/City17/iSuitCaseRadiation.glb", | |
| (gltf) => { | |
| const model = gltf.scene; | |
| const scale = 15; | |
| //model.rotation.y = 1.8; | |
| model.scale.set( scale, scale, scale ); | |
| model.rotation.y = Math.PI/2; | |
| model.position.set(0, 3, 0); | |
| scene.add(model); | |
| }, | |
| undefined, | |
| (error) => reject(error) | |
| ), | |
| (new GLTFLoader()).load( | |
| "https://thepiratecircus.com/Woodstock/City17/iSuitCase.glb", | |
| (gltf) => { | |
| const model = gltf.scene; | |
| const scale = 30; | |
| model.scale.set( scale, scale, scale ); | |
| model.rotation.y = Math.PI/2; | |
| model.position.set(0, 3, 0); | |
| scene.add(model); | |
| }, | |
| undefined, | |
| (error) => reject(error) | |
| ), | |
| (new GLTFLoader()).load( | |
| "https://thepiratecircus.com/Woodstock/City17/iLuggage.glb", | |
| (gltf) => { | |
| const model = gltf.scene; | |
| const scale = 22; | |
| model.scale.set( scale, scale, scale ); | |
| model.rotation.y = Math.PI/2; | |
| model.position.set(0, -20, 0); | |
| scene.add(model); | |
| }, | |
| undefined, | |
| (error) => reject(error) | |
| ), | |
| ]).then(function(){ | |
| resolve(); | |
| // load Matrioska at the last momemnt | |
| (new GLTFLoader()).load( | |
| "https://thepiratecircus.com/Woodstock/City17/iMatrioska.glb", | |
| (gltf) => { | |
| // 法语: supposons que “originalModel” est déjà chargé et ajouté | 中文: 假设 originalModel 已经加载好 | |
| const model = gltf.scene; | |
| model.rotation.y = 1.8; | |
| const clones = matrioska({ | |
| model: model, | |
| baseScale: 0.05, | |
| items: [0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.08], | |
| center: new THREE.Vector3(0, 1, 0), | |
| basePosition: new THREE.Vector3(0, 0.3, 0), | |
| parent: scene | |
| }); | |
| }, | |
| undefined, | |
| (error) => reject(error) | |
| ); | |
| }); | |
| }); // The Click Handler | |
| }) | |
| }; // ...rabbit_hole | |
| // Load the iTerminal and the iAirPods first | |
| Promise.all([ | |
| new Promise((resolve, reject) => { | |
| new GLTFLoader().load( | |
| "https://thepiratecircus.com/Woodstock/City17/iTerminal.glb", | |
| (gltf) => { | |
| resolve(gltf.scene); | |
| }, | |
| undefined, | |
| (error) => reject(error) | |
| ); | |
| }), | |
| new Promise((resolve, reject) => { | |
| new GLTFLoader().load( | |
| "https://thepiratecircus.com/Woodstock/City17/iAirPods.glb", | |
| (gltf) => { | |
| resolve(gltf.scene); | |
| }, | |
| undefined, | |
| (error) => reject(error) | |
| ); | |
| }) | |
| ]).then(([iTerminal, iAirPods]) => { | |
| // iTerminal | |
| const model = iTerminal | |
| const scale = 1; | |
| model.scale.set( scale, scale, scale ); | |
| model.rotation.y = Math.PI; | |
| model.position.set(0.1, 0, 0); | |
| scene.add(model); | |
| rabbit_hole("🐇").then(() => { | |
| const model = iAirPods; | |
| const scale = 50; | |
| model.rotation.y = 0.5; | |
| model.scale.set( scale, scale, scale ); | |
| model.position.set(550, -25, -460); | |
| scene.add(model); | |
| console.log("¡Welcome!"); | |
| }); | |
| }).catch((error) => { | |
| console.error("Loading failed:", error); | |
| }); | |
| /* Track camera moves | |
| {% assign escaped_param = markdown.yaml.Next | url_encode %} | |
| {% assign callback = "https://matrix.mydream42.com/?debug=" | append: escaped_param %} | |
| */ | |
| const callback = "{{ callback }}"; | |
| function CheckTELEPORT() { | |
| const x = camera.position.x, y = camera.position.y, z = camera.position.z | |
| if (x*x + y*y + z*z > 10777000) { | |
| console.log("go-go-go"); | |
| window.location.href = callback; | |
| } | |
| } | |
| let prevCameraPosition = new THREE.Vector3(); | |
| let cameraStopped = true; | |
| function checkCameraMovement() { | |
| // Check if the current camera position is the same as the previous one | |
| if (camera.position.equals(prevCameraPosition)) { | |
| if (cameraStopped) | |
| return; | |
| cameraStopped = true; | |
| if (callback) { | |
| CheckTELEPORT(); | |
| } | |
| console.log("XYZ", camera.position, camera.rotation); | |
| } else { | |
| // Update the previous camera position | |
| prevCameraPosition.copy(camera.position); | |
| cameraStopped = false; | |
| } | |
| } | |
| // Start animation | |
| const FLOOR_IS_LAVA = -20; | |
| function animate() { | |
| requestAnimationFrame(animate); | |
| if (camera.position.y < FLOOR_IS_LAVA) { | |
| camera.position.y = FLOOR_IS_LAVA; | |
| } | |
| checkCameraMovement(); | |
| renderer.render(scene, camera); | |
| } | |
| animate(); | |
| } | |
| document.addEventListener("DOMContentLoaded", gogogo); | |
| </script> | |
| <audio id="music" autoplay loop crossorigin="anonymous" style="display:none"> | |
| <source src="https://moses.lamourism.com/radio/mishary-rashid-alafasy-126-muslimcentral.com.mp3" type="audio/mpeg"> | |
| </audio> | |
| <script> | |
| const audio = document.getElementById("music"); | |
| // When metadata is ready, set a random start | |
| audio.addEventListener("loadedmetadata", () => { | |
| const duration = audio.duration; // in seconds | |
| // If browser can't read duration (e.g. live streams), fallback to 3600s (1h) | |
| const length = isFinite(duration) ? duration : 3600; | |
| audio.currentTime = Math.random() * length; | |
| audio.volume = 0.6; | |
| }); | |
| console.pray(` | |
| {{ markdown.RAW | replace: "`", "\`" }} | |
| `); | |
| </script> | |
| </div> | |
| </body> | |
| </html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
| <title>{{ markdown.yaml.Title }}</title> | |
| <link rel="icon" type="image/png" href="{{ markdown.yaml.Icon | default: 'https://jesus.lamourism.com/favicon.ico' }}"/> | |
| <meta property="og:title" content="Whatever you think it is, it's not" /> | |
| <meta property="og:image" content="https://gist.github.com/user-attachments/assets/c64786b8-a32f-4dde-ab08-26cd9fad963a"> | |
| <meta property="og:image:type" content="image/png"> | |
| <script src="https://amsterdam.mydream42.com/yelizariev/0a92d9448b5ffa7e39929d7548056464/❌❌❌/qrcode.js"></script> | |
| <style> | |
| html, body { height: 100%; } | |
| body{ | |
| margin:0; | |
| overflow:hidden; | |
| background:#000; | |
| color:#fff; | |
| cursor:pointer; | |
| font-family: system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif; | |
| } | |
| /* Background canvas (shader) */ | |
| canvas{ | |
| width:100%; | |
| height:auto; | |
| user-select:none; | |
| display:block; | |
| } | |
| /* Image overlay layer */ | |
| #overlay{ | |
| position:fixed; | |
| inset:0; | |
| pointer-events:none; | |
| z-index:10; | |
| } | |
| .slide{ | |
| position:absolute; | |
| left:50%; | |
| top:50%; | |
| transform: translate(-50%, -50%) scale(0.05); | |
| opacity:0; | |
| transform-origin:50% 50%; | |
| filter: drop-shadow(0 20px 60px rgba(0,0,0,0.45)); | |
| will-change: transform, opacity; | |
| max-width: 80vw; | |
| max-height: 80vh; | |
| padding: 3px; | |
| background-color: white; | |
| } | |
| .play{ | |
| animation: popInHold 9s ease-in-out forwards; | |
| } | |
| .slide img { | |
| width: 100%; | |
| height: auto; | |
| max-height: 80vh; | |
| object-fit: contain; | |
| display: block; | |
| } | |
| @keyframes popInHold{ | |
| 0% { opacity:0; transform: translate(-50%, -50%) scale(0.05); } | |
| 12% { opacity:0.95; transform: translate(-50%, -50%) scale(1.00); } | |
| 100% { opacity:0.95; transform: translate(-50%, -50%) scale(1.00); } | |
| } | |
| @media (prefers-reduced-motion: reduce){ | |
| .slide{ animation:none !important; opacity:1; transform: translate(-50%, -50%) scale(1) !important; } | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <!-- Intro audio (kept as in your page) --> | |
| <audio id="music" autoplay loop crossorigin="anonymous" style="display:none"> | |
| <source src="https://moses.lamourism.com/radio/mishary-rashid-alafasy-130-muslimcentral.com.mp3" type="audio/mpeg"> | |
| </audio> | |
| <!-- Overlay where QR image appears --> | |
| <div id="overlay" aria-label="Overlay"></div> | |
| <!-- Shader --> | |
| <script type="x-shader/x-fragment">#version 300 es | |
| precision highp float; | |
| out vec4 O; | |
| uniform float time; | |
| uniform vec2 resolution; | |
| #define FC gl_FragCoord.xy | |
| #define R resolution | |
| #define T time | |
| #define hue(a) (.6+.6*cos(6.3*(a)+vec3(0,83,21))) | |
| float rnd(float a) { | |
| vec2 p=fract(a*vec2(12.9898,78.233)); p+=dot(p,p*345.); | |
| return fract(p.x*p.y); | |
| } | |
| vec3 pattern(vec2 uv) { | |
| vec3 col=vec3(0); | |
| for (float i=.0; i++<20.;) { | |
| float a=rnd(i); | |
| vec2 n=vec2(a,fract(a*34.56)), p=sin(n*(T+7.)+T*.5); | |
| float d=dot(uv-p,uv-p); | |
| col+=.00125/d*hue(dot(uv,uv)+i*.125+T); | |
| } | |
| return col; | |
| } | |
| void main(void) { | |
| vec2 uv=(FC-.5*R)/min(R.x,R.y); | |
| vec3 col=vec3(0); | |
| float s=2.4, | |
| a=atan(uv.x,uv.y), | |
| b=length(uv); | |
| uv=vec2(a*5./6.28318,.05/tan(b)+T); | |
| uv=fract(uv)-.5; | |
| col+=pattern(uv*s); | |
| O=vec4(col,1); | |
| } | |
| </script> | |
| <script> | |
| window.onload = init; | |
| function init() { | |
| let renderer, canvas; | |
| const dpr = Math.max(1, .5 * devicePixelRatio); | |
| const resize = () => { | |
| const { innerWidth: width, innerHeight: height } = window; | |
| canvas.width = width * dpr; | |
| canvas.height = height * dpr; | |
| if (renderer) renderer.updateScale(dpr); | |
| }; | |
| const source = document.querySelector("script[type='x-shader/x-fragment']").textContent; | |
| canvas = document.createElement("canvas"); | |
| document.body.appendChild(canvas); | |
| document.body.style.margin = "0"; | |
| document.body.style.touchAction = "none"; | |
| document.body.style.overflow = "hidden"; | |
| renderer = new Renderer(canvas, dpr); | |
| renderer.setup(); | |
| renderer.init(); | |
| resize(); | |
| if (renderer.test(source) === null) renderer.updateShader(source); | |
| window.onresize = resize; | |
| const loop = (now) => { | |
| renderer.render(now); | |
| requestAnimationFrame(loop); | |
| }; | |
| loop(0); | |
| } | |
| class Renderer { | |
| #vertexSrc = "#version 300 es\nprecision highp float;\nin vec4 position;\nvoid main(){gl_Position=position;}"; | |
| #fragmtSrc = "#version 300 es\nprecision highp float;\nout vec4 O;\nuniform float time;\nuniform vec2 resolution;\nvoid main(){vec2 uv=gl_FragCoord.xy/resolution;O=vec4(uv,sin(time)*.5+.5,1);}"; | |
| #vertices = [-1, 1, -1, -1, 1, 1, 1, -1]; | |
| constructor(canvas, scale) { | |
| this.canvas = canvas; | |
| this.scale = scale; | |
| this.gl = canvas.getContext("webgl2"); | |
| this.gl.viewport(0, 0, canvas.width * scale, canvas.height * scale); | |
| this.shaderSource = this.#fragmtSrc; | |
| } | |
| updateScale(scale) { | |
| this.scale = scale; | |
| this.gl.viewport(0, 0, this.canvas.width * scale, this.canvas.height * scale); | |
| } | |
| compile(shader, source) { | |
| const gl = this.gl; | |
| gl.shaderSource(shader, source); | |
| gl.compileShader(shader); | |
| if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { | |
| console.error(gl.getShaderInfoLog(shader)); | |
| } | |
| } | |
| test(source) { | |
| let result = null; | |
| const gl = this.gl; | |
| const shader = gl.createShader(gl.FRAGMENT_SHADER); | |
| gl.shaderSource(shader, source); | |
| gl.compileShader(shader); | |
| if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) result = gl.getShaderInfoLog(shader); | |
| if (gl.getShaderParameter(shader, gl.DELETE_STATUS)) gl.deleteShader(shader); | |
| return result; | |
| } | |
| reset() { | |
| const { gl, program, vs, fs } = this; | |
| if (!program || gl.getProgramParameter(program, gl.DELETE_STATUS)) return; | |
| if (!gl.getShaderParameter(vs, gl.DELETE_STATUS)) { gl.detachShader(program, vs); gl.deleteShader(vs); } | |
| if (!gl.getShaderParameter(fs, gl.DELETE_STATUS)) { gl.detachShader(program, fs); gl.deleteShader(fs); } | |
| gl.deleteProgram(program); | |
| } | |
| updateShader(source) { | |
| this.reset(); | |
| this.shaderSource = source; | |
| this.setup(); | |
| this.init(); | |
| } | |
| setup() { | |
| const gl = this.gl; | |
| this.vs = gl.createShader(gl.VERTEX_SHADER); | |
| this.fs = gl.createShader(gl.FRAGMENT_SHADER); | |
| this.compile(this.vs, this.#vertexSrc); | |
| this.compile(this.fs, this.shaderSource); | |
| this.program = gl.createProgram(); | |
| gl.attachShader(this.program, this.vs); | |
| gl.attachShader(this.program, this.fs); | |
| gl.linkProgram(this.program); | |
| if (!gl.getProgramParameter(this.program, gl.LINK_STATUS)) { | |
| console.error(gl.getProgramInfoLog(this.program)); | |
| } | |
| } | |
| init() { | |
| const { gl, program } = this; | |
| this.buffer = gl.createBuffer(); | |
| gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer); | |
| gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(this.#vertices), gl.STATIC_DRAW); | |
| const position = gl.getAttribLocation(program, "position"); | |
| gl.enableVertexAttribArray(position); | |
| gl.vertexAttribPointer(position, 2, gl.FLOAT, false, 0, 0); | |
| program.resolution = gl.getUniformLocation(program, "resolution"); | |
| program.time = gl.getUniformLocation(program, "time"); | |
| } | |
| render(now = 0) { | |
| const { gl, program, buffer, canvas } = this; | |
| if (!program || gl.getProgramParameter(program, gl.DELETE_STATUS)) return; | |
| gl.clearColor(0, 0, 0, 1); | |
| gl.clear(gl.COLOR_BUFFER_BIT); | |
| gl.useProgram(program); | |
| gl.bindBuffer(gl.ARRAY_BUFFER, buffer); | |
| gl.uniform2f(program.resolution, canvas.width, canvas.height); | |
| gl.uniform1f(program.time, now * 1e-3); | |
| gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); | |
| } | |
| } | |
| </script> | |
| <script> | |
| // 中文 ✨ 祈祷打印:按词数延迟输出 | |
| // ✨ FR : Impression “prière” avec temporisation proportionnelle | |
| console.pray = function (text) { | |
| const lines = String(text || "").split("\n"); | |
| let delay = 500; | |
| lines.forEach((line) => { | |
| const wc = line.trim() ? line.trim().split(/\s+/).length : 0; | |
| setTimeout(() => console.log(line), delay); | |
| delay += Math.max(1, wc) * 100; | |
| }); | |
| }; | |
| const urlParams = new URLSearchParams(window.location.search); | |
| const witch = urlParams.get("debug") || "{{ markdown.yaml.Next }}"; | |
| function next() { | |
| window.location.href = witch; | |
| } | |
| function showQR() { | |
| const overlay = document.getElementById("overlay"); | |
| overlay.innerHTML = ""; | |
| const qr = document.createElement("div"); | |
| qr.className = "slide"; | |
| new QRCode(qr, { | |
| text: "{{ markdown.yaml.QR | default: 'https://china.mydream42.com/yelizariev/f0e89c48583ab94cb751aa1b36eaf509/XXX/TODO.markdown/?debug=' }}" + witch, | |
| width: 1000, | |
| height: 1000, | |
| colorDark : "#000000", | |
| colorLight : "#ffffff", | |
| correctLevel : QRCode.CorrectLevel.M // L/M/Q/H | |
| }); | |
| setTimeout(function(){ | |
| qr.className = "slide play"; | |
| overlay.appendChild(qr); | |
| }, 1000); | |
| } | |
| showQR();; | |
| setTimeout(function(){ | |
| console.pray(`{{ markdown.RAW | replace: "`", "\`" }}`); | |
| }, 2000); | |
| const startTime = Date.now(); | |
| let happy = false; | |
| document.addEventListener("click", function () { | |
| if (happy) return; | |
| happy = true; | |
| const audio = document.getElementById("music"); | |
| audio.play().catch(() => {}); // user gesture enables audio | |
| const TOTAL_DURATION = 12000; | |
| const elapsed = Date.now() - startTime; | |
| let remaining = TOTAL_DURATION - elapsed; | |
| if (remaining < 0) { | |
| remaining = 0; | |
| } | |
| setTimeout(next, remaining); | |
| }, { once: true }); | |
| </script> | |
| </body> | |
| </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment



