Compare commits

...

24 Commits

Author SHA1 Message Date
Ajay
91311787df Run headless 2022-06-17 17:06:41 -04:00
Ajay
74e9a98afd Fix selenium tests 2022-06-17 16:42:59 -04:00
Ajay Ramachandran
b369dcc117 Merge pull request #1363 from mchangrh/fix-ci
Fix npm ci failing
2022-06-16 18:01:51 -04:00
Michael C
5a05e01b7d bump package-lock with npm 8.12 2022-06-16 17:48:39 -04:00
Ajay Ramachandran
8097eff9bb Merge pull request #1355 from Argn0/branch3
display "Voted!" message only momentarily
2022-06-15 13:08:02 -04:00
Ajay
c61c97ccad Fix segments with small gaps 2022-06-15 13:05:44 -04:00
Ajay
9a7baa7325 Fix typo 2022-06-15 13:02:53 -04:00
Ajay
5ac577c99b update oss attributions 2022-06-13 14:50:42 -04:00
Ajay
3f421a2fb0 Update node version in workflow 2022-06-13 13:34:39 -04:00
Ajay
e94ce0ffef Fix edit username box too big 2022-06-13 13:28:16 -04:00
Ajay
2dfcf2141f minimum width for username box 2022-06-13 13:26:33 -04:00
Ajay
47220e0abc Fix some popup buttons 2022-06-13 13:16:47 -04:00
Argn0
05eed6ee20 display "Voted!" message only momentarily 2022-06-10 06:13:57 +02:00
Ajay
9eec62d59f Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2022-06-09 14:02:25 -04:00
Ajay
25c04a49c1 Fix help page not closing from keybind 2022-06-09 14:02:23 -04:00
Ajay Ramachandran
efe6b0483c remove pointer cursor from your work 2022-06-07 22:47:59 -04:00
Ajay
32a3cb2cfe Forward key presses from popup 2022-06-06 17:09:34 -04:00
Ajay
d9970bf110 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2022-06-06 13:18:21 -04:00
Ajay
6514b41418 Fix only bracket wrapping 2022-06-06 13:18:20 -04:00
Ajay Ramachandran
e480e032f2 bump version 2022-06-05 00:09:21 -04:00
Ajay Ramachandran
995001bd91 New Crowdin updates (#1342) 2022-06-05 00:09:14 -04:00
Ajay
466152ed42 Fix popup copy to clipboard 2022-06-04 01:56:00 -04:00
Ajay
e4855f7427 Fix messed up margin on popup 2022-06-04 01:50:19 -04:00
Ajay
258abd5deb Fix jest errors not displaying in console 2022-06-03 15:12:35 -04:00
21 changed files with 269 additions and 176 deletions

View File

@@ -13,7 +13,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '16'
node-version: '18'
- run: npm ci
- name: Copy configuration
run: cp config.json.example config.json

View File

@@ -15,7 +15,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '16'
node-version: '18'
- run: npm ci
- name: Copy configuration
run: cp config.json.example config.json

View File

@@ -3,8 +3,7 @@ name: Tests
on: [push, pull_request]
jobs:
build:
test:
name: Run tests
runs-on: ubuntu-latest
@@ -13,8 +12,11 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '16'
node-version: '18'
- run: npm ci
- run: sudo apt-get install chromium-chromedriver
- name: Copy configuration
run: cp config.json.example config.json
- name: Run tests
run: npm run test-without-building
run: npm run test

View File

@@ -16,7 +16,7 @@ jobs:
uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '16'
node-version: '18'
- name: Install and generate attribution
run: |
npm ci

View File

@@ -5,5 +5,5 @@ module.exports = {
"transform": {
"^.+\\.ts$": "ts-jest"
},
"reporters": ["github-actions"]
"reporters": ["default", "github-actions"]
};

View File

@@ -1,7 +1,7 @@
{
"name": "__MSG_fullName__",
"short_name": "SponsorBlock",
"version": "4.5",
"version": "4.5.1",
"default_locale": "en",
"description": "__MSG_Description__",
"homepage_url": "https://sponsor.ajay.app",

150
package-lock.json generated
View File

@@ -10,7 +10,7 @@
"funding": [
{
"type": "individual",
"url": "hhttps://sponsor.ajay.app/donate"
"url": "https://sponsor.ajay.app/donate"
},
{
"type": "github",
@@ -36,7 +36,7 @@
"@types/jest": "^27.5.1",
"@types/react": "^17.0.43",
"@types/react-dom": "^17.0.14",
"@types/selenium-webdriver": "^4.1.0",
"@types/selenium-webdriver": "^4.1.1",
"@types/wicg-mediasession": "^1.1.3",
"@typescript-eslint/eslint-plugin": "^5.26.0",
"@typescript-eslint/parser": "^5.26.0",
@@ -49,7 +49,7 @@
"jest": "^28.1.0",
"rimraf": "^3.0.2",
"schema-utils": "^4.0.0",
"selenium-webdriver": "^4.1.2",
"selenium-webdriver": "^4.2.0",
"speed-measure-webpack-plugin": "^1.5.0",
"ts-jest": "^28.0.3",
"ts-loader": "^9.3.0",
@@ -1918,9 +1918,9 @@
"dev": true
},
"node_modules/@types/selenium-webdriver": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.1.0.tgz",
"integrity": "sha512-ehqwZemosqiWVe+W0f5GqcLH7NgtjMBmcknmeaPG6YZHc7EZ69XbD7VVNZcT/L8lyMIL/KG99MsGcvDuFWo3Yw==",
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.1.1.tgz",
"integrity": "sha512-NxxZZek50ylIACiXebKQYHD3D4One3WXOasEXWazL6aTfYbZob7ClNKxUpg8I4/oWArX87oPWvj1cHKqfel3Hg==",
"dev": true,
"dependencies": {
"@types/ws": "*"
@@ -3534,16 +3534,6 @@
"node": ">=0.10.0"
}
},
"node_modules/bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"dev": true,
"optional": true,
"dependencies": {
"file-uri-to-path": "1.0.0"
}
},
"node_modules/bl": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
@@ -4098,20 +4088,6 @@
"node": ">=8"
}
},
"node_modules/chokidar/node_modules/fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/chokidar/node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -6908,13 +6884,6 @@
"node": ">=6"
}
},
"node_modules/file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"dev": true,
"optional": true
},
"node_modules/filename-reserved-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
@@ -7356,25 +7325,6 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"node_modules/fsevents": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"dependencies": {
"bindings": "^1.5.0",
"nan": "^2.12.1"
},
"engines": {
"node": ">= 4.0"
}
},
"node_modules/function-bind": {
"version": "1.1.1",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
@@ -9637,20 +9587,6 @@
"fsevents": "^2.3.2"
}
},
"node_modules/jest-haste-map/node_modules/fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/jest-haste-map/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -12590,6 +12526,13 @@
"node": ">=0.10.0"
}
},
"node_modules/path-dirname": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
"integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
"dev": true,
"optional": true
},
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -13552,9 +13495,9 @@
}
},
"node_modules/selenium-webdriver": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.1.2.tgz",
"integrity": "sha512-e4Ap8vQvhipgBB8Ry9zBiKGkU6kHKyNnWiavGGLKkrdW81Zv7NVMtFOL/j3yX0G8QScM7XIXijKssNd4EUxSOw==",
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.2.0.tgz",
"integrity": "sha512-gPPXYSz4jJBM2kANRQ9cZW6KFBzR/ptxqGLtyC75eXtdgOsWWRRRyZz5F2pqdnwNmAjrCSFMMXfisJaZeWVejg==",
"dev": true,
"dependencies": {
"jszip": "^3.6.0",
@@ -18018,9 +17961,9 @@
"dev": true
},
"@types/selenium-webdriver": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.1.0.tgz",
"integrity": "sha512-ehqwZemosqiWVe+W0f5GqcLH7NgtjMBmcknmeaPG6YZHc7EZ69XbD7VVNZcT/L8lyMIL/KG99MsGcvDuFWo3Yw==",
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.1.1.tgz",
"integrity": "sha512-NxxZZek50ylIACiXebKQYHD3D4One3WXOasEXWazL6aTfYbZob7ClNKxUpg8I4/oWArX87oPWvj1cHKqfel3Hg==",
"dev": true,
"requires": {
"@types/ws": "*"
@@ -19225,16 +19168,6 @@
"dev": true,
"optional": true
},
"bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"dev": true,
"optional": true,
"requires": {
"file-uri-to-path": "1.0.0"
}
},
"bl": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
@@ -19650,13 +19583,6 @@
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true
},
"fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"optional": true
},
"is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -21821,13 +21747,6 @@
"dev": true,
"peer": true
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"dev": true,
"optional": true
},
"filename-reserved-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
@@ -22156,17 +22075,6 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"fsevents": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"dev": true,
"optional": true,
"requires": {
"bindings": "^1.5.0",
"nan": "^2.12.1"
}
},
"function-bind": {
"version": "1.1.1",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
@@ -23812,13 +23720,6 @@
"walker": "^1.0.7"
},
"dependencies": {
"fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -26095,6 +25996,13 @@
"dev": true,
"optional": true
},
"path-dirname": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
"integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
"dev": true,
"optional": true
},
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -26842,9 +26750,9 @@
}
},
"selenium-webdriver": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.1.2.tgz",
"integrity": "sha512-e4Ap8vQvhipgBB8Ry9zBiKGkU6kHKyNnWiavGGLKkrdW81Zv7NVMtFOL/j3yX0G8QScM7XIXijKssNd4EUxSOw==",
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.2.0.tgz",
"integrity": "sha512-gPPXYSz4jJBM2kANRQ9cZW6KFBzR/ptxqGLtyC75eXtdgOsWWRRRyZz5F2pqdnwNmAjrCSFMMXfisJaZeWVejg==",
"dev": true,
"requires": {
"jszip": "^3.6.0",

View File

@@ -14,7 +14,7 @@
"@types/jest": "^27.5.1",
"@types/react": "^17.0.43",
"@types/react-dom": "^17.0.14",
"@types/selenium-webdriver": "^4.1.0",
"@types/selenium-webdriver": "^4.1.1",
"@types/wicg-mediasession": "^1.1.3",
"@typescript-eslint/eslint-plugin": "^5.26.0",
"@typescript-eslint/parser": "^5.26.0",
@@ -27,7 +27,7 @@
"jest": "^28.1.0",
"rimraf": "^3.0.2",
"schema-utils": "^4.0.0",
"selenium-webdriver": "^4.1.2",
"selenium-webdriver": "^4.2.0",
"speed-measure-webpack-plugin": "^1.5.0",
"ts-jest": "^28.0.3",
"ts-loader": "^9.3.0",
@@ -71,7 +71,7 @@
"funding": [
{
"type": "individual",
"url": "hhttps://sponsor.ajay.app/donate"
"url": "https://sponsor.ajay.app/donate"
},
{
"type": "github",

View File

@@ -239,6 +239,9 @@
"showSkipNotice": {
"message": "Mostrar aviso después de que se omita un segmento"
},
"showCategoryGuidelines": {
"message": "Mostrar Ayuda de la Categoría"
},
"noticeVisibilityMode0": {
"message": "Avisos de Omisión de Tamaño Completo"
},
@@ -542,11 +545,20 @@
"message": "a",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"generic_guideline2": {
"message": "Se reproduce como si no se hubiera omitido nada"
},
"category_sponsor": {
"message": "Sponsor"
},
"category_sponsor_description": {
"message": "Promoción pagada, recomendaciones pagadas y anuncios directos. No para promoción propia o anuncios gratuitos a causas/creadores/sitios web/productos que les gusten."
"message": "Promoción pagada, recomendaciones pagadas y anuncios directos. No para promoción propia o agradecimientos gratuitos a causas/creadores/sitios web/productos que les gusten."
},
"category_sponsor_guideline1": {
"message": "Promociones pagadas"
},
"category_sponsor_guideline2": {
"message": "No para donaciones o mercancía personalizada"
},
"category_selfpromo": {
"message": "Promoción Propia/No Remunerada"
@@ -554,6 +566,12 @@
"category_selfpromo_description": {
"message": "Similar a \"sponsor\", excepto que para la promoción propia o no remunerada. Esto incluye secciones sobre mercancía, donaciones o información sobre con quiénes colaboraron."
},
"category_selfpromo_guideline1": {
"message": "Donaciones, membresías y mercancía personalizada"
},
"category_selfpromo_guideline2": {
"message": "Agradecimientos gratuitos que no añaden al video"
},
"category_exclusive_access": {
"message": "Acceso Exclusivo"
},

View File

@@ -589,7 +589,7 @@
"description": "Short description for this category"
},
"category_exclusive_access_guideline1": {
"message": "Koko video keskittyy johonkin, jonka käyttöoikeus on saatu veloituksetta tai tuetusti"
"message": "Koko video esittelee jotakin, jonka käyttöoikeus on saatu veloituksetta tai tuetusti"
},
"category_interaction": {
"message": "Vuorovaikutusmuistutus (tilaaminen)"

View File

@@ -545,6 +545,9 @@
"message": "till",
"description": "Used between segments. Example: 1:20 to 1:30"
},
"generic_guideline1": {
"message": "Inkludera segmentövergångar"
},
"generic_guideline2": {
"message": "Spelar som om ingenting hoppades över"
},
@@ -557,6 +560,9 @@
"category_sponsor_guideline1": {
"message": "Betalda kampanjer"
},
"category_sponsor_guideline2": {
"message": "Inte för donationer eller anpassade varor"
},
"category_selfpromo": {
"message": "Obetald/självbefodran"
},
@@ -566,6 +572,12 @@
"category_selfpromo_guideline1": {
"message": "Donationer, medlemskap och anpassade varor"
},
"category_selfpromo_guideline2": {
"message": "Gratis shoutouts som inte läggs till i videon"
},
"category_selfpromo_guideline3": {
"message": "Inte för företagsdesignade produkter och varor"
},
"category_exclusive_access": {
"message": "Exklusiv tillgång"
},
@@ -576,6 +588,9 @@
"message": "Denna video visar en produkt, tjänst eller plats som de har fått gratis eller subventionerad tillgång till",
"description": "Short description for this category"
},
"category_exclusive_access_guideline1": {
"message": "Hela videon visar något med gratis eller subventionerad tillgång"
},
"category_interaction": {
"message": "Interaktionspåminnelse (Prenumerera)"
},
@@ -585,6 +600,12 @@
"category_interaction_guideline1": {
"message": "Korta påminnelser om att gilla, prenumerera eller följa"
},
"category_interaction_guideline2": {
"message": "Inkluderar indirekta påminnelser att kommentera"
},
"category_interaction_guideline3": {
"message": "Inte för allmän marknadsföring, endast för uppmaningar"
},
"category_interaction_short": {
"message": "Interaktionspåminnelse"
},
@@ -597,21 +618,36 @@
"category_intro_short": {
"message": "Uppehåll"
},
"category_intro_guideline1": {
"message": "Intervall utan egentligt innehåll"
},
"category_intro_guideline2": {
"message": "Inte för övergångar med information"
},
"category_outro": {
"message": "Slutkort/Credits"
},
"category_outro_description": {
"message": "Credits eller när YouTube-slutkort visas. Inte för slut med information."
},
"category_outro_guideline1": {
"message": "Inkludera inte innehåll, även om slutkort visas på skärmen"
},
"category_preview": {
"message": "Förhandsgranska/sammanfatta"
},
"category_preview_description": {
"message": "Snabb sammanfattning av tidigare avsnitt eller en förhandsvisning av vad som kommer upp senare i den aktuella videon. Avsett för redigerade klipp, inte för sammanfattningar."
},
"category_preview_guideline1": {
"message": "Klipp som visas senare, eller i en framtida video"
},
"category_preview_guideline2": {
"message": "Sammanfattning av en tidigare video"
},
"category_preview_guideline3": {
"message": "Inte för sektioner som lägger till ytterligare innehåll"
},
"category_filler": {
"message": "Ämnesavvikelse/Skämt"
},
@@ -621,6 +657,15 @@
"category_filler_short": {
"message": "Utfyllnad"
},
"category_filler_guideline1": {
"message": "Tangentiella scener endast för utfyllnad eller humor"
},
"category_filler_guideline2": {
"message": "Distraktioner, bloopers, repriser"
},
"category_filler_guideline3": {
"message": "Inte för scener som krävs för att förstå ämnet"
},
"category_music_offtopic": {
"message": "Musik: Icke-musikavsnitt"
},
@@ -630,12 +675,27 @@
"category_music_offtopic_short": {
"message": "Icke-musik"
},
"category_music_offtopic_guideline1": {
"message": "Avsnitt som inte finns i officiella utgåvor"
},
"category_music_offtopic_guideline2": {
"message": "Icke-musik i ett liveframträdande"
},
"category_poi_highlight": {
"message": "Höjdpunkt"
},
"category_poi_highlight_description": {
"message": "Den del av videon som de flesta letar efter. Liknande kommentarer \"Video börjar på x\"."
},
"category_poi_highlight_guideline1": {
"message": "Avsnitt som de flesta personer letar efter"
},
"category_poi_highlight_guideline2": {
"message": "Kan hoppa över sammanhang"
},
"category_poi_highlight_guideline3": {
"message": "Kan hoppa över till titeln eller miniatyrbilden"
},
"category_livestream_messages": {
"message": "Liveström: Donations-/meddelandeavläsningar"
},

View File

@@ -424,6 +424,10 @@
padding-bottom: 5px;
}
.sbStatsSentence .sbExtraInfo {
display: inline-block;
}
/*
* Increase font size of username input and display
*/
@@ -458,9 +462,11 @@
*/
#usernameElement {
padding: 8px;
min-width: 50%;
}
#setUsernameContainer {
display: flex;
width: fit-content;
}
#setUsernameContainer > button {
display: flex;
@@ -490,7 +496,6 @@
* Set username form container with "expanded" state
*/
#setUsername.SBExpanded {
width: calc(200% - 130px);
text-align: left;
}
/*
@@ -535,6 +540,11 @@
background: #444;
}
#sponsorTimesDonateContainer a {
color: var(--sb-main-fg-color);
text-decoration: none;
}
/*
* "Show Notice Again" button
*/

