79 lines
2.6 KiB
JavaScript
79 lines
2.6 KiB
JavaScript
import Vue from 'vue';
|
|
import { mapActions } from 'vuex';
|
|
import Translate from '~/vue_shared/translate';
|
|
import ide from './components/ide.vue';
|
|
import store from './stores';
|
|
import router from './ide_router';
|
|
import { convertPermissionToBoolean } from '../lib/utils/common_utils';
|
|
|
|
Vue.use(Translate);
|
|
|
|
/**
|
|
* Initialize the IDE on the given element.
|
|
*
|
|
* @param {Element} el - The element that will contain the IDE.
|
|
* @param {Object} options - Extra options for the IDE (Used by EE).
|
|
* @param {(e:Element) => Object} options.extraInitialData -
|
|
* Function that returns extra properties to seed initial data.
|
|
* @param {Component} options.rootComponent -
|
|
* Component that overrides the root component.
|
|
*/
|
|
export function initIde(el, options = {}) {
|
|
if (!el) return null;
|
|
|
|
const { extraInitialData = () => ({}), rootComponent = ide } = options;
|
|
|
|
return new Vue({
|
|
el,
|
|
store,
|
|
router,
|
|
created() {
|
|
this.setEmptyStateSvgs({
|
|
emptyStateSvgPath: el.dataset.emptyStateSvgPath,
|
|
noChangesStateSvgPath: el.dataset.noChangesStateSvgPath,
|
|
committedStateSvgPath: el.dataset.committedStateSvgPath,
|
|
pipelinesEmptyStateSvgPath: el.dataset.pipelinesEmptyStateSvgPath,
|
|
promotionSvgPath: el.dataset.promotionSvgPath,
|
|
});
|
|
this.setLinks({
|
|
ciHelpPagePath: el.dataset.ciHelpPagePath,
|
|
webIDEHelpPagePath: el.dataset.webIdeHelpPagePath,
|
|
});
|
|
this.setInitialData({
|
|
clientsidePreviewEnabled: convertPermissionToBoolean(el.dataset.clientsidePreviewEnabled),
|
|
...extraInitialData(el),
|
|
});
|
|
},
|
|
methods: {
|
|
...mapActions(['setEmptyStateSvgs', 'setLinks', 'setInitialData']),
|
|
},
|
|
render(createElement) {
|
|
return createElement(rootComponent);
|
|
},
|
|
});
|
|
}
|
|
|
|
// tell webpack to load assets from origin so that web workers don't break
|
|
export function resetServiceWorkersPublicPath() {
|
|
// __webpack_public_path__ is a global variable that can be used to adjust
|
|
// the webpack publicPath setting at runtime.
|
|
// see: https://webpack.js.org/guides/public-path/
|
|
const relativeRootPath = (gon && gon.relative_url_root) || '';
|
|
const webpackAssetPath = `${relativeRootPath}/assets/webpack/`;
|
|
__webpack_public_path__ = webpackAssetPath; // eslint-disable-line camelcase
|
|
}
|
|
|
|
/**
|
|
* Start the IDE.
|
|
*
|
|
* @param {Objects} options - Extra options for the IDE (Used by EE).
|
|
*/
|
|
export function startIde(options) {
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
const ideElement = document.getElementById('ide');
|
|
if (ideElement) {
|
|
resetServiceWorkersPublicPath();
|
|
initIde(ideElement, options);
|
|
}
|
|
});
|
|
}
|