sbbs/load/edit.js

141 lines
2.7 KiB
JavaScript
Raw Normal View History

load('ansiedit.js');
load('frame.js');
load('tree.js');
load('scrollbar.js');
load('event-timer.js');
load('graphic.js');
var CONTROL_EDIT = '1';
function edit(fo) {
log(LOG_DEBUG,'+ Control EDIT loaded');
var complete = false;
var inProperty = false;
Object.defineProperty(this,'getName', {
get: function() {
return 'Frame Edit';
}
});
Object.defineProperty(this,'isComplete', {
get: function() {
return complete;
}
});
2020-07-22 12:37:00 +00:00
log(LOG_DEBUG,' - Owner: '+JSON.stringify(fo.owner));
2020-07-25 23:34:45 +00:00
const frame = new Frame(1,1,console.screen_columns,console.screen_rows,BG_BLACK|LIGHTGRAY);
frame.gotoxy(1,1);
2020-07-25 23:34:45 +00:00
header = '\1n'+fo.pageownerlogo+' '.repeat(ANSI_FRAME_HEADER-console.strlen(fo.pageownerlogo))+'\1n '+
'\1W\1H'+fo.page+' '.repeat(ANSI_FRAME_PAGENUM-fo.page.length)+' '+
'\1G\1H'+' Edit';
frame.putmsg(header);
frame.open();
var editor = new ANSIEdit({
x: 1,
y: 2,
width: 80,
height: 23,
attr: WHITE,
//showPosition: true,
menuHeading: 'Frame Edit '+fo.page,
parentFrame: frame,
});
editor.open();
2020-07-25 23:34:45 +00:00
editor.menu.addItem('Properties',properties);
editor.menu.addItem('Exit',onexit);
editor.menu.addItem('Save & Exit',saveexit);
2020-07-25 23:34:45 +00:00
var x = new Graphic;
x.ANSI = fo.parse(base64_decode(fo.content));
log(LOG_DEBUG,' - Fields: '+JSON.stringify(fo.frame_fields));
const bin = x.BIN;
var o = 0; // offset into 'bin'
for (var yy = 0; yy < 22; yy++) {
for (var xx = 0; xx < 80; xx++) {
editor.putChar({
x : xx,
y : yy,
ch : bin.substr(o, 1),
attr : bin.substr(o + 1, 1).charCodeAt(0) || BG_BLACK
});
o = o + 2;
}
}
editor.cycle();
frame.cycle();
this.handle=function(read) {
if (! js.terminated && ascii(read) != 27) {
if (inProperty) {
log(LOG_DEBUG, ' + FrameEdit properties(): read');
propFrame.putmsg(read);
propFrame.cycle();
} else {
editor.getcmd(read);
editor.cycle();
frame.cycle();
}
2020-07-25 23:34:45 +00:00
if (! complete)
return '';
// Ignore esc
} else if (ascii(read) == 27) {
if (inProperty) {
log(LOG_DEBUG, ' + FrameEdit properties(): ESC');
propFrame.close();
frame.top();
frame.cycle();
inProperty = false;
}
return '';
}
editor.close();
frame.close();
2020-07-25 23:34:45 +00:00
console.clear(LIGHTGRAY);
console.putmsg(fo.render());
2020-07-25 23:34:45 +00:00
return '';
}
2020-07-25 23:34:45 +00:00
function properties() {
inProperty = true;
2020-07-25 23:34:45 +00:00
log(LOG_DEBUG, '+ FrameEdit properties()');
frame.bottom();
propFrame = new Frame(1,2,40,14,BG_BLUE|WHITE,frame);
propFrame.gotoxy(1,1);
propFrame.putmsg('Properties!');
propFrame.open();
propFrame.cycle();
2020-07-25 23:34:45 +00:00
}
function save() {
fo.content = base64_encode(editor.exportAnsi().join(''));
fo.save();
}
2020-07-25 23:34:45 +00:00
function onexit() {
complete = true;
}
2020-07-25 23:34:45 +00:00
function saveexit() {
save();
onexit();
}
}
this;