Skip to content

Commit 16b91e4

Browse files
save file
1 parent acbce95 commit 16b91e4

File tree

1 file changed

+127
-11
lines changed

1 file changed

+127
-11
lines changed

utils/editors/html-editor/html-editor.html

Lines changed: 127 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@
172172
var promise = ext.load.libs(
173173
'js/dom/$.js',
174174
'js/core/datatype.js',
175-
'js/dom/menumod/menumod.js',
175+
'js/dom/menumod/menumod.js.api',
176176
'js/dom/keydown/keydown.js',
177177
'js/debug/debug.js',
178178
);
@@ -237,6 +237,19 @@
237237

238238
.visually-hidden
239239
{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);border:0}
240+
241+
242+
.menu input
243+
{font-size:16px;padding:5px 10px}
244+
245+
.menu [type=checkbox]
246+
{width:20px;height:20px;margin:0}
247+
248+
.menu-item
249+
{gap:20px}
250+
251+
.menu-item .menu-label
252+
{width:120px;text-align:right}
240253

241254
</style>
242255

@@ -266,6 +279,22 @@ <h1 slot=seo-hdr class=visually-hidden>html editor</h1>
266279
<div id=save-menu-root class=menu-root>
267280
<img id=save-menu-icon class=menu-icon>
268281
<div id=save-menu class=menu style='display:none'>
282+
<div class=menu-title>
283+
save menu
284+
</div>
285+
<div class=menu-item>
286+
<div class=menu-label>
287+
autosave
288+
</div>
289+
<input type=checkbox checked>
290+
<input value=300 style='width:60px'>
291+
</div>
292+
<div id=trim class=menu-item>
293+
<div class=menu-label>
294+
trim on save
295+
</div>
296+
<input type=checkbox checked>
297+
</div>
269298
</div>
270299
</div>
271300
</div>
@@ -311,16 +340,23 @@ <h1 slot=seo-hdr class=visually-hidden>html editor</h1>
311340

312341

313342

314-
var slider = {};
343+
var slider = {};
315344

316-
var ui = {};
317-
ui.mode = 'vert';
345+
var ui = {};
346+
ui.mode = 'vert';
347+
ui.trim = null;
318348

349+
var savemenu;
350+
var savetimer = {};
351+
savetimer.timer = null;
352+
savetimer.chk = null;
353+
savetimer.time = null;
354+
savetimer.onclick = null;
319355

320356

321-
var btn = {};
322-
var on = {};
323-
var set = {};
357+
var btn = {};
358+
var on = {};
359+
var set = {};
324360

325361

326362

@@ -343,12 +379,19 @@ <h1 slot=seo-hdr class=visually-hidden>html editor</h1>
343379
filemod.initdom(root);
344380

345381

382+
autosave = $(root,'#autosave');
383+
346384
$(root,'#save').onclick = btn.save;
347385

348-
var card = $(root,'#save-root .menu');
349-
$(root,'.menu-icon').onclick = menu.click(card,false,false);
386+
savemenu = $(root,'#save-root .menu');
387+
$(root,'.menu-icon').onclick = menu.click(savemenu,false,false,savemenu_callback);
388+
menu.input.norm(savemenu);
350389

351-
autosave = $(root,'#autosave');
390+
savetimer.chk = $(savemenu,':scope>div:nth-of-type(2) [type=checkbox]');
391+
savetimer.time = $(savemenu,':scope>div:nth-of-type(2) input:not([type])');
392+
savetimer.chk.onclick = savetimer.onclick;
393+
394+
ui.trim = $(savemenu,':scope>div:nth-of-type(3) [type=checkbox]');
352395

353396

354397
publish.initdom();
@@ -393,6 +436,61 @@ <h1 slot=seo-hdr class=visually-hidden>html editor</h1>
393436
}//focus
394437

395438

439+
function savemenu_kd(e){
440+
console.log(e.target);
441+
if(e.target.nodeName=='INPUT'){
442+
return;
443+
}
444+
return false;
445+
446+
}//savemenu_kd
447+
448+
449+
function savemenu_callback(type){
450+
console.log('savemenu_callback',arguments);
451+
if(type=='show'){
452+
$(savemenu,':scope>div:nth-of-type(2) input:not([type])').focus();
453+
keydown.add(savemenu_kd);
454+
}
455+
if(type=='hide'){
456+
keydown.rem(savemenu_kd);
457+
}
458+
459+
}//savemenu_callback
460+
461+
462+
savetimer.onclick = function(){
463+
debug('savetimer.click');
464+
clearTimeout(savetimer.timer);
465+
466+
if(savetimer.chk.checked){
467+
var value = savetimer.time.value;
468+
value = Number(value);
469+
if(isNaN(value)){
470+
log.red('invalid autosave time, using 300s');
471+
value = 300;
472+
}
473+
fn();
474+
}
475+
476+
477+
function fn(){
478+
479+
if(!autosave.checked){
480+
return;
481+
}
482+
debug('savetimer',value);
483+
btn.save();
484+
if(savetimer.chk.checked){
485+
var ms = value*1000;
486+
setTimeout(fn,ms);
487+
}
488+
489+
}//fn
490+
491+
}//savetimer
492+
493+
396494
//:
397495

398496

@@ -495,6 +593,24 @@ <h1 slot=seo-hdr class=visually-hidden>html editor</h1>
495593
function source(file){
496594

497595
var txt = editor.getValue();
596+
597+
if(ui.trim.checked){
598+
var indent = 0;
599+
var lines = txt.split('\n');
600+
lines = lines.map(line=>{
601+
602+
line = line.trimEnd();
603+
if(line.length==0){
604+
line = line.padStart(indent,' ');
605+
}
606+
var match = line.match(/^\s*/);
607+
indent = match ? match[0].length : indent;
608+
return line;
609+
610+
});
611+
txt = lines.join('\n');
612+
}
613+
498614
var blob = new Blob([txt]);
499615
return blob;
500616

@@ -507,7 +623,7 @@ <h1 slot=seo-hdr class=visually-hidden>html editor</h1>
507623
editor.filename(file);
508624
editor.filename.save.hide();
509625
filemod.cur = file;
510-
var title = file.name||file.filename;
626+
var title = file.name||file.filename;
511627
set.title(title);
512628
set.favicon(icon.def);
513629
}

0 commit comments

Comments
 (0)