debian-mirror-gitlab/app/assets/javascripts/notes/components/note_body.vue

125 lines
2.8 KiB
Vue
Raw Normal View History

2018-03-17 18:26:18 +05:30
<script>
2018-05-09 12:01:36 +05:30
import $ from 'jquery';
import noteEditedText from './note_edited_text.vue';
import noteAwardsList from './note_awards_list.vue';
import noteAttachment from './note_attachment.vue';
import noteForm from './note_form.vue';
2019-01-03 12:48:30 +05:30
import TaskList from '../../task_list';
2018-05-09 12:01:36 +05:30
import autosave from '../mixins/autosave';
2018-03-17 18:26:18 +05:30
2018-05-09 12:01:36 +05:30
export default {
components: {
noteEditedText,
noteAwardsList,
noteAttachment,
noteForm,
},
mixins: [autosave],
props: {
note: {
type: Object,
required: true,
2018-03-17 18:26:18 +05:30
},
2018-05-09 12:01:36 +05:30
canEdit: {
type: Boolean,
required: true,
2018-03-17 18:26:18 +05:30
},
2018-05-09 12:01:36 +05:30
isEditing: {
type: Boolean,
required: false,
default: false,
2018-03-17 18:26:18 +05:30
},
2018-05-09 12:01:36 +05:30
},
computed: {
noteBody() {
return this.note.note;
},
},
mounted() {
this.renderGFM();
2019-01-03 12:48:30 +05:30
this.initTaskList();
2018-05-09 12:01:36 +05:30
if (this.isEditing) {
2018-11-08 19:23:39 +05:30
this.initAutoSave(this.note);
2018-05-09 12:01:36 +05:30
}
},
updated() {
2019-01-03 12:48:30 +05:30
this.initTaskList();
2018-05-09 12:01:36 +05:30
this.renderGFM();
2018-03-17 18:26:18 +05:30
2018-05-09 12:01:36 +05:30
if (this.isEditing) {
if (!this.autosave) {
2018-11-08 19:23:39 +05:30
this.initAutoSave(this.note);
2018-05-09 12:01:36 +05:30
} else {
this.setAutoSave();
2018-03-17 18:26:18 +05:30
}
2018-05-09 12:01:36 +05:30
}
},
methods: {
renderGFM() {
$(this.$refs['note-body']).renderGFM();
2018-03-17 18:26:18 +05:30
},
2019-01-03 12:48:30 +05:30
initTaskList() {
if (this.canEdit) {
this.taskList = new TaskList({
dataType: 'note',
fieldName: 'note',
selector: '.notes',
});
}
},
2018-05-09 12:01:36 +05:30
handleFormUpdate(note, parentElement, callback) {
this.$emit('handleFormUpdate', note, parentElement, callback);
},
formCancelHandler(shouldConfirm, isDirty) {
2018-11-08 19:23:39 +05:30
this.$emit('cancelForm', shouldConfirm, isDirty);
2018-03-17 18:26:18 +05:30
},
2018-05-09 12:01:36 +05:30
},
};
2018-03-17 18:26:18 +05:30
</script>
<template>
2019-01-03 12:48:30 +05:30
<div
ref="note-body"
:class="{ 'js-task-list-container': canEdit }"
class="note-body">
<div
class="note-text md"
v-html="note.note_html"></div>
2018-03-17 18:26:18 +05:30
<note-form
v-if="isEditing"
ref="noteForm"
:is-editing="isEditing"
:note-body="noteBody"
:note-id="note.id"
2018-11-08 19:23:39 +05:30
:markdown-version="note.cached_markdown_version"
@handleFormUpdate="handleFormUpdate"
@cancelForm="formCancelHandler"
2018-03-17 18:26:18 +05:30
/>
<textarea
v-if="canEdit"
v-model="note.note"
:data-update-url="note.path"
2019-01-03 12:48:30 +05:30
class="hidden js-task-list-field"></textarea>
2018-03-17 18:26:18 +05:30
<note-edited-text
v-if="note.last_edited_at"
:edited-at="note.last_edited_at"
:edited-by="note.last_edited_by"
action-text="Edited"
2018-11-08 19:23:39 +05:30
class="note_edited_ago"
2018-03-17 18:26:18 +05:30
/>
<note-awards-list
2018-12-05 23:21:45 +05:30
v-if="note.award_emoji && note.award_emoji.length"
2018-03-17 18:26:18 +05:30
:note-id="note.id"
:note-author-id="note.author.id"
:awards="note.award_emoji"
:toggle-award-path="note.toggle_award_path"
2018-05-09 12:01:36 +05:30
:can-award-emoji="note.current_user.can_award_emoji"
2018-03-17 18:26:18 +05:30
/>
2019-01-03 12:48:30 +05:30
<note-attachment
v-if="note.attachment"
:attachment="note.attachment"
/>
2018-03-17 18:26:18 +05:30
</div>
</template>