5454 var menu ;
5555
5656 var hdr ;
57- var filemod ;
57+ var load ;
58+ var save ;
5859 var log ;
5960
6061
6465
6566
6667 hdr = mod [ 'video-hdr' ] ;
67- filemod = mod [ 'file-mod' ] ;
68+ load = mod . load ;
69+ save = mod . save ;
6870 log = mod [ 'log-mod' ] ;
6971
7072 hdr . initmod ( { ext, $, menu} ) ;
71- filemod . initmod ( { ext, $, menumod, menu, complete, source, focus, log} ) ;
73+ load . initmod ( { ext, $, menumod, menu, complete, source, focus, log} ) ;
74+ save . initmod ( { ext, $, menumod, menu, complete, source, focus, log} ) ;
7275 log . initmod ( { ext, $} ) ;
7376
7477 await Promise . all ( [
7578 hdr . init ( ) ,
76- filemod . init ( ) ,
79+ load . init ( ) ,
80+ save . init ( ) ,
7781 log . init ( ) ,
7882 ] ) ;
7983
167171 # results
168172 {display : flex;gap : 20px ;flex-wrap : wrap}
169173 .item
170- {display : flex;flex-direction : column;gap : 10px ;border : 1px solid lightgray;padding : 10px ;border-radius : 10px }
174+ {display : flex;flex-direction : column;gap : 10px ;border : 1px solid lightgray;padding : 10px ;border-radius : 10px ; align-items : center; cursor : pointer }
171175 .item [type = checkbox ]
172176 {}
177+ .item img
178+ {flex-grow : 0 }
173179 .item .filename-root
174- {white-space : nowrap}
175-
180+ {white-space : nowrap;flex-shrink : 0 }
181+ .item .filename-root *
182+ {vertical-align : middle}
176183 # output
177184 {border : 1px solid lightgray;padding : 10px ;border-radius : 10px ;white-space : pre-wrap;overflow : auto;font-size : 16px ;font-family : monospace;flex : 1 }
178185
185192 [type = checkbox ]
186193 {margin-right : 10px ;width : 20px ;height : 20px ;cursor : pointer}
187194
195+ .label
196+ {margin : 0 20px }
197+
188198 </ style >
189199
190200 </ head >
@@ -198,14 +208,17 @@ <h1 slot=seo-hdr class=visually-hidden>video thumbnail generator</h1>
198208 </ video-hdr >
199209
200210 < div >
201- < span >
211+ < span class = label >
202212 load video
203213 </ span >
204- < file-mod component > </ file-mod >
214+ < file-mod id = load component > </ file-mod >
205215 </ div >
206216
207217 < div >
208- thumbnail type
218+ < input value =clear type =button >
219+ < span class =label >
220+ thumbnail type
221+ </ span >
209222 < span id =png >
210223 < input type =checkbox checked >
211224 png
@@ -215,7 +228,9 @@ <h1 slot=seo-hdr class=visually-hidden>video thumbnail generator</h1>
215228 jpg
216229 </ span >
217230 < span >
218- size
231+ < span class =label >
232+ size
233+ </ span >
219234 < span id =width >
220235 width
221236 < input value =-1 >
@@ -237,7 +252,6 @@ <h1 slot=seo-hdr class=visually-hidden>video thumbnail generator</h1>
237252 < video controls > </ video >
238253 < div >
239254 < div >
240- < input type =checkbox >
241255 < span id =video-filename > </ span >
242256 </ div >
243257 < span id =video-size > </ span >
@@ -248,17 +262,23 @@ <h1 slot=seo-hdr class=visually-hidden>video thumbnail generator</h1>
248262 </ div >
249263 </ div >
250264 </ div >
265+
266+ < div >
267+ < span class =label >
268+ save thumbnail
269+ </ span >
270+ < file-mod id =save component > </ file-mod >
271+ </ div >
272+
251273 < div id =results >
252274 < div class =item style ='display:none '>
253275 < img class =thumbnail >
254- < div >
255- < div class =filename-root >
256- < input type =checkbox >
257- < div class =filename > </ div >
258- </ div >
259- < div class =dims > </ div >
260- < div class =size > </ div >
276+ < div class =filename-root >
277+ < input type =checkbox >
278+ < span class =filename > </ span >
261279 </ div >
280+ < div class =dims > </ div >
281+ < div class =size > </ div >
262282 </ div >
263283 </ div >
264284
@@ -280,6 +300,7 @@ <h1 slot=seo-hdr class=visually-hidden>video thumbnail generator</h1>
280300 var results ;
281301 var item ;
282302 var chk ;
303+ var list = { } ;
283304
284305 var btn = { } ;
285306 var gen = { } ;
@@ -288,7 +309,8 @@ <h1 slot=seo-hdr class=visually-hidden>video thumbnail generator</h1>
288309
289310
290311 hdr . initdom ( ) ;
291- filemod . initdom ( ) ;
312+ load . initdom ( ) ;
313+ save . initdom ( ) ;
292314 log . initdom ( ) ;
293315
294316
@@ -330,6 +352,14 @@ <h1 slot=seo-hdr class=visually-hidden>video thumbnail generator</h1>
330352 //:
331353
332354
355+ btn . clear = function ( ) {
356+
357+ results . replaceChildren ( ) ;
358+ list = { } ;
359+
360+ } //clear
361+
362+
333363 btn . generate = function ( ) {
334364
335365 if ( cur . status ) {
@@ -497,7 +527,7 @@ <h1 slot=seo-hdr class=visually-hidden>video thumbnail generator</h1>
497527 $ ( nitem , '.size' ) . textContent = hs ( blob . size ) ;
498528 results . append ( nitem ) ;
499529 chk . add ( results , `#${ id } ` ) ;
500-
530+ list [ blob . name ] = blob ;
501531
502532 function onload ( ) {
503533
@@ -514,6 +544,11 @@ <h1 slot=seo-hdr class=visually-hidden>video thumbnail generator</h1>
514544
515545
516546 function source ( ) {
547+
548+ var id = chk . read ( ) ;
549+ var blob = list [ id ] ;
550+ return blob ;
551+
517552 } //source
518553
519554
0 commit comments