diff --git a/CHANGELOG.md b/CHANGELOG.md
index 395b353a..7034d2b2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,11 +1,17 @@
# Changelog
-## v3.1.10
+## v3.1.11
-- News page will no longer open after updating from v3.1.5 or an earlier version.
+- Changed the default settings to not open shuffled videos in a new tab.
+- Moved the informative text about remaining YouTube API quota to the advanced settings menu.
+- Updated the welcome page for a better experience.
+## v3.1.10
+
+- News page will no longer open after updating from v3.1.5 or an earlier version.
+
## v3.1.9
- Temporarily disabled the news feature.
diff --git a/README.md b/README.md
index facaaf06..57c56c3d 100644
--- a/README.md
+++ b/README.md
@@ -100,6 +100,15 @@ You may also test the extension with Firefox by running `npm run dev:firefox`, w
- Run `npm run dev:android` to load the extension in Firefox for Android.
- Your device or emulator should now open Firefox for Android with the extension loaded.
+### Testing
+
+The project contains a number of different test suites, for different environments and purposes:
+
+- All tests: Run with `npm run test:all`
+- Unit tests: Run with `npm test`
+- "Compatibility tests": Run with `npm run test:compatibility` and optionally the `:headless` or `:headful` suffixes
+ - These tests are used to ensure that the extension runs as expected in a live browser environment, for Chrome only at the moment. They utilize `puppeteer` to start a browser session and interact with the extension.
+
### Versioning
The `manifest.json` contains two version numbers: `version` and `version_name`.
diff --git a/package-lock.json b/package-lock.json
index b82dae09..abd3ab47 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -38,7 +38,7 @@
"sinon": "^15.1.0",
"sinon-chrome": "^3.0.1",
"web-ext": "^8.0.0",
- "webpack": "^5.73.0",
+ "webpack": "^5.95.0",
"webpack-cli": "^4.10.0",
"webpack-merge": "^5.8.0"
}
@@ -3666,17 +3666,6 @@
"@types/json-schema": "*"
}
},
- "node_modules/@types/eslint-scope": {
- "version": "3.7.7",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
- "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
@@ -4256,10 +4245,10 @@
"node": ">=0.4.0"
}
},
- "node_modules/acorn-import-assertions": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
- "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+ "node_modules/acorn-import-attributes": {
+ "version": "1.9.5",
+ "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
+ "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -6970,9 +6959,9 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.16.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz",
- "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==",
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -14020,22 +14009,21 @@
}
},
"node_modules/webpack": {
- "version": "5.91.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz",
- "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==",
+ "version": "5.95.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz",
+ "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/eslint-scope": "^3.7.3",
"@types/estree": "^1.0.5",
"@webassemblyjs/ast": "^1.12.1",
"@webassemblyjs/wasm-edit": "^1.12.1",
"@webassemblyjs/wasm-parser": "^1.12.1",
"acorn": "^8.7.1",
- "acorn-import-assertions": "^1.9.0",
+ "acorn-import-attributes": "^1.9.5",
"browserslist": "^4.21.10",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.16.0",
+ "enhanced-resolve": "^5.17.1",
"es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
diff --git a/package.json b/package.json
index 71d3b2ad..8e577593 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "random-youtube-video",
- "version": "3.1.10",
+ "version": "3.1.11",
"description": "Customize, shuffle and play random videos from any YouTube channel.",
"scripts": {
"dev": "concurrently \"npm run dev:chromium\" \"npm run dev:firefox\"",
@@ -12,11 +12,11 @@
"build:firefox": "webpack --env browser=firefox --config webpack.prod.cjs",
"lint": "eslint --ext .ts,.js --max-warnings=0 . --ignore-path .eslintignore",
"lint:firefox": "web-ext lint --source-dir ./dist/firefox",
- "test": "c8 --reporter=lcov --reporter=text mocha ./test/testSetup.js ./test/chromeStorage.test.js ./test/**/*.test.js --exclude ./test/compatibility*.test.js --require mocha-suppress-logs",
+ "test": "c8 --reporter=lcov --reporter=text mocha ./test/testSetup.js ./test/chromeStorage.test.js ./test/*.test.js --require mocha-suppress-logs",
"test:all": "npm run test && npm run test:compatibility",
- "test:compatibility": "mocha ./test/testSetup.js ./test/compatibility*.test.js --require mocha-suppress-logs --retries 3",
- "test:compatibility:headless": "mocha ./test/testSetup.js ./test/compatibility.test.js ./test/compatibility.headless.test.js --require mocha-suppress-logs --retries 3",
- "test:compatibility:headful": "mocha ./test/testSetup.js ./test/compatibility.headful.test.js --require mocha-suppress-logs --retries 3"
+ "test:compatibility": "mocha ./test/testSetup.js ./test/compatibility/compatibility*.test.js --require mocha-suppress-logs --retries 3",
+ "test:compatibility:headless": "mocha ./test/testSetup.js ./test/compatibility/compatibility.test.js ./test/compatibility/compatibility.headless.test.js --require mocha-suppress-logs --retries 3",
+ "test:compatibility:headful": "mocha ./test/testSetup.js ./test/compatibility/compatibility.headful.test.js --require mocha-suppress-logs --retries 3"
},
"type": "module",
"devDependencies": {
@@ -46,7 +46,7 @@
"sinon": "^15.1.0",
"sinon-chrome": "^3.0.1",
"web-ext": "^8.0.0",
- "webpack": "^5.73.0",
+ "webpack": "^5.95.0",
"webpack-cli": "^4.10.0",
"webpack-merge": "^5.8.0"
},
diff --git a/src/config.js b/src/config.js
index baa46587..3a30433b 100644
--- a/src/config.js
+++ b/src/config.js
@@ -9,8 +9,8 @@ export const configSyncDefaults = {
// If the user has enabled sharing video ID's with the database
"databaseSharingEnabledOption": true,
// These properties influence the behavior of the "Shuffle" button
- "shuffleOpenInNewTabOption": true,
- "shuffleReUseNewTabOption": true,
+ "shuffleOpenInNewTabOption": false,
+ "shuffleReUseNewTabOption": false,
// 0 = only shorts, 1 = no option set (shorts are included), 2 = ignore shorts
"shuffleIgnoreShortsOption": 1,
"shuffleOpenAsPlaylistOption": true,
diff --git a/src/html/popup/popup.js b/src/html/popup/popup.js
index c545657c..c9cb16d0 100644
--- a/src/html/popup/popup.js
+++ b/src/html/popup/popup.js
@@ -42,7 +42,7 @@ try {
// --- Private ---
// Get relevant DOM elements
function getPopupDomElements() {
- /* global reviewDonationDiv, reviewDiv, donationDiv, customApiKeyInputDiv, customApiKeyInputInfoDiv, shuffleNumVideosInPlaylistDiv, channelCustomOptionsDiv, channelCustomOptionsDropdownDiv, forYourInformationDiv, dailyQuotaNoticeDiv */
+ /* global reviewDonationDiv, reviewDiv, donationDiv, customApiKeyInputDiv, customApiKeyInputInfoDiv, shuffleNumVideosInPlaylistDiv, channelCustomOptionsDiv, channelCustomOptionsDropdownDiv, forYourInformationDiv, advancedSettingsDiv, dailyQuotaNoticeDiv */
/* eslint no-undef: "error" */
return {
body: document.body,
@@ -121,15 +121,16 @@ function getPopupDomElements() {
// Database sharing: Option toggle
dbSharingOptionToggle: document.getElementById("dbSharingOptionToggle"),
+ // Daily quota notice div
+ dailyQuotaNoticeDiv: advancedSettingsDiv.children.namedItem("dailyQuotaNoticeDiv"),
+ // Daily quota notice: Text
+ dailyQuotaNoticeText: dailyQuotaNoticeDiv.children.namedItem("dailyQuotaNoticeText"),
+
// FYI - FOR YOUR INFORMATION
// FYI div
forYourInformationDiv: document.getElementById("forYourInformationDiv"),
// FYI: Number of shuffled videos text
numberOfShuffledVideosText: forYourInformationDiv.children.namedItem("numberOfShuffledVideosText"),
- // FYI: Daily quota notice div
- dailyQuotaNoticeDiv: forYourInformationDiv.children.namedItem("dailyQuotaNoticeDiv"),
- // Daily quota notice: Text
- dailyQuotaNoticeText: dailyQuotaNoticeDiv.children.namedItem("dailyQuotaNoticeText"),
// FOOTER
// View changelog button
diff --git a/static/html/popup.html b/static/html/popup.html
index 5f59f1bb..474b13dd 100644
--- a/static/html/popup.html
+++ b/static/html/popup.html
@@ -200,13 +200,7 @@
-
-
-
-
+
+
+
+