summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/issue_show
diff options
context:
space:
mode:
authorPhil Hughes <me@iamphill.com>2017-05-12 15:52:45 +0100
committerPhil Hughes <me@iamphill.com>2017-05-15 12:15:56 +0100
commitb5b5b4af0c390a9246e0ef6051b95af1c5e40297 (patch)
treefec0ebf3e71492921c85ea81aacb9f6130525f30 /app/assets/javascripts/issue_show
parentb1affe07a1ff0b7f10cdc94b91dfea97d92b015c (diff)
downloadgitlab-ce-b5b5b4af0c390a9246e0ef6051b95af1c5e40297.tar.gz
Added description field to inline edit form
[ci skip]
Diffstat (limited to 'app/assets/javascripts/issue_show')
-rw-r--r--app/assets/javascripts/issue_show/components/app.vue25
-rw-r--r--app/assets/javascripts/issue_show/components/description.vue55
-rw-r--r--app/assets/javascripts/issue_show/components/fields/description.vue40
-rw-r--r--app/assets/javascripts/issue_show/index.js4
-rw-r--r--app/assets/javascripts/issue_show/stores/index.js1
5 files changed, 96 insertions, 29 deletions
diff --git a/app/assets/javascripts/issue_show/components/app.vue b/app/assets/javascripts/issue_show/components/app.vue
index 5c253bfd0c1..695d849e017 100644
--- a/app/assets/javascripts/issue_show/components/app.vue
+++ b/app/assets/javascripts/issue_show/components/app.vue
@@ -41,8 +41,8 @@ export default {
required: false,
default: '',
},
- showForm: {
- type: Boolean,
+ markdownPreviewUrl: {
+ type: String,
required: true,
},
},
@@ -71,6 +71,13 @@ export default {
editActions,
},
methods: {
+ openForm() {
+ this.showForm = true;
+ this.store.formState = {
+ title: this.state.titleText,
+ description: this.state.descriptionText,
+ };
+ },
updateIssuable() {
this.service.updateIssuable(this.formState)
.then(() => {
@@ -96,14 +103,6 @@ export default {
});
},
},
- methods: {
- openForm() {
- this.showForm = true;
- this.store.formState = {
- title: this.state.titleText,
- };
- },
- },
created() {
this.service = new Service(this.endpoint);
this.poll = new Poll({
@@ -150,12 +149,14 @@ export default {
:title-html="state.titleHtml"
:title-text="state.titleText" />
<description-component
- v-if="state.descriptionHtml"
+ :store="store"
+ :show-form="showForm"
:can-update="canUpdate"
:description-html="state.descriptionHtml"
:description-text="state.descriptionText"
:updated-at="state.updatedAt"
- :task-status="state.taskStatus" />
+ :task-status="state.taskStatus"
+ :markdown-preview-url="markdownPreviewUrl" />
<edit-actions
v-if="canUpdate && showForm"
:can-destroy="canDestroy" />
diff --git a/app/assets/javascripts/issue_show/components/description.vue b/app/assets/javascripts/issue_show/components/description.vue
index 4ad3eb7dfd7..b7a0a1bf7e4 100644
--- a/app/assets/javascripts/issue_show/components/description.vue
+++ b/app/assets/javascripts/issue_show/components/description.vue
@@ -1,5 +1,6 @@
<script>
import animateMixin from '../mixins/animate';
+ import descriptionField from './fields/description.vue';
export default {
mixins: [animateMixin],
@@ -24,6 +25,18 @@
type: String,
required: true,
},
+ store: {
+ type: Object,
+ required: true,
+ },
+ showForm: {
+ type: Boolean,
+ required: true,
+ },
+ markdownPreviewUrl: {
+ type: String,
+ required: true,
+ },
},
data() {
return {
@@ -75,6 +88,9 @@
}
},
},
+ components: {
+ descriptionField,
+ },
mounted() {
this.renderGFM();
},
@@ -82,24 +98,31 @@
</script>
<template>
- <div
- class="description"
- :class="{
- 'js-task-list-container': canUpdate
- }">
+ <div :class="{ 'common-note-form': showForm }">
+ <description-field
+ v-if="showForm"
+ :store="store"
+ :markdown-preview-url="markdownPreviewUrl" />
<div
- class="wiki"
+ v-else-if="descriptionHtml"
+ class="description"
:class="{
- 'issue-realtime-pre-pulse': preAnimation,
- 'issue-realtime-trigger-pulse': pulseAnimation
- }"
- v-html="descriptionHtml"
- ref="gfm-content">
+ 'js-task-list-container': canUpdate
+ }">
+ <div
+ class="wiki"
+ :class="{
+ 'issue-realtime-pre-pulse': preAnimation,
+ 'issue-realtime-trigger-pulse': pulseAnimation
+ }"
+ v-html="descriptionHtml"
+ ref="gfm-content">
+ </div>
+ <textarea
+ class="hidden js-task-list-field"
+ v-if="descriptionText"
+ v-model="descriptionText">
+ </textarea>
</div>
- <textarea
- class="hidden js-task-list-field"
- v-if="descriptionText"
- v-model="descriptionText">
- </textarea>
</div>
</template>
diff --git a/app/assets/javascripts/issue_show/components/fields/description.vue b/app/assets/javascripts/issue_show/components/fields/description.vue
new file mode 100644
index 00000000000..d131c0d75ea
--- /dev/null
+++ b/app/assets/javascripts/issue_show/components/fields/description.vue
@@ -0,0 +1,40 @@
+<script>
+ /* global Flash */
+ import markdownField from '../../../vue_shared/components/markdown/field.vue';
+
+ export default {
+ props: {
+ store: {
+ type: Object,
+ required: true,
+ },
+ markdownPreviewUrl: {
+ type: String,
+ required: true,
+ },
+ },
+ data() {
+ return {
+ state: this.store.formState,
+ };
+ },
+ components: {
+ markdownField,
+ },
+ };
+</script>
+
+<template>
+ <div>
+ <markdown-field
+ :markdown-preview-url="markdownPreviewUrl">
+ <textarea
+ class="note-textarea js-gfm-input js-autosize markdown-area"
+ data-supports-slash-commands="false"
+ v-model="state.description"
+ ref="textatea"
+ slot="textarea">
+ </textarea>
+ </markdown-field>
+ </div>
+</template>
diff --git a/app/assets/javascripts/issue_show/index.js b/app/assets/javascripts/issue_show/index.js
index 58a8d0590e1..77c77237647 100644
--- a/app/assets/javascripts/issue_show/index.js
+++ b/app/assets/javascripts/issue_show/index.js
@@ -25,6 +25,7 @@ document.addEventListener('DOMContentLoaded', () => {
canDestroy,
endpoint,
issuableRef,
+ markdownPreviewUrl,
} = issuableElement.dataset;
return {
@@ -35,6 +36,7 @@ document.addEventListener('DOMContentLoaded', () => {
initialTitle: issuableTitleElement.innerHTML,
initialDescriptionHtml: issuableDescriptionElement ? issuableDescriptionElement.innerHTML : '',
initialDescriptionText: issuableDescriptionTextarea ? issuableDescriptionTextarea.textContent : '',
+ markdownPreviewUrl,
};
},
render(createElement) {
@@ -47,7 +49,7 @@ document.addEventListener('DOMContentLoaded', () => {
initialTitle: this.initialTitle,
initialDescriptionHtml: this.initialDescriptionHtml,
initialDescriptionText: this.initialDescriptionText,
- showForm: this.showForm,
+ markdownPreviewUrl: this.markdownPreviewUrl,
},
});
},
diff --git a/app/assets/javascripts/issue_show/stores/index.js b/app/assets/javascripts/issue_show/stores/index.js
index 0ab52c307a0..3232875000d 100644
--- a/app/assets/javascripts/issue_show/stores/index.js
+++ b/app/assets/javascripts/issue_show/stores/index.js
@@ -14,6 +14,7 @@ export default class Store {
};
this.formState = {
title: '',
+ description: '',
};
}