View File

@@ -78,14 +78,14 @@
<sub class="sponsorStartHint grey-text">__MSG_popupHint__</sub>
<div align="center" style="margin: 8px 0;">
<button id="sponsorStart" class="sbMediumButton" style="margin-right: 8px">__MSG_sponsorStart__</button>
<button id="submitTimes" class="sbMediumButton" style="display: none; margin: 0 !important;">__MSG_submitTimesButton__</button>
<button id="submitTimes" class="sbMediumButton" style="display: none;">__MSG_submitTimesButton__</button>
</div>
<span id="submissionHint" style="display: none;">__MSG_submissionEditHint__</span>
</div>
<!-- Your Work box -->
<div class="sbYourWorkCols">
<p class="sbHeader" style="padding: 8px 16px; cursor: pointer;">
<p class="sbHeader" style="padding: 8px 16px;">
__MSG_yourWork__
</p>
<div>
@@ -125,13 +125,15 @@
</b>
<span id="sponsorTimesViewsDisplayEndWord">__MSG_Segments__</span>
<br />
(
<b>
<span id="sponsorTimesOthersTimeSavedDisplay">0</span>
<span id="sponsorTimesOthersTimeSavedEndWord">__MSG_minsLower__</span>
</b>
<span>__MSG_youHaveSavedTimeEnd__</span>
)
<span class="sbExtraInfo">
(
<b>
<span id="sponsorTimesOthersTimeSavedDisplay">0</span>
<span id="sponsorTimesOthersTimeSavedEndWord">__MSG_minsLower__</span>
</b>
<span>__MSG_youHaveSavedTimeEnd__</span>
)
</span>
</p>
<p id="sponsorTimesSkipsDoneContainer" style="display: none" class="u-mZ sbStatsSentence">
__MSG_youHaveSkipped__
@@ -139,24 +141,26 @@
<span id="sponsorTimesSkipsDoneDisplay">0</span>
</b>
<span id="sponsorTimesSkipsDoneEndWord">__MSG_Segments__</span>
(
<b>
<span id="sponsorTimeSavedDisplay">0</span>
<span id="sponsorTimeSavedEndWord">__MSG_minsLower__</span>
</b>
)
<span class="sbExtraInfo">
(
<b>
<span id="sponsorTimeSavedDisplay">0</span>
<span id="sponsorTimeSavedEndWord">__MSG_minsLower__</span>
</b>
)
</span>
</p>
</div>
<footer id="sbFooter">
<div id="sponsorTimesDonateContainer" style="display: none; align-items: center; justify-content: center;">
<img class="sbHeart" src="/icons/heart.svg" alt="Heart icon" />
<a id="sbConsiderDonateLink" href="https://sponsor.ajay.app/donate" target="_blank" rel="noopener">
__MSG_considerDonating__
</a>
<img id="sbCloseDonate" src="/icons/close.png" alt="Close icon" height="8" style="padding-left: 5px; cursor: pointer;" />
</div>
<div id="sponsorTimesDonateContainer" style="display: none; align-items: center; justify-content: center;">
<img class="sbHeart" src="/icons/heart.svg" alt="Heart icon" />
<a id="sbConsiderDonateLink" href="https://sponsor.ajay.app/donate" target="_blank" rel="noopener">
__MSG_considerDonating__
</a>
<img id="sbCloseDonate" src="/icons/close.png" alt="Close icon" height="8" style="padding-left: 5px; cursor: pointer;" />
</div>
<footer id="sbFooter">
<a id="helpButton">__MSG_help__</a>
<a href="https://sponsor.ajay.app" target="_blank" rel="noopener">__MSG_website__</a>
<a href="https://sponsor.ajay.app/stats" target="_blank" rel="noopener">__MSG_viewLeaderboard__</a>

