neo-neo-bblessed
Version:
A fork of neo-blessed (which is a fork of blessed) with bug fixes and maintenance.
3 lines (2 loc) • 3.65 kB
JavaScript
const c=require("./node"),o=require("./box");function r(e){const t=this;if(!(this instanceof c))return new r(e);e=e||{},e.ignoreKeys=!0,o.call(this,e),e.keys&&(this.screen._listenKeys(this),this.on("element keypress",function(i,n,s){if(s.name==="tab"&&!s.shift||i.type==="textbox"&&e.autoNext&&s.name==="enter"||s.name==="down"||e.vi&&s.name==="j"){if(i.type==="textbox"||i.type==="textarea"){if(s.name==="j")return;s.name==="tab"&&i.emit("keypress",null,{name:"backspace"}),i.emit("keypress","\x1B",{name:"escape"})}t.focusNext();return}if(s.name==="tab"&&s.shift||s.name==="up"||e.vi&&s.name==="k"){if(i.type==="textbox"||i.type==="textarea"){if(s.name==="k")return;i.emit("keypress","\x1B",{name:"escape"})}t.focusPrevious();return}if(s.name==="escape"){t.focus();return}}))}r.prototype.__proto__=o.prototype,r.prototype.type="form",r.prototype._refresh=function(){if(!this._children){const e=[];this.children.forEach(function t(i){i.keyable&&e.push(i),i.children.forEach(t)}),this._children=e}},r.prototype._visible=function(){return!!this._children.filter(function(e){return e.visible}).length},r.prototype.next=function(){if(this._refresh(),!this._visible())return;if(!this._selected){if(this._selected=this._children[0],!this._selected.visible)return this.next();if(this.screen.focused!==this._selected)return this._selected}const e=this._children.indexOf(this._selected);return!~e||!this._children[e+1]?(this._selected=this._children[0],this._selected.visible?this._selected:this.next()):(this._selected=this._children[e+1],this._selected.visible?this._selected:this.next())},r.prototype.previous=function(){if(this._refresh(),!this._visible())return;if(!this._selected){if(this._selected=this._children[this._children.length-1],!this._selected.visible)return this.previous();if(this.screen.focused!==this._selected)return this._selected}const e=this._children.indexOf(this._selected);return!~e||!this._children[e-1]?(this._selected=this._children[this._children.length-1],this._selected.visible?this._selected:this.previous()):(this._selected=this._children[e-1],this._selected.visible?this._selected:this.previous())},r.prototype.focusNext=function(){const e=this.next();e&&e.focus()},r.prototype.focusPrevious=function(){const e=this.previous();e&&e.focus()},r.prototype.resetSelected=function(){this._selected=null},r.prototype.focusFirst=function(){this.resetSelected(),this.focusNext()},r.prototype.focusLast=function(){this.resetSelected(),this.focusPrevious()},r.prototype.submit=function(){const e={};return this.children.forEach(function t(i){if(i.value!=null){const n=i.name||i.type;Array.isArray(e[n])?e[n].push(i.value):e[n]?e[n]=[e[n],i.value]:e[n]=i.value}i.children.forEach(t)}),this.emit("submit",e),this.submission=e},r.prototype.cancel=function(){this.emit("cancel")},r.prototype.reset=function(){this.children.forEach(function e(t){switch(t.type){case"screen":break;case"box":break;case"text":break;case"line":break;case"scrollable-box":break;case"list":t.select(0);return;case"form":break;case"input":break;case"textbox":t.clearInput();return;case"textarea":t.clearInput();return;case"button":delete t.value;break;case"progress-bar":t.setProgress(0);break;case"file-manager":t.refresh(t.options.cwd);return;case"checkbox":t.uncheck();return;case"radio-set":break;case"radio-button":t.uncheck();return;case"prompt":break;case"question":break;case"message":break;case"info":break;case"loading":break;case"list-bar":break;case"dir-manager":t.refresh(t.options.cwd);return;case"terminal":t.write("");return;case"image":return}t.children.forEach(e)}),this.emit("reset")},module.exports=r;
//# sourceMappingURL=form.js.map