jsDelivr ts-profanity-filter demo
HTML
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/index.min.js"></script>
<textarea id="draft"></textarea>
<p id="output"></p>
<style>
.redacted { background: currentColor; border-radius: 1px; }
</style>
<script type="module">
import { filterFWordsToSegments } from 'https://esm.sh/ts-profanity-filter';
const draft = document.getElementById('draft');
const output = document.getElementById('output');
function render() {
const segments = filterFWordsToSegments(draft.value, { languages: ['en', 'de'] });
output.replaceChildren(
...segments.map((seg) => {
const node = document.createElement('span');
if (seg.isProfane) node.className = 'redacted';
node.textContent = seg.text; // textContent, never innerHTML
return node;
}),
);
}
draft.addEventListener('input', render);
render();
</script>