@progress/kendo-vue-editor
Version:
9 lines (8 loc) • 9.26 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the package root for more information
*-------------------------------------------------------------------------------------------
*/
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("vue"),f=require("@progress/kendo-vue-buttons"),m=require("@progress/kendo-svg-icons"),z=require("@progress/kendo-vue-dialogs"),x=require("@progress/kendo-vue-layout"),K=require("@progress/kendo-vue-intl"),l=require("../messages/main.js"),P=require("../config/toolsSettings.js"),U=require("../tools/utils.js"),r=require("@progress/kendo-editor-common"),$=require("@progress/kendo-vue-common"),H=require("@progress/kendo-vue-labels");function b(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!t.isVNode(e)}const G=13,J=27,Q=P.EditorToolsSettings.findAndReplace,X=t.defineComponent({name:"KendoFindAndReplaceDialog",emits:{close:null},props:{view:Object,settings:{type:Object,default:function(){return Q}},dir:String},inject:{kendoLocalizationService:{default:null}},created(){this._prevMatch=void 0,this.nextMatch=void 0},data(){return{selectedTab:0,searchText:r.selectedLineTextOnly(this.$props.view.state),replaceText:"",matchCase:!1,matchWord:!1,matchCyclic:!1,useRegExp:!1,matches:[],hasMounted:!1}},mounted(){this.$el&&document.body.append(this.$el),this.setNextState(),this.hasMounted=!0,setTimeout(function(){const e=document.getElementById("findWhatFind");e&&e.focus()},10)},updated(){const e=this.matches||[],s=this.nextMatch,a=this.$props.view;if(this._prevMatch!==s){const c=a.state,o=c.tr,n=[];e.forEach(i=>{n.push({from:i.from,to:i.to,attrs:{class:s&&i.eq(s)?"k-text-selected":"k-text-highlighted"}})}),o.setMeta(r.textHighlightKey,n),o.setSelection(s||r.TextSelection.create(c.doc,c.selection.from)),a.dispatch(o)}},unmounted(){this.$el&&this.$el.remove()},render(){let e,s;const a=K.provideLocalizationService(this),{findReplaceDialogTitle:c,findReplaceTabFind:o,findReplaceTabReplace:n,findReplaceFindWhat:i,findReplaceReplaceWith:d,findReplaceReplace:p,findReplaceReplaceAll:g,findReplaceMatchCase:S,findReplaceMatchWord:N,findReplaceMatchCyclic:v,findReplaceUseRegExp:C,findReplacePrevMatch:V,findReplaceNextMatch:R,findReplaceMatches:y}=this.settings.messages,{matchCase:F,matchWord:E,matchCyclic:q,useRegExp:I,searchText:B,replaceText:_,nextMatch:M,error:k}=this,T=t.createVNode("div",{class:"k-search-options"},[t.createVNode("span",null,[t.createVNode("input",{class:"k-checkbox k-checkbox-md k-rounded-md",type:"checkbox",id:"match-case",checked:F,onChange:this.onMatchCaseChecked},null),t.createVNode("label",{for:"match-case",class:"k-checkbox-label"},[a.toLanguageString(S,l.messages[S])])]),t.createVNode("span",null,[t.createVNode("input",{class:"k-checkbox k-checkbox-md k-rounded-md",type:"checkbox",id:"match-whole",checked:E,onChange:this.onMatchWordChecked},null),t.createVNode("label",{for:"match-whole",class:"k-checkbox-label"},[a.toLanguageString(N,l.messages[N])])]),t.createVNode("span",null,[t.createVNode("input",{class:"k-checkbox k-checkbox-md k-rounded-md",type:"checkbox",id:"match-cyclic",checked:q,onChange:this.onMatchCyclicChecked},null),t.createVNode("label",{for:"match-cyclic",class:"k-checkbox-label"},[a.toLanguageString(v,l.messages[v])])]),t.createVNode("span",null,[t.createVNode("input",{class:"k-checkbox k-checkbox-md k-rounded-md",type:"checkbox",id:"regular-expression",checked:I,onChange:this.onUseRegExpChecked},null),t.createVNode("label",{for:"regular-expression",class:"k-checkbox-label"},[a.toLanguageString(C,l.messages[C])])])]),w=function(u){const h=this.$props.dir==="rtl",O=t.createVNode(f.Button,{fillMode:"flat",themeColor:"primary",onClick:this.onFindPrev},{default:()=>[t.createVNode($.Icon,{name:`chevron-${h?"right":"left"}`,icon:h?m.chevronRightIcon:m.chevronLeftIcon},null),a.toLanguageString(V,l.messages[V])]}),D=t.createVNode(f.Button,{fillMode:"flat",themeColor:"primary",onClick:this.onFindNext},{default:()=>[a.toLanguageString(R,l.messages[R]),t.createVNode($.Icon,{name:`chevron-${h?"left":"right"}`,icon:h?m.chevronLeftIcon:m.chevronRightIcon},null)]});return t.createVNode("div",{class:"k-matches-container"},[O,this.hasMounted&&t.createVNode("span",{ref:u},[this.matchesMessage(a.toLanguageString(y,l.messages[y]))]),D])},L=function(u){return t.createVNode("div",{class:"k-edit-label"},[t.createVNode("label",{ref:u,for:u},[a.toLanguageString(i,l.messages[i])])])},W=function(u){let h;return t.createVNode("div",{class:"k-edit-field"},[t.createVNode("span",{class:"k-textbox k-input k-input-md k-rounded-md k-input-solid"},[t.createVNode("input",{id:u,ref:u,type:"text",class:"k-input-inner",value:B,onInput:this.onSearchChange,onFocus:this.onSearchChange,onKeydown:this.onKeyDown},null)]),k&&t.createVNode(H.Error,null,b(h=a.toLanguageString(k,l.messages[k]))?h:{default:()=>[h]})])},j=t.createVNode("div",{class:"k-edit-label"},[t.createVNode("label",{for:"replaceWith"},[a.toLanguageString(d,l.messages[d])])]),A=t.createVNode("div",{class:"k-edit-field"},[t.createVNode("span",{class:"k-textbox k-input k-input-md k-rounded-md k-input-solid"},[t.createVNode("input",{id:"replaceWith",class:"k-input-inner",type:"text",value:_,onInput:this.onReplaceChange},null)])]);return t.createVNode(z.Window,{title:a.toLanguageString(c,l.messages[c]),onClose:this.onClose,windowStyle:{width:"auto",height:"auto",userSelect:"none"},resizable:!1,minimizeButton:()=>null,maximizeButton:()=>null,dir:this.$props.dir},{default:()=>[t.createVNode(x.TabStrip,{dir:this.$props.dir,selected:this.selectedTab,class:"k-editor-find-replace",onSelect:this.onTabSelect,animation:!1},{default:()=>[t.createVNode(x.TabStripTab,{title:a.toLanguageString(o,l.messages[o])},{default:()=>[t.createVNode("div",{class:"k-edit-form-container"},[L.call(this,"findWhatFind"),W.call(this,"findWhatFind")]),t.createVNode("div",{class:"k-actions k-hstack k-justify-content-end"},null),T,w.call(this,"findWhatFind")]}),t.createVNode(x.TabStripTab,{title:a.toLanguageString(n,l.messages[n])},{default:()=>[t.createVNode("div",{class:"k-edit-form-container"},[L.call(this,"findWhatReplace"),W.call(this,"findWhatReplace"),j,A]),t.createVNode("div",{class:"k-actions k-hstack k-justify-content-end"},[t.createVNode(f.Button,{disabled:!M,onClick:this.onReplace},b(e=a.toLanguageString(p,l.messages[p]))?e:{default:()=>[e]}),t.createVNode(f.Button,{disabled:!M,onClick:this.onReplaceAll},b(s=a.toLanguageString(g,l.messages[g]))?s:{default:()=>[s]})]),T,w.call(this,"findWhatReplace")]})]})]})},methods:{onTabSelect(e){this.selectedTab=e.selected},onClose(){const e=this.$props.view,s=e.state,a=s.tr.setSelection(r.TextSelection.create(s.doc,s.selection.from,s.selection.to));e.updateState(s.apply(a)),e.focus(),this.$emit("close")},matchesMessage(e){const s=this.matches,a=this.nextMatch;let c=0,o=0;if(s&&a){const n=s.findIndex(i=>i.eq(a));c=n===-1?s.length:n+1,o=s.length}return U.formatString(e,c,o)},onFindNext(){this.onFind()},onFindPrev(){this.onFind(!0)},onFind(e=!1){const s=this.$props.view,{searchText:a,matchCase:c,matchCyclic:o,matchWord:n,useRegExp:i}=this.$data,d={text:a,matchWord:n,matchCase:c,useRegExp:i,backward:e,matchCyclic:o},p=r.find(s.state,d);if(p){const g=s.state.tr.setSelection(p);g.scrollIntoView(),s.updateState(s.state.apply(g)),this._prevMatch=this.nextMatch,this.nextMatch=p,this._prevMatch!==this.nextMatch&&this.$forceUpdate()}},onReplace(){const e=this.$props.view,s=e.state.selection,{replaceText:a}=this.$data;if(!s.empty){const c=s.from,o=c+a.length,n=r.replace(s,a,e.state.tr);n.setSelection(r.TextSelection.create(n.doc,c,o)),n.scrollIntoView(),e.dispatch(n),this.onFind(),this.setNextState({})}},onReplaceAll(){const e=this.$props.view,{searchText:s,replaceText:a,matchCase:c,matchWord:o,useRegExp:n}=this.$data,i={text:s,matchWord:o,matchCase:c,useRegExp:n},d=r.replaceAll(e.state,a,i);d&&(e.dispatch(d),this.setNextState({}))},onKeyDown(e){e.keyCode===G?this.onFindNext():e.keyCode===J&&this.onClose()},onMatchCaseChecked(e){this.matchCase=e.target.checked,this.setNextState()},onMatchWordChecked(e){this.matchWord=e.target.checked,this.setNextState()},onMatchCyclicChecked(e){this.matchCyclic=e.target.checked,this.setNextState()},onUseRegExpChecked(e){this.useRegExp=e.target.checked,this.setNextState()},onSearchChange(e){this.searchText=e.target.value,this.setNextState()},onReplaceChange(e){this.replaceText=e.target.value,this.setNextState()},setNextState(){const e=this.$props.view;if(this.searchText){const s={text:this.searchText,matchWord:this.matchWord,matchCase:this.matchCase,useRegExp:this.useRegExp},a=e.state.selection;let c=[],o;try{c=r.findAll(e.state.doc,s)}catch(i){i instanceof SyntaxError&&(o=this.settings.messages.findReplaceInvalidRegExp)}const n=!this.searchText&&c[0]||c.find(i=>i.from>=a.from)||this.matchCyclic&&c[0]||void 0;this._prevMatch=this.nextMatch,this.matches=c,this.nextMatch=n,this.error=o}else this._prevMatch=this.nextMatch,this.matches=[],this.nextMatch=void 0,this.error=void 0}}});exports.FindAndReplaceDialog=X;