Files
classquiz-ai/frontend/src/lib/inline-editor.svelte
T

105 lines
2.0 KiB
Svelte

<!--
SPDX-FileCopyrightText: 2023 Marlon W (Mawoka)
SPDX-License-Identifier: MPL-2.0
-->
<script lang="ts">
import { run } from 'svelte/legacy';
import {
BalloonEditor,
Essentials,
Autoformat,
Bold,
Italic,
Paragraph,
TextTransformation,
Superscript,
Subscript,
Strikethrough
} from 'ckeditor5';
import 'ckeditor5/ckeditor5.css';
const triggerChange = () => {
text = editor.getData();
};
import { onMount } from 'svelte';
interface Props {
// import Autoformat from "@ckeditor/ckeditor5-autoformat/src/autoformat"
text?: string;
}
let { text = $bindable('') }: Props = $props();
let html_el = $state();
run(() => {
text = text.replace('<p>', '').replace('</p>', '');
});
let editor;
onMount(() => {
class Editor extends BalloonEditor {
static builtinPlugins = [
Essentials,
Autoformat,
Bold,
Italic,
Paragraph,
TextTransformation,
Strikethrough,
Subscript,
Superscript
];
static defaultConfig = {
language: 'en'
};
}
// BalloonEditor.builtinPlugins = [Strikethrough]
Editor.create(html_el, {
licenseKey: 'GPL',
// plugins: [Strikethrough],
config: {
enterMode: BalloonEditor.ENTER_DIV,
shiftEnterMode: BalloonEditor.ENTER_BR
},
toolbar: [
'bold',
'italic',
'strikethrough',
'superscript',
'subscript',
'|',
'undo',
'redo'
]
})
.then((newEditor) => {
editor = newEditor;
editor.setData(text);
editor.model.document.on('change:data', () => {
triggerChange();
});
})
.catch((error) => {
console.error('There was a problem initializing the editor.', error);
});
});
</script>
<div class="w-fit rounded-lg border-gray-500 border">
<div
bind:this={html_el}
contenteditable="true"
class="rounded-lg border-gray-500 border text-center w-fit h-fit resize-none dark:bg-gray-500 min-w-[5rem] dark:text-white"
></div>
</div>
<style>
:global(.ck-powered-by) {
display: none;
}
</style>