diff options
-rw-r--r-- | app/assets/javascripts/ide/index.js | 15 | ||||
-rw-r--r-- | app/assets/javascripts/pages/ide/index.js | 9 | ||||
-rw-r--r-- | app/views/ide/index.html.haml | 3 | ||||
-rw-r--r-- | config/webpack.config.js | 12 |
4 files changed, 20 insertions, 19 deletions
diff --git a/app/assets/javascripts/ide/index.js b/app/assets/javascripts/ide/index.js index cbfb3dc54f2..1119b572a1f 100644 --- a/app/assets/javascripts/ide/index.js +++ b/app/assets/javascripts/ide/index.js @@ -4,7 +4,9 @@ import ide from './components/ide.vue'; import store from './stores'; import router from './ide_router'; -function initIde(el) { +Vue.use(Translate); + +export function initIde(el) { if (!el) return null; return new Vue({ @@ -26,8 +28,9 @@ function initIde(el) { }); } -const ideElement = document.getElementById('ide'); - -Vue.use(Translate); - -initIde(ideElement); +export function resetServiceWorkersPublicPath() { + // tell webpack to load assets from origin so that web workers don't break + const relativeRootPath = (gon && gon.relative_url_root) || ''; + const webpackAssetPath = `${relativeRootPath}/assets/webpack/`; + __webpack_public_path__ = webpackAssetPath; // eslint-disable-line camelcase +} diff --git a/app/assets/javascripts/pages/ide/index.js b/app/assets/javascripts/pages/ide/index.js new file mode 100644 index 00000000000..efadf6967aa --- /dev/null +++ b/app/assets/javascripts/pages/ide/index.js @@ -0,0 +1,9 @@ +import { initIde, resetServiceWorkersPublicPath } from '~/ide/index'; + +document.addEventListener('DOMContentLoaded', () => { + const ideElement = document.getElementById('ide'); + if (ideElement) { + resetServiceWorkersPublicPath(); + initIde(ideElement); + } +}); diff --git a/app/views/ide/index.html.haml b/app/views/ide/index.html.haml index e0e8fe548d0..da9331b45dd 100644 --- a/app/views/ide/index.html.haml +++ b/app/views/ide/index.html.haml @@ -1,9 +1,6 @@ - @body_class = 'ide' - page_title 'IDE' -- content_for :page_specific_javascripts do - = webpack_bundle_tag 'ide', force_same_domain: true - #ide.ide-loading{ data: {"empty-state-svg-path" => image_path('illustrations/multi_file_editor_empty.svg'), "no-changes-state-svg-path" => image_path('illustrations/multi-editor_no_changes_empty.svg'), "committed-state-svg-path" => image_path('illustrations/multi-editor_all_changes_committed_empty.svg') } } diff --git a/config/webpack.config.js b/config/webpack.config.js index 2ac0e204f03..7c191a973fd 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -57,7 +57,6 @@ function generateEntries() { const manualEntries = { default: defaultEntries, raven: './raven/index.js', - ide: './ide/index.js', }; return Object.assign(manualEntries, autoEntries); @@ -75,6 +74,7 @@ const config = { publicPath: '/assets/webpack/', filename: IS_PRODUCTION ? '[name].[chunkhash].bundle.js' : '[name].bundle.js', chunkFilename: IS_PRODUCTION ? '[name].[chunkhash].chunk.js' : '[name].chunk.js', + globalObject: 'this', // allow HMR and web workers to play nice }, optimization: { @@ -129,15 +129,7 @@ const config = { }, { test: /\_worker\.js$/, - use: [ - { - loader: 'worker-loader', - options: { - inline: true, - }, - }, - { loader: 'babel-loader' }, - ], + use: ['worker-loader', 'babel-loader'], }, { test: /\.(worker(\.min)?\.js|pdf|bmpr)$/, |