View File

@@ -84,7 +84,7 @@ chrome.runtime.onMessage.addListener(function (request, _, callback) {
case "unregisterContentScript":
unregisterFirefoxContentScript(request.id)
return false;
case "tabs":
case "tabs": {
chrome.tabs.query({
active: true,
currentWindow: true
@@ -92,11 +92,13 @@ chrome.runtime.onMessage.addListener(function (request, _, callback) {
chrome.tabs.sendMessage(
tabs[0].id,
request.data,
(response) => callback(response)
(response) => {
callback(response);
}
);
}
);
});
return true;
}
}
});

View File

@@ -163,7 +163,7 @@ class SubmissionNoticeComponent extends React.Component<SubmissionNoticeProps, S
this.guidelinesReminder?.close();
this.noticeRef.current.close(true);
this.contentContainer().resetSponsorSubmissionNotice();
this.contentContainer().resetSponsorSubmissionNotice(false);
this.props.closeListener();
}

View File

@@ -220,8 +220,24 @@ function messageListener(request: Message, sender: unknown, sendResponse: (respo
case "closePopup":
closeInfoMenu();
break;
case "copyToClipboard":
navigator.clipboard.writeText(request.text);
break;
case "keydown":
document.dispatchEvent(new KeyboardEvent('keydown', {
key: request.key,
keyCode: request.keyCode,
code: request.code,
which: request.which,
shiftKey: request.shiftKey,
ctrlKey: request.ctrlKey,
altKey: request.altKey,
metaKey: request.metaKey
}));
break;
}
sendResponse({});
}
/**
@@ -529,6 +545,7 @@ function startSponsorSchedule(includeIntersectingSegments = false, currentTime?:
// Don't skip if this category should not be skipped
if (!shouldSkip(currentSkip) && !sponsorTimesSubmitting?.some((segment) => segment.segment === currentSkip.segment)) return;
const skipBuffer = 0.003;
const skippingFunction = (forceVideoTime?: number) => {
let forcedSkipTime: number = null;
let forcedIncludeIntersectingSegments = false;
@@ -537,7 +554,7 @@ function startSponsorSchedule(includeIntersectingSegments = false, currentTime?:
if (incorrectVideoCheck(videoID, currentSkip)) return;
forceVideoTime ||= Math.max(video.currentTime, getVirtualTime());
if (forceVideoTime >= skipTime[0] && forceVideoTime < skipTime[1]) {
if (forceVideoTime >= skipTime[0] - skipBuffer && forceVideoTime < skipTime[1]) {
skipToTime({
v: video,
skipTime,
@@ -558,7 +575,7 @@ function startSponsorSchedule(includeIntersectingSegments = false, currentTime?:
startSponsorSchedule(forcedIncludeIntersectingSegments, forcedSkipTime, forcedIncludeNonIntersectingSegments);
};
if (timeUntilSponsor < 0.003) {
if (timeUntilSponsor < skipBuffer) {
skippingFunction(currentTime);
} else {
const delayTime = timeUntilSponsor * 1000 * (1 / video.playbackRate);
@@ -1862,8 +1879,8 @@ function dontShowNoticeAgain() {
/**
* Helper method for the submission notice to clear itself when it closes
*/
function resetSponsorSubmissionNotice() {
submissionNotice?.close();
function resetSponsorSubmissionNotice(callRef = true) {
submissionNotice?.close(callRef);
submissionNotice = null;
}

View File

@@ -42,7 +42,24 @@ interface HideSegmentMessage {
UUID: SegmentUUID;
}
export type Message = BaseMessage & (DefaultMessage | BoolValueMessage | IsInfoFoundMessage | SubmitVoteMessage | HideSegmentMessage);
interface CopyToClipboardMessage {
message: "copyToClipboard";
text: string;
}
interface KeyDownMessage {
message: "keydown";
key: string;
keyCode: number;
code: string;
which: number;
shiftKey: boolean;
ctrlKey: boolean;
altKey: boolean;
metaKey: boolean;
}
export type Message = BaseMessage & (DefaultMessage | BoolValueMessage | IsInfoFoundMessage | SubmitVoteMessage | HideSegmentMessage | CopyToClipboardMessage | KeyDownMessage);
export interface IsInfoFoundMessageResponse {
found: boolean;

View File

@@ -178,7 +178,37 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
PageElements.optionsButton.addEventListener("click", openOptions);
PageElements.helpButton.addEventListener("click", openHelp);
PageElements.refreshSegmentsButton.addEventListener("click", refreshSegments);
PageElements.sbPopupIconCopyUserID.addEventListener("click", async () => navigator.clipboard.writeText(await utils.getHash(Config.config.userID)));
PageElements.sbPopupIconCopyUserID.addEventListener("click", async () => copyToClipboard(await utils.getHash(Config.config.userID)));
// Forward click events
if (window !== window.top) {
document.addEventListener("keydown", (e) => {
const target = e.target as HTMLElement;
if (target.tagName === "INPUT"
|| target.tagName === "TEXTAREA"
|| e.key === "ArrowUp"
|| e.key === "ArrowDown") {
return;
}
if (e.key === " ") {
// No scrolling
e.preventDefault();
}
sendTabMessage({
message: "keydown",
key: e.key,
keyCode: e.keyCode,
code: e.code,
which: e.which,
shiftKey: e.shiftKey,
ctrlKey: e.ctrlKey,
altKey: e.altKey,
metaKey: e.metaKey
});
});
}
//show proper disable skipping button
const disableSkipping = Config.config.disableSkipping;
@@ -496,7 +526,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
uuidButton.src = chrome.runtime.getURL("icons/clipboard.svg");
uuidButton.title = chrome.i18n.getMessage("copySegmentID");
uuidButton.addEventListener("click", () => {
navigator.clipboard.writeText(UUID);
copyToClipboard(UUID);
const stopAnimation = AnimationUtils.applyLoadingAnimation(uuidButton, 0.3);
stopAnimation();
});
@@ -684,6 +714,17 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
thanksForVotingText.innerText = message;
}
function removeVoteMessage(UUID) {
const voteButtonsContainer = document.getElementById("sponsorTimesVoteButtonsContainer" + UUID);
voteButtonsContainer.style.display = "block";
const voteStatusContainer = document.getElementById("sponsorTimesVoteStatusContainer" + UUID);
voteStatusContainer.style.display = "none";
const thanksForVotingText = document.getElementById("sponsorTimesThanksForVotingText" + UUID);
thanksForVotingText.removeAttribute("innerText");
}
function vote(type, UUID) {
//add loading info
addVoteMessage(chrome.i18n.getMessage("Loading"), UUID);
@@ -707,6 +748,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
} else if (response.successType == -1) {
addVoteMessage(GenericUtils.getErrorMessage(response.statusCode, response.responseText), UUID);
}
setTimeout(() => removeVoteMessage(UUID), 1500);
}
}
);
@@ -850,6 +892,17 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
hiddenButton.style.display = "none";
}
function copyToClipboard(text: string): void {
if (window === window.top) {
window.navigator.clipboard.writeText(text);
} else {
sendTabMessage({
message: "copyToClipboard",
text
});
}
}
/**
* Converts time in minutes to 2d 5h 25.1
* If less than 1 hour, just returns minutes

View File

@@ -35,7 +35,7 @@ class SubmissionNotice {
contentContainer={contentContainer}
callback={callback}
ref={this.noticeRef}
closeListener={() => this.close()} />,
closeListener={() => this.close(false)} />,
this.noticeElement
);
}
@@ -44,7 +44,8 @@ class SubmissionNotice {
this.noticeRef.current.forceUpdate();
}
close(): void {
close(callRef = true): void {
if (callRef) this.noticeRef.current.cancel();
ReactDOM.unmountComponentAtNode(this.noticeElement);
this.noticeElement.remove();

View File

@@ -16,7 +16,7 @@ export interface ContentContainer {
updatePreviewBar: () => void,
onMobileYouTube: boolean,
sponsorSubmissionNotice: SubmissionNotice,
resetSponsorSubmissionNotice: () => void,
resetSponsorSubmissionNotice: (callRef?: boolean) => void,
updateEditButtonsOnPlayer: () => void,
previewTime: (time: number, unpause?: boolean) => void,
videoInfo: VideoInfo,

View File

@@ -37,6 +37,7 @@ async function setup(): Promise<WebDriver> {
options.addArguments("--load-extension=" + Path.join(__dirname, "../dist/"));
options.addArguments("--mute-audio");
options.addArguments("--disable-features=PreloadMediaEngagementData, MediaEngagementBypassAutoplayPolicies");
options.addArguments("--headless=chrome");
const driver = await new Builder().forBrowser("chrome").setChromeOptions(options).build();
driver.manage().setTimeouts({