From e184f02d0ccbd9e2f4e912f80d4960f3031f6303 Mon Sep 17 00:00:00 2001 From: "Emma C. Hughes" <84008144+emmachughes@users.noreply.github.com> Date: Tue, 18 Mar 2025 14:53:49 +0100 Subject: [PATCH] CA: move webpacked files to build subdirectory --- sourcecode/apis/contentauthor/.gitignore | 28 ++------ .../app/Libraries/H5P/H5PConfigAbstract.php | 1 - .../app/Providers/AppServiceProvider.php | 3 + .../apis/contentauthor/app/Support/Mix.php | 14 ++++ .../apis/contentauthor/public/js/cerpus.js | 22 ------ .../public/js/question-editor.js | 48 ------------- .../public/js/videos/brightcove.js | 2 +- .../resources/views/games/create.blade.php | 1 - .../resources/views/games/edit.blade.php | 1 - .../resources/views/question/create.blade.php | 1 - .../resources/views/question/edit.blade.php | 1 - sourcecode/apis/contentauthor/webpack.mix.js | 69 ++++++++++--------- 12 files changed, 59 insertions(+), 132 deletions(-) create mode 100644 sourcecode/apis/contentauthor/app/Support/Mix.php delete mode 100644 sourcecode/apis/contentauthor/public/js/cerpus.js delete mode 100644 sourcecode/apis/contentauthor/public/js/question-editor.js diff --git a/sourcecode/apis/contentauthor/.gitignore b/sourcecode/apis/contentauthor/.gitignore index b3a20904e7..f7fafae68d 100644 --- a/sourcecode/apis/contentauthor/.gitignore +++ b/sourcecode/apis/contentauthor/.gitignore @@ -6,35 +6,17 @@ Homestead.json .idea/ /public/* -!/public/vendor !/public/favicon.ico !/public/index.php !/public/robots.txt !/public/.htaccess +!/public/css !/public/graphical -!public/js - -/public/js/* -!/public/js/presave -!/public/js/article-xapi.js -!/public/js/cerpus.js -!/public/js/editor-setup.js -!/public/js/h5p -/public/js/h5p/* -!/public/js/h5p-editor.js -!/public/js/jsrequestintercept.js -!/public/js/listener.js -!/public/js/mathquillEditor -!/public/js/question-editor.js -!/public/js/videos/brightcove.js -!/public/js/videos/streamps.js -!/public/js/h5p/ndlah5p-youtube.js -!/public/js/h5p/h5peditor-pre-save.js -!public/css -/public/css/* -!/public/css/ndlah5p-youtube.css +!/public/js +/public/js/ckeditor +/public/js/cropperjs +!/public/vendor -mix-manifest.json app/Libraries/oauth-php/example/server/cache/ ca1.sql cerpus_export_log* diff --git a/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PConfigAbstract.php b/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PConfigAbstract.php index d343247a25..51321f4c6b 100644 --- a/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PConfigAbstract.php +++ b/sourcecode/apis/contentauthor/app/Libraries/H5P/H5PConfigAbstract.php @@ -248,7 +248,6 @@ protected function addCoreAssets(): void protected function addDefaultEditorAssets(): void { - $this->addAsset("scripts", $this->getAssetUrl(null, "/js/cerpus.js")); $this->addAsset("scripts", $this->getAssetUrl("editor", "scripts/h5peditor-editor.js")); $this->addAsset("scripts", $this->getAssetUrl("editor", "scripts/h5peditor-init.js")); $this->addAsset("scripts", $this->getAssetUrl("editor", $this->getLanguage())); diff --git a/sourcecode/apis/contentauthor/app/Providers/AppServiceProvider.php b/sourcecode/apis/contentauthor/app/Providers/AppServiceProvider.php index 36c1b8b97d..96b09b1fb6 100644 --- a/sourcecode/apis/contentauthor/app/Providers/AppServiceProvider.php +++ b/sourcecode/apis/contentauthor/app/Providers/AppServiceProvider.php @@ -12,6 +12,7 @@ use App\Observers\H5POptionObserver; use Cerpus\EdlibResourceKit\Oauth1\Credentials; use Cerpus\EdlibResourceKit\Oauth1\CredentialStoreInterface; +use Illuminate\Foundation\Mix; use Illuminate\Http\Request; use Illuminate\Log\Logger; use Illuminate\Pagination\Paginator; @@ -42,6 +43,8 @@ public function boot() */ public function register() { + $this->app->singleton(Mix::class, \App\Support\Mix::class); + $this->app->singleton(CredentialStoreInterface::class, fn() => new Credentials( config('app.consumer-key'), config('app.consumer-secret'), diff --git a/sourcecode/apis/contentauthor/app/Support/Mix.php b/sourcecode/apis/contentauthor/app/Support/Mix.php new file mode 100644 index 0000000000..e2fabc7564 --- /dev/null +++ b/sourcecode/apis/contentauthor/app/Support/Mix.php @@ -0,0 +1,14 @@ +").html(value)); - }); - }); - } - - function isFormDataReady(){ - let jsonParams = JSON.parse(form.elements.questionSetJsonData.value); - const questionsNotReady = jsonParams.cards.filter(card => !card.question.readyForSubmit); - const answersNotReady = jsonParams.cards.filter(card => card.answers.filter(answer => !answer.readyForSubmit).length > 0); - - return questionsNotReady.length === 0 && answersNotReady.length === 0; - } - - const form = this; - let attempts = 0; - const loaderInterval = setInterval(function(){ - if( isFormDataReady() === true || attempts >= 20){ - clearInterval(loaderInterval); - submit(); - } - attempts++; - }, 20); -}); - -function submitEditorForm(){ - $('#content-form').submit(); -} diff --git a/sourcecode/apis/contentauthor/public/js/videos/brightcove.js b/sourcecode/apis/contentauthor/public/js/videos/brightcove.js index 7ed0452295..c405d3acf6 100644 --- a/sourcecode/apis/contentauthor/public/js/videos/brightcove.js +++ b/sourcecode/apis/contentauthor/public/js/videos/brightcove.js @@ -317,7 +317,7 @@ H5P.VideoBrightcove = (function ($) { } else { // Load the API our self var tag = document.createElement('script'); - tag.src = "/js/videos/brightcove-player-loader.min.js"; + tag.src = "/build/js/videos/brightcove-player-loader.min.js"; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); Brightcove.loaderInterval = setInterval(function () { diff --git a/sourcecode/apis/contentauthor/resources/views/games/create.blade.php b/sourcecode/apis/contentauthor/resources/views/games/create.blade.php index d5b925dabb..7d51c992c5 100644 --- a/sourcecode/apis/contentauthor/resources/views/games/create.blade.php +++ b/sourcecode/apis/contentauthor/resources/views/games/create.blade.php @@ -4,5 +4,4 @@ - @endpush diff --git a/sourcecode/apis/contentauthor/resources/views/games/edit.blade.php b/sourcecode/apis/contentauthor/resources/views/games/edit.blade.php index 4e6b73d76b..02b2174c77 100644 --- a/sourcecode/apis/contentauthor/resources/views/games/edit.blade.php +++ b/sourcecode/apis/contentauthor/resources/views/games/edit.blade.php @@ -4,6 +4,5 @@ - @endpush diff --git a/sourcecode/apis/contentauthor/resources/views/question/create.blade.php b/sourcecode/apis/contentauthor/resources/views/question/create.blade.php index d5b925dabb..7d51c992c5 100644 --- a/sourcecode/apis/contentauthor/resources/views/question/create.blade.php +++ b/sourcecode/apis/contentauthor/resources/views/question/create.blade.php @@ -4,5 +4,4 @@ - @endpush diff --git a/sourcecode/apis/contentauthor/resources/views/question/edit.blade.php b/sourcecode/apis/contentauthor/resources/views/question/edit.blade.php index d881bf8866..dbce54795f 100644 --- a/sourcecode/apis/contentauthor/resources/views/question/edit.blade.php +++ b/sourcecode/apis/contentauthor/resources/views/question/edit.blade.php @@ -5,5 +5,4 @@ - @endpush diff --git a/sourcecode/apis/contentauthor/webpack.mix.js b/sourcecode/apis/contentauthor/webpack.mix.js index faefe0d692..2247dfe063 100644 --- a/sourcecode/apis/contentauthor/webpack.mix.js +++ b/sourcecode/apis/contentauthor/webpack.mix.js @@ -7,40 +7,43 @@ mix .copyDirectory('vendor/ckeditor/ckeditor', 'public/js/ckeditor') .copyDirectory('resources/assets/ckeditor/plugins', 'public/js/ckeditor/plugins') .copy('resources/assets/ckeditor/*.js', 'public/js/ckeditor') - .copy('node_modules/@brightcove/player-loader/dist/brightcove-player-loader.min.js', 'public/js/videos') + .copy('node_modules/@brightcove/player-loader/dist/brightcove-player-loader.min.js', 'public/build/js/videos') .copyDirectory('node_modules/cropperjs/dist', 'public/js/cropperjs') - .sass('resources/assets/entrypoints/admin.scss', 'css/admin.css') - .js('resources/assets/entrypoints/admin.js', 'js/admin.js') - .js('resources/assets/entrypoints/article.js', 'js/article.js') - .sass('resources/assets/entrypoints/article.scss', 'css/article.css') - .sass('resources/assets/entrypoints/article-plugin.scss', 'css/article-plugin.css') - .js('resources/assets/entrypoints/bootstrap.js', 'js/bootstrap.js') - .sass('resources/assets/entrypoints/ckeditor_popup.scss', 'css/ckeditor_popup.css') - .sass('resources/assets/entrypoints/content_explorer_bootstrap.scss', 'css/content_explorer_bootstrap.css') - .sass('resources/assets/entrypoints/error-page.scss', 'css/error-page.css') - .sass('resources/assets/entrypoints/font-awesome.scss', 'css/font-awesome.css') - .sass('resources/assets/entrypoints/h5p-admin.scss', 'css/h5p-admin.css') - .sass('resources/assets/entrypoints/h5p-core.scss', 'css/h5p-core.css') - .js('resources/assets/entrypoints/h5p-core-bundle.js', 'js/h5p-core-bundle.js') - .sass('resources/assets/entrypoints/h5pcss.scss', 'css/h5pcss.css') - .js('resources/assets/entrypoints/h5peditor-custom.js', 'js/h5peditor-custom.js') - .js('resources/assets/entrypoints/h5peditor-image-popup.js', 'js/h5peditor-image-popup.js') - .sass('resources/assets/entrypoints/h5picons.scss', 'css/h5picons.css') - .js('resources/assets/entrypoints/h5pmetadata.js', 'js/h5pmetadata.js') - .js('resources/assets/entrypoints/ndla-h5peditor-html.js', 'js/ndla-h5peditor-html.js') - .sass('resources/assets/entrypoints/link.scss', 'css/link.css') - .js('resources/assets/entrypoints/maxscore.js', 'js/maxscore.js') - .js('resources/assets/entrypoints/metadata.js', 'js/metadata.js') - .sass('resources/assets/entrypoints/ndlah5p-edit.scss', 'css/ndlah5p-edit.css') - .sass('resources/assets/entrypoints/ndlah5p-editor.scss', 'css/ndlah5p-editor.css') - .sass('resources/assets/entrypoints/ndlah5p-iframe.scss', 'css/ndlah5p-iframe.css') - .sass('resources/assets/entrypoints/ndlah5p-iframe-legacy.scss', 'css/ndlah5p-iframe-legacy.css') - .js('resources/assets/entrypoints/ndla-audio.js', 'js/ndla-audio.js') - .js('resources/assets/entrypoints/ndla-image.js', 'js/ndla-image.js') - .js('resources/assets/entrypoints/ndla-video.js', 'js/ndla-video.js') - .js('resources/assets/entrypoints/react-article.js', 'js/react-article.js') - .js('resources/assets/entrypoints/react-h5p.js', 'js/react-h5p.js') - .js('resources/assets/entrypoints/react-questionset.js', 'js/react-questionset.js') + + // Using a different public path + setResourceRoot breaks copyDirectory. + // Each output is prefixed with 'build/' instead. + .sass('resources/assets/entrypoints/admin.scss', 'build/css/admin.css') + .js('resources/assets/entrypoints/admin.js', 'build/js/admin.js') + .js('resources/assets/entrypoints/article.js', 'build/js/article.js') + .sass('resources/assets/entrypoints/article.scss', 'build/css/article.css') + .sass('resources/assets/entrypoints/article-plugin.scss', 'build/css/article-plugin.css') + .js('resources/assets/entrypoints/bootstrap.js', 'build/js/bootstrap.js') + .sass('resources/assets/entrypoints/ckeditor_popup.scss', 'build/css/ckeditor_popup.css') + .sass('resources/assets/entrypoints/content_explorer_bootstrap.scss', 'build/css/content_explorer_bootstrap.css') + .sass('resources/assets/entrypoints/error-page.scss', 'build/css/error-page.css') + .sass('resources/assets/entrypoints/font-awesome.scss', 'build/css/font-awesome.css') + .sass('resources/assets/entrypoints/h5p-admin.scss', 'build/css/h5p-admin.css') + .sass('resources/assets/entrypoints/h5p-core.scss', 'build/css/h5p-core.css') + .js('resources/assets/entrypoints/h5p-core-bundle.js', 'build/js/h5p-core-bundle.js') + .sass('resources/assets/entrypoints/h5pcss.scss', 'build/css/h5pcss.css') + .js('resources/assets/entrypoints/h5peditor-custom.js', 'build/js/h5peditor-custom.js') + .js('resources/assets/entrypoints/h5peditor-image-popup.js', 'build/js/h5peditor-image-popup.js') + .sass('resources/assets/entrypoints/h5picons.scss', 'build/css/h5picons.css') + .js('resources/assets/entrypoints/h5pmetadata.js', 'build/js/h5pmetadata.js') + .js('resources/assets/entrypoints/ndla-h5peditor-html.js', 'build/js/ndla-h5peditor-html.js') + .sass('resources/assets/entrypoints/link.scss', 'build/css/link.css') + .js('resources/assets/entrypoints/maxscore.js', 'build/js/maxscore.js') + .js('resources/assets/entrypoints/metadata.js', 'build/js/metadata.js') + .sass('resources/assets/entrypoints/ndlah5p-edit.scss', 'build/css/ndlah5p-edit.css') + .sass('resources/assets/entrypoints/ndlah5p-editor.scss', 'build/css/ndlah5p-editor.css') + .sass('resources/assets/entrypoints/ndlah5p-iframe.scss', 'build/css/ndlah5p-iframe.css') + .sass('resources/assets/entrypoints/ndlah5p-iframe-legacy.scss', 'build/css/ndlah5p-iframe-legacy.css') + .js('resources/assets/entrypoints/ndla-audio.js', 'build/js/ndla-audio.js') + .js('resources/assets/entrypoints/ndla-image.js', 'build/js/ndla-image.js') + .js('resources/assets/entrypoints/ndla-video.js', 'build/js/ndla-video.js') + .js('resources/assets/entrypoints/react-article.js', 'build/js/react-article.js') + .js('resources/assets/entrypoints/react-h5p.js', 'build/js/react-h5p.js') + .js('resources/assets/entrypoints/react-questionset.js', 'build/js/react-questionset.js') .webpackConfig({ resolve: { fallback: {