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