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: {