From d87b74867f2001e19b074c0443f6d0cf9d7c7920 Mon Sep 17 00:00:00 2001 From: mcmlxxix <> Date: Mon, 8 Aug 2011 20:59:32 +0000 Subject: [PATCH] generic form editor (uses Layout() object with lightbar property select/edit), returns copy of passed/modified object. --- exec/load/form.js | 140 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 exec/load/form.js diff --git a/exec/load/form.js b/exec/load/form.js new file mode 100644 index 0000000000..e836b81b87 --- /dev/null +++ b/exec/load/form.js @@ -0,0 +1,140 @@ +/* Id: $ */ + +/** + * Javascript Object Editor + * for Synchronet v3.15a+ + * by Matt Johnson + * + * returns a copy of any passed object + * with modified properties + * + * USAGE: + * + * var obj = { + * x = 1, + * y = 2 + * }; + * var newobj = formEdit(obj); + */ + +if(js.global.SYS_CLOSED == undefined) + load("sbbsdefs.js"); +if(js.global.getColor == undefined) + load("funclib.js"); +if(js.global.Layout == undefined) + load("layout.js"); + +function formEdit(obj) +{ + var form = new Form(obj); + var update = false; + form.draw(); + + while(1) { + + if(update) + form.drawItem(form.index,true); + else + update = true; + + var cmd = console.inkey(K_NOECHO,1); + switch(cmd) { + case KEY_DOWN: + form.drawItem(form.index); + form.index++; + if(form.index >= form.items.length) + form.index = 0; + break; + case KEY_UP: + form.drawItem(form.index); + form.index--; + if(form.index < 0) + form.index = form.items.length-1; + break; + case '\r': + case '\n': + var item = form.items[form.index]; + var coords = form.coords(form.index); + console.gotoxy(coords.x + form.len + 2, coords.y); + console.attributes = BG_LIGHTGRAY + BLACK; + item.value = console.getstr(item.value.toString(),form.max,K_EDIT|K_AUTODEL); + form.drawItem(form.index); + break; + case '\b': + case '\x11': + case '\x1b': + return form.object; + default: + update = false; + break; + } + } + /* just in case?? */ + return form.object; +} + +function Form(obj) +{ + this.len = 0; + this.max = 25; + this.index = 0; + this.items = []; + + for(var k in obj) { + if(console.strlen(k) > this.len) + this.len = console.strlen(k); + this.items.push({ + key:k, + value:obj[k] + }); + } + + this.box = new Layout_View( + printPadded("KEY",this.len+2) + splitPadded("VALUE","ESC",this.max), + (console.screen_columns / 2) - ((this.len + 25)/2) -1, + (console.screen_rows / 2) - (this.items.length / 2) -2, + this.len + this.max + 4, + this.items.length + 3 + ); + + this.box.show_tabs = false; + + this.draw = function() { + this.box.drawView(); + + for(var i = 0; i < this.items.length; i++) { + this.drawItem(i,this.index == i); + } + } + + this.object getter = function() { + var obj = {}; + for(var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + obj[item.key] = item.value; + } + return obj; + } + + this.coords = function(i) { + return { + x:this.box.x + 1, + y:this.box.y + 2 + i, + } + } + + this.drawItem = function(i,curr) { + var coords = this.coords(i); + console.gotoxy(coords); + if(curr) + console.putmsg(getColor(layout_settings.lbg) + getColor(layout_settings.lfg) + + printPadded(this.items[i].key,this.len + 2) + "\1w" + + printPadded(this.items[i].value,this.max) + ); + else + console.putmsg(getColor(layout_settings.vbg) + getColor(layout_settings.vfg) + + printPadded(this.items[i].key,this.len + 2) + "\1h" + + printPadded(this.items[i].value,this.max) + ); + } +} -- GitLab