Repo for the search and displace core module including the interface to select files and search and displace operations to run on them.
https://searchanddisplace.com
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1020 B
41 lines
1020 B
<template>
|
|
<div id="text-box" class="text-box">
|
|
<div ref="backdrop" class="backdrop">
|
|
<div class="matches" v-html="matches"></div>
|
|
</div>
|
|
|
|
<textarea ref="text"
|
|
v-model="text"
|
|
placeholder="Enter text to check matches"
|
|
@scroll="handleScroll">
|
|
</textarea>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import {Component, Prop, Vue} from "vue-property-decorator";
|
|
|
|
@Component
|
|
export default class TextBox extends Vue {
|
|
private text: string = '';
|
|
|
|
@Prop({default: ''})
|
|
public readonly pattern!: string;
|
|
@Prop()
|
|
public readonly flags!: Array<string>;
|
|
|
|
getMatches() {
|
|
return this.text
|
|
.replace(/\n$/g, '\n\n')
|
|
.replace(new RegExp(this.pattern, this.flags.join('')), '<mark>$&</mark>');
|
|
}
|
|
|
|
handleScroll() {
|
|
// this.$refs.backdrop.scrollTop = this.$refs.text.scrollTop;
|
|
}
|
|
|
|
get matches(): string {
|
|
return this.getMatches();
|
|
}
|
|
};
|
|
</script>
|