]> git.cworth.org Git - zombocom-ai/blob - index.html
Hide image-generation form while generation is happening
[zombocom-ai] / index.html
1 <!DOCTYPE html>
2 <html>
3
4 <head>
5   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
6   <title>ZOMBO</title>
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">
11 </head>
12
13 <body>
14   <div id="content">
15
16     <div id="header" align="center">
17       <p>
18         <br>
19       </p>
20
21       <p>
22         <img src="/zombocom.png" alt="Zombocom" longdesc="http://zombo.com" width="1199" height="217">
23       </p>
24     </div>
25
26     <p>
27       Welcome to Zombocom. You can do anything at Zombocom, anything at
28       all. The only limit is yourself!
29     </p>
30
31     <p>
32       <form action="" id="zombo-form">
33         <div class="form-row large">
34           <label for="prompt">
35             What can you imagine?
36           </label>
37           <button id="safety" type="button">Safety prompt</button>
38           <textarea id="prompt" rows="4" width="100%" autocomplete="off" required></textarea>
39         </div>
40
41         <div class="form-row small left">
42           <div class="labeled-row">
43             <label for="code">
44               Numeric code:
45             </label>
46             <input id="code" type="text" autocomplete="off" placeholder="(Leave blank for random)" />
47           </div>
48         </div>
49
50         <div class="form-row large">
51           <button id="generate" type="submit">Make the infinite possible</button>
52         </div>
53       </form>
54     </p>
55
56     <div id="images">
57     </div>
58
59     <ul id="comments">
60     </ul>
61
62     <p>
63       <form action="" id="comment-form">
64         <input id="comment" type="text" style="width:100%" autocomplete="off" placeholder="Add a comment" />
65       </form>
66     </p>
67
68     <div align="center">
69       <div class="animate-flicker">
70         <p>
71           <img src="/pngwheel.png" class="rotate thefade">
72         </p>
73       </div>
74     </div>
75
76     <audio loop="" src="/zombo_words.mp3" type="audio/mpeg"></audio>
77     <button id="mute" class="fade volume">
78       <div>🔊</div>
79       <script>
80 const mute = document.querySelector("#mute");
81 const icon = document.querySelector("#mute > div");
82 const audio = document.querySelector("audio");
83
84 mute.addEventListener("click", () => {
85   if (audio.paused) {
86       audio.volume = 0.2;
87       audio.play();
88       icon.innerHTML = "🔈";
89   } else {
90       audio.pause();
91       icon.innerHTML = "🔊";
92   }
93   mute.classList.add("fade");
94 });
95       </script>
96
97     </button>
98
99   </div>
100
101   <script src="/socket.io/socket.io.js"></script>
102   <script>
103     var socket = io();
104
105     const images = document.querySelector("#images");
106
107     const comments = document.querySelector("#comments");
108     const comment_form = document.querySelector("#comment-form");
109     const comment = document.querySelector("#comment");
110
111     const zombo_form = document.querySelector("#zombo-form");
112     const prompt = document.querySelector("#prompt");
113     const code = document.querySelector("#code");
114
115     const safety= document.querySelector("#safety");
116
117     comment_form.addEventListener('submit', function(e) {
118         e.preventDefault();
119         if (comment.value) {
120             socket.emit('comment', comment.value);
121             comment.value = '';
122         }
123     });
124
125     socket.on('comment', function(msg) {
126         var item = document.createElement('li');
127         item.textContent = msg;
128         comments.appendChild(item);
129     });
130
131     socket.on('image', (image) => {
132         const figure = document.createElement('figure');
133         const img = document.createElement('img');
134         img.src = image.filename;
135         const figcaption = document.createElement('figcaption');
136         const caption_text = document.createTextNode(`${image.prompt} (${image.code})`);
137         figcaption.appendChild(caption_text);
138         figure.appendChild(img);
139         figure.appendChild(figcaption);
140         images.appendChild(figure);
141     });
142
143     zombo_form.addEventListener('submit', function(e) {
144         e.preventDefault();
145         /* Hide the form while generation is happening. */
146         zombo_form.style.display = "none";
147         socket.emit('generate', {"prompt": prompt.value, "code": code.value});
148         prompt.value = '';
149     });
150
151     socket.on('generation-done', () => {
152         /* Re-display the form now that image-generation is over. */
153         zombo_form.style.display = "grid";
154     });
155
156     // TODO: Dynamically generate many different prompts here
157     safety.addEventListener("click", () => {
158         prompt.value = "Matte painting of a Samurai warrior";
159         return false;
160     });
161
162   </script>
163 </body>
164 </html>