Commit 359ddb14 authored by Paul Slaughter's avatar Paul Slaughter

Refactor IDE index to support EE specific code

**Why?**

- The web terminal feature is EE specific and will need to inject
  some specific options / functions into certain components.
parent 31ae9148
...@@ -8,9 +8,21 @@ import { convertPermissionToBoolean } from '../lib/utils/common_utils'; ...@@ -8,9 +8,21 @@ import { convertPermissionToBoolean } from '../lib/utils/common_utils';
Vue.use(Translate); Vue.use(Translate);
export function initIde(el) { /**
* 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.
*/
export function initIde(el, options = {}) {
if (!el) return null; if (!el) return null;
const {
extraInitialData = () => ({}),
} = options;
return new Vue({ return new Vue({
el, el,
store, store,
...@@ -32,6 +44,7 @@ export function initIde(el) { ...@@ -32,6 +44,7 @@ export function initIde(el) {
}); });
this.setInitialData({ this.setInitialData({
clientsidePreviewEnabled: convertPermissionToBoolean(el.dataset.clientsidePreviewEnabled), clientsidePreviewEnabled: convertPermissionToBoolean(el.dataset.clientsidePreviewEnabled),
...extraInitialData(el),
}); });
}, },
methods: { methods: {
...@@ -52,3 +65,18 @@ export function resetServiceWorkersPublicPath() { ...@@ -52,3 +65,18 @@ export function resetServiceWorkersPublicPath() {
const webpackAssetPath = `${relativeRootPath}/assets/webpack/`; const webpackAssetPath = `${relativeRootPath}/assets/webpack/`;
__webpack_public_path__ = webpackAssetPath; // eslint-disable-line camelcase __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);
}
});
}
import { initIde, resetServiceWorkersPublicPath } from '~/ide/index'; import { startIde } from '~/ide/index';
document.addEventListener('DOMContentLoaded', () => { startIde();
const ideElement = document.getElementById('ide');
if (ideElement) {
resetServiceWorkersPublicPath();
initIde(ideElement);
}
});
import { startIde } from '~/ide/index';
function extraInitialData() {
// This is empty now, but it will be used in: https://gitlab.com/gitlab-org/gitlab-ee/issues/5426
return {};
}
startIde({
extraInitialData,
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment