From b5b5b4af0c390a9246e0ef6051b95af1c5e40297 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 12 May 2017 15:52:45 +0100 Subject: [PATCH] Added description field to inline edit form [ci skip] --- app/assets/javascripts/dropzone_input.js | 3 +- .../javascripts/issue_show/components/app.vue | 25 ++--- .../issue_show/components/description.vue | 55 +++++++--- .../components/fields/description.vue | 40 +++++++ app/assets/javascripts/issue_show/index.js | 4 +- .../javascripts/issue_show/stores/index.js | 1 + .../vue_shared/components/markdown/field.vue | 102 ++++++++++++++++++ .../vue_shared/components/markdown/header.vue | 97 +++++++++++++++++ .../components/markdown/toolbar.vue | 26 +++++ .../components/markdown/toolbar_button.vue | 48 +++++++++ app/views/projects/issues/show.html.haml | 1 + 11 files changed, 372 insertions(+), 30 deletions(-) create mode 100644 app/assets/javascripts/issue_show/components/fields/description.vue create mode 100644 app/assets/javascripts/vue_shared/components/markdown/field.vue create mode 100644 app/assets/javascripts/vue_shared/components/markdown/header.vue create mode 100644 app/assets/javascripts/vue_shared/components/markdown/toolbar.vue create mode 100644 app/assets/javascripts/vue_shared/components/markdown/toolbar_button.vue diff --git a/app/assets/javascripts/dropzone_input.js b/app/assets/javascripts/dropzone_input.js index b3a76fbb43e..3843539a3b8 100644 --- a/app/assets/javascripts/dropzone_input.js +++ b/app/assets/javascripts/dropzone_input.js @@ -142,7 +142,8 @@ window.DropzoneInput = (function() { $(child).val(beforeSelection + formattedText + afterSelection); textarea.setSelectionRange(caretStart + formattedText.length, caretEnd + formattedText.length); textarea.style.height = `${textarea.scrollHeight}px`; - return form_textarea.trigger("input"); + form_textarea.trigger("input"); + form_textarea.get(0).dispatchEvent(new Event('input')); }; getFilename = function(e) { var value; 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" /> + :task-status="state.taskStatus" + :markdown-preview-url="markdownPreviewUrl" /> 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 @@ 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 @@ + + + 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: '', }; } diff --git a/app/assets/javascripts/vue_shared/components/markdown/field.vue b/app/assets/javascripts/vue_shared/components/markdown/field.vue new file mode 100644 index 00000000000..d0424a18579 --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/markdown/field.vue @@ -0,0 +1,102 @@ + + + diff --git a/app/assets/javascripts/vue_shared/components/markdown/header.vue b/app/assets/javascripts/vue_shared/components/markdown/header.vue new file mode 100644 index 00000000000..4c9f112a2ab --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/markdown/header.vue @@ -0,0 +1,97 @@ + + + diff --git a/app/assets/javascripts/vue_shared/components/markdown/toolbar.vue b/app/assets/javascripts/vue_shared/components/markdown/toolbar.vue new file mode 100644 index 00000000000..47f41ba4c03 --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/markdown/toolbar.vue @@ -0,0 +1,26 @@ + + + diff --git a/app/assets/javascripts/vue_shared/components/markdown/toolbar_button.vue b/app/assets/javascripts/vue_shared/components/markdown/toolbar_button.vue new file mode 100644 index 00000000000..c87a3c1e910 --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/markdown/toolbar_button.vue @@ -0,0 +1,48 @@ + + + diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml index d0783009a58..a552771d167 100644 --- a/app/views/projects/issues/show.html.haml +++ b/app/views/projects/issues/show.html.haml @@ -55,6 +55,7 @@ "can-update" => can?(current_user, :update_issue, @issue).to_s, "can-destroy" => can?(current_user, :destroy_issue, @issue).to_s, "issuable-ref" => @issue.to_reference, + "markdown-preview-url" => preview_markdown_path(@project), } } %h2.title= markdown_field(@issue, :title) - if @issue.description.present?