5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <link href="/zombo.css" rel="stylesheet" type="text/css">
8 <meta name="viewport" content="width=device-width,initial-scale=1">
9 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
10 <meta name="HandheldFriendly" content="true">
16 <div id="header" align="center">
22 <img src="/zombocom.png" alt="Zombocom" longdesc="http://zombo.com" width="1199" height="217">
27 Welcome to Zombocom. You can do anything at Zombocom, anything at
28 all. The only limit is yourself!
32 <div id="spinner" align="center">
33 <div class="animate-flicker">
35 <img src="/pngwheel.png" class="rotate thefade">
40 <form action="" id="zombo-form">
41 <div class="form-row large">
45 <button id="safety" type="button">Safety prompt</button>
46 <textarea id="prompt" rows="4" width="100%" autocomplete="off" required></textarea>
49 <div class="form-row small left">
50 <div class="labeled-row">
54 <input id="code" type="text" autocomplete="off" placeholder="(Leave blank for random)" />
58 <div class="form-row large">
59 <button id="generate" type="submit">Make the infinite possible</button>
71 <form action="" id="comment-form">
72 <input id="comment" type="text" style="width:100%" autocomplete="off" placeholder="Add a comment" />
76 <audio loop="" src="/zombo_words.mp3" type="audio/mpeg"></audio>
77 <button id="mute" class="fade volume">
80 const mute = document.querySelector("#mute");
81 const icon = document.querySelector("#mute > div");
82 const audio = document.querySelector("audio");
84 mute.addEventListener("click", () => {
88 icon.innerHTML = "🔈";
91 icon.innerHTML = "🔊";
93 mute.classList.add("fade");
101 <script src="/socket.io/socket.io.js"></script>
105 const images = document.querySelector("#images");
107 const comments = document.querySelector("#comments");
108 const comment_form = document.querySelector("#comment-form");
109 const comment = document.querySelector("#comment");
111 const zombo_form = document.querySelector("#zombo-form");
112 const prompt = document.querySelector("#prompt");
113 const code = document.querySelector("#code");
115 const safety= document.querySelector("#safety");
117 const spinner = document.querySelector("#spinner");
119 comment_form.addEventListener('submit', function(e) {
122 socket.emit('comment', comment.value);
127 socket.on('comment', function(msg) {
128 var item = document.createElement('li');
129 item.textContent = msg;
130 comments.appendChild(item);
133 socket.on('image', (image) => {
134 const figure = document.createElement('figure');
135 const img = document.createElement('img');
136 img.src = image.filename;
137 const figcaption = document.createElement('figcaption');
138 const caption_text = document.createTextNode(`${image.prompt} (${image.code})`);
139 figcaption.appendChild(caption_text);
140 figure.appendChild(img);
141 figure.appendChild(figcaption);
142 images.prepend(figure);
145 zombo_form.addEventListener('submit', function(e) {
147 /* Hide the form and show spinner while generation is happening. */
148 zombo_form.style.display = "none";
149 spinner.style.display = "block";
150 socket.emit('generate', {"prompt": prompt.value, "code": code.value});
154 socket.on('generation-done', () => {
155 /* Re-display the form and hide spinner now that generation is over. */
156 zombo_form.style.display = "grid";
157 spinner.style.display = "none";
160 // TODO: Dynamically generate many different prompts here
161 safety.addEventListener("click", () => {
162 prompt.value = "Matte painting of a Samurai warrior";