Skip to content

Commit 281c03a

Browse files
committed
docs: add TextReplacer component
1 parent f8d44d5 commit 281c03a

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

docs/components/TextReplacer.vue

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<template></template>
2+
3+
<script>
4+
import { watch, defineComponent, onMounted } from "vue";
5+
import { escapeRegExp } from "../utils/regex";
6+
7+
export default defineComponent({
8+
props: {
9+
container: {
10+
type: String,
11+
default: "body",
12+
},
13+
pattern: {
14+
type: String,
15+
required: true,
16+
},
17+
replacement: {
18+
type: String,
19+
required: true,
20+
},
21+
prefix: {
22+
type: String,
23+
default: "",
24+
},
25+
suffix: {
26+
type: String,
27+
default: "",
28+
},
29+
},
30+
setup: (props) => {
31+
const replaceDomText = (container, pattern, replacement) => {
32+
pattern = new RegExp(escapeRegExp(pattern), "g");
33+
document.querySelectorAll(container).forEach((el) => {
34+
el.innerHTML = el.innerHTML.replace(pattern, replacement);
35+
});
36+
};
37+
38+
let replacedText;
39+
onMounted(() => {
40+
watch(
41+
() => props.replacement,
42+
(value) => {
43+
if (props.replacement && props.replacement !== "") {
44+
const pattern = replacedText ? replacedText : props.pattern;
45+
const replacement = props.prefix + value + props.suffix;
46+
replaceDomText(props.container, pattern, replacement);
47+
replacedText = replacement;
48+
}
49+
},
50+
{ immediate: true }
51+
);
52+
});
53+
},
54+
});
55+
</script>

0 commit comments

Comments
 (0)