@nextcloud/vue
Version:
Nextcloud vue components
2 lines (1 loc) • 1.73 kB
JavaScript
"use strict";const l=require("./_plugin-vue2_normalizer-764a4c12.cjs"),i=(e,t)=>{const h=[];let s=0,n=e.toLowerCase().indexOf(t.toLowerCase(),s),r=0;for(;n>-1&&r<e.length;)s=n+t.length,h.push({start:n,end:s}),n=e.toLowerCase().indexOf(t.toLowerCase(),s),r++;return h},g={name:"NcHighlight",props:{text:{type:String,default:""},search:{type:String,default:""},highlight:{type:Array,default:()=>[]}},computed:{ranges(){let e=[];return!this.search&&this.highlight.length===0||(this.highlight.length>0?e=this.highlight:e=i(this.text,this.search),e.forEach((t,h)=>{t.end<t.start&&(e[h]={start:t.end,end:t.start})}),e=e.reduce((t,h)=>(h.start<this.text.length&&h.end>0&&t.push({start:h.start<0?0:h.start,end:h.end>this.text.length?this.text.length:h.end}),t),[]),e.sort((t,h)=>t.start-h.start),e=e.reduce((t,h)=>{if(!t.length)t.push(h);else{const s=t.length-1;t[s].end>=h.start?t[s]={start:t[s].start,end:Math.max(t[s].end,h.end)}:t.push(h)}return t},[])),e},chunks(){if(this.ranges.length===0)return[{start:0,end:this.text.length,highlight:!1,text:this.text}];const e=[];let t=0,h=0;for(;t<this.text.length;){const s=this.ranges[h];if(s.start===t){e.push({...s,highlight:!0,text:this.text.slice(s.start,s.end)}),h++,t=s.end,h>=this.ranges.length&&t<this.text.length&&(e.push({start:t,end:this.text.length,highlight:!1,text:this.text.slice(t)}),t=this.text.length);continue}e.push({start:t,end:s.start,highlight:!1,text:this.text.slice(t,s.start)}),t=s.start}return e}},render(e){return this.ranges.length?e("span",{},this.chunks.map(t=>t.highlight?e("strong",{},t.text):t.text)):e("span",{},this.text)}},a=null,u=null;var o=l.normalizeComponent(g,a,u,!1,null,null,null,null);const d=o.exports;exports.FindRanges=i,exports.NcHighlight=d;