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;