UNPKG

neo-neo-bblessed

Version:

A fork of neo-blessed (which is a fork of blessed) with bug fixes and maintenance.

3 lines (2 loc) 4.98 kB
const u=require("../helpers"),p=require("./node"),b=require("./box");function m(e){const t=this;if(!(this instanceof p))return new m(e);e=e||{},this.items=[],this.ritems=[],this.commands=[],this.leftBase=0,this.leftOffset=0,this.mouse=e.mouse||!1,b.call(this,e),this.style.selected||(this.style.selected={}),this.style.item||(this.style.item={}),(e.commands||e.items)&&this.setItems(e.commands||e.items),e.keys&&this.on("keypress",function(s,i){if(i.name==="left"||e.vi&&i.name==="h"||i.shift&&i.name==="tab")return t.moveLeft(),t.screen.render(),i.name==="tab"?!1:void 0;if(i.name==="right"||e.vi&&i.name==="l"||i.name==="tab")return t.moveRight(),t.screen.render(),i.name==="tab"?!1:void 0;if(i.name==="enter"||e.vi&&i.name==="k"&&!i.shift){t.emit("action",t.items[t.selected],t.selected),t.emit("select",t.items[t.selected],t.selected);const o=t.items[t.selected];o._.cmd.callback&&o._.cmd.callback(),t.screen.render();return}if(i.name==="escape"||e.vi&&i.name==="q"){t.emit("action"),t.emit("cancel");return}}),e.autoCommandKeys&&this.onScreenEvent("keypress",function(s){if(/^[0-9]$/.test(s)){let i=+s-1;return~i||(i=9),t.selectTab(i)}}),this.on("focus",function(){t.select(t.selected)})}m.prototype.__proto__=b.prototype,m.prototype.type="listbar",m.prototype.__defineGetter__("selected",function(){return this.leftBase+this.leftOffset}),m.prototype.setItems=function(e){const t=this;let s;Array.isArray(e)?s=e:s=Object.keys(e).reduce(function(i,o,n){let a=e[o],c;return typeof a=="function"&&(c=a,a={callback:c}),a.text==null&&(a.text=o),a.prefix==null&&(a.prefix=++n+""),a.text==null&&a.callback&&(a.text=a.callback.name),i.push(a),i},[]),this.items.forEach(function(i){i.detach()}),this.items=[],this.ritems=[],this.commands=[],s.forEach(function(i){t.add(i)}),this.emit("set items")},m.prototype.add=m.prototype.addItem=m.prototype.appendItem=function(e,t){var s=this,i=this.items[this.items.length-1],o,n,a,c;this.parent?(o=i?i.aleft+i.width:0,this.screen.autoPadding||(o+=this.ileft)):o=0,typeof e=="object"&&(n=e,n.prefix==null&&(n.prefix=this.items.length+1+"")),typeof e=="string"&&(n={prefix:this.items.length+1+"",text:e,callback:t}),typeof e=="function"&&(n={prefix:this.items.length+1+"",text:e.name,callback:e}),n.keys&&n.keys[0]&&(n.prefix=n.keys[0]);var f=u.generateTags(this.style.prefix||{fg:"lightblack"});a=(n.prefix!=null?f.open+n.prefix+f.close+":":"")+n.text,c=((n.prefix!=null?n.prefix+":":"")+n.text).length;var l={screen:this.screen,top:0,left:o+1,height:1,content:a,width:c+2,align:"center",autoFocus:!1,tags:!0,mouse:!0,style:u.merge({},this.style.item),noOverflow:!0};this.screen.autoPadding||(l.top+=this.itop,l.left+=this.ileft),["bg","fg","bold","underline","blink","inverse","invisible"].forEach(function(h){l.style[h]=function(){var d=s.items[s.selected]===r?s.style.selected[h]:s.style.item[h];return typeof d=="function"&&(d=d(r)),d}});var r=new b(l);this._[n.text]=r,n.element=r,r._.cmd=n,this.ritems.push(n.text),this.items.push(r),this.commands.push(n),this.append(r),n.callback&&n.keys&&this.screen.key(n.keys,function(){s.emit("action",r,s.selected),s.emit("select",r,s.selected),r._.cmd.callback&&r._.cmd.callback(),s.select(r),s.screen.render()}),this.items.length===1&&this.select(0),this.mouse&&r.on("click",function(){s.emit("action",r,s.selected),s.emit("select",r,s.selected),r._.cmd.callback&&r._.cmd.callback(),s.select(r),s.screen.render()}),this.emit("add item")},m.prototype.render=function(){const e=this;let t=0;return this.screen.autoPadding||(t+=this.ileft),this.items.forEach(function(s,i){i<e.leftBase?s.hide():(s.rleft=t+1,t+=s.width+2,s.show())}),this._render()},m.prototype.select=function(e){if(typeof e!="number"&&(e=this.items.indexOf(e)),e<0?e=0:e>=this.items.length&&(e=this.items.length-1),!this.parent){this.emit("select item",this.items[e],e);return}var t=this._getCoords();if(t){var s=this,i=t.xl-t.xi-this.iwidth,o=0,n=0,a;if(a=this.items[e],!!a){this.items.forEach(function(f,l){if(!(l<s.leftBase)){var r=f._getCoords();r&&(r.xl-r.xi<=0||(o+=r.xl-r.xi+2,o<=i&&n++))}});var c=e-(this.leftBase+this.leftOffset);e>this.leftBase+this.leftOffset?e>this.leftBase+n-1?(this.leftOffset=0,this.leftBase=e):this.leftOffset+=c:e<this.leftBase+this.leftOffset&&(c=-c,e<this.leftBase?(this.leftOffset=0,this.leftBase=e):this.leftOffset-=c),this.emit("select item",a,e)}}},m.prototype.removeItem=function(e){const t=typeof e!="number"?this.items.indexOf(e):e;~t&&this.items[t]&&(e=this.items.splice(t,1)[0],this.ritems.splice(t,1),this.commands.splice(t,1),this.remove(e),t===this.selected&&this.select(t-1)),this.emit("remove item")},m.prototype.move=function(e){this.select(this.selected+e)},m.prototype.moveLeft=function(e){this.move(-(e||1))},m.prototype.moveRight=function(e){this.move(e||1)},m.prototype.selectTab=function(e){const t=this.items[e];t&&(t._.cmd.callback&&t._.cmd.callback(),this.select(e),this.screen.render()),this.emit("select tab",t,e)},module.exports=m; //# sourceMappingURL=listbar.js.map