From 5d19bda456a3ed8f4a2572f2ac8fd8f775468e93 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 12 May 2017 10:04:58 +0100 Subject: Issue inline editing [ci skip] --- app/assets/javascripts/issue_show/event_hub.js | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 app/assets/javascripts/issue_show/event_hub.js (limited to 'app/assets/javascripts') diff --git a/app/assets/javascripts/issue_show/event_hub.js b/app/assets/javascripts/issue_show/event_hub.js new file mode 100644 index 00000000000..0948c2e5352 --- /dev/null +++ b/app/assets/javascripts/issue_show/event_hub.js @@ -0,0 +1,3 @@ +import Vue from 'vue'; + +export default new Vue(); -- cgit v1.2.1 From 66539563c890a8207b2ec28c4a0fc8577149f8a0 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 12 May 2017 10:11:15 +0100 Subject: Added eventHub events to change the showForm value [ci skip] --- app/assets/javascripts/issue_show/index.js | 94 ++++++++++++++++++------------ 1 file changed, 58 insertions(+), 36 deletions(-) (limited to 'app/assets/javascripts') diff --git a/app/assets/javascripts/issue_show/index.js b/app/assets/javascripts/issue_show/index.js index f06e33dee60..b279ba867f9 100644 --- a/app/assets/javascripts/issue_show/index.js +++ b/app/assets/javascripts/issue_show/index.js @@ -1,42 +1,64 @@ import Vue from 'vue'; +import eventHub from './event_hub'; import issuableApp from './components/app.vue'; import '../vue_shared/vue_resource_interceptor'; -document.addEventListener('DOMContentLoaded', () => new Vue({ - el: document.getElementById('js-issuable-app'), - components: { - issuableApp, - }, - data() { - const issuableElement = this.$options.el; - const issuableTitleElement = issuableElement.querySelector('.title'); - const issuableDescriptionElement = issuableElement.querySelector('.wiki'); - const issuableDescriptionTextarea = issuableElement.querySelector('.js-task-list-field'); - const { - canUpdate, - endpoint, - issuableRef, - } = issuableElement.dataset; +document.addEventListener('DOMContentLoaded', () => { + $('.issuable-edit').on('click', (e) => { + e.preventDefault(); - return { - canUpdate: gl.utils.convertPermissionToBoolean(canUpdate), - endpoint, - issuableRef, - initialTitle: issuableTitleElement.innerHTML, - initialDescriptionHtml: issuableDescriptionElement ? issuableDescriptionElement.innerHTML : '', - initialDescriptionText: issuableDescriptionTextarea ? issuableDescriptionTextarea.textContent : '', - }; - }, - render(createElement) { - return createElement('issuable-app', { - props: { - canUpdate: this.canUpdate, - endpoint: this.endpoint, - issuableRef: this.issuableRef, - initialTitle: this.initialTitle, - initialDescriptionHtml: this.initialDescriptionHtml, - initialDescriptionText: this.initialDescriptionText, + eventHub.$emit('open.form'); + }); + + return new Vue({ + el: document.getElementById('js-issuable-app'), + components: { + issuableApp, + }, + data() { + const issuableElement = this.$options.el; + const issuableTitleElement = issuableElement.querySelector('.title'); + const issuableDescriptionElement = issuableElement.querySelector('.wiki'); + const issuableDescriptionTextarea = issuableElement.querySelector('.js-task-list-field'); + const { + canUpdate, + endpoint, + issuableRef, + } = issuableElement.dataset; + + return { + canUpdate: gl.utils.convertPermissionToBoolean(canUpdate), + endpoint, + issuableRef, + initialTitle: issuableTitleElement.innerHTML, + initialDescriptionHtml: issuableDescriptionElement ? issuableDescriptionElement.innerHTML : '', + initialDescriptionText: issuableDescriptionTextarea ? issuableDescriptionTextarea.textContent : '', + showForm: false, + }; + }, + methods: { + openForm() { + this.showForm = true; + console.log(this.showForm); }, - }); - }, -})); + }, + created() { + eventHub.$on('open.form', this.openForm); + }, + beforeDestroy() { + eventHub.$off('open.form', this.openForm); + }, + render(createElement) { + return createElement('issuable-app', { + props: { + canUpdate: this.canUpdate, + endpoint: this.endpoint, + issuableRef: this.issuableRef, + initialTitle: this.initialTitle, + initialDescriptionHtml: this.initialDescriptionHtml, + initialDescriptionText: this.initialDescriptionText, + }, + }); + }, + }); +}); -- cgit v1.2.1 From 86700b97d3a357b572e6eb92759a64d594aa06c5 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 12 May 2017 11:23:30 +0100 Subject: Added inline issue edit form actions [ci skip] --- .../javascripts/issue_show/components/app.vue | 55 ++++++++++++++++-- .../issue_show/components/edit_actions.vue | 66 ++++++++++++++++++++++ app/assets/javascripts/issue_show/index.js | 7 ++- .../javascripts/issue_show/services/index.js | 19 ++++++- app/assets/javascripts/issue_show/stores/index.js | 1 + 5 files changed, 139 insertions(+), 9 deletions(-) create mode 100644 app/assets/javascripts/issue_show/components/edit_actions.vue (limited to 'app/assets/javascripts') diff --git a/app/assets/javascripts/issue_show/components/app.vue b/app/assets/javascripts/issue_show/components/app.vue index 770a0dcd27e..27ea962c144 100644 --- a/app/assets/javascripts/issue_show/components/app.vue +++ b/app/assets/javascripts/issue_show/components/app.vue @@ -1,10 +1,13 @@ @@ -92,5 +133,7 @@ export default { :description-text="state.descriptionText" :updated-at="state.updatedAt" :task-status="state.taskStatus" /> + diff --git a/app/assets/javascripts/issue_show/components/edit_actions.vue b/app/assets/javascripts/issue_show/components/edit_actions.vue new file mode 100644 index 00000000000..bb200c3a53c --- /dev/null +++ b/app/assets/javascripts/issue_show/components/edit_actions.vue @@ -0,0 +1,66 @@ + + + diff --git a/app/assets/javascripts/issue_show/index.js b/app/assets/javascripts/issue_show/index.js index b279ba867f9..5d45f1b7bf8 100644 --- a/app/assets/javascripts/issue_show/index.js +++ b/app/assets/javascripts/issue_show/index.js @@ -39,14 +39,18 @@ document.addEventListener('DOMContentLoaded', () => { methods: { openForm() { this.showForm = true; - console.log(this.showForm); + }, + closeForm() { + this.showForm = false; }, }, created() { eventHub.$on('open.form', this.openForm); + eventHub.$on('close.form', this.closeForm); }, beforeDestroy() { eventHub.$off('open.form', this.openForm); + eventHub.$off('close.form', this.closeForm); }, render(createElement) { return createElement('issuable-app', { @@ -57,6 +61,7 @@ document.addEventListener('DOMContentLoaded', () => { initialTitle: this.initialTitle, initialDescriptionHtml: this.initialDescriptionHtml, initialDescriptionText: this.initialDescriptionText, + showForm: this.showForm, }, }); }, diff --git a/app/assets/javascripts/issue_show/services/index.js b/app/assets/javascripts/issue_show/services/index.js index 348ad8d6813..f3ffa451bba 100644 --- a/app/assets/javascripts/issue_show/services/index.js +++ b/app/assets/javascripts/issue_show/services/index.js @@ -7,10 +7,25 @@ export default class Service { constructor(endpoint) { this.endpoint = endpoint; - this.resource = Vue.resource(this.endpoint); + this.resource = Vue.resource(this.endpoint, {}, { + rendered_title: { + method: 'GET', + url: `${this.endpoint}/rendered_title`, + }, + }); } getData() { - return this.resource.get(); + return this.resource.rendered_title(); + } + + deleteIssuable() { + return this.resource.delete() + .then(res => res.json()); + } + + updateIssuable(data) { + return this.resource.update(data) + .then(res => res.json()); } } diff --git a/app/assets/javascripts/issue_show/stores/index.js b/app/assets/javascripts/issue_show/stores/index.js index 8e89a2b7730..b2c1b9d1c6e 100644 --- a/app/assets/javascripts/issue_show/stores/index.js +++ b/app/assets/javascripts/issue_show/stores/index.js @@ -12,6 +12,7 @@ export default class Store { taskStatus: '', updatedAt: '', }; + this.formState = {}; } updateState(data) { -- cgit v1.2.1 From 3bd37bc4a0d6b8ab6ebaabc2ee1c130201b20a21 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 12 May 2017 11:58:48 +0100 Subject: Shows delete button if permissions are correct [ci skip] --- app/assets/javascripts/issue_show/components/app.vue | 7 ++++++- app/assets/javascripts/issue_show/components/edit_actions.vue | 7 +++++++ app/assets/javascripts/issue_show/index.js | 3 +++ 3 files changed, 16 insertions(+), 1 deletion(-) (limited to 'app/assets/javascripts') diff --git a/app/assets/javascripts/issue_show/components/app.vue b/app/assets/javascripts/issue_show/components/app.vue index 27ea962c144..9b6f6d866dd 100644 --- a/app/assets/javascripts/issue_show/components/app.vue +++ b/app/assets/javascripts/issue_show/components/app.vue @@ -19,6 +19,10 @@ export default { required: true, type: Boolean, }, + canDestroy: { + required: true, + type: Boolean, + }, issuableRef: { type: String, required: true, @@ -134,6 +138,7 @@ export default { :updated-at="state.updatedAt" :task-status="state.taskStatus" /> + v-if="canUpdate && showForm" + :can-destroy="canDestroy" /> diff --git a/app/assets/javascripts/issue_show/components/edit_actions.vue b/app/assets/javascripts/issue_show/components/edit_actions.vue index bb200c3a53c..4cefb236d32 100644 --- a/app/assets/javascripts/issue_show/components/edit_actions.vue +++ b/app/assets/javascripts/issue_show/components/edit_actions.vue @@ -2,6 +2,12 @@ import eventHub from '../event_hub'; export default { + props: { + canDestroy: { + type: Boolean, + required: true, + }, + }, data() { return { deleteLoading: false, @@ -50,6 +56,7 @@ Cancel