diff --git a/Makefile b/Makefile index 977f76c..41b70f4 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ EDITOR_OUTPUT_DIR := $(CURDIR)/dist/static EDITOR_REPO_DEFAULT := https://github.com/exelearning/exelearning.git EDITOR_REF_DEFAULT := main -# Fetch editor source code from remote repository (branch/tag, shallow clone) +# Fetch editor source code from remote repository (clone or update existing) fetch-editor-source: @set -e; \ get_env() { \ @@ -36,9 +36,15 @@ fetch-editor-source: if [ -z "$$REF" ]; then REF="$(EDITOR_REF_DEFAULT)"; fi; \ if [ -z "$$REF_TYPE" ]; then REF_TYPE="auto"; fi; \ echo "Fetching editor source from $$REPO_URL (ref=$$REF, type=$$REF_TYPE)"; \ - rm -rf $(EDITOR_SUBMODULE_PATH); \ - git init -q $(EDITOR_SUBMODULE_PATH); \ - git -C $(EDITOR_SUBMODULE_PATH) remote add origin "$$REPO_URL"; \ + if [ -d "$(EDITOR_SUBMODULE_PATH)/.git" ]; then \ + echo "Updating existing editor source..."; \ + git -C $(EDITOR_SUBMODULE_PATH) remote set-url origin "$$REPO_URL"; \ + else \ + rm -rf $(EDITOR_SUBMODULE_PATH); \ + git init -q $(EDITOR_SUBMODULE_PATH); \ + git -C $(EDITOR_SUBMODULE_PATH) remote add origin "$$REPO_URL"; \ + fi; \ + OLD_HEAD=$$(git -C $(EDITOR_SUBMODULE_PATH) rev-parse HEAD 2>/dev/null || echo "none"); \ case "$$REF_TYPE" in \ tag) \ git -C $(EDITOR_SUBMODULE_PATH) fetch --depth 1 origin "refs/tags/$$REF:refs/tags/$$REF"; \ @@ -62,7 +68,13 @@ fetch-editor-source: echo "Error: EXELEARNING_EDITOR_REF_TYPE must be one of: auto, branch, tag"; \ exit 1; \ ;; \ - esac + esac; \ + NEW_HEAD=$$(git -C $(EDITOR_SUBMODULE_PATH) rev-parse HEAD); \ + if [ "$$OLD_HEAD" = "$$NEW_HEAD" ]; then \ + echo "Editor source is already up to date ($$NEW_HEAD)."; \ + else \ + echo "Editor source updated: $$OLD_HEAD -> $$NEW_HEAD"; \ + fi # Build static version of eXeLearning editor build-editor: check-bun fetch-editor-source @@ -75,11 +87,26 @@ build-editor: check-bun fetch-editor-source mkdir -p $(EDITOR_OUTPUT_DIR); \ cp -R $(EDITOR_SUBMODULE_PATH)/dist/static/* $(EDITOR_OUTPUT_DIR)/; \ fi + @# Save the commit hash used for this build + @git -C $(EDITOR_SUBMODULE_PATH) rev-parse HEAD > $(EDITOR_OUTPUT_DIR)/.build-commit 2>/dev/null || true @echo "" @echo "============================================" @echo " Static editor built at dist/static/" @echo "============================================" +# Build only if needed: skip when dist/static/ exists and source hasn't changed +build-editor-if-needed: fetch-editor-source + @BUILD_COMMIT=""; \ + if [ -f "$(EDITOR_OUTPUT_DIR)/.build-commit" ]; then \ + BUILD_COMMIT=$$(cat "$(EDITOR_OUTPUT_DIR)/.build-commit"); \ + fi; \ + CURRENT_COMMIT=$$(git -C $(EDITOR_SUBMODULE_PATH) rev-parse HEAD 2>/dev/null || echo "unknown"); \ + if [ -f "$(EDITOR_OUTPUT_DIR)/index.html" ] && [ "$$BUILD_COMMIT" = "$$CURRENT_COMMIT" ]; then \ + echo "Static editor is up to date ($$CURRENT_COMMIT), skipping build."; \ + else \ + $(MAKE) build-editor; \ + fi + # Backward-compatible alias build-editor-no-update: build-editor @@ -117,8 +144,26 @@ start-if-not-running: echo "wp-env is already running, skipping start."; \ fi -# Bring up Docker containers (fetch editor source and rebuild static editor) -up: check-docker build-editor-no-update start-if-not-running +# Bring up Docker containers (build editor if needed) +up: check-docker build-editor-if-needed start-if-not-running + +# Start with Playground runtime (no Docker required, for quick testing) +up-playground: build-editor-if-needed + @if [ "$$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:8888)" = "000" ]; then \ + echo "Starting wp-env with Playground runtime..."; \ + npx wp-env start --runtime=playground --update; \ + echo "Visit http://localhost:8888/wp-admin/ to access the eXeLearning dashboard (admin/password)."; \ + else \ + echo "wp-env is already running, skipping start."; \ + fi + +# Reset the WordPress database (works with both Docker and Playground runtimes) +reset: + @npx wp-env reset development 2>/dev/null || { \ + echo ""; \ + echo "wp-env reset failed (Playground runtime does not support reset)."; \ + echo "Run 'make destroy' followed by 'make up' or 'make up-playground' to start fresh."; \ + } flush-permalinks: npx wp-env run cli wp rewrite structure '/%postname%/' @@ -135,13 +180,20 @@ create-user: down: check-docker npx wp-env stop -# Clean the environments, the same that running "npx wp-env clean all" +# Stop Playground runtime (no Docker required) +down-playground: + npx wp-env stop + +# Clean the environments (reset database and re-activate plugin) clean: - npx wp-env clean development - npx wp-env clean tests - npx wp-env run cli wp plugin activate exelearning - npx wp-env run cli wp language core install es_ES --activate - npx wp-env run cli wp site switch-language es_ES + @npx wp-env reset development 2>/dev/null && \ + npx wp-env run cli wp plugin activate exelearning && \ + npx wp-env run cli wp language core install es_ES --activate && \ + npx wp-env run cli wp site switch-language es_ES || { \ + echo ""; \ + echo "wp-env reset failed (Playground runtime does not support reset)."; \ + echo "Use 'make destroy' followed by 'make up-playground' to start fresh."; \ + } @@ -402,7 +454,10 @@ help: @echo "" @echo "General:" @echo " up - Fetch source, build static editor, and start Docker containers" + @echo " up-playground - Same as 'up' but using Playground runtime (no Docker required)" @echo " down - Stop and remove Docker containers" + @echo " down-playground - Stop Playground runtime (no Docker required)" + @echo " reset - Reset the WordPress database" @echo " logs - Show the docker container logs" @echo " logs-test - Show logs from test environment" @echo " clean - Clean up WordPress environment" diff --git a/assets/js/elp-upload.js b/assets/js/elp-upload.js index 603eedc..9377cf3 100644 --- a/assets/js/elp-upload.js +++ b/assets/js/elp-upload.js @@ -84,6 +84,18 @@ return; } + // Prevent the preview iframe from triggering "Leave site?" dialogs. + // Override the setter so scripts inside the iframe cannot set it. + var iframeWin = iframe.contentWindow; + iframeWin.onbeforeunload = null; + try { + Object.defineProperty( iframeWin, 'onbeforeunload', { + get: function() { return null; }, + set: function() {}, + configurable: true, + } ); + } catch ( ignore ) {} + var existing = doc.getElementById( TEACHER_MODE_STYLE_ID ); if ( ! attributes.teacherModeVisible ) { diff --git a/assets/js/exelearning-editor.js b/assets/js/exelearning-editor.js index 59da385..748f61f 100644 --- a/assets/js/exelearning-editor.js +++ b/assets/js/exelearning-editor.js @@ -255,18 +255,21 @@ } } - try { - const iframeWindow = this.iframe[0]?.contentWindow; - if ( iframeWindow ) { - iframeWindow.onbeforeunload = null; - } - } catch ( e ) {} + // Replace the iframe with a fresh clone to destroy all event listeners + // (including the editor's beforeunload addEventListener) without + // triggering a "Leave site?" dialog on navigation. + var iframeEl = this.iframe[0]; + if ( iframeEl ) { + var newIframe = iframeEl.cloneNode( false ); + newIframe.src = 'about:blank'; + iframeEl.parentNode.replaceChild( newIframe, iframeEl ); + this.iframe = $( newIframe ); + } var wasShowingLoader = this.isSaving || ( skipConfirm === true ); this.modal.hide(); this.isOpen = false; this.hasUnsavedChanges = false; - this.iframe.attr( 'src', 'about:blank' ); $( 'body' ).removeClass( 'exelearning-editor-open' ); this.currentAttachmentId = null; this.exportRequestId = null; diff --git a/package-lock.json b/package-lock.json index fe7ff99..25afc11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1045,14 +1045,14 @@ "license": "MIT" }, "node_modules/@php-wasm/cli-util": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/cli-util/-/cli-util-3.1.4.tgz", - "integrity": "sha512-SVJBkvwT9FMM9AhVgjIwXh1KJZaEl/IvULIXKKSfmdqhk9SLpqmyJWw/WsibDzsj1FtcUHO+MmI5t7MVi5OioA==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/cli-util/-/cli-util-3.1.13.tgz", + "integrity": "sha512-vDFDAEmAYHoC/XQZ7/wfQPgOIuPOvFSXBebRQ8S+6ABcDgKbjylQqyXZej4z0sh7n4IJ6ebS1H/vRPywPOK2kw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/util": "3.1.4", - "fast-xml-parser": "^5.3.4", + "@php-wasm/util": "3.1.13", + "fast-xml-parser": "^5.5.1", "jsonc-parser": "3.3.1" }, "engines": { @@ -1061,13 +1061,13 @@ } }, "node_modules/@php-wasm/logger": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.4.tgz", - "integrity": "sha512-qJADSkoHZIvoLomnyglMcISdfJH+9fZ+4YZ7N/vJrfo0vHp/51nOmKa38eKmONUGInAgKHIJ5LZ9b73dYtDygA==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.13.tgz", + "integrity": "sha512-8wYZtN+9dNvGSf3ttUDEaNDvU680W+FmCFcpXo4U8JLnsySbRivN8RD6lAedJnSpxgXUV83zwlXV2dybK8awVQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/node-polyfills": "3.1.4" + "@php-wasm/node-polyfills": "3.1.13" }, "engines": { "node": ">=20.10.0", @@ -1075,27 +1075,27 @@ } }, "node_modules/@php-wasm/node": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-3.1.4.tgz", - "integrity": "sha512-sDWXq+3ApKDZAVTJRaERRBkzpoiudNcnXz5yk5leeqymCOwNz6F0V+jSndcO0shEbsOTOT6b4J89pdKVSBUVOg==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-3.1.13.tgz", + "integrity": "sha512-jrNz8C9msy59/X6nJh1JTZvvJZ/wIA2HHUDWYe6sRbMDkvi0CdHnYGAk2g33GMnOwvWFCiQRrDvU/dCcSmCfHw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/cli-util": "3.1.4", - "@php-wasm/logger": "3.1.4", - "@php-wasm/node-7-4": "3.1.4", - "@php-wasm/node-8-0": "3.1.4", - "@php-wasm/node-8-1": "3.1.4", - "@php-wasm/node-8-2": "3.1.4", - "@php-wasm/node-8-3": "3.1.4", - "@php-wasm/node-8-4": "3.1.4", - "@php-wasm/node-8-5": "3.1.4", - "@php-wasm/node-polyfills": "3.1.4", - "@php-wasm/universal": "3.1.4", - "@php-wasm/util": "3.1.4", - "@wp-playground/common": "3.1.4", + "@php-wasm/cli-util": "3.1.13", + "@php-wasm/logger": "3.1.13", + "@php-wasm/node-7-4": "3.1.13", + "@php-wasm/node-8-0": "3.1.13", + "@php-wasm/node-8-1": "3.1.13", + "@php-wasm/node-8-2": "3.1.13", + "@php-wasm/node-8-3": "3.1.13", + "@php-wasm/node-8-4": "3.1.13", + "@php-wasm/node-8-5": "3.1.13", + "@php-wasm/node-polyfills": "3.1.13", + "@php-wasm/universal": "3.1.13", + "@php-wasm/util": "3.1.13", + "@wp-playground/common": "3.1.13", "express": "4.22.0", - "fast-xml-parser": "^5.3.4", + "fast-xml-parser": "^5.5.1", "fs-ext-extra-prebuilt": "2.2.7", "ini": "4.1.2", "jsonc-parser": "3.3.1", @@ -1109,13 +1109,13 @@ } }, "node_modules/@php-wasm/node-7-4": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/node-7-4/-/node-7-4-3.1.4.tgz", - "integrity": "sha512-iP95JNInGsJdu4Zp/7x3rROpw1bbidq9X2RDwjO6fhCrG+zWifKgg/I2hFAIpYAJeZXAaN4MPyqeihtmLZ204g==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/node-7-4/-/node-7-4-3.1.13.tgz", + "integrity": "sha512-LerA9TcAEKntZYKYPqfPvB39GwLzu8MzsAN/frTzBaSo5ybyLXfccRmvUsrg40m1+bl3zE5agOm77CjbPJ4SEA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.4", + "@php-wasm/universal": "3.1.13", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -1126,13 +1126,13 @@ } }, "node_modules/@php-wasm/node-8-0": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-0/-/node-8-0-3.1.4.tgz", - "integrity": "sha512-upNChLPNE95Pq1OHsHaZn1o36r0px9Iz2gSPXE+rZO4+C93JFyG24VJAqxh61c7CN+4Y1hudee66X4zCe5BAog==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-0/-/node-8-0-3.1.13.tgz", + "integrity": "sha512-7bdkE0KY9Q7taICadOacA0L1GjZ7Pgdrl2kH3Tnp5SWmkTgpcEQTBJJS8XUNo6cGRprw8+z5fJqBNDCpqaIzCg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.4", + "@php-wasm/universal": "3.1.13", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -1143,13 +1143,13 @@ } }, "node_modules/@php-wasm/node-8-1": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-1/-/node-8-1-3.1.4.tgz", - "integrity": "sha512-JXW3o278v4Rf02SZLxV4g/zDtDxp3KNsv+9Yy1QP7SscfDWe3R7Vo65S2NG7GZItIVcQ8n1KLMqZLCOcDR+tmg==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-1/-/node-8-1-3.1.13.tgz", + "integrity": "sha512-mdtR4oX0OgD+A+vJejJorBKvoSf73sfxl7A4kVMVnV+VEjFGH+QVlSzkRA3j9szXscZKzdTTeE3bECmrV8jh/w==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.4", + "@php-wasm/universal": "3.1.13", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -1160,13 +1160,13 @@ } }, "node_modules/@php-wasm/node-8-2": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-2/-/node-8-2-3.1.4.tgz", - "integrity": "sha512-QRT436IfwQVLpns2dpCsgEuDAh4kS1SRHcaG3cn0ShUpUwxwU/vkGR58uKmXDPGSeLYgMX8ozLZWARUUK8TjCg==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-2/-/node-8-2-3.1.13.tgz", + "integrity": "sha512-WoBox5LktTQm6mM2UvTRiSxCyYvdsSUOLuSC/djy17JSxkfyFom/YczbSfzpOz4mNBb/4uNecoHd8ARxMjYWCg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.4", + "@php-wasm/universal": "3.1.13", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -1177,13 +1177,13 @@ } }, "node_modules/@php-wasm/node-8-3": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-3/-/node-8-3-3.1.4.tgz", - "integrity": "sha512-l/xUJqKB14PLdvVQAEDYfs8Ne3vcQZ+ixOZre1k+gig6L2M0UZkX+UKf5PtE26Ft3VAquQUSeYgmPrO3A1kdnQ==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-3/-/node-8-3-3.1.13.tgz", + "integrity": "sha512-SIYOCE87jBqIh4bKId8DvsrQJxY0o9386aZcQBqhH+YRNnpsGKxL1jUeSjYdQy+aJj8CnfVxRKxaed36E54KMw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.4", + "@php-wasm/universal": "3.1.13", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -1194,13 +1194,13 @@ } }, "node_modules/@php-wasm/node-8-4": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-4/-/node-8-4-3.1.4.tgz", - "integrity": "sha512-HvxShZ9RjQF+QXDlN44qcRou4okq6JTEHA3EYmqzaJv7V5+Zjn3K3bOaUAWtd9wem+kc4p1RTJ+ZgaMSp+QUVw==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-4/-/node-8-4-3.1.13.tgz", + "integrity": "sha512-iQvfRXmVVNaRMxbaOoSdqi0eBm5eljuwHK+C1sz5SfoxcXwe8gszLk04q9n9kK/95UO3PIh55YZwWFOraOLgDA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.4", + "@php-wasm/universal": "3.1.13", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -1211,13 +1211,13 @@ } }, "node_modules/@php-wasm/node-8-5": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-5/-/node-8-5-3.1.4.tgz", - "integrity": "sha512-dQWrrA5Wjx0mo3a5COWUjlbCSPM7k+FXJoSnJWBSFQwfQycMEPOWxrRX2Hxtm+i6QXGI5UyJR0SI9cSVIx09RA==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/node-8-5/-/node-8-5-3.1.13.tgz", + "integrity": "sha512-ob35CoY12XPI0rj6igoiwZS9/WtFjJrcjK1Mxh2vUXcvqRUeQ6x390KWRhTjsldG7HxrmES9T61x5I8M3M0Mlg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.4", + "@php-wasm/universal": "3.1.13", "ini": "4.1.2", "wasm-feature-detect": "1.8.0", "ws": "8.18.3" @@ -1228,21 +1228,21 @@ } }, "node_modules/@php-wasm/node-polyfills": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/node-polyfills/-/node-polyfills-3.1.4.tgz", - "integrity": "sha512-7lL50hCUWA7cDl6Q6rWIks4eKbfI/TrDl8GKYf7E56Ep1JNUMFLmzU/nxmPDB9la+fbVhpkL17Tc5izyqK3Y1A==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/node-polyfills/-/node-polyfills-3.1.13.tgz", + "integrity": "sha512-X1MAroRlVkvF40EcNcB9SZL9NRZJSFOKvL/oD5fsvKxcPN45d4IP27aD3ZtkJx4sm3tTD3bD9W/HDt0Phs82Bg==", "dev": true, "license": "GPL-2.0-or-later" }, "node_modules/@php-wasm/progress": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.4.tgz", - "integrity": "sha512-eu9qyfuNJr8Jju2mIqAtP5ovt7lwbduDvjHBbrP/uHicBqCwI6uPK9dGc0qLjQ8ZQ/yJqi+qOpnpUKbk0xIWOw==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.13.tgz", + "integrity": "sha512-yL9ny4/1EXIig9v4cB1gtZ+RBUJy+OaJ13D0+VyhY7/c5G3doA3VkxeCxv1qkaWIcvmqY2zBGRmPsBJp5L52vA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.4", - "@php-wasm/node-polyfills": "3.1.4" + "@php-wasm/logger": "3.1.13", + "@php-wasm/node-polyfills": "3.1.13" }, "engines": { "node": ">=20.10.0", @@ -1250,9 +1250,9 @@ } }, "node_modules/@php-wasm/scopes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-3.1.4.tgz", - "integrity": "sha512-+PQToTb2txA0A6450/IbJHotrFVGGAKWsU22hLCvpzcT9Zj1F3NInkkDAMjZ7Na4nofNzyc82ED8MWafwhxFmw==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-3.1.13.tgz", + "integrity": "sha512-Zf69PJ5qXdOEPpj5glxQuV/fyXP4CKLdPfePGcnx36MiDyfaK0x+GT0yBdOjhFGB7HK32cy4eJPiErvbYZppuQ==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -1261,28 +1261,28 @@ } }, "node_modules/@php-wasm/stream-compression": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.4.tgz", - "integrity": "sha512-gr6Y2N7XTW1ceh8yycFE/h7u4hLHWwmyvFwtjfb0U1FWIRerpXzyVwy9Fzlw3D8vgAsMpeM4OZdZ2MWyC8kN1g==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.13.tgz", + "integrity": "sha512-ScBZJrBYumtIWowuhge3gmUGOrHsTl5SY6Ih6zYdoujULTv0hGrkX50An8G7qiwl8ym3vzv0VaxSYX+jjgIUPQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/node-polyfills": "3.1.4", - "@php-wasm/util": "3.1.4" + "@php-wasm/node-polyfills": "3.1.13", + "@php-wasm/util": "3.1.13" } }, "node_modules/@php-wasm/universal": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.4.tgz", - "integrity": "sha512-9JWhjHZ3ZwnzqaR7ZuRfGdCvLjxdbg4Ok23PgVjsoMOCoFZWm6LUvR0nfZ7tRuKue8Bgwzzssx6RuwCy7Z5dIQ==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.13.tgz", + "integrity": "sha512-1SzLlvDPb0hDp3pHBGofSxGVQMTED3r3WOC0bD7uYgNkd3hj9TOnJ6vl0llgjadxZLld5d2NRWwDydPwD6LXPg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.4", - "@php-wasm/node-polyfills": "3.1.4", - "@php-wasm/progress": "3.1.4", - "@php-wasm/stream-compression": "3.1.4", - "@php-wasm/util": "3.1.4", + "@php-wasm/logger": "3.1.13", + "@php-wasm/node-polyfills": "3.1.13", + "@php-wasm/progress": "3.1.13", + "@php-wasm/stream-compression": "3.1.13", + "@php-wasm/util": "3.1.13", "ini": "4.1.2" }, "engines": { @@ -1291,9 +1291,9 @@ } }, "node_modules/@php-wasm/util": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.4.tgz", - "integrity": "sha512-JAJGJAU/D5N/4pAvNEUZaDBZlFVMkjUYR7MAEsm3Dtq8yqsjl4oNRI43zpvdnfzSd6FVf0jOB5AVrC3wfv83yQ==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.13.tgz", + "integrity": "sha512-jGUWzZV2A2tNggAoIUhKWOXBw9+03zb9jF+R3c/nsvyd2NdVxUBWb6Q/mVk2syo+KfSuelsJkksohBNXn9PQBQ==", "dev": true, "engines": { "node": ">=20.10.0", @@ -1301,13 +1301,15 @@ } }, "node_modules/@php-wasm/web-service-worker": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/web-service-worker/-/web-service-worker-3.1.4.tgz", - "integrity": "sha512-DTJVoz8x5xTPBv3xNGJSmf3tXeYet0CXK0HWX7IRS4Zor3N8kzDLn9si2K61tJ5063P0rczQ/fp/YhNAhQVkkw==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/web-service-worker/-/web-service-worker-3.1.13.tgz", + "integrity": "sha512-5p0hNQrZgAnuSWMyPQyhs32gU7nSWJU+q5KNAGvfs77UhZVsVSK0irfTYQbmKsmAPlS5QoNmQXpUCw8fNH9U5w==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/scopes": "3.1.4" + "@php-wasm/scopes": "3.1.13", + "@php-wasm/universal": "3.1.13", + "ini": "4.1.2" }, "engines": { "node": ">=20.10.0", @@ -1315,18 +1317,18 @@ } }, "node_modules/@php-wasm/xdebug-bridge": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@php-wasm/xdebug-bridge/-/xdebug-bridge-3.1.4.tgz", - "integrity": "sha512-s6iZjVPUEFp/xhU+kGq2gnSMbZeS+w0TWSdikb+HjBl1Uzh+xAwTGCEey+PsvmRL7VkZ/PLWxwP9xq6GsDQ5YQ==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@php-wasm/xdebug-bridge/-/xdebug-bridge-3.1.13.tgz", + "integrity": "sha512-8tS4b1O0FdCs1hvvby6Zio0uxHm2oMZ36w4fdHxRqsWlYd6UI+z46FTtQeoPIANfTDc9cHQ3SmxfhFH6MMZ02Q==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.4", - "@php-wasm/node": "3.1.4", - "@php-wasm/universal": "3.1.4", - "@wp-playground/common": "3.1.4", + "@php-wasm/logger": "3.1.13", + "@php-wasm/node": "3.1.13", + "@php-wasm/universal": "3.1.13", + "@wp-playground/common": "3.1.13", "express": "4.22.0", - "fast-xml-parser": "^5.3.4", + "fast-xml-parser": "^5.5.1", "fs-ext-extra-prebuilt": "2.2.7", "ini": "4.1.2", "jsonc-parser": "3.3.1", @@ -1508,23 +1510,23 @@ } }, "node_modules/@wp-playground/blueprints": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-3.1.4.tgz", - "integrity": "sha512-prKI8WbKehbQX77nO1y3+XsUgV5mZeQdsndmecWVRKrZXQc3d0RkTCcckkZCYWHYhESF2L4rvzxShwRvSA6jxw==", - "dev": true, - "dependencies": { - "@php-wasm/logger": "3.1.4", - "@php-wasm/node": "3.1.4", - "@php-wasm/node-polyfills": "3.1.4", - "@php-wasm/progress": "3.1.4", - "@php-wasm/scopes": "3.1.4", - "@php-wasm/stream-compression": "3.1.4", - "@php-wasm/universal": "3.1.4", - "@php-wasm/util": "3.1.4", - "@php-wasm/web-service-worker": "3.1.4", - "@wp-playground/common": "3.1.4", - "@wp-playground/storage": "3.1.4", - "@wp-playground/wordpress": "3.1.4", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-3.1.13.tgz", + "integrity": "sha512-7zOyZVgoiMLK7/MHfQaV1tSjWKHqcysVMEM1qoFz4tldPxJixAx6WsrtAyJYF1+V/nYmoUrb0GkjPTGUKmaJWg==", + "dev": true, + "dependencies": { + "@php-wasm/logger": "3.1.13", + "@php-wasm/node": "3.1.13", + "@php-wasm/node-polyfills": "3.1.13", + "@php-wasm/progress": "3.1.13", + "@php-wasm/scopes": "3.1.13", + "@php-wasm/stream-compression": "3.1.13", + "@php-wasm/universal": "3.1.13", + "@php-wasm/util": "3.1.13", + "@php-wasm/web-service-worker": "3.1.13", + "@wp-playground/common": "3.1.13", + "@wp-playground/storage": "3.1.13", + "@wp-playground/wordpress": "3.1.13", "@zip.js/zip.js": "2.7.57", "ajv": "8.12.0", "async-lock": "1.4.1", @@ -1532,7 +1534,7 @@ "crc-32": "1.2.2", "diff3": "0.0.4", "express": "4.22.0", - "fast-xml-parser": "^5.3.4", + "fast-xml-parser": "^5.5.1", "fs-ext-extra-prebuilt": "2.2.7", "ignore": "5.3.2", "ini": "4.1.2", @@ -1554,24 +1556,24 @@ } }, "node_modules/@wp-playground/cli": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@wp-playground/cli/-/cli-3.1.4.tgz", - "integrity": "sha512-vbJZG32xhtAvNHGrhHCGMiu30wrV7nPYHFmRP0MKNclhrqPtKCUdtDSXBpoyO0aTDs92N4E/JheXJ1qYd5AJVw==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@wp-playground/cli/-/cli-3.1.13.tgz", + "integrity": "sha512-XecEZ+4RNDjFJ6WJHmX5X4Z56i6jgHxlw6yVSA/7tRmtUFk9WAzigP0gw2Xnl693JMaYwWHgR98YatTgnPb6+w==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/cli-util": "3.1.4", - "@php-wasm/logger": "3.1.4", - "@php-wasm/node": "3.1.4", - "@php-wasm/progress": "3.1.4", - "@php-wasm/universal": "3.1.4", - "@php-wasm/util": "3.1.4", - "@php-wasm/xdebug-bridge": "3.1.4", - "@wp-playground/blueprints": "3.1.4", - "@wp-playground/common": "3.1.4", - "@wp-playground/storage": "3.1.4", - "@wp-playground/tools": "3.1.4", - "@wp-playground/wordpress": "3.1.4", + "@php-wasm/cli-util": "3.1.13", + "@php-wasm/logger": "3.1.13", + "@php-wasm/node": "3.1.13", + "@php-wasm/progress": "3.1.13", + "@php-wasm/universal": "3.1.13", + "@php-wasm/util": "3.1.13", + "@php-wasm/xdebug-bridge": "3.1.13", + "@wp-playground/blueprints": "3.1.13", + "@wp-playground/common": "3.1.13", + "@wp-playground/storage": "3.1.13", + "@wp-playground/tools": "3.1.13", + "@wp-playground/wordpress": "3.1.13", "@zip.js/zip.js": "2.7.57", "ajv": "8.12.0", "async-lock": "1.4.1", @@ -1579,7 +1581,7 @@ "crc-32": "1.2.2", "diff3": "0.0.4", "express": "4.22.0", - "fast-xml-parser": "^5.3.4", + "fast-xml-parser": "^5.5.1", "fs-ext-extra-prebuilt": "2.2.7", "fs-extra": "11.1.1", "ignore": "5.3.2", @@ -1589,7 +1591,6 @@ "octokit": "3.1.2", "pako": "1.0.10", "pify": "2.3.0", - "ps-man": "1.1.8", "readable-stream": "3.6.2", "sha.js": "2.4.12", "simple-get": "4.0.1", @@ -1604,14 +1605,14 @@ } }, "node_modules/@wp-playground/common": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.1.4.tgz", - "integrity": "sha512-N7R4ZQeGfecAYG/gRSWlcHVdZLGygBN6QAXpemy+xUcks/qPoO1w0VVTJp1uoVJ77b7S0cKZsMcRgh0bYZ7hIQ==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.1.13.tgz", + "integrity": "sha512-Z9bIxYdJOb5g3IlFKt389vncuG+ZPqTLV6ntb0jG5xjZE2JSda/oX3U+DHjUuqzzcyRTQJ61/dSVBuHsQy8S1A==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/universal": "3.1.4", - "@php-wasm/util": "3.1.4", + "@php-wasm/universal": "3.1.13", + "@php-wasm/util": "3.1.13", "ini": "4.1.2" }, "engines": { @@ -1620,15 +1621,15 @@ } }, "node_modules/@wp-playground/storage": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@wp-playground/storage/-/storage-3.1.4.tgz", - "integrity": "sha512-mstkIeE0Fw+tGw49+n7zoWr4AI3Qe/X3260yJWOvux+Fox+fXwVT1HzUV1z/jayDPnMMEVLaYeHGiUh9ZJiX0w==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@wp-playground/storage/-/storage-3.1.13.tgz", + "integrity": "sha512-XdwHi9d0Jjqc15WiEmEwilYEKbT2qcjibYCkDeHo8/571IqUokKs9Vt3wombVPTzT2FwUtyDJ72ykbS/Z1n6BQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/stream-compression": "3.1.4", - "@php-wasm/universal": "3.1.4", - "@php-wasm/util": "3.1.4", + "@php-wasm/stream-compression": "3.1.13", + "@php-wasm/universal": "3.1.13", + "@php-wasm/util": "3.1.13", "@zip.js/zip.js": "2.7.57", "async-lock": "^1.4.1", "clean-git-ref": "^2.0.1", @@ -1663,13 +1664,13 @@ } }, "node_modules/@wp-playground/tools": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@wp-playground/tools/-/tools-3.1.4.tgz", - "integrity": "sha512-fF6NzZbYdVMlDAJAPQJ910SagRQP4FtGkknvl3Wo/ACcTxFUhxP/zD0wbnp+74EQtvxT6KnqDmYXDtOpHT1Waw==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@wp-playground/tools/-/tools-3.1.13.tgz", + "integrity": "sha512-fsonMWSvKvLr8bkusEsK13Wv8as+OCzQeshpafs1pn7JI9UCe8LN/cIi6leS9CLfKluzdydRUW843yTZ4xbIWg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@wp-playground/blueprints": "3.1.4", + "@wp-playground/blueprints": "3.1.13", "@zip.js/zip.js": "2.7.57", "ajv": "8.12.0", "async-lock": "1.4.1", @@ -1677,7 +1678,7 @@ "crc-32": "1.2.2", "diff3": "0.0.4", "express": "4.22.0", - "fast-xml-parser": "^5.3.4", + "fast-xml-parser": "^5.5.1", "fs-ext-extra-prebuilt": "2.2.7", "ignore": "5.3.2", "ini": "4.1.2", @@ -1699,19 +1700,19 @@ } }, "node_modules/@wp-playground/wordpress": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.1.4.tgz", - "integrity": "sha512-9xQVLBhE1etvpgxpnj8VISCgplJKkN57RSrRKalNWvfqN7D7mmJE3ZK8m0UTVLfd++tXWOAyIfOjuvjUjzXkNQ==", + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.1.13.tgz", + "integrity": "sha512-ItR4fV0Khq+kdj3i40hh1xwcjnNsptx98d6rFV7q0cL7hnG3q6pOD3BPxZhU/KkxPHZlr2qqBEpGaiEXAEHrTw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.4", - "@php-wasm/node": "3.1.4", - "@php-wasm/universal": "3.1.4", - "@php-wasm/util": "3.1.4", - "@wp-playground/common": "3.1.4", + "@php-wasm/logger": "3.1.13", + "@php-wasm/node": "3.1.13", + "@php-wasm/universal": "3.1.13", + "@php-wasm/util": "3.1.13", + "@wp-playground/common": "3.1.13", "express": "4.22.0", - "fast-xml-parser": "^5.3.4", + "fast-xml-parser": "^5.5.1", "fs-ext-extra-prebuilt": "2.2.7", "ini": "4.1.2", "jsonc-parser": "3.3.1", @@ -2738,9 +2739,9 @@ } }, "node_modules/fast-xml-parser": { - "version": "5.5.8", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.5.8.tgz", - "integrity": "sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ==", + "version": "5.5.9", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.5.9.tgz", + "integrity": "sha512-jldvxr1MC6rtiZKgrFnDSvT8xuH+eJqxqOBThUVjYrxssYTo1avZLGql5l0a0BAERR01CadYzZ83kVEkbyDg+g==", "dev": true, "funding": [ { @@ -2752,7 +2753,7 @@ "dependencies": { "fast-xml-builder": "^1.1.4", "path-expression-matcher": "^1.2.0", - "strnum": "^2.2.0" + "strnum": "^2.2.2" }, "bin": { "fxparser": "src/cli/cli.js" @@ -3712,9 +3713,9 @@ } }, "node_modules/nan": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.25.0.tgz", - "integrity": "sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==", + "version": "2.26.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.26.2.tgz", + "integrity": "sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw==", "dev": true, "license": "MIT" }, @@ -3970,9 +3971,9 @@ "license": "ISC" }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", "dev": true, "license": "MIT" }, @@ -4056,13 +4057,6 @@ "node": ">= 0.10" } }, - "node_modules/ps-man": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ps-man/-/ps-man-1.1.8.tgz", - "integrity": "sha512-ZKDPZwHLYVWIk/Q75N7jCFbuQyokSg2+3WBlt8l35S/uBvxoc+LiRUbb3RUt83pwW82dzwiCpoQIHd9PAxUzHg==", - "dev": true, - "license": "MIT" - }, "node_modules/pump": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", @@ -4273,9 +4267,9 @@ "license": "MIT" }, "node_modules/sax": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.5.0.tgz", - "integrity": "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -4714,9 +4708,9 @@ } }, "node_modules/strnum": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.0.tgz", - "integrity": "sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.2.tgz", + "integrity": "sha512-DnR90I+jtXNSTXWdwrEy9FakW7UX+qUZg28gj5fk2vxxl7uS/3bpI4fjFYVmdK9etptYBPNkpahuQnEwhwECqA==", "dev": true, "funding": [ { diff --git a/package.json b/package.json index dab990d..913e32a 100644 --- a/package.json +++ b/package.json @@ -24,5 +24,8 @@ "url": "https://github.com/exelearning/wp-exelearning" }, "author": "eXeLearning", - "license": "GPL-3.0-or-later" + "license": "GPL-3.0-or-later", + "overrides": { + "@wp-playground/cli": "3.1.13" + } } diff --git a/tests/fixtures/test-content.elpx b/tests/fixtures/test-content.elpx index 5c322f1..fccc893 100644 Binary files a/tests/fixtures/test-content.elpx and b/tests/fixtures/test-content.elpx differ