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) 9.14 kB
const l=require("../helpers"),f=require("./node"),o=require("./box");function r(t){const e=this;if(!(this instanceof f))return new r(t);t=t||{},t.ignoreKeys=!0,t.scrollable=!0,o.call(this,t),this.value="",this.items=[],this.ritems=[],this.selected=0,this._isList=!0,this.style.selected||(this.style.selected={},this.style.selected.bg=t.selectedBg,this.style.selected.fg=t.selectedFg,this.style.selected.bold=t.selectedBold,this.style.selected.underline=t.selectedUnderline,this.style.selected.blink=t.selectedBlink,this.style.selected.inverse=t.selectedInverse,this.style.selected.invisible=t.selectedInvisible),this.style.item||(this.style.item={},this.style.item.bg=t.itemBg,this.style.item.fg=t.itemFg,this.style.item.bold=t.itemBold,this.style.item.underline=t.itemUnderline,this.style.item.blink=t.itemBlink,this.style.item.inverse=t.itemInverse,this.style.item.invisible=t.itemInvisible),["bg","fg","bold","underline","blink","inverse","invisible"].forEach(function(s){e.style[s]!=null&&e.style.item[s]==null&&(e.style.item[s]=e.style[s])}),this.options.itemHoverBg&&(this.options.itemHoverEffects={bg:this.options.itemHoverBg}),this.options.itemHoverEffects&&(this.style.item.hover=this.options.itemHoverEffects),this.options.itemFocusEffects&&(this.style.item.focus=this.options.itemFocusEffects),this.options.itemHeight&&(this.style.item.height=this.options.itemHeight),this.interactive=t.interactive!==!1,this.mouse=t.mouse||!1,t.items&&(this.ritems=t.items,t.items.forEach(this.add.bind(this))),this.select(0),t.mouse&&(this.screen._listenMouse(this),this.on("element wheeldown",function(){e.select(e.selected+2),e.screen.render()}),this.on("element wheelup",function(){e.select(e.selected-2),e.screen.render()})),t.keys&&this.on("keypress",function(s,i){if(i.name==="up"||t.vi&&i.name==="k"){e.up(),e.screen.render();return}if(i.name==="down"||t.vi&&i.name==="j"){e.down(),e.screen.render();return}if(i.name==="enter"||t.vi&&i.name==="l"&&!i.shift){e.enterSelected();return}if(i.name==="escape"||t.vi&&i.name==="q"){e.cancelSelected();return}if(t.vi&&i.name==="u"&&i.ctrl){e.move(-((e.height-e.iheight)/2)|0),e.screen.render();return}if(t.vi&&i.name==="d"&&i.ctrl){e.move((e.height-e.iheight)/2|0),e.screen.render();return}if(t.vi&&i.name==="b"&&i.ctrl){e.move(-(e.height-e.iheight)),e.screen.render();return}if(t.vi&&i.name==="f"&&i.ctrl){e.move(e.height-e.iheight),e.screen.render();return}if(t.vi&&i.name==="h"&&i.shift){e.move(e.childBase-e.selected),e.screen.render();return}if(t.vi&&i.name==="m"&&i.shift){const n=Math.min(e.height-e.iheight,e.items.length)/2|0;e.move(e.childBase+n-e.selected),e.screen.render();return}if(t.vi&&i.name==="l"&&i.shift){e.down(e.childBase+Math.min(e.height-e.iheight,e.items.length)-e.selected),e.screen.render();return}if(t.vi&&i.name==="g"&&!i.shift){e.select(0),e.screen.render();return}if(t.vi&&i.name==="g"&&i.shift){e.select(e.items.length-1),e.screen.render();return}if(t.vi&&(i.ch==="/"||i.ch==="?"))return typeof e.options.search!="function"?void 0:e.options.search(function(n,h){if((typeof n=="string"||typeof n=="function"||typeof n=="number"||n&&n.test)&&(h=n,n=null),n||!h)return e.screen.render();e.select(e.fuzzyFind(h,i.ch==="?")),e.screen.render()})}),this.on("resize",function(){var s=e.height-e.iheight;s>=e.selected+1?(e.childBase=0,e.childOffset=e.selected):(e.childBase=e.selected-s+1,e.childOffset=s-1)}),this.on("adopt",function(s){~e.items.indexOf(s)||(s.fixed=!0)}),this.on("remove",function(s){e.removeItem(s)})}r.prototype.__proto__=o.prototype,r.prototype.type="list",r.prototype.createItem=function(t){var e=this,s={screen:this.screen,content:t,align:this.align||"left",top:0,left:0,right:this.scrollbar?1:0,tags:this.parseTags,height:this.style.item.height||1,hoverEffects:this.mouse?this.style.item.hover:null,focusEffects:this.mouse?this.style.item.focus:null,autoFocus:!1};this.screen.autoPadding||(s.top=1,s.left=this.ileft,s.right=this.iright+(this.scrollbar?1:0)),this.shrink&&this.options.normalShrink&&(delete s.right,s.width="shrink"),["bg","fg","bold","underline","blink","inverse","invisible"].forEach(function(n){s[n]=function(){var h=e.items[e.selected]===i&&e.interactive?e.style.selected[n]:e.style.item[n];return typeof h=="function"&&(h=h(i)),h}}),this.style.transparent&&(s.transparent=!0);var i=new o(s);return this.mouse&&i.on("click",function(){if(e.focus(),e.items[e.selected]===i){e.emit("action",i,e.selected),e.emit("select",i,e.selected);return}e.select(i),e.screen.render()}),this.emit("create item"),i},r.prototype.add=r.prototype.addItem=r.prototype.appendItem=function(t){t=typeof t=="string"?t:t.getContent();var e=this.createItem(t);return e.position.top=this.items.map(s=>s.height).reduce((s,i)=>s+i,0),this.screen.autoPadding||(e.position.top=this.itop+this.items.length),this.ritems.push(t),this.items.push(e),this.append(e),this.items.length===1&&this.select(0),this.emit("add item"),e},r.prototype.removeItem=function(t){var e=this.getItemIndex(t);if(~e&&this.items[e]){t=this.items.splice(e,1)[0],this.ritems.splice(e,1),this.remove(t);for(var s=e;s<this.items.length;s++)this.items[s].position.top--;e===this.selected&&this.select(e-1)}return this.emit("remove item"),t},r.prototype.insertItem=function(t,e){e=typeof e=="string"?e:e.getContent();var s=this.getItemIndex(t);if(~s){if(s>=this.items.length)return this.appendItem(e);for(var i=this.createItem(e),n=s;n<this.items.length;n++)this.items[n].position.top++;i.position.top=s+(this.screen.autoPadding?0:1),this.ritems.splice(s,0,e),this.items.splice(s,0,i),this.append(i),s===this.selected&&this.select(s+1),this.emit("insert item")}},r.prototype.getItem=function(t){return this.items[this.getItemIndex(t)]},r.prototype.setItem=function(t,e){e=typeof e=="string"?e:e.getContent();var s=this.getItemIndex(t);~s&&(this.items[s].setContent(e),this.ritems[s]=e)},r.prototype.clearItems=function(){return this.setItems([])},r.prototype.setItems=function(t){var e=this.items.slice(),s=this.selected,i=this.ritems[this.selected],n=0;for(t=t.slice(),this.select(0);n<t.length;n++)this.items[n]?this.items[n].setContent(t[n]):this.add(t[n]);for(;n<e.length;n++)this.remove(e[n]);this.ritems=t,i=t.indexOf(i),~i?this.select(i):t.length===e.length?this.select(s):this.select(Math.min(s,t.length-1)),this.emit("set items")},r.prototype.pushItem=function(t){return this.appendItem(t),this.items.length},r.prototype.popItem=function(){return this.removeItem(this.items.length-1)},r.prototype.unshiftItem=function(t){return this.insertItem(0,t),this.items.length},r.prototype.shiftItem=function(){return this.removeItem(0)},r.prototype.spliceItem=function(t,e){var s=this,i=this.getItemIndex(t);if(~i){for(var n=Array.prototype.slice.call(arguments,2),h=[];e--;)h.push(this.removeItem(i));return n.forEach(function(c){s.insertItem(i++,c)}),h}},r.prototype.find=r.prototype.fuzzyFind=function(t,e){var s=this.selected+(e?-1:1),i;if(typeof t=="number"&&(t+=""),t&&t[0]==="/"&&t[t.length-1]==="/")try{t=new RegExp(t.slice(1,-1))}catch(h){}var n=typeof t=="string"?function(h){return!!~h.indexOf(t)}:t.test?t.test.bind(t):t;if(typeof n!="function"){if(this.screen.options.debug)throw new Error("fuzzyFind(): `test` is not a function.");return this.selected}if(e){for(i=s;i>=0;i--)if(n(l.cleanTags(this.ritems[i])))return i;for(i=this.ritems.length-1;i>s;i--)if(n(l.cleanTags(this.ritems[i])))return i}else{for(i=s;i<this.ritems.length;i++)if(n(l.cleanTags(this.ritems[i])))return i;for(i=0;i<s;i++)if(n(l.cleanTags(this.ritems[i])))return i}return this.selected},r.prototype.getItemIndex=function(t){if(typeof t=="number")return t;if(typeof t=="string"){var e=this.ritems.indexOf(t);if(~e)return e;for(e=0;e<this.ritems.length;e++)if(l.cleanTags(this.ritems[e])===t)return e;return-1}else return this.items.indexOf(t)},r.prototype.select=function(t){if(this.interactive){if(!this.items.length){this.selected=0,this.value="",this.scrollTo(0);return}typeof t=="object"&&(t=this.items.indexOf(t)),t<0?t=0:t>=this.items.length&&(t=this.items.length-1),!(this.selected===t&&this._listInitialized)&&(this._listInitialized=!0,this.selected=t,this.value=l.cleanTags(this.ritems[this.selected]),this.parent&&(this.scrollTo(this.selected),this.emit("select item",this.items[this.selected],this.selected)))}},r.prototype.move=function(t){this.select(this.selected+t)},r.prototype.up=function(t){this.move(-(t||1))},r.prototype.down=function(t){this.move(t||1)},r.prototype.pick=function(t,e){if(e||(e=t,t=null),!this.interactive)return e();var s=this,i=this.screen.focused;i&&i._done&&i._done("stop"),this.screen.saveFocus(),this.focus(),this.show(),this.select(0),t&&this.setLabel(t),this.screen.render(),this.once("action",function(n,h){return t&&s.removeLabel(),s.screen.restoreFocus(),s.hide(),s.screen.render(),n?e(null,l.cleanTags(s.ritems[h])):e()})},r.prototype.enterSelected=function(t){t!=null&&this.select(t),this.emit("action",this.items[this.selected],this.selected),this.emit("select",this.items[this.selected],this.selected)},r.prototype.cancelSelected=function(t){t!=null&&this.select(t),this.emit("action"),this.emit("cancel")},module.exports=r; //# sourceMappingURL=list.js.map