mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-28 13:06:13 +00:00
Pass content of the textEditor to the symfony form
This commit is contained in:
parent
a6eb28175a
commit
dcd1777a70
@ -43,7 +43,7 @@ class CommentType extends AbstractType
|
|||||||
|
|
||||||
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
|
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
|
||||||
$data = $event->getForm()->getData();
|
$data = $event->getForm()->getData();
|
||||||
$comment = $event->getData() ?? ['comment' => ''];
|
$comment = ['comment' => $event->getData()] ?? ['comment' => ''];
|
||||||
|
|
||||||
if (null !== $data && $data->getComment() !== $comment['comment']) {
|
if (null !== $data && $data->getComment() !== $comment['comment']) {
|
||||||
$data->setDate(new \DateTime());
|
$data->setDate(new \DateTime());
|
||||||
|
@ -33,3 +33,7 @@
|
|||||||
.editor-wrapper {
|
.editor-wrapper {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.hidden-textarea {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
@ -2,7 +2,7 @@ import App from "../../vuejs/CommentEditor/App.vue"
|
|||||||
import { createApp, reactive } from "vue";
|
import { createApp, reactive } from "vue";
|
||||||
|
|
||||||
const ckeditorFields: NodeListOf<HTMLTextAreaElement> =
|
const ckeditorFields: NodeListOf<HTMLTextAreaElement> =
|
||||||
document.querySelectorAll(".vue-comment-editor");
|
document.querySelectorAll("[id^='comment-app']");
|
||||||
|
|
||||||
const globalState = reactive({
|
const globalState = reactive({
|
||||||
isSimple: localStorage.getItem('editorMode') === 'simple'
|
isSimple: localStorage.getItem('editorMode') === 'simple'
|
||||||
@ -12,8 +12,8 @@ window.addEventListener('storage', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
ckeditorFields.forEach((field: HTMLTextAreaElement): void => {
|
ckeditorFields.forEach((field: HTMLTextAreaElement): void => {
|
||||||
console.log('field', field)
|
const app = createApp(App,{
|
||||||
const app = createApp({
|
fieldName: field.dataset.fieldName,
|
||||||
template: `<app></app>`
|
template: `<app></app>`
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<comment-editor :isSimple="globalState.isSimple" @toggle="toggleEditorMode" @change="handleChange"></comment-editor>
|
<comment-editor
|
||||||
|
:isSimple="globalState.isSimple"
|
||||||
|
:fieldName="fieldName"
|
||||||
|
@toggle="toggleEditorMode"
|
||||||
|
></comment-editor>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -13,22 +17,19 @@ import CommentEditor from "../CommentEditor/component/CommentEditor.vue";
|
|||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "App",
|
name: "App",
|
||||||
components: { CommentEditor },
|
components: { CommentEditor },
|
||||||
|
props: {
|
||||||
|
fieldName: String
|
||||||
|
},
|
||||||
setup() {
|
setup() {
|
||||||
console.log('im loaded')
|
|
||||||
const globalState = inject('globalState');
|
const globalState = inject('globalState');
|
||||||
const toggleEditorMode = () => {
|
const toggleEditorMode = () => {
|
||||||
globalState.isSimple = !globalState.isSimple;
|
globalState.isSimple = !globalState.isSimple;
|
||||||
localStorage.setItem('editorMode', globalState.isSimple ? 'simple' : 'rich');
|
localStorage.setItem('editorMode', globalState.isSimple ? 'simple' : 'rich');
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleChange = (newContent) => {
|
|
||||||
console.log(newContent)
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
globalState,
|
globalState,
|
||||||
toggleEditorMode,
|
toggleEditorMode,
|
||||||
handleChange
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -2,20 +2,18 @@
|
|||||||
<div :class="{'editor-container': true, 'rich-editor-active': !isSimple}">
|
<div :class="{'editor-container': true, 'rich-editor-active': !isSimple}">
|
||||||
<div v-if="!isSimple" class="editor-wrapper">
|
<div v-if="!isSimple" class="editor-wrapper">
|
||||||
<ckeditor
|
<ckeditor
|
||||||
name="content"
|
:name="fieldName"
|
||||||
:editor="classicEditor"
|
:editor="classicEditor"
|
||||||
:config="editorConfig"
|
:config="editorConfig"
|
||||||
v-model="content"
|
v-model.lazy="content"
|
||||||
tag-name="textarea"
|
tag-name="textarea"
|
||||||
@input="emitChange"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="editor-wrapper">
|
<div v-else class="editor-wrapper">
|
||||||
<textarea
|
<textarea
|
||||||
v-model="content"
|
v-model.lazy="content"
|
||||||
name="content"
|
:name="fieldName"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
@input="emitChange"
|
|
||||||
></textarea>
|
></textarea>
|
||||||
</div>
|
</div>
|
||||||
<a @click="toggleSimpleEditor" class="toggle-button">{{ isSimple ? "rich" : "simple" }}</a>
|
<a @click="toggleSimpleEditor" class="toggle-button">{{ isSimple ? "rich" : "simple" }}</a>
|
||||||
@ -23,7 +21,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, ref, watch, toRefs } from 'vue';
|
import { defineComponent, ref, computed, toRefs } from 'vue';
|
||||||
import { Ckeditor } from "@ckeditor/ckeditor5-vue";
|
import { Ckeditor } from "@ckeditor/ckeditor5-vue";
|
||||||
import classicEditorConfig from "ChillMainAssets/module/ckeditor5/editor_config";
|
import classicEditorConfig from "ChillMainAssets/module/ckeditor5/editor_config";
|
||||||
import { ClassicEditor } from "ckeditor5";
|
import { ClassicEditor } from "ckeditor5";
|
||||||
@ -36,9 +34,9 @@ export default defineComponent({
|
|||||||
props: {
|
props: {
|
||||||
type: String,
|
type: String,
|
||||||
isSimple: Boolean,
|
isSimple: Boolean,
|
||||||
|
fieldName: String,
|
||||||
},
|
},
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
console.log("im loaded too")
|
|
||||||
const { isSimple } = toRefs(props);
|
const { isSimple } = toRefs(props);
|
||||||
const content = ref("");
|
const content = ref("");
|
||||||
const classicEditor = ClassicEditor;
|
const classicEditor = ClassicEditor;
|
||||||
@ -48,22 +46,13 @@ export default defineComponent({
|
|||||||
emit("toggle");
|
emit("toggle");
|
||||||
};
|
};
|
||||||
|
|
||||||
const emitChange = () => {
|
|
||||||
emit("change", content.value);
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
isSimple,
|
isSimple,
|
||||||
content,
|
content,
|
||||||
classicEditor,
|
classicEditor,
|
||||||
editorConfig,
|
editorConfig,
|
||||||
toggleSimpleEditor,
|
toggleSimpleEditor,
|
||||||
emitChange
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
@ -214,7 +214,7 @@
|
|||||||
|
|
||||||
{% block private_comment_widget %}
|
{% block private_comment_widget %}
|
||||||
{% for entry in form %}
|
{% for entry in form %}
|
||||||
<div class="vue-comment-editor">
|
<div id="comment-app-{{ form.vars.id }}" data-field-name="{{ form.vars.full_name }}">
|
||||||
{{ form_widget(entry, { attr: { ckeditor: 'true' } }) }}
|
{{ form_widget(entry, { attr: { ckeditor: 'true' } }) }}
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@ -226,7 +226,7 @@
|
|||||||
|
|
||||||
{% block comment_widget %}
|
{% block comment_widget %}
|
||||||
{% for entry in form %}
|
{% for entry in form %}
|
||||||
<div class="vue-comment-editor">
|
<div id="comment-app-{{ form.vars.id }}" data-field-name="{{ form.vars.full_name }}">
|
||||||
{{ form_widget(entry, { attr: { ckeditor: 'true' } }) }}
|
{{ form_widget(entry, { attr: { ckeditor: 'true' } }) }}
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -120,8 +120,4 @@ module.exports = function (encore, entries) {
|
|||||||
"vue_onthefly",
|
"vue_onthefly",
|
||||||
__dirname + "/Resources/public/vuejs/OnTheFly/index.js",
|
__dirname + "/Resources/public/vuejs/OnTheFly/index.js",
|
||||||
);
|
);
|
||||||
encore.addEntry(
|
|
||||||
"vue_comment_editor",
|
|
||||||
__dirname + "/Resources/public/vuejs/CommentEditor/index.js",
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user