##// END OF EJS Templates
Some DOM stuff, VIEW
naryl -
r18:6b72d87e default
parent child Browse files
Show More
@@ -10,10 +10,14 b''
10 <div id="qsp-objs" class="qsp-frame">&nbsp;</div>
10 <div id="qsp-objs" class="qsp-frame">&nbsp;</div>
11 </div>
11 </div>
12 <div class="qsp-col qsp-col3">
12 <div class="qsp-col qsp-col3">
13 <a href="javascript:SugarQSP.lib.savegame()"><img id="qsp-btn-save"></a>
13 <a id="qsp-btn-save"><img></a>
14 <a href="javascript:SugarQSP.lib.opengame()"><img id="qsp-btn-load"></a>
14 <a id="qsp-btn-open"><img></a>
15 </div>
15 </div>
16 </div>
16 </div>
17
17
18 <div id="qsp-dropdown">
18 <div id="qsp-dropdown">
19 </div>
19 </div>
20
21 <div id="qsp-image-container">
22 <img id="qsp-image">
23 </div>
@@ -94,10 +94,21 b''
94 height: 50px;
94 height: 50px;
95 }
95 }
96
96
97 #qsp-btn-save {
97 #qsp-btn-save img {
98 background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAACSklEQVRoge3ZPWgUQRjG8V/iRRFU/GoEQdSohSgWWqQSooVgK9iJFiKCnYV2BkFQsBRBQQwWVsHKIoWxEOzEwmhhogbRMhhFicTvYm+JCUlmZzabRLN/OPaWeZ+ZeW7feXf2lpqampqamnRaImKP4hA2VjCP27hbpoNGwbib2IPreB+IPYY7M7SvxWYM4QNO4QqWyQxVRgdeYnnB+K5A+wUcbB7z+O14hxPx08toLRDTgfv4mjrIJFrwwMS0HsABXMTxlE6LpNYqfE7pPJIBdOKhLM1uxIiLrpG5YtC4GSLMVGGkLdD+GpfxAuvxaVL7oCzN+jCG7iKDVmHkKS5hSSBuJ3bg6hRt+Zrpa553z8bEuoQrUVXk1exwKLBI1ZpPBnAL+0KBqanVim1Ykaifji+yNfIrVphipB1n8BgjCfqZ2IrTuIZXMcIUIydxFj8TtEW4JysW52JEKWtkVHUm4EdzjChSrkgLlmJXghb6m8ep9MN4K25XjvTF3sCaElrT6McS+0w2Mirb+JWhrH4CC/0+UpjUK7Ia5/86f4IeHMHeEvPJ+4km1chHE43k9KROpCyLPrViym8/vjW/b5Jt3acjL7/RzEX5bRg3sjKg+2fK7/PmZ9aZzdTqxwYzp06IBZFaDeHUCbFgUquy1Anx35TfRWXkd+WzCBOcQxEjQ7JH0PmiHW9CQUWM9Mr+Y+osO6ME8nF7Q4FFn8T2y14VDMt2vsFfqCRbZBvTdbLXFI9CgphHyjbsVu4+EcMInuH7HI1XU1NTU7OI+QMFe2N82rtssgAAAABJRU5ErkJggg==');
98 background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAACSklEQVRoge3ZPWgUQRjG8V/iRRFU/GoEQdSohSgWWqQSooVgK9iJFiKCnYV2BkFQsBRBQQwWVsHKIoWxEOzEwmhhogbRMhhFicTvYm+JCUlmZzabRLN/OPaWeZ+ZeW7feXf2lpqampqamnRaImKP4hA2VjCP27hbpoNGwbib2IPreB+IPYY7M7SvxWYM4QNO4QqWyQxVRgdeYnnB+K5A+wUcbB7z+O14hxPx08toLRDTgfv4mjrIJFrwwMS0HsABXMTxlE6LpNYqfE7pPJIBdOKhLM1uxIiLrpG5YtC4GSLMVGGkLdD+GpfxAuvxaVL7oCzN+jCG7iKDVmHkKS5hSSBuJ3bg6hRt+Zrpa553z8bEuoQrUVXk1exwKLBI1ZpPBnAL+0KBqanVim1Ykaifji+yNfIrVphipB1n8BgjCfqZ2IrTuIZXMcIUIydxFj8TtEW4JysW52JEKWtkVHUm4EdzjChSrkgLlmJXghb6m8ep9MN4K25XjvTF3sCaElrT6McS+0w2Mirb+JWhrH4CC/0+UpjUK7Ia5/86f4IeHMHeEvPJ+4km1chHE43k9KROpCyLPrViym8/vjW/b5Jt3acjL7/RzEX5bRg3sjKg+2fK7/PmZ9aZzdTqxwYzp06IBZFaDeHUCbFgUquy1Anx35TfRWXkd+WzCBOcQxEjQ7JH0PmiHW9CQUWM9Mr+Y+osO6ME8nF7Q4FFn8T2y14VDMt2vsFfqCRbZBvTdbLXFI9CgphHyjbsVu4+EcMInuH7HI1XU1NTU7OI+QMFe2N82rtssgAAAABJRU5ErkJggg==');
99 }
99 }
100
100
101 #qsp-btn-load {
101 #qsp-btn-open img {
102 background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAACCklEQVRoge3Yz6sNYRzH8deVexNxSaEoroWFUuomOceSPVnIwsbSxs6Psrgphf9AsrZR7kJWsroUlrZKKZRSl4USGouZk9Npzp1n5pm5x4/nXdNzpvP9Pp/v95nv82OGRCKRSCQS/w8zuIn3yGpe37CEQ6sedQk38BA7G/jO4BQ+YEebQZUxVfH/OxzGVSxX2D4o2mO4jmt4jpNFe6d5mPFkRbvQ0H9h6OqUtR33/xXr0celGn4/sYjXoQ5dJ3ILB7AOW2r4bcIj7GsrkEFpXWyrwwbaf15nXWqv6SqK1abuHDmPjV0EMobhBWIZt8cZVu0j2ZDNHF7gblRozdiO49g1zqDOEzmKJ7gcGVQTzmLDSgZ1Eunh2dD9aewpsXtctH3cwzn5ALysoVWlXZvhleMV5ovfU8J363mciAliRLsRg0Q244vfT3A/zgT2cQHbImIY1S4ldPk9Ii+NH8V9H08DfbfiY6BtiHYpoYmMBr4bbwN9YzfVoEELnew9+blpwBv5u0oI9wPtQrUbkWFaXqOzsZ01IFg7pLQOyp/A58igmhCsHZJInYndNsHa/0wiVWTy9/a5NjprQGvag0Qmwd462iGltdQ8lihqlVVIIn/9/CAvrajDWgTRB8VhMt1/aSljVr4RToc6hJTWioe1jujJD4rfQx2qRvuTyX1JuTIh3UQikUgkEhPnF+1xZ9hHnLjAAAAAAElFTkSuQmCC');
102 background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAACCklEQVRoge3Yz6sNYRzH8deVexNxSaEoroWFUuomOceSPVnIwsbSxs6Psrgphf9AsrZR7kJWsroUlrZKKZRSl4USGouZk9Npzp1n5pm5x4/nXdNzpvP9Pp/v95nv82OGRCKRSCQS/w8zuIn3yGpe37CEQ6sedQk38BA7G/jO4BQ+YEebQZUxVfH/OxzGVSxX2D4o2mO4jmt4jpNFe6d5mPFkRbvQ0H9h6OqUtR33/xXr0celGn4/sYjXoQ5dJ3ILB7AOW2r4bcIj7GsrkEFpXWyrwwbaf15nXWqv6SqK1abuHDmPjV0EMobhBWIZt8cZVu0j2ZDNHF7gblRozdiO49g1zqDOEzmKJ7gcGVQTzmLDSgZ1Eunh2dD9aewpsXtctH3cwzn5ALysoVWlXZvhleMV5ovfU8J363mciAliRLsRg0Q244vfT3A/zgT2cQHbImIY1S4ldPk9Ii+NH8V9H08DfbfiY6BtiHYpoYmMBr4bbwN9YzfVoEELnew9+blpwBv5u0oI9wPtQrUbkWFaXqOzsZ01IFg7pLQOyp/A58igmhCsHZJInYndNsHa/0wiVWTy9/a5NjprQGvag0Qmwd462iGltdQ8lihqlVVIIn/9/CAvrajDWgTRB8VhMt1/aSljVr4RToc6hJTWioe1jujJD4rfQx2qRvuTyX1JuTIh3UQikUgkEhPnF+1xZ9hHnLjAAAAAAElFTkSuQmCC');
103 }
103 }
104
105 #qsp-image-container {
106 position: absolute;
107 top: 0;
108 left: 0;
109 height: 100%;
110 width: 100%;
111 display: none;
112 justify-content: center;
113 align-items: center;
114 }
@@ -21,6 +21,22 b''
21 title
21 title
22 "</a>"))
22 "</a>"))
23
23
24 (defm (root api init-dom) ()
25 ;; Save/load buttons
26 (let ((btn (document.get-element-by-id "qsp-btn-save")))
27 (setf (ps:@ btn onclick) this.savegame)
28 (setf (ps:@ btn href) "#"))
29 (let ((btn (document.get-element-by-id "qsp-btn-open")))
30 (setf (ps:@ btn onclick) this.opengame)
31 (setf (ps:@ btn href) "#"))
32 ;; Close image on click
33 (setf (ps:@ (document.get-element-by-id "qsp-image-container") onclick)
34 (this.show-image nil))
35 ;; Close the dropdown on any click
36 (setf window.onclick
37 (lambda (event)
38 (setf (ps:@ (api-call get-frame :dropdown) style display) "none"))))
39
24 ;; To be used in saving game
40 ;; To be used in saving game
25 (defm (root api stash-state) (args)
41 (defm (root api stash-state) (args)
26 (setf (root state-stash)
42 (setf (root state-stash)
@@ -285,3 +301,48 b''
285 :do (when (ps:@ v ended)
301 :do (when (ps:@ v ended)
286 (ps:delete (ps:@ (root playing) k)))))
302 (ps:delete (ps:@ (root playing) k)))))
287
303
304 (defm (root api show-image) (path)
305 (let ((img (document.get-element-by-id "qsp-image")))
306 (cond (path
307 (setf img.src path)
308 (setf img.style.display "flex"))
309 (t
310 (setf img.src "")
311 (setf img.style.display "hidden")))))
312
313 ;;; Saves
314
315 (defm (root api opengame) ()
316 (let ((element (document.create-element :input)))
317 (element.set-attribute :type :file)
318 (element.set-attribute :id :qsp-opengame)
319 (element.set-attribute :tabindex -1)
320 (element.set-attribute "aria-hidden" t)
321 (setf element.style.display :block)
322 (setf element.style.visibility :hidden)
323 (setf element.style.position :fixed)
324 (setf element.onchange
325 (lambda (event)
326 (let* ((file (elt event.target.files 0))
327 (reader (ps:new (*file-reader))))
328 (setf reader.onload
329 (lambda (ev)
330 (block nil
331 (let ((target ev.current-target))
332 (unless target.result
333 (return))
334 (api-call base64-to-state target.result)
335 (api-call unstash-state)))))
336 (reader.read-as-text file))))
337 (document.body.append-child element)
338 (element.click)
339 (document.body.remove-child element)))
340
341 (defm (root api savegame) ()
342 (let ((element (document.create-element :a)))
343 (element.set-attribute :href (+ "data:text/plain;charset=utf-8," (api-call state-to-base64)))
344 (element.set-attribute :download "savegame.sav")
345 (setf element.style.display :none)
346 (document.body.append-child element)
347 (element.click)
348 (document.body.remove-child element)))
@@ -137,6 +137,9 b''
137
137
138 ;;; 18img
138 ;;; 18img
139
139
140 (ps:defpsmacro view (&optional path)
141 `(api-call show-image ,path))
142
140 ;;; 19input
143 ;;; 19input
141
144
142 ;;; 20time
145 ;;; 20time
@@ -148,3 +151,15 b''
148 (api-call new-local ,(string (second var)))
151 (api-call new-local ,(string (second var)))
149 ,@(when expr
152 ,@(when expr
150 `((set ,var ,expr)))))
153 `((set ,var ,expr)))))
154
155 ;;; 22for
156
157 ;;; misc
158
159 (ps:defpsmacro opengame (&optional filename)
160 (declare (ignore filename))
161 `(api-call opengame))
162
163 (ps:defpsmacro savegame (&optional filename)
164 (declare (ignore filename))
165 `(api-call savegame))
@@ -250,9 +250,9 b''
250
250
251 ;;; 18img
251 ;;; 18img
252
252
253 (defm (root lib refint) ())
253 (defm (root lib refint) ()
254
254 ;; "Force interface update" Uh... what exactly do we do here?
255 (defm (root lib view) ())
255 )
256
256
257 ;;; 19input
257 ;;; 19input
258
258
@@ -278,6 +278,8 b''
278
278
279 ;;; 21local
279 ;;; 21local
280
280
281 ;;; 22for
282
281 ;;; misc
283 ;;; misc
282
284
283 (defm (root lib rgb) ())
285 (defm (root lib rgb) ())
@@ -288,37 +290,3 b''
288
290
289 (defm (root lib killqst) ())
291 (defm (root lib killqst) ())
290
292
291 (defm (root lib opengame) (&optional filename)
292 (let ((element (document.create-element :input)))
293 (element.set-attribute :type :file)
294 (element.set-attribute :id :qsp-opengame)
295 (element.set-attribute :tabindex -1)
296 (element.set-attribute "aria-hidden" t)
297 (setf element.style.display :block)
298 (setf element.style.visibility :hidden)
299 (setf element.style.position :fixed)
300 (setf element.onchange
301 (lambda (event)
302 (let* ((file (elt event.target.files 0))
303 (reader (ps:new (*file-reader))))
304 (setf reader.onload
305 (lambda (ev)
306 (block nil
307 (let ((target ev.current-target))
308 (unless target.result
309 (return))
310 (api-call base64-to-state target.result)
311 (api-call unstash-state)))))
312 (reader.read-as-text file))))
313 (document.body.append-child element)
314 (element.click)
315 (document.body.remove-child element)))
316
317 (defm (root lib savegame) (&optional filename)
318 (let ((element (document.create-element :a)))
319 (element.set-attribute :href (+ "data:text/plain;charset=utf-8," (api-call state-to-base64)))
320 (element.set-attribute :download "savegame.sav")
321 (setf element.style.display :none)
322 (document.body.append-child element)
323 (element.click)
324 (document.body.remove-child element)))
@@ -24,12 +24,9 b''
24 ;; Launch the game from the first location
24 ;; Launch the game from the first location
25 (setf window.onload
25 (setf window.onload
26 (lambda ()
26 (lambda ()
27 (api-call init-dom)
27 (funcall (ps:getprop (root locs)
28 (funcall (ps:getprop (root locs)
28 (ps:chain *object (keys (root locs)) 0))
29 (ps:chain *object (keys (root locs)) 0))
29 (list))
30 (list))
30 (values)))
31 (values)))
31
32
32 ;; Close the dropdown on any click
33 (setf window.onclick
34 (lambda (event)
35 (setf (ps:@ (api-call get-frame :dropdown) style display) "none")))
General Comments 0
You need to be logged in to leave comments. Login now