2017-04-05 21:13:06 -04:00
|
|
|
import Vue from 'vue';
|
2017-05-12 05:11:15 -04:00
|
|
|
import eventHub from './event_hub';
|
2017-05-10 07:29:33 -04:00
|
|
|
import issuableApp from './components/app.vue';
|
2017-04-05 21:13:06 -04:00
|
|
|
import '../vue_shared/vue_resource_interceptor';
|
|
|
|
|
2017-05-12 05:11:15 -04:00
|
|
|
document.addEventListener('DOMContentLoaded', () => {
|
2017-05-15 09:51:40 -04:00
|
|
|
const initialDataEl = document.getElementById('js-issuable-app-initial-data');
|
|
|
|
const initialData = JSON.parse(initialDataEl.innerHTML.replace(/"/g, '"'));
|
2017-05-12 05:11:15 -04:00
|
|
|
$('.issuable-edit').on('click', (e) => {
|
|
|
|
e.preventDefault();
|
2017-04-05 21:13:06 -04:00
|
|
|
|
2017-05-12 05:11:15 -04:00
|
|
|
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,
|
2017-05-12 06:58:48 -04:00
|
|
|
canDestroy,
|
2017-05-17 08:01:24 -04:00
|
|
|
canMove,
|
2017-05-12 05:11:15 -04:00
|
|
|
endpoint,
|
|
|
|
issuableRef,
|
2017-05-15 12:00:16 -04:00
|
|
|
isConfidential,
|
2017-05-12 10:52:45 -04:00
|
|
|
markdownPreviewUrl,
|
2017-05-15 07:28:42 -04:00
|
|
|
markdownDocs,
|
2017-05-17 08:01:24 -04:00
|
|
|
projectsAutocompleteUrl,
|
2017-05-12 05:11:15 -04:00
|
|
|
} = issuableElement.dataset;
|
|
|
|
|
|
|
|
return {
|
|
|
|
canUpdate: gl.utils.convertPermissionToBoolean(canUpdate),
|
2017-05-12 06:58:48 -04:00
|
|
|
canDestroy: gl.utils.convertPermissionToBoolean(canDestroy),
|
2017-05-17 08:01:24 -04:00
|
|
|
canMove: gl.utils.convertPermissionToBoolean(canMove),
|
2017-05-12 05:11:15 -04:00
|
|
|
endpoint,
|
|
|
|
issuableRef,
|
|
|
|
initialTitle: issuableTitleElement.innerHTML,
|
|
|
|
initialDescriptionHtml: issuableDescriptionElement ? issuableDescriptionElement.innerHTML : '',
|
|
|
|
initialDescriptionText: issuableDescriptionTextarea ? issuableDescriptionTextarea.textContent : '',
|
2017-05-15 12:00:16 -04:00
|
|
|
isConfidential: gl.utils.convertPermissionToBoolean(isConfidential),
|
2017-05-12 10:52:45 -04:00
|
|
|
markdownPreviewUrl,
|
2017-05-15 07:28:42 -04:00
|
|
|
markdownDocs,
|
2017-05-16 11:18:52 -04:00
|
|
|
projectPath: initialData.project_path,
|
|
|
|
projectNamespace: initialData.namespace_path,
|
2017-05-17 08:01:24 -04:00
|
|
|
projectsAutocompleteUrl,
|
2017-05-22 04:08:39 -04:00
|
|
|
issuableTemplates: initialData.templates,
|
2017-05-12 05:11:15 -04:00
|
|
|
};
|
|
|
|
},
|
|
|
|
render(createElement) {
|
|
|
|
return createElement('issuable-app', {
|
|
|
|
props: {
|
|
|
|
canUpdate: this.canUpdate,
|
2017-05-12 06:58:48 -04:00
|
|
|
canDestroy: this.canDestroy,
|
2017-05-17 08:01:24 -04:00
|
|
|
canMove: this.canMove,
|
2017-05-12 05:11:15 -04:00
|
|
|
endpoint: this.endpoint,
|
|
|
|
issuableRef: this.issuableRef,
|
|
|
|
initialTitle: this.initialTitle,
|
|
|
|
initialDescriptionHtml: this.initialDescriptionHtml,
|
|
|
|
initialDescriptionText: this.initialDescriptionText,
|
2017-05-15 09:51:40 -04:00
|
|
|
issuableTemplates: this.issuableTemplates,
|
2017-05-15 12:00:16 -04:00
|
|
|
isConfidential: this.isConfidential,
|
2017-05-12 10:52:45 -04:00
|
|
|
markdownPreviewUrl: this.markdownPreviewUrl,
|
2017-05-15 07:28:42 -04:00
|
|
|
markdownDocs: this.markdownDocs,
|
2017-05-16 11:18:52 -04:00
|
|
|
projectPath: this.projectPath,
|
|
|
|
projectNamespace: this.projectNamespace,
|
2017-05-17 08:01:24 -04:00
|
|
|
projectsAutocompleteUrl: this.projectsAutocompleteUrl,
|
2017-05-12 05:11:15 -04:00
|
|
|
},
|
|
|
|
});
|
|
|
|
},
|
|
|
|
});
|
|
|
|
});
|