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 b4034849c71..eb594cfb60b 100644 --- a/app/assets/javascripts/issue_show/components/app.vue +++ b/app/assets/javascripts/issue_show/components/app.vue @@ -41,6 +41,14 @@ export default { required: false, default: '', }, + markdownPreviewUrl: { + type: String, + required: true, + }, + markdownDocs: { + type: String, + required: true, + }, }, data() { const store = new Store({ @@ -70,6 +78,7 @@ export default { this.showForm = true; this.store.formState = { title: this.state.titleText, + description: this.state.descriptionText, }; }, closeForm() { @@ -144,7 +153,9 @@ export default { + :can-destroy="canDestroy" + :markdown-docs="markdownDocs" + :markdown-preview-url="markdownPreviewUrl" />
+ + + + +
+ diff --git a/app/assets/javascripts/issue_show/components/form.vue b/app/assets/javascripts/issue_show/components/form.vue index 7dd8ffb5af2..7732a1c194a 100644 --- a/app/assets/javascripts/issue_show/components/form.vue +++ b/app/assets/javascripts/issue_show/components/form.vue @@ -1,5 +1,6 @@ + + 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..7884b25c5ef --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/markdown/header.vue @@ -0,0 +1,101 @@ + + + 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..93252293ba6 --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/markdown/toolbar.vue @@ -0,0 +1,33 @@ + + + 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..096be507625 --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/markdown/toolbar_button.vue @@ -0,0 +1,58 @@ + + + diff --git a/app/assets/javascripts/vue_shared/mixins/tooltip.js b/app/assets/javascripts/vue_shared/mixins/tooltip.js index 9bb948bff66..2e3b716a36c 100644 --- a/app/assets/javascripts/vue_shared/mixins/tooltip.js +++ b/app/assets/javascripts/vue_shared/mixins/tooltip.js @@ -1,9 +1,17 @@ export default { mounted() { - $(this.$refs.tooltip).tooltip(); + this.$nextTick(() => { + $(this.$refs.tooltip).tooltip(); + }); }, updated() { - $(this.$refs.tooltip).tooltip('fixTitle'); + this.$nextTick(() => { + $(this.$refs.tooltip).tooltip('fixTitle'); + }); + }, + + beforeDestroy() { + $(this.$refs.tooltip).tooltip('destroy'); }, }; diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml index d0783009a58..2b095648dcf 100644 --- a/app/views/projects/issues/show.html.haml +++ b/app/views/projects/issues/show.html.haml @@ -55,6 +55,8 @@ "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), + "markdown-docs" => help_page_path('user/markdown'), } } %h2.title= markdown_field(@issue, :title) - if @issue.description.present? diff --git a/spec/javascripts/issue_show/components/app_spec.js b/spec/javascripts/issue_show/components/app_spec.js index 7dea9c04b7b..22b0a0f7046 100644 --- a/spec/javascripts/issue_show/components/app_spec.js +++ b/spec/javascripts/issue_show/components/app_spec.js @@ -75,18 +75,6 @@ describe('Issuable output', () => { }); }); - it('changes element for `form` when open', (done) => { - vm.showForm = true; - - Vue.nextTick(() => { - expect( - vm.$el.tagName, - ).toBe('FORM'); - - done(); - }); - }); - it('does not show actions if permissions are incorrect', (done) => { vm.showForm = true; vm.canUpdate = false;