Compare commits

...

354 Commits

Author SHA1 Message Date
Ajay Ramachandran
31b76553dc Merge pull request #317 from ajayyy/react
Categories Improvements
2020-04-19 20:54:25 -04:00
Ajay Ramachandran
eff73548e3 New Crowdin translations (#321)
* New translations messages.json (French)
2020-04-19 20:53:36 -04:00
Ajay Ramachandran
2ca98ad97b Increase version number. 2020-04-19 20:52:26 -04:00
Ajay Ramachandran
4e9b5ca0bc Fixed preview button 2020-04-19 20:48:43 -04:00
Ajay Ramachandran
3d7d291d9a Changed "show on overlay" wording 2020-04-19 20:38:21 -04:00
Ajay Ramachandran
195ed1f5fc Removed old submission method 2020-04-19 20:37:30 -04:00
Ajay Ramachandran
74f14b3bf8 Fixed polish folder 2020-04-14 23:50:20 -04:00
Ajay Ramachandran
290dff25f9 Update Crowdin configuration file 2020-04-14 23:44:15 -04:00
Ajay Ramachandran
64ab6b5768 Update Crowdin configuration file 2020-04-14 23:41:50 -04:00
Ajay Ramachandran
1b2bc6def4 Submission notice size now updates when the video size changes.
React listeners are properly cleaned up now.
2020-04-14 00:47:09 -04:00
Ajay Ramachandran
18c7be8161 Made submission notice max height dynamic 2020-04-14 00:31:47 -04:00
Ajay Ramachandran
638439a671 Moved notice closing to renderer (no leftover nodes) 2020-04-14 00:10:20 -04:00
Ajay Ramachandran
9fafb9cf54 Made the submission notice scroll when too large 2020-04-13 21:48:55 -04:00
Ajay Ramachandran
0223aa8307 Only show selected categories when submitting and added a "show more categories" button 2020-04-13 12:43:12 -04:00
Ajay Ramachandran
07f1106579 Merge pull request #288 from ajayyy/react
Moving elements to React
2020-04-10 00:10:07 -04:00
Ajay Ramachandran
2f78f31874 Increased version number. 2020-04-10 00:08:49 -04:00
Ajay Ramachandran
74a4ef0692 Changed name of merch category 2020-04-09 16:40:42 -04:00
Ajay Ramachandran
2d55ea0fc5 Removed logging 2020-04-09 15:34:11 -04:00
Ajay Ramachandran
a50f030a3b Properly handle server error 2020-04-09 14:08:26 -04:00
Ajay Ramachandran
ae690f0c65 Renamed new request function 2020-04-09 14:03:13 -04:00
Ajay Ramachandran
e2128f7ae3 Fixed editing non first index submissions.
The idSuffix was not being set properly and was set to undefined.
2020-04-09 12:54:04 -04:00
Ajay Ramachandran
80fe28a952 Fixed now button locale missing 2020-04-09 12:48:41 -04:00
Ajay Ramachandran
be74ebe7bc Added category colours 2020-04-09 12:44:10 -04:00
Ajay Ramachandran
e085163dfd Only shows sponsor category if test server is disabled 2020-04-09 12:13:56 -04:00
Ajay Ramachandran
adef65b878 Made submission notice above other notices 2020-04-09 01:42:16 -04:00
Ajay Ramachandran
b7870cbd74 Added submissions with the new API 2020-04-09 01:35:23 -04:00
Ajay Ramachandran
cd03218940 Now uses new GET api when testing server is enabled 2020-04-09 01:19:00 -04:00
Ajay Ramachandran
6abf6a0044 Added testing server option. 2020-04-09 00:40:11 -04:00
Ajay Ramachandran
6ef5dd4522 Update README.md 2020-04-07 18:28:53 -04:00
Ajay Ramachandran
9f87c839b5 Fixed preview bar sometimes not appearing 2020-04-06 21:58:42 -04:00
Ajay Ramachandran
85c1a45c8b Improved skipping over multiple segments 2020-04-06 01:19:17 -04:00
Ajay Ramachandran
963fb58321 Fixed endIndex not being used while skipping and made end index finding function recursive 2020-04-06 00:45:28 -04:00
Ajay Ramachandran
d1d4dcdc9c Added migration for auto skip option 2020-04-06 00:40:30 -04:00
Ajay Ramachandran
24dd98a98f Update README.md 2020-04-05 18:34:10 -04:00
Ajay Ramachandran
5abc0bedd4 Fixed some non converted sponsorTimes code 2020-04-05 14:28:26 -04:00
Ajay Ramachandran
e1e570fb18 Made show only overlay work 2020-04-05 00:08:44 -04:00
Ajay Ramachandran
93c0a0c003 Give the user error messages from the server.
Helps with https://github.com/ajayyy/SponsorBlockServer/pull/70
2020-04-04 23:47:01 -04:00
Ajay Ramachandran
93f82de7fd Moves submission error check into the proper place 2020-04-04 23:45:10 -04:00
Ajay Ramachandran
f6945b56d8 Fixed submitted sponsors and prevented preview sponsors from being voted on 2020-04-04 23:35:44 -04:00
Ajay Ramachandran
55e17ceb60 Fixed issues with manual skipping 2020-04-04 23:26:34 -04:00
Ajay Ramachandran
2a432490bc Moved audio setting 2020-04-04 23:26:09 -04:00
Ajay Ramachandran
0115a6df13 Merge pull request #315 from Joe-Dowd/react
Audio notification on skip
2020-04-04 22:26:51 -04:00
Ajay Ramachandran
a5e9ceda60 Removed custom options code for audio 2020-04-04 22:25:10 -04:00
Ajay Ramachandran
09f53c80f0 Sync volume with video volume 2020-04-04 22:22:37 -04:00
Ajay Ramachandran
8134b5a67e Added missing category to example config 2020-04-04 22:17:11 -04:00
Ajay Ramachandran
ebd6c9c952 Fixed error when preview bar updates 2020-04-04 22:12:54 -04:00
Ajay Ramachandran
37e2fb0972 Fixed react whitespace error 2020-04-04 22:11:39 -04:00
Ajay Ramachandran
7af44eae66 Category submission notice now works.
It still submits to the server without a category since the server-side is not done.
2020-04-04 22:06:59 -04:00
Ajay Ramachandran
62c50d77c6 Added offtopic category 2020-04-04 21:08:18 -04:00
Ajay Ramachandran
bac9029a28 Switched skipping to use category settings.
Submission editing is now broken as well as clicking submit.

Skipping through multiple submissions just treats it as skipping from one (no multiple vote options).
2020-04-04 21:04:17 -04:00
Joe Dowd
48a614943d Merge branch 'react' into react 2020-04-04 18:44:05 +01:00
Ajay Ramachandran
ec9f1efd55 Added category skip option to just show an overlay without skipping 2020-04-04 12:58:02 -04:00
Joe-Dowd
59c6455298 removed duplicate locale message 2020-04-04 14:13:27 +01:00
Joe-Dowd
d7a7476cd1 fixed tabbing 2020-04-04 14:01:31 +01:00
Joe-Dowd
36981af95a Added audio notification on skip to options menu 2020-04-04 13:59:04 +01:00
Ajay Ramachandran
d4d5e4743e Added key to sponsorTimeEditComponent 2020-04-02 22:14:52 -04:00
Ajay Ramachandran
3afde08a6e Category selections now save 2020-04-02 22:13:36 -04:00
Ajay Ramachandran
6ea87d7cd0 Added basic category chooser UI 2020-04-02 21:26:13 -04:00
Ajay Ramachandran
b6c243236b Submission notice now saves on submission 2020-04-02 14:38:33 -04:00
Ajay Ramachandran
6fa67088bc Removed old edit pane from popup and made it call the new one 2020-04-02 13:22:08 -04:00
Ajay Ramachandran
d37abcfa9f Added category list to example config 2020-04-02 01:33:28 -04:00
Ajay Ramachandran
5575eda7b1 Changed UI data to be store in strings for better UX 2020-04-02 01:29:12 -04:00
Ajay Ramachandran
e17eb60b4d Added basic category selector to the UI 2020-04-02 01:25:06 -04:00
Ajay Ramachandran
e055a66342 Submission notice now updates when sponsors are added 2020-04-02 00:59:11 -04:00
Ajay Ramachandran
72c98923f6 Fixed close button on submission confirmation notice 2020-04-02 00:44:38 -04:00
Ajay Ramachandran
8ecea87c52 Added now button to editor 2020-04-01 20:38:10 -04:00
Ajay Ramachandran
7727cd56db Save edits before previewing 2020-04-01 20:24:50 -04:00
Ajay Ramachandran
242fbf8009 Save edits correctly 2020-04-01 20:22:51 -04:00
Ajay Ramachandran
24f2ce4a32 Fixed event propagation issues 2020-04-01 20:19:31 -04:00
Ajay Ramachandran
0d08e11b1d Added basic time editing.
The button presses don't work yet as YouTube steals the events.
2020-04-01 20:06:46 -04:00
Ajay Ramachandran
513a140754 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into react
# Conflicts:
#	public/_locales/en/messages.json
#	src/content.ts
2020-03-31 00:29:27 -04:00
Ajay Ramachandran
88350e3421 Merge pull request #308 from ajayyy/experimental
Skipping Fixes
2020-03-30 20:11:33 -04:00
Ajay Ramachandran
36d79313de Increase version number 2020-03-30 20:10:32 -04:00
Ajay Ramachandran
a9993d5d80 Added check for videoID change not being called 2020-03-30 20:08:00 -04:00
Ajay Ramachandran
4a6ddf6774 Remove mobile support announcement 2020-03-30 19:15:25 -04:00
Ajay Ramachandran
b6172c6d9b Fixed sponsor skipping after quickly playing and pausing. 2020-03-30 19:07:59 -04:00
Ajay Ramachandran
b21a59f4e5 Fixed looping sometimes not skipping beginning sponsors.
Resolves https://github.com/ajayyy/SponsorBlock/issues/306
2020-03-30 15:33:03 -04:00
Ajay Ramachandran
78dd44c502 Fixed missing name in release workflow 2020-03-30 14:44:26 -04:00
Ajay Ramachandran
f4a129b346 Merge pull request #307 from ajayyy/experimental
Skipping fixes
2020-03-30 14:34:31 -04:00
Ajay Ramachandran
6d60a90533 Increased version number. 2020-03-30 14:18:11 -04:00
Ajay Ramachandran
0d33794636 Fixed almost zero second sponsors skipping a little too late. 2020-03-30 14:11:46 -04:00
Ajay Ramachandran
e62d46f2dd Improved zero second skipping for directly loaded videos 2020-03-30 14:07:35 -04:00
Ajay Ramachandran
7f36c7eec3 Merge pull request #302 from Joe-Dowd/restrict-keybindings
Restrict keybindings
2020-03-26 12:35:28 -04:00
Ajay Ramachandran
08d28798c6 Localised key errors 2020-03-26 12:30:06 -04:00
Ajay Ramachandran
fe33277d8f Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into restrict-keybindings 2020-03-26 12:27:06 -04:00
Ajay Ramachandran
feec5b4e22 Added spacing and separated code into a function 2020-03-26 12:26:47 -04:00
Ajay Ramachandran
62b5e90d87 Merge pull request #300 from Joe-Dowd/debug-output
Added copy debug information to clipboard options element.
2020-03-26 12:19:07 -04:00
Ajay Ramachandran
2c980a269d Fixed sponsorTimes data on export and import 2020-03-26 12:18:52 -04:00
Ajay Ramachandran
1da60e38a1 Merge pull request #304 from ajayyy/experimental
Scheduling fixes
2020-03-25 19:01:43 -04:00
Ajay Ramachandran
ed67cc52fe Fixed mobile YouTube starting sponsor detection that are not exactly 0 seconds. 2020-03-21 20:59:08 -04:00
Joe-Dowd
b614dce91a Added more restricted characters 2020-03-20 19:55:29 +00:00
Joe-Dowd
c013c7ef0f added N and i to the list of restricted characters 2020-03-20 19:50:38 +00:00
Joe-Dowd
c78e2cd214 Fixed mod keys when setting keybinding 2020-03-20 19:39:37 +00:00
Joe-Dowd
da5a3841bd Added restrictions to keybindings. 2020-03-20 15:35:23 +00:00
Joe Dowd
e73d79071c Added copy debug information to clipboard options element. 2020-03-18 00:15:04 +00:00
Ajay Ramachandran
f100ee4738 Made preview button functional 2020-03-11 19:56:16 -04:00
Ajay Ramachandran
37662138df Increase precision in submission preview 2020-03-11 19:48:51 -04:00
Ajay Ramachandran
037d1089a3 Merge branch 'experimental' of https://github.com/ajayyy/SponsorBlock into react 2020-03-11 19:40:42 -04:00
Ajay Ramachandran
0467dd5d21 Made sure no skips are scheduled while paused 2020-03-11 19:39:08 -04:00
Ajay Ramachandran
1df123de6d Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into react
# Conflicts:
#	public/_locales/en/messages.json
#	src/js-components/skipNotice.ts
2020-03-11 19:36:41 -04:00
Ajay Ramachandran
3063591a4c Added delete function to new dialog 2020-03-11 19:35:20 -04:00
Ajay Ramachandran
a182354254 Added basic react submission confirmation notice 2020-03-11 17:50:50 -04:00
Ajay Ramachandran
5f879bceab Fixed where repo-token was inputted in release workflow 2020-03-10 23:30:53 -04:00
Ajay Ramachandran
457bd15e17 Merge pull request #298 from ajayyy/experimental
Options Improvements
2020-03-10 23:24:36 -04:00
Ajay Ramachandran
cc1b8ee499 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into experimental 2020-03-10 23:23:30 -04:00
Ajay Ramachandran
4a9ed1348e Increase version number 2020-03-10 23:23:10 -04:00
Ajay Ramachandran
5595420be6 Removed redundant if statement 2020-03-10 23:22:57 -04:00
Ajay Ramachandran
191e9ceb6f Makes sure the playing and play listener both don't get called at the same time.
This led to double notices.
2020-03-10 23:22:17 -04:00
Ajay Ramachandran
a02aef591e Split notice text into a separate component 2020-03-10 12:57:26 -04:00
Ajay Ramachandran
1e26faa57c Update README.md 2020-03-10 12:11:08 -04:00
Ajay Ramachandran
1a92265e65 Made non timed notice the default 2020-03-10 12:08:54 -04:00
Ajay Ramachandran
92a6065c98 Added support for untimed notice 2020-03-10 03:08:15 -04:00
Ajay Ramachandran
d7ca56941a Moved timing mechanism to separate component 2020-03-10 03:01:20 -04:00
Ajay Ramachandran
030256c9e1 Enable checkbox when the permission prompt is successful 2020-03-10 02:14:00 -04:00
Ajay Ramachandran
77eff12d9b Merge pull request #261 from OfficialNoob/patch-1
Made decodeStoredItem detect item type
2020-03-10 01:21:10 -04:00
Ajay Ramachandran
2967fce013 Update README.md 2020-03-10 00:57:44 -04:00
Ajay Ramachandran
db1def623a Update README.md 2020-03-10 00:56:58 -04:00
Ajay Ramachandran
140e324bf1 Update README.md 2020-03-10 00:55:18 -04:00
Ajay Ramachandran
f0bf051259 Properly ask for permissions when changing the server address 2020-03-10 00:48:53 -04:00
Ajay Ramachandran
2ec47d52cd Added basic options import/export 2020-03-10 00:33:50 -04:00
Ajay Ramachandran
50002cfbbd Fix github token using the wrong key in release workflow 2020-03-09 23:10:59 -04:00
Ajay Ramachandran
6ccd4b8b37 Merge pull request #297 from ajayyy/experimental
Fix non zero second skips
2020-03-09 23:05:45 -04:00
Ajay Ramachandran
da6ccb561d Fixed manual skip vote check using wrong variable 2020-03-09 23:04:01 -04:00
Ajay Ramachandran
c0894afff9 Prevent manual skipping votes from affecting to UI and happening when auto vote is off 2020-03-09 23:03:24 -04:00
Ajay Ramachandran
09f244150c Fixed skipping for non zero second sponsors.
Also now using the playing event to fix issues with mobile YouTube skipping.
2020-03-09 23:00:39 -04:00
Ajay Ramachandran
c526a812e0 Made manual skip vote follow config 2020-03-09 22:50:07 -04:00
Ajay Ramachandran
ccbc0456f9 Made skip notice use react states 2020-03-09 21:51:44 -04:00
Ajay Ramachandran
efec8b320c Increase version num 2020-03-09 18:38:02 -04:00
Ajay Ramachandran
e6ea9f77e9 Fixed skip scheduling for auto skip 2020-03-09 18:34:33 -04:00
Ajay Ramachandran
0813aa4ba3 Prevent release workflow from running multiple times 2020-03-09 18:30:57 -04:00
Ajay Ramachandran
ba575f6b8d Merge pull request #296 from ajayyy/experimental
Prevent manual skips from triggering a view and improved skip schedule for manual skip
2020-03-09 18:20:11 -04:00
Ajay Ramachandran
ff9b2338e0 Fixed scheduling being wrong when manual skip is enabled 2020-03-09 18:12:05 -04:00
Ajay Ramachandran
d2bb4b38e3 Increased version number 2020-03-09 18:07:29 -04:00
Ajay Ramachandran
760c08dd0c Prevent manual skips from triggering a view 2020-03-09 18:07:06 -04:00
Ajay Ramachandran
50517eb462 Switched upload to release action 2020-03-09 11:15:29 -04:00
Ajay Ramachandran
e77425c21e Merge pull request #294 from ajayyy/experimental
Another potential fix for zero second sponsor freezing
2020-03-09 11:04:26 -04:00
Ajay Ramachandran
f63abb053d Revert to only using workflows 2020-03-09 11:02:14 -04:00
Ajay Ramachandran
7b5703aa04 Fixed action format 2020-03-09 10:56:06 -04:00
Ajay Ramachandran
d641066312 Checkout in CI 2020-03-09 10:52:43 -04:00
Ajay Ramachandran
44ca8d47d8 Moved CI into the right place 2020-03-09 10:51:26 -04:00
Ajay Ramachandran
d5f41bf4ad Fixed CI 2020-03-09 10:49:50 -04:00
Ajay Ramachandran
73e8926444 Start skip schedule from skip time to prevent slow video updates from breaking it. 2020-03-09 10:43:13 -04:00
Ajay Ramachandran
5ad694af65 Increase version number 2020-03-08 23:26:46 -04:00
Ajay Ramachandran
d7f7acb219 Fixed release action 2020-03-08 23:20:41 -04:00
Ajay Ramachandran
b4be51333a Merge pull request #293 from ajayyy/experimental
Fixed double sponsor skip for zero second sponsors
2020-03-08 23:17:48 -04:00
Ajay Ramachandran
ae94811a00 Increase version number 2020-03-08 23:16:50 -04:00
Ajay Ramachandran
a484f2f2cc Fixed double sponsor skip for zero second sponsors 2020-03-08 23:16:09 -04:00
Ajay Ramachandran
9cce4e734d Merge pull request #292 from grishka/russian
Fix Russian translation and add missing strings
2020-03-07 12:34:48 -05:00
Grishka
3c63644213 fix 2020-03-07 13:45:56 +03:00
Grishka
ad25bc34de Add missing Russian strings 2020-03-07 13:37:58 +03:00
Ajay Ramachandran
0241e15691 Only seek if the video is not paused 2020-02-28 15:06:08 -05:00
Ajay Ramachandran
af9a6b8a84 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into experimental 2020-02-28 14:09:21 -05:00
Ajay Ramachandran
329b188435 Checkout before using other CI 2020-02-27 22:23:33 -05:00
Ajay Ramachandran
2e49bb73c5 Merge pull request #290 from ajayyy/experimental
Potentially fixed zero second skip spam
2020-02-27 22:21:33 -05:00
Ajay Ramachandran
5158020293 Potentially fixed zero second skip spam 2020-02-27 22:20:30 -05:00
Ajay Ramachandran
feaf80ad1e Merge pull request #289 from Joe-Dowd/messages-typo
Typo in en messages locale "skipeed -> skipped"
2020-02-25 15:14:01 -05:00
Joe Dowd
7fbd89159e Typo in en messages locale skipped 2020-02-25 18:25:28 +00:00
Ajay Ramachandran
0d9b624fd5 Delete old skip notice 2020-02-25 00:43:20 -05:00
Ajay Ramachandran
008c9380b1 Switched notice to react 2020-02-25 00:38:03 -05:00
Ajay Ramachandran
716861da18 Fixed beta builds 2020-02-23 20:49:17 -05:00
Ajay Ramachandran
d0a34d423c Fix release CI 2020-02-23 20:42:12 -05:00
Ajay Ramachandran
adfba72f19 Merge pull request #286 from ajayyy/experimental
Mobile fix + mobile update notice
2020-02-23 20:40:48 -05:00
Ajay Ramachandran
f00337c376 Increase version number. 2020-02-23 20:39:29 -05:00
Ajay Ramachandran
737a023b65 Added mobile support message. 2020-02-23 20:39:13 -05:00
Ajay Ramachandran
5551344355 Fixed mobile notice zoom on Firefox 2020-02-23 16:14:18 -05:00
Ajay Ramachandran
07f64382fb Merge pull request #285 from cherryblossom000/patch-1
Fix "0 sponsor" in popup
2020-02-23 11:21:21 -05:00
Ajay Ramachandran
1c7cde2a19 Changed to !== 2020-02-23 11:20:21 -05:00
cherryblossom
8510a7f3d8 Fix popup saying "0 sponsor" 2020-02-23 17:03:18 +11:00
Ajay Ramachandran
db60b11a17 Merge pull request #284 from ajayyy/experimental
CI Improvements
2020-02-20 15:38:35 -05:00
Ajay Ramachandran
6a212b762a Fixed invalid release workflow 2020-02-20 12:21:30 -05:00
Ajay Ramachandran
c8ec2922cf Added makedir to CI 2020-02-20 12:17:51 -05:00
Ajay Ramachandran
b629b7d333 Added basic release workflow 2020-02-20 12:14:01 -05:00
Ajay Ramachandran
514a8b62d6 Added beta build to CI 2020-02-20 11:39:06 -05:00
Ajay Ramachandran
cd11618a5d Merge pull request #283 from ajayyy/experimental
New skipping mechanism fixes
2020-02-20 11:25:32 -05:00
Ajay Ramachandran
8be3cb157a Increased version number 2020-02-20 11:23:44 -05:00
Ajay Ramachandran
4ca57cc025 Fixed preview sponsors not skipping when only they are there. 2020-02-19 13:45:00 -05:00
Ajay Ramachandran
397bcc94c5 Remove redundant code 2020-02-19 13:35:05 -05:00
Ajay Ramachandran
8b28bccfd7 Run dev now uses dev build. 2020-02-19 12:57:22 -05:00
Ajay Ramachandran
c6107057d9 Firefox dev environment now loads Firefox uBlock Origin 2020-02-19 12:54:58 -05:00
Ajay Ramachandran
ab2a9530e9 Sped up zero second sponsors a tiny bit 2020-02-19 12:41:22 -05:00
Ajay Ramachandran
bfc771bd99 Removed unused variables 2020-02-19 12:37:39 -05:00
Ajay Ramachandran
e75e588755 Sped up direct links a tiny bit. 2020-02-19 12:37:17 -05:00
Ajay Ramachandran
0266bb49ca Fixed typo 2020-02-19 12:35:10 -05:00
Ajay Ramachandran
9e693fd555 Update README.md 2020-02-19 12:33:48 -05:00
Ajay Ramachandran
1f30b9ec84 Merge pull request #280 from ajayyy/mobile-youtube
Mobile YouTube support + Precise skipping
2020-02-19 11:40:07 -05:00
Ajay Ramachandran
50862e3c03 Increased version number 2020-02-19 11:25:14 -05:00
Ajay Ramachandran
20e90bbc34 Fixed schedule not updating when new sponsors arrive 2020-02-19 00:54:30 -05:00
Ajay Ramachandran
2e212e6d10 Improved mobile preview bar 2020-02-19 00:14:08 -05:00
Ajay Ramachandran
2039bfa081 Made buttons on mobile not close the menu. 2020-02-19 00:10:05 -05:00
Ajay Ramachandran
7dc8a99247 Added button support to mobile. 2020-02-19 00:00:22 -05:00
Ajay Ramachandran
1b25ea7f95 Shrunk notice on mobile 2020-02-18 19:29:20 -05:00
Ajay Ramachandran
1869382166 Fixed popup issues. 2020-02-18 19:03:34 -05:00
Ajay Ramachandran
d58cd639c7 Added zero second preview sponsors. 2020-02-18 18:45:33 -05:00
Ajay Ramachandran
6cd2d4cf83 Added back whitelist support 2020-02-18 18:44:06 -05:00
Ajay Ramachandran
b681f5abd9 Added support for preview sponsors in new skipping method. 2020-02-18 18:43:45 -05:00
Ajay Ramachandran
5b2a0feccf Switched to new skipping mechanic 2020-02-18 18:29:02 -05:00
Ajay Ramachandran
cd58f6bc73 Skip notice improvement. 2020-02-18 15:57:40 -05:00
Ajay Ramachandran
aeabf806ac Added duration change listener check to prevent mid-video zero second skips.
Sometimes the video gets reset to zero seconds for a few milliseconds, this should not trigger a skip.

Resolves https://github.com/ajayyy/SponsorBlock/issues/183
2020-02-18 15:03:55 -05:00
Ajay Ramachandran
af7ba31c2f Remove logging. 2020-02-18 14:40:40 -05:00
Ajay Ramachandran
5b962b1b9d Merge pull request #281 from ajayyy/experimental
Rename CI artifacts
2020-02-17 15:24:49 -05:00
Ajay Ramachandran
219a7ba8c3 Added preview bar to mobile 2020-02-17 15:10:50 -05:00
Ajay Ramachandran
933babb4e6 Added mobile YouTube site to the whitelist. 2020-02-17 11:32:00 -05:00
Ajay Ramachandran
023ba2e051 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into experimental 2020-02-17 11:24:36 -05:00
Ajay Ramachandran
8d82a6a3e6 Fixed data old format migration. 2020-02-14 23:20:11 -05:00
Ajay Ramachandran
88a8fda566 Moved window.SB creation for security reasons. 2020-02-14 23:16:01 -05:00
Ajay Ramachandran
1c833a8b1d Rename CI artifacts. 2020-02-11 21:04:41 -05:00
Ajay Ramachandran
7143d7532d Increase version number 2020-02-11 21:01:35 -05:00
Ajay Ramachandran
1f10bdf593 Merge pull request #279 from CommanderRoot/patch-1
Retain decimals in seconds value when editing sponsor times
2020-02-11 20:33:04 -05:00
CommanderRoot
3b543916ff Retain decimals in seconds value 2020-02-12 02:24:03 +01:00
Ajay Ramachandran
c4da85340a Merge pull request #277 from ajayyy/experimental
Fixed regex to support Firefox
2020-02-11 14:10:47 -05:00
Ajay Ramachandran
ec59c7e0f9 Increase version number. 2020-02-11 14:10:11 -05:00
Ajay Ramachandran
2454cd9a39 Fixed regex to support Firefox. 2020-02-11 12:29:19 -05:00
Ajay Ramachandran
c19e2bea29 Merge pull request #274 from ajayyy/experimental
Various fixes
2020-02-10 22:35:54 -05:00
Ajay Ramachandran
2f2c1ad49b Increased version number. 2020-02-10 22:32:15 -05:00
Ajay Ramachandran
657aff2167 Removed use of Invidious API.
Resolves https://github.com/ajayyy/SponsorBlock/issues/189.
2020-02-10 22:27:54 -05:00
Ajay Ramachandran
2450457fe5 Fixed close button on dark theme.
Resolves https://github.com/ajayyy/SponsorBlock/issues/196
2020-02-10 21:54:11 -05:00
Ajay Ramachandran
ba9e42e6f0 Forced auto skip if previewing sponsor.
Resolves https://github.com/ajayyy/SponsorBlock/issues/222
2020-02-10 21:49:17 -05:00
Ajay Ramachandran
f05d80523b Made it unpause when previewing a sponsor.
Resolves https://github.com/ajayyy/SponsorBlock/issues/222
2020-02-10 21:39:39 -05:00
Ajay Ramachandran
d2779aba86 Fix editing not adding numbers.
Resolves https://github.com/ajayyy/SponsorBlock/issues/273.
2020-02-10 18:03:09 -05:00
Ajay Ramachandran
852912a42b Fixed inlines sponsor popup.
Fixes https://github.com/ajayyy/SponsorBlock/issues/272
2020-02-10 17:12:52 -05:00
Official Noob
995fe072bd Merge pull request #1 from ajayyy/master
Update
2020-02-09 22:15:27 +00:00
Ajay Ramachandran
45e0f87f9f Reformatted manifest. 2020-02-09 11:14:40 -05:00
Ajay Ramachandran
79b02c7ae7 Merge pull request #269 from ajayyy/experimental
Fixed Firefox recursion issue
2020-02-09 10:36:20 -05:00
Ajay Ramachandran
cfb902180d Increased version number. 2020-02-09 10:35:32 -05:00
Ajay Ramachandran
1753c05686 Fix Firefox infinite recursion issue. 2020-02-09 10:34:18 -05:00
Ajay Ramachandran
c76d2c9a95 Merge pull request #266 from ajayyy/experimental
Options page improvements + Preview sponsors
2020-02-08 23:30:12 -05:00
Ajay Ramachandran
00117bdfac Increase version number. 2020-02-08 23:29:09 -05:00
Ajay Ramachandran
40cddbf8ee Disabling auto skip now enables the notice. 2020-02-08 23:28:41 -05:00
Ajay Ramachandran
9026044528 Fixed preview sponsor times not turning into actual ones upon submission. 2020-02-08 23:16:44 -05:00
Ajay Ramachandran
50f293d783 Added better server address trimming. 2020-02-08 23:01:28 -05:00
Ajay Ramachandran
2b558c43bd Removed subdomain requirement. 2020-02-08 22:55:59 -05:00
Ajay Ramachandran
22cc51734f Merge pull request #264 from ajayyy/privacy-confirm
Added privacy confirmation for unlisted videos
2020-02-08 22:45:22 -05:00
Ajay Ramachandran
cd5adc1b82 Merge pull request #265 from ajayyy/typescript
Issue fixing
2020-02-08 22:44:47 -05:00
Ajay Ramachandran
b7e83a0efe Added unlisted check option.
https://github.com/ajayyy/SponsorBlock/pull/224

Co-authored-by: OfficialNoob <OfficialNoob@users.noreply.github.com>
2020-02-08 22:43:27 -05:00
Ajay Ramachandran
6159605afd Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into typescript
# Conflicts:
#	public/_locales/en/messages.json
#	src/config.ts
2020-02-08 22:19:07 -05:00
Ajay Ramachandran
ceae02426d Merge pull request #262 from Joe-Dowd/customServerAddress
Add custom server address
2020-02-08 22:18:07 -05:00
Ajay Ramachandran
51d2886f70 Seperated show upload button option from info button. 2020-02-08 22:18:03 -05:00
Ajay Ramachandran
c2eb973a28 Fixed centering and added some more notes to the help page. 2020-02-08 22:13:36 -05:00
Ajay Ramachandran
f8532d39eb Improved invidious warning on the help page. 2020-02-08 22:07:51 -05:00
Ajay Ramachandran
c2be1ee6d4 Added reset button to text change. 2020-02-08 22:03:45 -05:00
Ajay Ramachandran
1735cdb45d Added server address input validation. 2020-02-08 21:58:50 -05:00
Ajay Ramachandran
be6cd62fbe Rename string change option to more fitting name. 2020-02-08 21:42:15 -05:00
Ajay Ramachandran
cfe91f6280 Changed order of options. 2020-02-08 21:34:26 -05:00
Ajay Ramachandran
4e7bfa5ed3 Changed server address config name 2020-02-08 21:32:46 -05:00
Ajay Ramachandran
6f03c68fdc Change the way server address defaults are handled. 2020-02-08 21:30:57 -05:00
Ajay Ramachandran
62653705ff Improved custom instance message 2020-02-08 21:27:55 -05:00
Ajay Ramachandran
8cdbebd6de Added the config as a global variable. 2020-02-08 20:16:26 -05:00
Ajay Ramachandran
94af8ab301 Prevent all strings from being parsed as JSON. 2020-02-08 20:15:49 -05:00
Ajay Ramachandran
be3a4a4e91 Added support for old format. 2020-02-08 20:08:34 -05:00
Ajay Ramachandran
3791c5c78b Fixed JSON conversion iterator 2020-02-08 20:05:31 -05:00
Joe Dowd
6bd22896b9 Merged Lartza/min-duration 2020-02-09 01:02:40 +00:00
Ajay Ramachandran
ea4331e4b1 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into typescript
# Conflicts:
#	src/config.ts
2020-02-08 19:31:18 -05:00
Ajay Ramachandran
84fbc93c8a Merge pull request #250 from Lartza/min-duration
Add minimum duration option
2020-02-08 19:30:36 -05:00
Ajay Ramachandran
553581f67b Removed extra file 2020-02-08 19:28:23 -05:00
Ajay Ramachandran
afe16e6623 Improved confirm message. 2020-02-08 19:27:38 -05:00
Ajay Ramachandran
0942da0cd1 Moved minimum duration open down 2020-02-08 19:23:48 -05:00
Ajay Ramachandran
c2b3835618 Added colon to minimum duration message 2020-02-08 19:23:34 -05:00
Ajay Ramachandran
4a96a52398 Fixed multiple sponsors being hidden. 2020-02-08 19:19:27 -05:00
Ajay Ramachandran
4e1eb82538 Fixed typescript issues. 2020-02-08 19:10:04 -05:00
Ajay Ramachandran
885fae175d Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into min-duration
# Conflicts:
#	SB.js
#	src/options.ts
2020-02-08 19:09:17 -05:00
Ajay Ramachandran
1cd84d8a2c Fixed Chrome Invidious CSS issues.
Apparently the chrome API doesn't work well with CSS.

Resolves https://github.com/ajayyy/SponsorBlock/issues/241
2020-02-08 18:23:08 -05:00
Ajay Ramachandran
0c891e0a09 Changed time saved date to updated time. 2020-02-08 17:51:16 -05:00
Ajay Ramachandran
08c7754f29 Fixed skip count resetting.
Resolves https://github.com/ajayyy/SponsorBlock/issues/256
2020-02-08 17:50:06 -05:00
Ajay Ramachandran
5f21d3f96f Default UUIDs to an empty list instead of null.
Resolves https://github.com/ajayyy/SponsorBlock/issues/252.
2020-02-08 17:45:22 -05:00
Ajay Ramachandran
158b76c17e Fixed incorrect type. 2020-02-06 20:10:35 -05:00
Joe Dowd
3455a79298 Removed console.log calls 2020-02-07 00:57:24 +00:00
Joe Dowd
dd08ff1507 add custom server address 2020-02-07 00:40:01 +00:00
Official Noob
1c17464c94 config => defaults 2020-02-04 23:29:11 +00:00
Lartza
b5996a9783 Discard short segments instead of ignoring them later 2020-02-05 01:12:03 +02:00
Lartza
edb108bbcf Confirm shorter than minDuration submissions 2020-02-04 22:36:22 +00:00
Official Noob
8896c5707a Made decodeStoredItem detect item type
Not tested because SB.config cant be used anymore :(
2020-02-04 22:16:40 +00:00
Ajay Ramachandran
feda7fd1a0 Merge pull request #260 from ajayyy/typescript
Rename SB.js
2020-02-04 02:16:47 -05:00
Ajay Ramachandran
46ffb330fc Fix invidious enabling error 2020-02-04 02:15:06 -05:00
Ajay Ramachandran
2f7a4bdb36 Fix chrome build scripts 2020-02-04 02:14:30 -05:00
Ajay Ramachandran
96dab6b6b2 Renamed SB.js and setup types for the config. 2020-02-04 02:10:59 -05:00
Ajay Ramachandran
3e9afe1dc8 Merge pull request #259 from ajayyy/typescript
Manifest building
2020-02-04 01:57:48 -05:00
Ajay Ramachandran
2df2b4c53d Mkdir with directory 2020-02-04 01:48:32 -05:00
Ajay Ramachandran
968dd34c3d Update README.md 2020-02-04 01:45:41 -05:00
Ajay Ramachandran
0cbe73c527 Add recursive to mkdir 2020-02-04 01:43:49 -05:00
Ajay Ramachandran
6d312e7ba7 Create dir when building if needed. 2020-02-04 01:41:47 -05:00
Ajay Ramachandran
09a33c4252 Added manifest building. 2020-02-04 01:32:58 -05:00
Ajay Ramachandran
76d966c1f9 Merge pull request #254 from ajayyy/typescript
Moving to TypeScript
2020-02-04 00:22:08 -05:00
Ajay Ramachandran
da364b49f0 Removed old config example 2020-02-04 00:16:46 -05:00
Ajay Ramachandran
f6f416b899 Fixed direct link channel whitelisting 2020-02-04 00:13:38 -05:00
Ajay Ramachandran
3582f45fd8 Fixed skip notice references fixing manual skip notices. 2020-02-04 00:05:03 -05:00
Ajay Ramachandran
13cef5ff14 Remove invidious message 2020-02-03 23:40:44 -05:00
Ajay Ramachandran
4049d2d1ab Fixed keybind not working 2020-02-03 23:39:41 -05:00
Ajay Ramachandran
db7ac02c7d Fix CI filepath 2020-02-03 23:25:50 -05:00
Ajay Ramachandran
26f3560e97 CI uses new manifest location 2020-02-03 23:23:26 -05:00
Ajay Ramachandran
1eaf4f44c2 Fixed incorrect syntax in example config 2020-02-03 23:20:57 -05:00
Ajay Ramachandran
0a0d4d3e0f Fixed config.json.example naming 2020-02-03 23:16:05 -05:00
Ajay Ramachandran
7f22687c24 Updated CI to use config.json 2020-02-03 23:13:40 -05:00
Ajay Ramachandran
7404e0831b Updated CI 2020-02-03 23:11:01 -05:00
Ajay Ramachandran
e3be54cbe7 Updated build commands 2020-02-03 23:10:04 -05:00
Ajay Ramachandran
b0a23a5c4e Converted options page to TypeScript 2020-02-03 22:34:43 -05:00
Ajay Ramachandran
5bb5dae20e Added config types and added back handler to proxy 2020-02-03 14:11:52 -05:00
Ajay Ramachandran
bb9de35722 Fixed naming issue 2020-02-02 18:26:43 -05:00
Ajay Ramachandran
4907be7738 Fixed maps not being handled properly 2020-02-01 19:25:40 -05:00
Ajay Ramachandran
23141aa624 Made the extension successfully build 2020-02-01 19:18:53 -05:00
Ajay Ramachandran
17381e7deb Moved Utils away from a static class.
Moved Firefox content script registration to the background script.

Moved onInvidious to the content script.
2020-02-01 18:47:36 -05:00
Ajay Ramachandran
4bd410f04e Made the skip notice work with TypeScript. 2020-02-01 18:17:48 -05:00
Ajay Ramachandran
20a09d3d27 Fixed type errors. 2020-02-01 17:51:42 -05:00
Ajay Ramachandran
98b36380b5 Update readme to new config name 2020-02-01 17:46:55 -05:00
Ajay Ramachandran
7716827a98 Fixed incorrect import. 2020-02-01 17:40:12 -05:00
Ajay Ramachandran
070a51954a Fixed channel ID promise 2020-02-01 17:38:58 -05:00
Ajay Ramachandran
de66e21d14 Added support for the on page popup. 2020-02-01 17:36:02 -05:00
Ajay Ramachandran
932cf8ecf1 Fixed SBMap not importing entries. 2020-02-01 16:53:33 -05:00
Ajay Ramachandran
4a491f1ebf Moved server code to utils 2020-02-01 16:41:08 -05:00
Ajay Ramachandran
5ebdfd8466 Added config to gitignore. 2020-02-01 16:27:58 -05:00
Ajay Ramachandran
16c720e500 Setup new config.json and fixed typescript errors in the popup 2020-02-01 16:26:57 -05:00
Ajay Ramachandran
d77f8abf42 Converted more code to TypeScript. 2020-01-28 23:52:15 -05:00
Ajay Ramachandran
03836b69f2 Started conversion to TypeScript. 2020-01-28 22:16:48 -05:00
Ajay Ramachandran
5837205a9a Updated API URL 2020-01-28 15:45:18 -05:00
Ajay Ramachandran
0f346c2096 Updated API url 2020-01-28 15:38:32 -05:00
Ajay Ramachandran
30acfdd788 Uses old query 2020-01-25 12:20:40 -05:00
Ajay Ramachandran
478edfee7c Changed to new user count query 2020-01-25 12:20:18 -05:00
Ajay Ramachandran
a685950a66 Use defaults if it the config is broken 2020-01-24 21:44:24 -05:00
Ajay Ramachandran
69d1d709f6 Merge pull request #251 from ajayyy/experimental
Removed December date.
2020-01-24 21:43:03 -05:00
Ajay Ramachandran
1fcfdcd13c Removed December date. 2020-01-24 21:39:06 -05:00
Lartza
34a21c6d8c Handle invalid current minDuration in options.js 2020-01-24 02:29:11 +02:00
Lartza
e6ef27936e Add minimum duration option 2020-01-24 01:02:23 +02:00
Ajay Ramachandran
2b7f940669 Merge pull request #248 from ajayyy/hotfix-invidious
Fixed firefox content script registration
2020-01-21 23:05:33 -05:00
Ajay Ramachandran
bdcd613f02 Update version number 2020-01-21 23:05:23 -05:00
Ajay Ramachandran
7255300903 Merge pull request #244 from OfficialNoob/patch-5
Support options button when not in popup
2020-01-19 21:44:03 -05:00
Ajay Ramachandran
21b2ad71b9 Merge pull request #245 from jplsek/opt-html5
Set options and help page to use html5
2020-01-19 10:11:23 -05:00
Ajay Ramachandran
1ff7e69556 Merge pull request #247 from OfficialNoob/patch-6
Save Map content
2020-01-19 10:09:28 -05:00
Official Noob
f7a3f98ad3 Comments 2020-01-16 18:43:49 +00:00
Official Noob
4cdb874b4f Removed deleteProperty from MapIO 2020-01-16 18:27:29 +00:00
Official Noob
5df0801c64 deleteProperty() if no key provided delete by id 2020-01-16 18:13:07 +00:00
Official Noob
e286797ac5 Update SB.js 2020-01-16 18:03:40 +00:00
Official Noob
e784dc017d Added clear 2020-01-16 18:02:48 +00:00
Official Noob
251339f26b Comments and added delete 2020-01-16 17:57:54 +00:00
Official Noob
3e3b8eab6f Save Map content 2020-01-16 14:29:03 +00:00
Ajay Ramachandran
a7d769dd6d Merge pull request #246 from jplsek/keybind-esc
Allow keybind cancel with ESC
2020-01-15 21:39:14 -05:00
Jeremy Plsek
ad37e9abe7 Allow keybind cancel with ESC 2020-01-15 20:50:51 -05:00
Jeremy Plsek
f99a3f5088 Set options and help page to use html5
- Fix css when using html5
- Add encoding scheme to html
- Remove font-size change on title on hover. It's jarring
seeing the whole page move when trying to move your mouse
to the options.
- Remove center tags
- Remove unnecessary styles
- Fix some minor grammar
2020-01-15 20:30:07 -05:00
Ajay Ramachandran
6f2a09695b Update README.md 2020-01-14 10:32:26 -05:00
Official Noob
9ae8769869 inPopup did not always work 2020-01-13 20:08:06 +00:00
Official Noob
f58a16179a Added "openConfig" message 2020-01-13 19:54:24 +00:00
Official Noob
297c95ac6b Added inPopup check for options button 2020-01-13 19:52:54 +00:00
Ajay Ramachandran
ced3100b4e Merge pull request #243 from Deykun/master
Polish translation created
2020-01-12 19:04:57 -05:00
Szymon T
7358be6faa Shorter version of fullName 2020-01-13 00:27:55 +01:00
Szymon T
03e29dbb81 Polish translation created 2020-01-12 23:46:38 +01:00
Ajay Ramachandran
7cb2915fd7 Fixed firefox content script registration. 2020-01-11 17:48:11 -05:00
Ajay Ramachandran
5348496768 Merge pull request #235 from OfficialNoob/patch-2
Formatting changes & proxy delete support
2020-01-11 15:17:34 -05:00
Ajay Ramachandran
7526abc3e1 Merge pull request #236 from ajayyy/hotfix-invidious
Fixed new line issue
2020-01-11 14:55:34 -05:00
Ajay Ramachandran
1163b6f0ce Fixed wrong variabled being used. 2020-01-11 14:50:11 -05:00
Ajay Ramachandran
7c809419f8 Formatting changes 2020-01-11 14:48:17 -05:00
Ajay Ramachandran
0a42f130ac Fixed new line issue 2020-01-11 14:45:16 -05:00
Official Noob
4de0ae51e8 Formatting changes & proxy delete support 2020-01-11 19:42:35 +00:00
Ajay Ramachandran
f5a4ffabde Merge pull request #234 from ajayyy/hotfix-invidious
Hotfix
2020-01-11 13:42:10 -05:00
Ajay Ramachandran
115b1edf11 Increased version number 2020-01-11 13:41:44 -05:00
Ajay Ramachandran
04942a3a5d Fixed delete button potentially appearing. 2020-01-11 13:35:20 -05:00
Ajay Ramachandran
aee0712ef1 Fixed old sponsortime config being broken. 2020-01-11 13:27:20 -05:00
124 changed files with 12818 additions and 3322 deletions

View File

@@ -14,25 +14,49 @@ jobs:
- uses: actions/setup-node@v1
- run: npm install
- name: Copy configuration
run: cp config.js.example config.js
run: cp config.json.example config.json
# Create Chrome artifacts
- name: Create Chrome artifacts
run: npm run build
run: npm run build:chrome
- uses: actions/upload-artifact@v1
with:
name: Chrome Extension
path: web-ext-artifacts
name: ChromeExtension
path: dist
- run: mkdir ./builds
- uses: montudor/action-zip@v0.1.0
with:
args: zip -qq -r ./builds/ChromeExtension.zip ./dist
# Create Firefox artifacts
- name: Move manifest
run: mv manifest.json manifest.json.original
- name: Combine manifest for Firefox
run: jq -s '.[0] * .[1]' manifest.json.original firefox_manifest-extra.json > manifest.json
- name: Create Firefox artifacts
run: npm run build
run: npm run build:firefox
- uses: actions/upload-artifact@v1
with:
name: Firefox Extension
path: web-ext-artifacts
name: FirefoxExtension
path: dist
- uses: montudor/action-zip@v0.1.0
with:
args: zip -qq -r ./builds/FirefoxExtension.zip ./dist
# Create Beta artifacts (Builds with the name changed to beta)
- name: Create Chrome Beta artifacts
run: npm run build:chrome -- --env.stream=beta
- uses: actions/upload-artifact@v1
with:
name: ChromeExtensionBeta
path: dist
- uses: montudor/action-zip@v0.1.0
with:
args: zip -qq -r ./builds/ChromeExtensionBeta.zip ./dist
- name: Create Firefox Beta artifacts
run: npm run build:firefox -- --env.stream=beta
- uses: actions/upload-artifact@v1
with:
name: FirefoxExtensionBeta
path: dist
- uses: montudor/action-zip@v0.1.0
with:
args: zip -qq -r ./builds/FirefoxExtensionBeta.zip ./dist

78
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,78 @@
name: Upload Release Build
on:
release:
types: [published]
jobs:
build:
name: Upload Release
runs-on: ubuntu-latest
steps:
# Initialization
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
- run: npm install
- name: Copy configuration
run: cp config.json.example config.json
# Create Chrome artifacts
- name: Create Chrome artifacts
run: npm run build:chrome
- uses: actions/upload-artifact@v1
with:
name: ChromeExtension
path: dist
- run: mkdir ./builds
- uses: montudor/action-zip@v0.1.0
with:
args: zip -qq -r ./builds/ChromeExtension.zip ./dist
# Create Firefox artifacts
- name: Create Firefox artifacts
run: npm run build:firefox
- uses: actions/upload-artifact@v1
with:
name: FirefoxExtension
path: dist
- uses: montudor/action-zip@v0.1.0
with:
args: zip -qq -r ./builds/FirefoxExtension.zip ./dist
# Create Beta artifacts (Builds with the name changed to beta)
- name: Create Chrome Beta artifacts
run: npm run build:chrome -- --env.stream=beta
- uses: actions/upload-artifact@v1
with:
name: ChromeExtensionBeta
path: dist
- uses: montudor/action-zip@v0.1.0
with:
args: zip -qq -r ./builds/ChromeExtensionBeta.zip ./dist
- name: Create Firefox Beta artifacts
run: npm run build:firefox -- --env.stream=beta
- uses: actions/upload-artifact@v1
with:
name: FirefoxExtensionBeta
path: dist
- uses: montudor/action-zip@v0.1.0
with:
args: zip -qq -r ./builds/FirefoxExtensionBeta.zip ./dist
# Upload each release asset
- name: Upload to release
uses: Shopify/upload-to-release@master
with:
args: builds/ChromeExtension.zip
name: ChromeExtension.zip
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Upload to release
uses: Shopify/upload-to-release@master
with:
args: builds/FirefoxExtension.zip
name: FirefoxExtension.zip
repo-token: ${{ secrets.GITHUB_TOKEN }}

4
.gitignore vendored
View File

@@ -1,6 +1,8 @@
config.js
config.json
ignored
.idea/
node_modules
web-ext-artifacts
.vscode/
dist/
tmp/

View File

@@ -1,5 +1,5 @@
<p align="center">
<a href="https://sponsor.ajay.app"><img src="icons/LogoSponsorBlocker256px.png" alt="Logo"></img></a>
<a href="https://sponsor.ajay.app"><img src="public/icons/LogoSponsorBlocker256px.png" alt="Logo"></img></a>
<br/>
<sub>Logo by <a href="https://github.com/munadikieh">@munadikieh</a></sub>
@@ -32,39 +32,47 @@
SponsorBlock is an extension that will skip over sponsored segments of YouTube videos. SponsorBlock is a crowdsourced browser extension that lets anyone submit the start and end times of sponsored segments of YouTube videos. Once one person submits this information, everyone else with this extension will skip right over the sponsored segment.
Also support Invidio.us.
# Important Links
See the [Wiki](https://github.com/ajayyy/SponsorBlock/wiki) for important links.
# Server
The backend server code is available here: https://github.com/ajayyy/SponsorBlockServer
It is a simple Sqlite database that will hold all the timing data.
It is a simple SQLite database that will hold all the timing data.
To make sure that this project doesn't die, I have made the database publicly downloadable at https://sponsor.ajay.app/database.db. So, you can download a backup or get archive.org to take a backup for you if you want.
To make sure that this project doesn't die, I have made the database publicly downloadable at https://sponsor.ajay.app/database.db. If you are planning on using the database in another project, please read the [API Docs](https://github.com/ajayyy/SponsorBlock/wiki/API-Docs) page for more information.
Hopefully this project can be combined with projects like [this](https://github.com/Sponsoff/sponsorship_remover) and use this data to create a neural network to predict when sponsored segments happen. That project is sadly abandoned now, so I have decided to attempt to revive this idea.
The dataset and API are now being used in some [ports](https://github.com/ajayyy/SponsorBlock/wiki/Unofficial-Ports) as well as a [neural network](https://github.com/andrewzlee/NeuralBlock).
A [previous project](https://github.com/Sponsoff/sponsorship_remover) attempted to create a neural network to predict when sponsored segments happen. That project is sadly abandoned now, so I have decided to attempt to revive this idea starting from a crowd-sourced system instead.
# API
You can read the API docs [here](https://github.com/ajayyy/SponsorBlockServer#api-docs).
# Build Yourself
# Building
You can load this project as an unpacked extension. Make sure to rename the `config.js.example` file to `config.js` before installing.
There are also other build scripts available. Install `npm`, then run `npm install` in the repository to install dependencies.
There are also other build scripts available. Install `npm`, then run `npm install` in the repository.
Run `npm run build` to generate a Chrome extension.
Use `npm run build:firefox` to generate a Firefox extension.
The result is in `dist`. This can be loaded as an unpacked extension
## Developing with a clean profile
Run `npm run dev` to run the extension using a clean browser profile with hot reloading [(by default Firefox)](https://hacks.mozilla.org/2019/10/developing-cross-browser-extensions-with-web-ext-3-2-0/). This uses [`web-ext run`](https://extensionworkshop.com/documentation/develop/web-ext-command-reference/#commands).
## Packing
Run `npm run build` to generate a packed extension.
Run `npm run dev` to run the extension using a clean browser profile with hot reloading. Use `npm run dev:firefox` for Firefox. This uses [`web-ext run`](https://extensionworkshop.com/documentation/develop/web-ext-command-reference/#commands).
# Credit
The awesome [Invidious API](https://github.com/omarroth/invidious/wiki/API) is used to grab the time the video was published.
The awesome [Invidious API](https://github.com/omarroth/invidious/wiki/API) was previously used.
Original code from [YTSponsorSkip](https://github.com/OfficialNoob/YTSponsorSkip), but not much of the code is left.
Originally forked from [YTSponsorSkip](https://github.com/OfficialNoob/YTSponsorSkip), but zero code remains.
Some icons made by <a href="https://www.flaticon.com/authors/gregor-cresnar" title="Gregor Cresnar">Gregor Cresnar</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a> and are licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a>

189
SB.js
View File

@@ -1,189 +0,0 @@
SB = {
/**
* Callback function when an option is updated
*
* @type {CallableFunction}
*/
configListeners: []
};
// Function setup
Map.prototype.toJSON = function() {
return Array.from(this.entries());
};
class MapIO {
constructor(id) {
this.id = id;
this.map = SB.localConfig[this.id];
}
set(key, value) {
this.map.set(key, value);
SB.config.handler.set(undefined, this.id, encodeStoredItem(this.map));
return this.map;
}
get(key) {
return this.map.get(key);
}
has(key) {
return this.map.has(key);
}
deleteProperty(key) {
if (this.map.has(key)) {
this.map.delete(key);
return true;
} else {
return false;
}
}
size() {
return this.map.size;
}
delete(key) {
this.map.delete(key);
SB.config.handler.set(undefined, this.id, encodeStoredItem(this.map));
}
}
/**
* A Map cannot be stored in the chrome storage.
* This data will be encoded into an array instead as specified by the toJSON function.
*
* @param {*} data
*/
function encodeStoredItem(data) {
if(!(data instanceof Map)) return data;
return JSON.stringify(data);
}
/**
* A Map cannot be stored in the chrome storage.
* This data will be decoded from the array it is stored in
*
* @param {*} data
*/
function decodeStoredItem(data) {
if(typeof data !== "string") return data;
try {
let str = JSON.parse(data);
if(!Array.isArray(str)) return data;
return new Map(str);
} catch(e) {
// If all else fails, return the data
return data;
}
}
function configProxy() {
chrome.storage.onChanged.addListener((changes, namespace) => {
for (const key in changes) {
SB.localConfig[key] = decodeStoredItem(changes[key].newValue);
}
for (const callback of SB.configListeners) {
callback(changes);
}
});
var handler = {
set: function(obj, prop, value) {
SB.localConfig[prop] = value;
chrome.storage.sync.set({
[prop]: encodeStoredItem(value)
});
},
get: function(obj, prop) {
let data = SB.localConfig[prop];
if(data instanceof Map) data = new MapIO(prop);
return obj[prop] || data;
}
};
return new Proxy({handler}, handler);
}
function fetchConfig() {
return new Promise((resolve, reject) => {
chrome.storage.sync.get(null, function(items) {
SB.localConfig = items; // Data is ready
resolve();
});
});
}
function migrateOldFormats() { // Convert sponsorTimes format
for (key in SB.localConfig) {
if (key.startsWith("sponsorTimes") && key !== "sponsorTimes" && key !== "sponsorTimesContributed") {
SB.config.sponsorTimes.set(key.substr(12), SB.config[key]);
delete SB.config[key];
}
}
}
async function setupConfig() {
await fetchConfig();
addDefaults();
convertJSON();
SB.config = configProxy();
migrateOldFormats();
}
SB.defaults = {
"sponsorTimes": new Map(),
"startSponsorKeybind": ";",
"submitKeybind": "'",
"minutesSaved": 0,
"skipCount": 0,
"sponsorTimesContributed": 0,
"disableSkipping": false,
"disableAutoSkip": false,
"trackViewCount": true,
"dontShowNotice": false,
"hideVideoPlayerControls": false,
"hideInfoButtonPlayerControls": false,
"hideDeleteButtonPlayerControls": false,
"hideDiscordLaunches": 0,
"hideDiscordLink": false,
"invidiousInstances": ["invidio.us", "invidiou.sh", "invidious.snopyta.org"],
"invidiousUpdateInfoShowCount": 0,
"autoUpvote": true
}
// Reset config
function resetConfig() {
SB.config = SB.defaults;
};
function convertJSON() {
Object.keys(SB.defaults).forEach(key => {
SB.localConfig[key] = decodeStoredItem(SB.localConfig[key], key);
});
}
// Add defaults
function addDefaults() {
Object.keys(SB.defaults).forEach(key => {
if(!SB.localConfig.hasOwnProperty(key)) {
SB.localConfig[key] = SB.defaults[key];
}
});
};
// Sync config
setupConfig();

View File

@@ -1,127 +0,0 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Название расширения, не переводится."
},
"fullName": {
"message": "SponsorBlock для YouTube - Пропускайте спонсорские вставки",
"description": "Название расширения."
},
"Description": {
"message": "Пропускайте спонсорские вставки в видео на YouTube. Сообщайте о спонсорских вставках в видео, которые Вы смотрите, чтобы сэкономить время других пользователей.",
"description": "Описание раширения."
},
"helpPage": {
"message": "index_en.html"
},
"400": {
"message": "Сервер отклонил этот запрос."
},
"429": {
"message": "Вы отправили слишком много спонсоров для этого видео. Вы уверены, что их так много?"
},
"409": {
"message": "Этот запрос был отправлен ранее."
},
"channelWhitelisted": {
"message": "Канал добавлен в белый список!"
},
"Sponsor": {
"message": "Спонсор"
},
"Sponsors": {
"message": "Спонсоры"
},
"Segment": {
"message": "спонсорская вставка"
},
"Segments": {
"message": "спонсорские вставки"
},
"noticeTitle": {
"message": "Спонсор пропущен"
},
"reportButtonTitle": {
"message": "Ошибка"
},
"reportButtonInfo": {
"message": "Сообщить, что информация об этом спонсорском сегменте ошибочна."
},
"Dismiss": {
"message": "Закрыть"
},
"Loading": {
"message": "Загрузка..."
},
"Mins": {
"message": "мин"
},
"Secs": {
"message": "сек"
},
"Hide": {
"message": "Не показывать"
},
"hitGoBack": {
"message": "Нажмите «Назад», чтобы вернуться обратно."
},
"unskip": {
"message": "Назад"
},
"reskip": {
"message": "Пропустить"
},
"paused": {
"message": "Пауза"
},
"confirmMSG": {
"message": "\n\nЧтобы изменить или удалить отдельные значения, нажмите кнопку «Информация» или откройте всплывающее окно расширения, щелкнув значок расширения в правом верхнем углу."
},
"clearThis": {
"message": "Вы уверены, что хотите удалить эту информацию?\n\n"
},
"Unknown": {
"message": "При отправке отчета о спонсорском сегменте произошла ошибка. Попытайтесь отправить его позже."
},
"sponsorFound": {
"message": "Спонсоры этого видео уже находятся в базе данных!"
},
"sponsor404": {
"message": "Спонсорские вставки не найдены"
},
"sponsorStart": {
"message": "Спонсорская вставка начинается сейчас"
},
"sponsorEnd": {
"message": "Спонсорская вставка оканчивается сейчас"
},
"noVideoID": {
"message": "Возможно, это не вкладка YouTube, или Вы нажали слишком рано. \n Если это вкладка YouTube,\n закройте это всплывающее окно и откройте его снова."
},
"success": {
"message": "Успех!"
},
"voted": {
"message": "Голос засчитан!"
},
"voteFail": {
"message": "Вы уже проголосовали таким образом раньше."
},
"serverDown": {
"message": "Кажется, сервер не работает. Свяжитесь с разработчиком."
},
"connectionError": {
"message": "Ошибка соединения. Код ошибки: "
},
"wantToSubmit": {
"message": "Вы точно хотите отправить отчёт о спонсорских вставках в видео с идентификатором"
},
"leftTimes": {
"message": "Вы ещё не отправили отчёты о некоторых спонсорских вставках. Хотите вернуться на эту страницу, чтобы отправить их (они не удаляются)."
},
"submitCheck": {
"message": "Вы уверены, что хотите отправить эту информацию?"
}
}

View File

@@ -1,3 +0,0 @@
//this file is loaded along iwth content.js
//this file sets the server to connect to, and is gitignored
var serverAddress = "https://sponsor.ajay.app";

6
config.json.example Normal file
View File

@@ -0,0 +1,6 @@
{
"serverAddress": "https://sponsor.ajay.app",
"testingServerAddress": "https://sponsor.ajay.app/test",
"serverAddressComment": "This specifies the default SponsorBlock server to conect to",
"categoryList": ["sponsor", "intro", "outro", "interaction", "selfpromo", "offtopic"]
}

1087
content.js

File diff suppressed because it is too large Load Diff

View File

@@ -1,9 +1,3 @@
files:
- source: /_locales/en/*
translation: /_locales/%two_letters_code%/%original_file_name%
languages_mapping:
two_letters_code:
pr-BR: "pt_BR"
pr-PT: "pt_PT"
zh-CN: "zh_CH"
zh-TW: "zh_TW"
- source: /public/_locales/en/*
translation: /public/_locales/%two_letters_code%/%original_file_name%

BIN
icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

8
jest.config.js Normal file
View File

@@ -0,0 +1,8 @@
module.exports = {
"roots": [
"src"
],
"transform": {
"^.+\\.ts$": "ts-jest"
},
};

View File

@@ -1,80 +0,0 @@
{
"name": "__MSG_fullName__",
"short_name": "__MSG_Name__",
"version": "1.2.3",
"default_locale": "en",
"description": "__MSG_Description__",
"content_scripts": [
{
"run_at": "document_start",
"matches": [
"https://*.youtube.com/*",
"https://www.youtube-nocookie.com/embed/*"
],
"all_frames": true,
"js": [
"config.js",
"SB.js",
"utils/previewBar.js",
"utils/skipNotice.js",
"utils.js",
"content.js",
"popup.js"
],
"css": [
"content.css",
"./libs/Source+Sans+Pro.css",
"popup.css"
]
}
],
"web_accessible_resources": [
"icons/LogoSponsorBlocker256px.png",
"icons/IconSponsorBlocker256px.png",
"icons/PlayerStartIconSponsorBlocker256px.png",
"icons/PlayerStopIconSponsorBlocker256px.png",
"icons/PlayerUploadIconSponsorBlocker256px.png",
"icons/PlayerUploadFailedIconSponsorBlocker256px.png",
"icons/upvote.png",
"icons/downvote.png",
"icons/report.png",
"icons/close.png",
"icons/PlayerInfoIconSponsorBlocker256px.png",
"icons/PlayerDeleteIconSponsorBlocker256px.png",
"popup.html"
],
"permissions": [
"storage",
"notifications",
"https://sponsor.ajay.app/*"
],
"optional_permissions": [
"*://*/*",
"declarativeContent"
],
"browser_action": {
"default_title": "__MSG_Name__",
"default_popup": "popup.html"
},
"background": {
"scripts":[
"config.js",
"SB.js",
"utils.js",
"background.js"
],
"persistent": false
},
"icons": {
"16": "icons/IconSponsorBlocker16px.png",
"32": "icons/IconSponsorBlocker32px.png",
"64": "icons/LogoSponsorBlocker64px.png",
"128": "icons/LogoSponsorBlocker128px.png",
"256": "icons/LogoSponsorBlocker256px.png"
},
"options_ui": {
"page": "options/options.html",
"open_in_tab": true
},
"manifest_version": 2
}

View File

@@ -0,0 +1,4 @@
{
"name": "BETA - SponsorBlock"
}

View File

@@ -0,0 +1,8 @@
{
"optional_permissions": [
"declarativeContent"
],
"background": {
"persistent": false
}
}

View File

@@ -0,0 +1,8 @@
{
"browser_specific_settings": {
"gecko": {
"id": "sponsorBlockerBETA@ajay.app"
}
}
}

71
manifest/manifest.json Normal file
View File

@@ -0,0 +1,71 @@
{
"name": "__MSG_fullName__",
"short_name": "__MSG_Name__",
"version": "1.2.26",
"default_locale": "en",
"description": "__MSG_Description__",
"content_scripts": [{
"run_at": "document_start",
"matches": [
"https://*.youtube.com/*",
"https://www.youtube-nocookie.com/embed/*"
],
"all_frames": true,
"js": [
"./js/vendor.js",
"./js/content.js"
],
"css": [
"content.css",
"./libs/Source+Sans+Pro.css",
"popup.css"
]
}],
"web_accessible_resources": [
"icons/LogoSponsorBlocker256px.png",
"icons/IconSponsorBlocker256px.png",
"icons/PlayerStartIconSponsorBlocker256px.png",
"icons/PlayerStopIconSponsorBlocker256px.png",
"icons/PlayerUploadIconSponsorBlocker256px.png",
"icons/PlayerUploadFailedIconSponsorBlocker256px.png",
"icons/upvote.png",
"icons/downvote.png",
"icons/report.png",
"icons/close.png",
"icons/beep.ogg",
"icons/PlayerInfoIconSponsorBlocker256px.png",
"icons/PlayerDeleteIconSponsorBlocker256px.png",
"popup.html",
"content.css"
],
"permissions": [
"storage",
"notifications",
"https://sponsor.ajay.app/*"
],
"optional_permissions": [
"*://*/*"
],
"browser_action": {
"default_title": "__MSG_Name__",
"default_popup": "popup.html"
},
"background": {
"scripts":[
"./js/vendor.js",
"./js/background.js"
]
},
"icons": {
"16": "icons/IconSponsorBlocker16px.png",
"32": "icons/IconSponsorBlocker32px.png",
"64": "icons/LogoSponsorBlocker64px.png",
"128": "icons/LogoSponsorBlocker128px.png",
"256": "icons/LogoSponsorBlocker256px.png"
},
"options_ui": {
"page": "options/options.html",
"open_in_tab": true
},
"manifest_version": 2
}

View File

@@ -1,285 +0,0 @@
window.addEventListener('DOMContentLoaded', init);
async function init() {
localizeHtmlPage();
if (!SB.configListeners.includes(optionsConfigUpdateListener)) {
SB.configListeners.push(optionsConfigUpdateListener);
}
await wait(() => SB.config !== undefined);
// Set all of the toggle options to the correct option
let optionsContainer = document.getElementById("options");
let optionsElements = optionsContainer.querySelectorAll("*");
for (let i = 0; i < optionsElements.length; i++) {
switch (optionsElements[i].getAttribute("option-type")) {
case "toggle":
let option = optionsElements[i].getAttribute("sync-option");
let optionResult = SB.config[option];
let checkbox = optionsElements[i].querySelector("input");
let reverse = optionsElements[i].getAttribute("toggle-type") === "reverse";
if (optionResult != undefined) {
checkbox.checked = optionResult;
if (reverse) {
optionsElements[i].querySelector("input").checked = !optionResult;
}
}
// See if anything extra should be run first time
switch (option) {
case "supportInvidious":
invidiousInit(checkbox, option);
break;
}
// Add click listener
checkbox.addEventListener("click", () => {
SB.config[option] = reverse ? !checkbox.checked : checkbox.checked;
// See if anything extra must be run
switch (option) {
case "supportInvidious":
invidiousOnClick(checkbox, option);
break;
}
});
break;
case "text-change":
let button = optionsElements[i].querySelector(".trigger-button");
button.addEventListener("click", () => activateTextChange(optionsElements[i]));
let textChangeOption = optionsElements[i].getAttribute("sync-option");
// See if anything extra must be done
switch (textChangeOption) {
case "invidiousInstances":
invidiousInstanceAddInit(optionsElements[i], textChangeOption);
}
break;
case "keybind-change":
let keybindButton = optionsElements[i].querySelector(".trigger-button");
keybindButton.addEventListener("click", () => activateKeybindChange(optionsElements[i]));
break;
case "display":
updateDisplayElement(optionsElements[i])
}
}
optionsContainer.classList.remove("hidden");
optionsContainer.classList.add("animated");
}
/**
* Called when the config is updated
*
* @param {String} element
*/
function optionsConfigUpdateListener(changes) {
let optionsContainer = document.getElementById("options");
let optionsElements = optionsContainer.querySelectorAll("*");
for (let i = 0; i < optionsElements.length; i++) {
switch (optionsElements[i].getAttribute("option-type")) {
case "display":
updateDisplayElement(optionsElements[i])
}
}
}
/**
* Will set display elements to the proper text
*
* @param {HTMLElement} element
*/
function updateDisplayElement(element) {
let displayOption = element.getAttribute("sync-option")
let displayText = SB.config[displayOption];
element.innerText = displayText;
// See if anything extra must be run
switch (displayOption) {
case "invidiousInstances":
element.innerText = displayText.join(', ');
break;
}
}
/**
* Initializes the option to add Invidious instances
*
* @param {HTMLElement} element
* @param {String} option
*/
function invidiousInstanceAddInit(element, option) {
let textBox = element.querySelector(".option-text-box");
let button = element.querySelector(".trigger-button");
let setButton = element.querySelector(".text-change-set");
setButton.addEventListener("click", async function(e) {
if (textBox.value == "" || textBox.value.includes("/") || textBox.value.includes("http") || textBox.value.includes(":")) {
alert(chrome.i18n.getMessage("addInvidiousInstanceError"));
} else {
// Add this
let instanceList = SB.config[option];
if (!instanceList) instanceList = [];
instanceList.push(textBox.value);
SB.config[option] = instanceList;
let checkbox = document.querySelector("#support-invidious input");
checkbox.checked = true;
invidiousOnClick(checkbox, "supportInvidious");
textBox.value = "";
// Hide this section again
element.querySelector(".option-hidden-section").classList.add("hidden");
button.classList.remove("disabled");
}
});
let resetButton = element.querySelector(".invidious-instance-reset");
resetButton.addEventListener("click", function(e) {
if (confirm(chrome.i18n.getMessage("resetInvidiousInstanceAlert"))) {
// Set to a clone of the default
SB.config[option] = SB.defaults[option].slice(0);
}
});
}
/**
* Run when the invidious button is being initialized
*
* @param {HTMLElement} checkbox
* @param {string} option
*/
function invidiousInit(checkbox, option) {
let permissions = ["declarativeContent"];
if (isFirefox()) permissions = [];
chrome.permissions.contains({
origins: getInvidiousInstancesRegex(),
permissions: permissions
}, function (result) {
if (result != checkbox.checked) {
SB.config[option] = result;
checkbox.checked = result;
}
});
}
/**
* Run whenever the invidious checkbox is clicked
*
* @param {HTMLElement} checkbox
* @param {string} option
*/
function invidiousOnClick(checkbox, option) {
if (checkbox.checked) {
setupExtraSitePermissions(function (granted) {
if (!granted) {
SB.config[option] = false;
checkbox.checked = false;
}
});
} else {
removeExtraSiteRegistration();
}
}
/**
* Will trigger the container to ask the user for a keybind.
*
* @param {HTMLElement} element
*/
function activateKeybindChange(element) {
let button = element.querySelector(".trigger-button");
if (button.classList.contains("disabled")) return;
button.classList.add("disabled");
let option = element.getAttribute("sync-option");
let currentlySet = SB.config[option] !== null ? chrome.i18n.getMessage("keybindCurrentlySet") : "";
let status = element.querySelector(".option-hidden-section > .keybind-status");
status.innerText = chrome.i18n.getMessage("keybindDescription") + currentlySet;
if (SB.config[option] !== null) {
let statusKey = element.querySelector(".option-hidden-section > .keybind-status-key");
statusKey.innerText = SB.config[option];
}
element.querySelector(".option-hidden-section").classList.remove("hidden");
document.addEventListener("keydown", (e) => keybindKeyPressed(element, e), {once: true});
}
/**
* Called when a key is pressed in an activiated keybind change option.
*
* @param {HTMLElement} element
* @param {KeyboardEvent} e
*/
function keybindKeyPressed(element, e) {
e = e || window.event;
var key = e.key;
let option = element.getAttribute("sync-option");
SB.config[option] = key;
let status = element.querySelector(".option-hidden-section > .keybind-status");
status.innerText = chrome.i18n.getMessage("keybindDescriptionComplete");
let statusKey = element.querySelector(".option-hidden-section > .keybind-status-key");
statusKey.innerText = key;
let button = element.querySelector(".trigger-button");
button.classList.remove("disabled");
}
/**
* Will trigger the textbox to appear to be able to change an option's text.
*
* @param {HTMLElement} element
*/
function activateTextChange(element) {
let button = element.querySelector(".trigger-button");
if (button.classList.contains("disabled")) return;
button.classList.add("disabled");
let textBox = element.querySelector(".option-text-box");
let option = element.getAttribute("sync-option");
// See if anything extra must be done
switch (option) {
case "invidiousInstances":
element.querySelector(".option-hidden-section").classList.remove("hidden");
return;
}
textBox.value = SB.config[option];
let setButton = element.querySelector(".text-change-set");
setButton.addEventListener("click", () => {
let confirmMessage = element.getAttribute("confirm-message");
if (confirmMessage === null || confirm(chrome.i18n.getMessage(confirmMessage))) {
SB.config[option] = textBox.value;
}
});
element.querySelector(".option-hidden-section").classList.remove("hidden");
}

6272
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -3,14 +3,50 @@
"version": "1.0.0",
"description": "",
"main": "background.js",
"dependencies": {},
"dependencies": {
"@types/react": "^16.9.22",
"@types/react-dom": "^16.9.5",
"babel": "^6.23.0",
"babel-core": "^6.26.3",
"babel-loader": "^8.0.6",
"babel-preset-env": "^1.7.0",
"concurrently": "^5.1.0",
"react": "^16.12.0",
"react-dom": "^16.12.0"
},
"devDependencies": {
"web-ext": "^4.0.0"
"web-ext": "^4.0.0",
"@types/chrome": "0.0.91",
"@types/firefox-webext-browser": "70.0.1",
"@types/jest": "^24.0.23",
"@types/jquery": "^3.3.31",
"copy-webpack-plugin": "^5.0.5",
"jest": "^24.9.0",
"ts-jest": "^24.2.0",
"rimraf": "^3.0.0",
"ts-loader": "^6.2.1",
"typescript": "~3.7.3",
"webpack": "~4.41.2",
"webpack-cli": "~3.3.10",
"webpack-merge": "~4.2.2"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "web-ext run --start-url https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm",
"build": "web-ext build --overwrite-dest -i \"*(package-lock.json|README.md|package.json|config.js.example|firefox_manifest-extra.json|manifest.json.original|ignored|crowdin.yml)\""
"web-run": "npm run web-run:chrome",
"web-run:firefox": "cd dist && web-ext run --start-url https://addons.mozilla.org/firefox/addon/ublock-origin/",
"web-run:chrome": "cd dist && web-ext run --start-url https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm -t chromium",
"build": "npm run build:chrome",
"build:chrome": "webpack --env.browser=chrome --config webpack/webpack.prod.js",
"build:firefox": "webpack --env.browser=firefox --config webpack/webpack.prod.js",
"build:dev": "npm run build:dev:chrome",
"build:dev:chrome": "webpack --env.browser=chrome --config webpack/webpack.dev.js",
"build:dev:firefox": "webpack --env.browser=firefox --config webpack/webpack.dev.js",
"build:watch": "npm run build:watch:chrome",
"build:watch:chrome": "webpack --env.browser=chrome --config webpack/webpack.dev.js --watch",
"build:watch:firefox": "webpack --env.browser=firefox --config webpack/webpack.dev.js --watch",
"dev": "npm run build:dev && concurrently \"npm run web-run\" \"npm run build:watch\"",
"dev:firefox": "npm run build:dev:firefox && concurrently \"npm run web-run:firefox\" \"npm run build:watch:firefox\"",
"clean": "rimraf dist",
"test": "npx jest"
},
"repository": {
"type": "git",

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -1,20 +1,8 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock for YouTube - Skip Sponsorships",
"description": "Name of the extension."
},
"Description": {
"message": "Überspringe die gesponserten Inhalte in YouTube-Videos. Melde gesponsorte Inhalte in den von dir angesehenen Videos und erspare anderen die Zeit.",
"description": "Description of the extension."
},
"helpPage": {
"message": "index_en.html"
},
"400": {
"message": "Ungültige Anforderung"
},
@@ -33,7 +21,7 @@
"Sponsors": {
"message": "Sponsoren"
},
"Segment": {
"Segment": {
"message": "gesponsorter Inhalt"
},
"Segments": {
@@ -133,37 +121,37 @@
"message": "Bist du sicher, dass die Auswahl abgeschickt werden soll?"
},
"whitelistChannel": {
"message": "Kanal auf Whitelist setzen "
"message": "Kanal auf Whitelist setzen "
},
"removeFromWhitelist": {
"message": "Kanal von Whitelist entfernen"
"message": "Kanal von Whitelist entfernen"
},
"voteOnTime": {
"message": "Stimme für Zeiten ab"
"message": "Stimme für Zeiten ab"
},
"recordTimes": {
"message": "Lege das Zeitfenster eines gesponsorten Inhalts fest"
"message": "Lege das Zeitfenster eines gesponsorten Inhalts fest"
},
"soFarUHSubmited": {
"message": "Gemeldet wurden von dir bisher"
"message": "Gemeldet wurden von dir bisher"
},
"savedPeopleFrom": {
"message": "Du hast andere Benutzer bewahrt vor"
"message": "Du hast andere Benutzer bewahrt vor"
},
"viewLeaderboard": {
"message": "Siehe Rangliste"
"message": "Siehe Rangliste"
},
"here": {
"message": "hier"
},
"recordTimesDescription": {
"message": "Klicke den Knopf unten, wenn der gesponsorte Inhalt beginnt und endet, um aufzunehmen und\n einzusenden"
"message": "Klicke den Knopf unten, wenn der gesponsorte Inhalt beginnt und endet, um aufzunehmen und\n einzusenden"
},
"popupHint": {
"message": "Hinweis: In den Optionen lässt sich eine Taste für das Festlegen von Anfang/Ende des gesponsorten Inhalts, sowie für das Einsenden festlegen"
"message": "Hinweis: In den Optionen lässt sich eine Taste für das Festlegen von Anfang/Ende des gesponsorten Inhalts, sowie für das Einsenden festlegen"
},
"lastTimes": {
"message": "Letzte ausgewählte Zeitabschnitte"
"message": "Letzte ausgewählte Zeitabschnitte"
},
"clearTimesButton": {
"message": "Zeiten löschen"

View File

@@ -0,0 +1 @@
{}

View File

@@ -160,7 +160,7 @@
"message": "Click the button below when the sponsorship starts and ends to record and\nsubmit it to the database."
},
"popupHint": {
"message": "Hint: Press the semicolon key while focused on a video report the start/end of a sponsor and quote to submit. (This can be changed in the options)"
"message": "Hint: Press the semicolon key while focused on a video to report the start/end of a sponsor and quote to submit. (This can be changed in the options)"
},
"lastTimes": {
"message": "Latest Sponsor Message Times Chosen"
@@ -226,7 +226,7 @@
"message": "Show Notice Again"
},
"longDescription": {
"message": "SponsorBlock is an extension that will skip over sponsored segments of YouTube videos. SponsorBlock is a crowdsourced browser extension that let's anyone submit the start and end time's of sponsored segments of YouTube videos. Once one person submits this information, everyone else with this extension will skip right over the sponsored segment.",
"message": "SponsorBlock is an extension that will skip over sponsored segments of YouTube videos. SponsorBlock is a crowdsourced browser extension that lets anyone submit the start and end times of sponsored segments of YouTube videos. Once one person submits this information, everyone else with this extension will skip right over the sponsored segment.",
"description": "Full description of the extension on the store pages."
},
"website": {
@@ -291,6 +291,12 @@
"autoSkipDescription": {
"message": "Auto skip will skip sponsors for you. If disabled, a notice will appear asking if you'd like to skip."
},
"audioNotification": {
"message": "Audio Notification On Skip"
},
"audioNotificationDescription": {
"message": "Audio notification on skip will play a sound whenever a sponsor is skipped. If disabled (or auto skip is disabled), no sound will be played."
},
"youHaveSkipped": {
"message": "You have skipped "
},
@@ -349,7 +355,7 @@
"message": "Support Invidious"
},
"supportInvidiousDescription": {
"message": "Invidious (invidio.us) is a third party YouTube client. To enable support, you must accept the extra permissions. This does NOT work in incongnito on chrome and other chromium variants."
"message": "Invidious (invidio.us) is a third party YouTube client. To enable support, you must accept the extra permissions. This does NOT work in incongnito on Chrome and other Chromium variants."
},
"optionsInfo": {
"message": "Enable Invidious support, disable autoskip, hide buttons and more."
@@ -381,10 +387,149 @@
"whatAutoUpvote": {
"message": "With this enabled, the extension will upvote all submissions you view if you do not report them. If the notice is disabled, this will not occur."
},
"invidiousInfo1": {
"message": "Invidious (the 3rd party YouTube site) support has been added!"
"minDuration": {
"message": "Minimum duration (seconds):"
},
"invidiousInfo2": {
"message": "You MUST enable it in the options for it to work."
"minDurationDescription": {
"message": "Sponsor segments shorter than the set value will not be skipped or show in the player."
},
"shortCheck": {
"message": "The following submission is shorter than your minimum duration option. This could mean that this is already submitted, and just being ignored due to this option. Are you sure you would like to submit?"
},
"showUploadButton": {
"message": "Show Upload Button"
},
"whatUploadButton": {
"message": "This button appears on the YouTube player after you have selected a timestamp and are ready to submit."
},
"customServerAddress": {
"message": "SponsorBlock Server Address"
},
"customServerAddressDescription": {
"message": "The address SponsorBlock uses to make calls to the server.\nUnless you have your own server instance, this should not be changed."
},
"save": {
"message": "Save"
},
"reset": {
"message": "Reset"
},
"customAddressError": {
"message": "This address is not in the right form. Make sure you have http:// or https:// at the begining and no trailing slashes."
},
"areYouSureReset": {
"message": "Are you sure you would like to reset this?"
},
"confirmPrivacy": {
"message": "The video has been detected as unlisted. Click cancel if you do not want to check for sponsors."
},
"unlistedCheck": {
"message": "Ignore Unlisted Videos"
},
"whatUnlistedCheck": {
"message": "This setting will significantly slow down SponsorBlock. Sponsor lookups require sending the video ID to the server. If you are concerned about unlisted video IDs being sent over the internet, enable this option."
},
"mobileUpdateInfo": {
"message": "m.youtube.com is now supported"
},
"exportOptions": {
"message": "Import/Export All Options"
},
"whatExportOptions": {
"message": "This is your entire configuration in JSON. This includes your userID, so be sure to share this wisely."
},
"setOptions": {
"message": "Set Options"
},
"exportOptionsWarning": {
"message": "Warning: Changing the options is permanent and can break your install. Are you sure you would like to do this? Make sure to backup your old one just in case."
},
"incorrectlyFormattedOptions": {
"message": "This JSON is not formatted correctly. Your options have not been changed."
},
"confirmNoticeTitle" : {
"message": "Submit Segment"
},
"submit": {
"message": "Submit"
},
"cancel": {
"message": "Cancel"
},
"delete": {
"message": "Delete"
},
"preview": {
"message": "Preview"
},
"edit": {
"message": "Edit"
},
"copyDebugInformation": {
"message": "Copy Debug Information To Clipboard"
},
"copyDebugInformationFailed": {
"message": "Failed to write to clipboard"
},
"copyDebugInformationOptions": {
"message": "Copies information to the clipboard to be provided to a developer when raising a bug / when a developer requests it. Sensitive information such as your user ID, whitelisted channels, and custom server address have been removed. However it does contain information such as your useragent, browser, operating system, and extension version number. "
},
"copyDebugInformationComplete": {
"message": "The debug information has been copied to the clip board. Feel free to remove any information you would rather not share. Save this in a text file or paste into the bug report."
},
"theKey": {
"message": "The key"
},
"keyAlreadyUsedByYouTube": {
"message": "is already used by youtube. Please select another key."
},
"keyAlreadyUsed": {
"message": "is bound to another action. Please select another key."
},
"to": {
"message": "to",
"description": "Used between sponsor times. Example: 1:20 to 1:30"
},
"category_sponsor": {
"message": "Sponsor"
},
"category_intro": {
"message": "Intro"
},
"category_outro": {
"message": "Outro"
},
"category_interaction": {
"message": "Interaction (Redundant Like, Subscribe, Follow, etc.)"
},
"category_selfpromo": {
"message": "Self-Promotion and Merchandise"
},
"category_offtopic": {
"message": "Offtopic tangent (Subjective)"
},
"disable": {
"message": "Disable"
},
"manualSkip": {
"message": "Manual Skip"
},
"showOverlay": {
"message": "Show In Seek Bar"
},
"enableTestingServer": {
"message": "Enable Beta Testing Server"
},
"whatEnableTestingServer": {
"message": "Your submissions and votes WILL NOT COUNT towards the main server. Only use this for testing."
},
"testingServerWarning": {
"message": "All submissions and votes WILL NOT COUNT towards the main server while connecting to the test server. Make sure to disable this when you want to make real submissions."
},
"bracketNow": {
"message": "(Now)"
},
"moreCategories": {
"message": "More Categories"
}
}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -1,20 +1,12 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock pour YouTube - Supprime les messages commerciaux et publicités intégrées",
"description": "Name of the extension."
},
"Description": {
"message": "Passe automatiquement les messages commerciaux intégrés dans les vidéos YouTube. Soumettez les segments commerciaux dans les vidéos que vous regardez pour aidez les autres.",
"description": "Description of the extension."
},
"helpPage": {
"message": "index_en.html"
},
"400": {
"message": "Soumission invalide"
},
@@ -25,7 +17,7 @@
"message": "Déja soumis"
},
"channelWhitelisted": {
"message": "Cette chaîne est sur la liste blanche !"
"message": "Chaîne mise sur liste blanche !"
},
"Sponsor": {
"message": "message commercial"
@@ -43,16 +35,16 @@
"message": "Message commercial passé"
},
"reportButtonTitle": {
"message": "Incorrect"
"message": "Signaler"
},
"reportButtonInfo": {
"message": "Signaler que ce segment commercial est incorrect ou n'existe pas."
"message": "Signaler que ce segment commercial est incorrect."
},
"Dismiss": {
"message": "Fermer"
},
"Loading": {
"message": "Chargement en cours..."
"message": "Chargement..."
},
"Mins": {
"message": "Minutes"
@@ -85,10 +77,10 @@
"message": "Une erreur s'est produite lors de la soumission, veuillez ré-essayer plus tard."
},
"sponsorFound": {
"message": "Les messages commerciaux sont déjà dans notre base de donnée pour cette vidéo !"
"message": "Les messages commerciaux pour cette vidéo sont déjà dans notre base de donnée !"
},
"sponsor404": {
"message": "Pas de messages commerciaux trouvés"
"message": "Pas de sponsors trouvés"
},
"sponsorStart": {
"message": "Début du message commercial"
@@ -138,9 +130,6 @@
"removeFromWhitelist": {
"message": "Supprimer la chaîne de la liste blanche"
},
"whitelistDescription": {
"message": "Ajouter à la liste blanche les chaînes qui publient des messages commerciaux de façon éthique pour encourager les bons comportements, ou qui publient des messages commerciaux divertissants ou drôles. Ou pas, c'est votre choix."
},
"voteOnTime": {
"message": "Voter sur un segment commercial"
},
@@ -187,7 +176,7 @@
"message": "Cacher"
},
"Options": {
"message": "Options"
"message": "Paramètres"
},
"showButtons": {
"message": "Montrer les boutons sur le lecteur YouTube"
@@ -259,5 +248,147 @@
},
"keybindDescriptionComplete": {
"message": "Le raccourci choisi est : "
},
"0": {
"message": "Délai de connexion dépassé. Vérifiez votre connexion internet. Si votre connexion internet fonctionne, le serveur est probablement surchargé ou hors service."
},
"disableSkipping": {
"message": "Désactiver SponsorBlock"
},
"enableSkipping": {
"message": "Activer SponsorBlock"
},
"yourWork": {
"message": "Votre travail",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "Le serveur semble être surchargé. Réessayez dans quelques secondes."
},
"errorCode": {
"message": "Code d'erreur : "
},
"noticeTitleNotSkipped": {
"message": "Passer le sponsor ?"
},
"skip": {
"message": "Passer"
},
"disableAutoSkip": {
"message": "Désactiver le passage automatique"
},
"enableAutoSkip": {
"message": "Activer le passage automatique"
},
"autoSkipDescription": {
"message": "Le passage automatique passera automatiquement les sponsors pour vous. Si désactivé, un avis apparaîtra vous demandant si vous souhaitez passer."
},
"audioNotification": {
"message": "Notification audio lors du passage"
},
"audioNotificationDescription": {
"message": "La notification audio lors du passage jouera un son à chaque fois qu'un sponsor est ignoré. Si désactivé (ou si le passage automatique est désactivé), aucun son ne sera joué."
},
"youHaveSkipped": {
"message": "Vous avez passé "
},
"youHaveSaved": {
"message": "Vous avez économisé "
},
"minLower": {
"message": "minute"
},
"minsLower": {
"message": "minutes"
},
"hourLower": {
"message": "heure"
},
"hoursLower": {
"message": "heures"
},
"youHaveSavedTime": {
"message": "Vous avez économisé"
},
"youHaveSavedTimeEnd": {
"message": " aux autres."
},
"guildlinesSummary": {
"message": "- Assurez-vous que votre segment ne contient que des segments de promotion payante, rien d'autre.\n- Assurez-vous que passer ce segment ne sautera pas de contenu important\n- Si la vidéo entière est un sponsor, s'il vous plaît, ne le signalez pas. Un système complet de reportage vidéo sortira bientôt.\n- Veuillez ne pas signaler les avertissements qui pourraient montrer des biais (si une vidéo de revue est sponsorisée, ne sautez pas quand ils le mentionnent)."
},
"statusReminder": {
"message": "Vérifiez status.sponsor.ajay.app pour le status du serveur."
},
"changeUserID": {
"message": "Importer/Exporter votre ID d'utilisateur"
},
"whatChangeUserID": {
"message": "Gardez ça privé. C'est comme un mot de passe et ne devrait pas être partagé avec quiconque. Si quelqu'un l'obtiens, il peut vous usurper."
},
"setUserID": {
"message": "Définir l'ID utilisateur"
},
"userIDChangeWarning": {
"message": "AVERTISSEMENT : La modification de l'ID d'utilisateur est permanente. Êtes-vous sûr de vouloir faire ça ? Assurez-vous de sauvegarder votre ancien au cas où."
},
"createdBy": {
"message": "Créé par"
},
"autoSkip": {
"message": "Passage automatique"
},
"showSkipNotice": {
"message": "Afficher l'avis après le passage d'un sponsor"
},
"keybindCurrentlySet": {
"message": ". Il est actuellement réglé sur :"
},
"supportInvidious": {
"message": "Soutenir Invidious"
},
"supportInvidiousDescription": {
"message": "Invidious (invidio.us) est un client YouTube tiers. Pour l'activer, vous devez accepter les autorisations supplémentaires. Cela ne fonctionne PAS en mode incongnito sur Chrome et d'autres variantes de Chromium."
},
"optionsInfo": {
"message": "Activer Invidious, désactiver le passage automatique, masquer les boutons et plus encore."
},
"addInvidiousInstance": {
"message": "Ajouter une instance Invidious"
},
"addInvidiousInstanceDescription": {
"message": "Ajouter une instance Invidious personnalisée. Doit être formaté avec SEULEMENT le domaine. Exemple: invidious.ajay.app"
},
"add": {
"message": "Ajouter"
},
"addInvidiousInstanceError": {
"message": "Ce domaine n'est pas valide. Il devrait JUSTE inclure le domaine. Exemple: invidious.ajay.app"
},
"resetInvidiousInstance": {
"message": "Réinitialiser la liste d'instances Invidious"
},
"resetInvidiousInstanceAlert": {
"message": "Vous êtes sur le point de réinitialiser la liste des instances Invidious"
},
"currentInstances": {
"message": "Instances actuelles:"
},
"enableAutoUpvote": {
"message": "Vote automatique"
},
"whatAutoUpvote": {
"message": "Si cette option est activée, l'extension votera en faveur de tous les segments que vous visualiserez si vous ne les signalez pas. Si l'avis est désactivé, cela ne se produira pas."
},
"minDuration": {
"message": "Durée minimale (en secondes):"
},
"minDurationDescription": {
"message": "Les segments sponsorisés plus courts que la valeur définie ne seront pas passé ni affichés dans le lecteur."
},
"shortCheck": {
"message": "Le segment suivant est plus court que votre option de durée minimale. Cela pourrait signifier qu'il est déjà soumis, et just ignoré par cette option. Êtes-vous sûr de vouloir soumettre ?"
},
"reset": {
"message": "Réinitialiser"
}
}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -1,20 +1,12 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock per YouTube - Salta gli sponsor",
"description": "Name of the extension."
},
"Description": {
"message": "Salta i contenuti sponsorizzati nei video di YouTube. Segnala gli annunci incorporati nei video che guardi per far risparmiare tempo agli altri.",
"description": "Description of the extension."
},
"helpPage": {
"message": "index_en.html"
},
"400": {
"message": "Richiesta non valida"
},
@@ -33,7 +25,7 @@
"Sponsors": {
"message": "sponsorizzazioni"
},
"Segment": {
"Segment": {
"message": "spezzone sponsorizzato"
},
"Segments": {
@@ -84,7 +76,6 @@
"Unknown": {
"message": "Si è verificato un errore durante l'invio dello spezzone sponsorizzato, per favore riprova più tardi."
},
"sponsorFound": {
"message": "I contenuti sponsorizzati di questo video sono nel database!"
},
@@ -134,40 +125,37 @@
"message": "Sei sicuro di volerlo inviare?"
},
"whitelistChannel": {
"message": "Aggiungi Canale alla Whitelist"
"message": "Aggiungi Canale alla Whitelist"
},
"removeFromWhitelist": {
"message": "Rimuovi Canale dalla Whitelist"
},
"whitelistDescription": {
"message": "Aggiungi alla whitelist i canali che sponsorizzano eticamente per incoraggiare ad un comportamento corretto, oppure se sono semplicemente intrattenenti e divertenti. Oppure non farlo, decidi tu."
"message": "Rimuovi Canale dalla Whitelist"
},
"voteOnTime": {
"message": "Vota uno Spezzone Sponsorizzato"
"message": "Vota uno Spezzone Sponsorizzato"
},
"recordTimes": {
"message": "Registra uno Spezzone Sponsorizzato"
"message": "Registra uno Spezzone Sponsorizzato"
},
"soFarUHSubmited": {
"message": "Fino ad ora hai inviato"
"message": "Fino ad ora hai inviato"
},
"savedPeopleFrom": {
"message": "Hai salvato le persone da "
"message": "Hai salvato le persone da "
},
"viewLeaderboard": {
"message": "Guarda la classifica"
"message": "Guarda la classifica"
},
"here": {
"message": "qui"
},
"recordTimesDescription": {
"message": "Premi il pulsante qui sotto quando inizia e finisce la sponsorizzazione per registrarla e\ninviarla al database."
"message": "Premi il pulsante qui sotto quando inizia e finisce la sponsorizzazione per registrarla e\ninviarla al database."
},
"popupHint": {
"message": "Suggerimento: Premi il tasto punto e virgola mentre il video è attivo per segnalare l'inizio/fine di una sponsorizzazione e virgolette per inviare."
"message": "Suggerimento: Premi il tasto punto e virgola mentre il video è attivo per segnalare l'inizio/fine di una sponsorizzazione e virgolette per inviare."
},
"lastTimes": {
"message": "Ultimi minutaggi sponsorizzati scelti"
"message": "Ultimi minutaggi sponsorizzati scelti"
},
"clearTimesButton": {
"message": "Cancella Minutaggi"
@@ -197,7 +185,7 @@
"message": "Nascondi i Pulsanti nel Lettore di YouTube"
},
"hideButtonsDescription": {
"message": "Nasconde i pulsanti che appaiono nel lettore di YouTube per inviare spezzoni sponsorizzati. Capisco che può essere fastidioso per alcune\n persone. Invece di utilizzare quei pulsanti, è possibile utilizzare questo popup per inviare gli spezzoni sponsorizzati. Per nascondere l'avviso che appare, \nusa il bottone \"Non mostrare più\" nell'avviso. Potrai sempre abilitare nuovamente queste impostazioni in futuro."
"message": "Nasconde i pulsanti che appaiono nel lettore di YouTube per inviare spezzoni sponsorizzati. Capisco che può essere fastidioso per alcune\n persone. Invece di utilizzare quei pulsanti, è possibile utilizzare questo popup per inviare gli spezzoni sponsorizzati. Per nascondere l'avviso che appare, \nusa il bottone \"Non mostrare più\" nell'avviso. Potrai sempre abilitare nuovamente queste impostazioni in futuro."
},
"showInfoButton": {
"message": "Mostra il Pulsante Informazioni nel Lettore di YouTube"

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1,373 @@
{
"fullName": {
"message": "SponsorBlock na YouTube - Omiń reklamy sponsorów",
"description": "Name of the extension."
},
"Description": {
"message": "Przewijaj reklamy sponsorów w filmach na YouTube. Zgłaszaj reklamy w nagraniach żeby nie marnować czasu innych.",
"description": "Description of the extension."
},
"400": {
"message": "Serwer odpowiedział, że to zapytanie jest niepoprawne"
},
"429": {
"message": "Zgłosiłeś bardzo dużo segmentów reklamowych dla tego jednego nagrania, jesteś pewien, że jest ich tak dużo?"
},
"409": {
"message": "Treść została już wcześniej zgłoszona"
},
"channelWhitelisted": {
"message": "Kanał dodany do wyjątków!"
},
"Sponsors": {
"message": "sponsorzy"
},
"Segment": {
"message": "segmet sponsorowany"
},
"Segments": {
"message": "segmenty sponsorowane"
},
"noticeTitle": {
"message": "Segment przewinięty"
},
"reportButtonTitle": {
"message": "Zgłoś"
},
"reportButtonInfo": {
"message": "Zgłoś ten segment reklamowy jako nieprawidłowy."
},
"Dismiss": {
"message": "Odrzuć"
},
"Loading": {
"message": "Ładowanie..."
},
"Mins": {
"message": "Minuty"
},
"Secs": {
"message": "Sekundy"
},
"Hide": {
"message": "Nigdy nie pokazuj"
},
"hitGoBack": {
"message": "Kliknij cofnij aby przenieść się do miejsca przed przewinięciem."
},
"unskip": {
"message": "Cofnij"
},
"reskip": {
"message": "Przewiń"
},
"paused": {
"message": "Zatrzymany"
},
"confirmMSG": {
"message": "Żeby zmienić lub usunąć wartości, kliknij na guzik informacji lub otwórz okienko rozszerzenia klikając w ikonę rozszerzenia znajdującą się w prawym górnym rogu."
},
"clearThis": {
"message": "Jesteś pewien, że chcesz to usunąć?\n\n"
},
"Unknown": {
"message": "Wystąpił błąd podczas przesyłania twojego zgłoszenia, proszę spróbować ponownie później."
},
"sponsorFound": {
"message": "Segmenty reklamowe dla tego nagrania są już w bazie!"
},
"sponsor404": {
"message": "Nie znaleziono segmentów reklamowych"
},
"sponsorStart": {
"message": "Reklama zaczyna się teraz"
},
"sponsorEnd": {
"message": "Reklama kończy się teraz"
},
"noVideoID": {
"message": "Nie znaleziono nagrania wideo w tej karcie. Jeśli wiesz, że to karta YouTube'a, zamknij to okienko i otwórz je ponownie. Jeśli to nie zadziała spróbuj przeładować stronę."
},
"success": {
"message": "Sukces!"
},
"voted": {
"message": "Zagłosowano!"
},
"voteFail": {
"message": "Już na to głosowałeś."
},
"serverDown": {
"message": "Wygląda na to, że serwer nie działa. Skontaktuj się z dewloperem."
},
"connectionError": {
"message": "Błąd z połączeniem. Kod błędu: "
},
"wantToSubmit": {
"message": "Chcesz zgłosić segment sponsorowany dla nagrania z id"
},
"leftTimes": {
"message": "Wygląda na to, że masz nie wysłane segmenty reklamowe. Cofnij się do tej strony i zgłoś je (nie zostały usunięte)."
},
"clearTimes": {
"message": "Wyczyść segmenty reklamowe"
},
"openPopup": {
"message": "Otwórz okienko SponsorBlock"
},
"SubmitTimes": {
"message": "Zgłoś segmenty reklamowe"
},
"submitCheck": {
"message": "Jesteś pewien, że chcesz to zgłosić?"
},
"whitelistChannel": {
"message": "Dodaj kanał do wyjątków"
},
"removeFromWhitelist": {
"message": "Usuń kanał z listy wyjątków"
},
"voteOnTime": {
"message": "Głosuj na segment reklamowy"
},
"recordTimes": {
"message": "Nagraj czasy segmentów reklamowych"
},
"soFarUHSubmited": {
"message": "Jak na razie zgłosiłeś:"
},
"savedPeopleFrom": {
"message": "Ocaliłeś ludzi przed "
},
"viewLeaderboard": {
"message": "Zobacz ranking użytkowników"
},
"here": {
"message": "tutaj"
},
"recordTimesDescription": {
"message": "Kliknij guzik poniżej kiedy segment reklamowy się zaczyna i kończy żeby go oznaczyć i wysłać do bazy danych."
},
"popupHint": {
"message": "Podpowiedź: Klikając średnik kiedy zaznaczone jest zgłaszanie wideo możesz oznaczyć początek reklamy, znakiem cytatu oznaczysz jej koniec. (Klawisze można zmienić w opcjach)"
},
"lastTimes": {
"message": "Ostanie wybrane czasy reklam"
},
"clearTimesButton": {
"message": "Usuń czasy"
},
"submitTimesButton": {
"message": "Zgłoś czasy"
},
"publicStats": {
"message": "Ten dane są używane na naszej stronie żeby pokazać twój wkład. Zobacz to"
},
"setUsername": {
"message": "Ustaw nazwę użytkownika"
},
"discordAdvert": {
"message": "Dołącz do oficjalnego serwera na discordzie i podziel się wrażeniami i sugestiami!"
},
"hideThis": {
"message": "Ukryj to"
},
"Options": {
"message": "Opcje"
},
"showButtons": {
"message": "Pokaż guziki w odtwarzaczu YouTube"
},
"hideButtons": {
"message": "Ukryj guziki w odtwarzaczu YouTube"
},
"hideButtonsDescription": {
"message": "Ta opcja ukrywa guziki zgłaszania reklamy w odtwarzaczu. Wiem, że mogą one irytować niektórych. Zamiast zgłaszania bezpośrednio w odtwarzaczu możesz to zrobić w tym okienku. Zawsze możesz zmienić te opcje później."
},
"showInfoButton": {
"message": "Pokaż guzik informacyjny w odtwarzaczu YouTube"
},
"hideInfoButton": {
"message": "Ukryj guzik informacyjny w odtwarzaczu YouTube"
},
"whatInfoButton": {
"message": "Jest to guzik otwierający popup na stronie YouTube."
},
"hideDeleteButton": {
"message": "Ukryj guzik usuwania w odtwarzaczu YouTube"
},
"showDeleteButton": {
"message": "Pokaż guzik usuwania w odtwarzaczu YouTube"
},
"whatDeleteButton": {
"message": "Ten guzik pozwala ci wyczyścić wszystkie segmenty reklamowe w odtwarzaczu YouTube."
},
"disableViewTracking": {
"message": "Wyłącz licznik przewinięć"
},
"enableViewTracking": {
"message": "Włącz licznik przewinięć"
},
"whatViewTracking": {
"message": "Ta opcja śledzi które segmenty pominąłeś i informuje zgłaszających ile czasu Ci zaoszczędzili, też wraz systemem głosowania pomaga wykrywać spam w zgłoszeniach. Rozszerzenie wysyła zapytanie do serwera za każdym razem kiedy przewinąłeś segment reklamowy. Miejmy nadzieję, że większość ludzi tego nie wyłączy i licznik wyświetleń będzie rzetelny. :)"
},
"showNotice": {
"message": "Pokaż informacje ponownie"
},
"longDescription": {
"message": "SponsorBlock jest rozszerzeniem które przewinie segmenty sponsorów w filmach na YouTube. SponsorBlock jest opartym na crowdsourcing rozszerzeniem które pozwala każdemu zgłaszać początek i koniec segmentu reklamowego w filmach na YouTube. Kiedy ktoś zgłosi taki fragment zostanie on pominięty przez innych użytkowników rozszerzenia.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Strona",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "Kod źródłowy",
"description": "Used on Firefox Store Page"
},
"noticeUpdate": {
"message": "Informacje zostały zaktualizowane!",
"description": "The first line of the message displayed after the notice was upgraded."
},
"noticeUpdate2": {
"message": "Jeśli nadal jej nie lubisz wybierz opcje nie pokazuj więcej.",
"description": "The second line of the message displayed after the notice was upgraded."
},
"setStartSponsorShortcut": {
"message": "Ustaw klawisz do oznaczania początku reklamy"
},
"setSubmitKeybind": {
"message": "Ustaw klawisz do wysyłania czasów"
},
"keybindDescription": {
"message": "Wybierz klawisz klikając go na klawiaturze"
},
"keybindDescriptionComplete": {
"message": "Ustawiony klawisz to: "
},
"0": {
"message": "Połączenie przerwane z powodu braku odpowiedzi. Sprawdź swoje połączenie z internetem. Jeśli wszystko z nim w porządku oznacza to, że serwer jest prawdopodobnie przeciążony lub nie działa."
},
"disableSkipping": {
"message": "Wyłącz SponsorBlock"
},
"enableSkipping": {
"message": "Włącz SponsorBlock"
},
"yourWork": {
"message": "Twój wkład",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "Serwer jest prawdopodobnie przeciążony, spróbuj ponownie za kilka sekund."
},
"errorCode": {
"message": "Kod błędu: "
},
"noticeTitleNotSkipped": {
"message": "Przewinąć reklamę?"
},
"skip": {
"message": "Przewiń"
},
"disableAutoSkip": {
"message": "Wyłącz auto przewijanie"
},
"enableAutoSkip": {
"message": "Włącz auto przewijanie"
},
"autoSkipDescription": {
"message": "Auto przewijanie przewinie segment za ciebie, wyłączone wyświetli komunikat z pytaniem czy chcesz przewinąć reklamę."
},
"youHaveSkipped": {
"message": "Przewinąłeś "
},
"youHaveSaved": {
"message": "Oszczędziłeś sobie "
},
"minLower": {
"message": "minuta"
},
"minsLower": {
"message": "minuty"
},
"hourLower": {
"message": "godzina"
},
"hoursLower": {
"message": "godziny"
},
"youHaveSavedTime": {
"message": "Oszczędziłeś ludziom"
},
"youHaveSavedTimeEnd": {
"message": " czasu."
},
"guildlinesSummary": {
"message": "- Upewnij się, że zgłaszany fragment zawiera tylko reklamę i nic więcej.\n- Upewnij się, że nie zostanie przewinięta wartościowa treść\n- Jeśli całe nagranie to reklama, proszę nie zgłaszaj go. Blokowanie całych nagrań pojawi się wkrótce.\n- Nie ukrywaj treści które są istotne dla użytkownika (nie ukrywaj informacji, że recenzja produktu została opłacona przez producenta)"
},
"statusReminder": {
"message": "Wejdź na status.sponsor.ajay.app żeby sprawdzić czy serwer działa."
},
"changeUserID": {
"message": "Zaimportuj/Wyeksportuj swój UserID"
},
"whatChangeUserID": {
"message": "Ta informacja jest poufna i działa jak hasło, użytkownik który ma do niej dostęp może zgłaszać treści jako ty."
},
"setUserID": {
"message": "Ustaw UserID"
},
"userIDChangeWarning": {
"message": "Ostrzeżenie: Zmiana UserID jest nieodwracalna. Jesteś pewien, że chcesz to zrobić? Skopiuj obecny UserID na wszelki wypadek."
},
"createdBy": {
"message": "Stworzony przez"
},
"autoSkip": {
"message": "Auto przewijanie"
},
"showSkipNotice": {
"message": "Pokaż informację po przewiniętym fragmencie"
},
"keybindCurrentlySet": {
"message": ". Jest obecnie ustawione jako:"
},
"supportInvidious": {
"message": "Wesprzyj Invidious"
},
"supportInvidiousDescription": {
"message": "Invidious (invidio.us) to nieoficjalny klient YouTube. Aby go wesprzeć musisz przyznać dodatkowe uprawnienia rozszerzeniowi. Ta opcja nie działa w incognito i innych wersjach Chromium."
},
"optionsInfo": {
"message": "Wesprzyj Invidious, wyłącz auto przewijanie, ukryj guziki i więcej."
},
"addInvidiousInstance": {
"message": "Dodaj instancje Invidious"
},
"addInvidiousInstanceDescription": {
"message": "Dodaj niestandardową instancje Invidious. W formie domeny. Na przykład: invidious.ajay.app"
},
"add": {
"message": "Dodaj"
},
"addInvidiousInstanceError": {
"message": "Ta domena jest nieprawidłowa. Wartość powinna zawierać TYLKO domenę. Na przykład: invidious.ajay.app"
},
"resetInvidiousInstance": {
"message": "Zresetuj listę instancji Invidious"
},
"resetInvidiousInstanceAlert": {
"message": "Zresetujesz listę instancji Invidious"
},
"currentInstances": {
"message": "Obecne instancje:"
},
"enableAutoUpvote": {
"message": "Auto potwierdzanie"
},
"whatAutoUpvote": {
"message": "To ustawienie sprawia, że wszystkie przewinięte przez ciebie a nie zgłoszone jako błąd segmenty reklamowe zostaną potwierdzone jako prawidłowe. Ta opcja nie działa jeśli okienko z informacją o przewinięciu jest ukryte."
}
}

View File

@@ -1,19 +1,11 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Nome da extensão."
},
"fullName": {
"message": "SponsorBlock para YouTube - Pule patrocínios",
"description": "Nome da extensão."
"description": "Name of the extension."
},
"Description": {
"message": "Pule patrocinadores em vídeos do YouTube. Reporte patrocinadores em videos que você assiste para salvar o tempo dos outros.",
"description": "Descrição da extensão."
},
"helpPage": {
"message": "index_en.html"
"description": "Description of the extension."
},
"400": {
"message": "O servidor disse que esse pedido foi inválido"
@@ -33,7 +25,7 @@
"Sponsors": {
"message": "patrocinadores"
},
"Segment": {
"Segment": {
"message": "segmento de patrocinador"
},
"Segments": {
@@ -84,7 +76,6 @@
"Unknown": {
"message": "Teve um erro ao enviar seus segmentos, tente novamente depois."
},
"sponsorFound": {
"message": "Os patrocinadores desse vídeo estão no banco de dados!"
},
@@ -134,40 +125,37 @@
"message": "Tem a certeza que pretende submeter?"
},
"whitelistChannel": {
"message": "Meter canal na Whitelist"
"message": "Meter canal na Whitelist"
},
"removeFromWhitelist": {
"message": "Remover canal da Whitelist"
},
"whitelistDescription": {
"message": "Colocar na Whitelist canais com patrocínios éticos que encoragem boas atitude, ou simplesmente canais com patrocínios engraçados. Ou não, é consigo."
"message": "Remover canal da Whitelist"
},
"voteOnTime": {
"message": "Vote num intervalo de patrocínio"
"message": "Vote num intervalo de patrocínio"
},
"recordTimes": {
"message": "Registe um intervalo de patrocínio"
"message": "Registe um intervalo de patrocínio"
},
"soFarUHSubmited": {
"message": "Até agora submeteu"
"message": "Até agora submeteu"
},
"savedPeopleFrom": {
"message": "Poupaste a outros de "
"message": "Poupaste a outros de "
},
"viewLeaderboard": {
"message": "Ver a leaderboard"
"message": "Ver a leaderboard"
},
"here": {
"message": "aqui"
},
"recordTimesDescription": {
"message": "Carregue neste botão abaixo quando o patrocínio começar e quando\n acabar para registar e submetê-lo à base de dados"
"message": "Carregue neste botão abaixo quando o patrocínio começar e quando\n acabar para registar e submetê-lo à base de dados"
},
"popupHint": {
"message": "Dica: Carregue na tecla ; enquanto num vídeo para registar o começo/fim de um patrocínio e \" para submeter"
"message": "Dica: Carregue na tecla ; enquanto num vídeo para registar o começo/fim de um patrocínio e \" para submeter"
},
"lastTimes": {
"message": "Intervalos de Patrocínios Escolhidos mais Recentemente"
"message": "Intervalos de Patrocínios Escolhidos mais Recentemente"
},
"clearTimesButton": {
"message": "Limpar Intervalos"
@@ -231,14 +219,14 @@
},
"longDescription": {
"message": "SponsorBlock é uma extensão que salta segmentos patrocinados em vídeos do YouTube. SponsorBlock é uma extenção crowdfunded que permite a qualquer um submeter o início e o fim de segmentos patrocinados. Assim que uma pessoa submete essa informação todos com a extenção poderam saltar automaticamete o patrocínio.",
"description": "Descrição completa da extençao nas lojas dos browsers."
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Site",
"description": "Usado na pagina da loja do Firefox"
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "Código fonte",
"description": "Usado na pagina da loja do Firefox"
"description": "Used on Firefox Store Page"
}
}
}

View File

@@ -1,19 +1,11 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Nome da extensão."
},
"fullName": {
"message": "SponsorBlock para o YouTube - Salte patrocínios",
"description": "Nome da extensão."
"description": "Name of the extension."
},
"Description": {
"message": "Salte patrocinadores em vídeos do YouTube. Reporte patrocinadores em vídeos que assista para poupar tempo a outros.",
"description": "Descrição da extensão."
},
"helpPage": {
"message": "index_en.html"
"description": "Description of the extension."
},
"400": {
"message": "O servidor disse que este pedido foi inválido"
@@ -33,7 +25,7 @@
"Sponsors": {
"message": "patrocinadores"
},
"Segment": {
"Segment": {
"message": "segmento de patrocínio"
},
"Segments": {
@@ -133,40 +125,37 @@
"message": "Tem a certeza que pretende submeter?"
},
"whitelistChannel": {
"message": "Meter canal na Whitelist"
"message": "Meter canal na Whitelist"
},
"removeFromWhitelist": {
"message": "Remover canal da Whitelist"
},
"whitelistDescription": {
"message": "Colocar na Whitelist canais com patrocínios éticos que encoragem boas atitude, ou simplesmente canais com patrocínios engraçados. Ou não, é consigo."
"message": "Remover canal da Whitelist"
},
"voteOnTime": {
"message": "Vote num intervalo de patrocínio"
"message": "Vote num intervalo de patrocínio"
},
"recordTimes": {
"message": "Registe um intervalo de patrocínio"
"message": "Registe um intervalo de patrocínio"
},
"soFarUHSubmited": {
"message": "Até agora submeteu"
"message": "Até agora submeteu"
},
"savedPeopleFrom": {
"message": "Poupaste a outros de "
"message": "Poupaste a outros de "
},
"viewLeaderboard": {
"message": "Ver a leaderboard"
"message": "Ver a leaderboard"
},
"here": {
"message": "aqui"
},
"recordTimesDescription": {
"message": "Carregue neste botão abaixo quando o patrocínio começar e quando\n acabar para registar e submetê-lo à base de dados"
"message": "Carregue neste botão abaixo quando o patrocínio começar e quando\n acabar para registar e submetê-lo à base de dados"
},
"popupHint": {
"message": "Dica: Carregue na tecla ; enquanto num vídeo para registar o começo/fim de um patrocínio e \" para submeter"
"message": "Dica: Carregue na tecla ; enquanto num vídeo para registar o começo/fim de um patrocínio e \" para submeter"
},
"lastTimes": {
"message": "Intervalos de Patrocínios Escolhidos mais Recentemente"
"message": "Intervalos de Patrocínios Escolhidos mais Recentemente"
},
"clearTimesButton": {
"message": "Limpar Intervalos"
@@ -230,14 +219,14 @@
},
"longDescription": {
"message": "SponsorBlock é uma extensão que salta segmentos patrocinados em vídeos do YouTube. SponsorBlock é uma extenção crowdfunded que permite a qualquer um submeter o início e o fim de segmentos patrocinados. Assim que uma pessoa submete essa informação todos com a extenção poderam saltar automaticamete o patrocínio.",
"description": "Descrição completa da extençao nas lojas dos browsers."
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Site",
"description": "Usado na pagina da loja do Firefox"
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "Código fonte",
"description": "Usado na pagina da loja do Firefox"
"description": "Used on Firefox Store Page"
}
}
}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1,412 @@
{
"fullName": {
"message": "SponsorBlock для YouTube - Пропускайте спонсорские вставки",
"description": "Name of the extension."
},
"Description": {
"message": "Пропускайте спонсорские вставки в видео на YouTube. Сообщайте о спонсорских вставках в видео, которые Вы смотрите, чтобы сэкономить время других пользователей.",
"description": "Description of the extension."
},
"400": {
"message": "Сервер отклонил этот запрос."
},
"429": {
"message": "Вы отправили слишком много спонсоров для этого видео. Вы уверены, что их так много?"
},
"409": {
"message": "Этот запрос был отправлен ранее."
},
"channelWhitelisted": {
"message": "Канал добавлен в белый список!"
},
"Sponsor": {
"message": "спонсора"
},
"Sponsors": {
"message": "спонсоров"
},
"Segment": {
"message": "спонсорская вставка"
},
"Segments": {
"message": "спонсорские вставки"
},
"noticeTitle": {
"message": "Спонсор пропущен"
},
"reportButtonTitle": {
"message": "Ошибка"
},
"reportButtonInfo": {
"message": "Сообщить, что информация об этом спонсорском сегменте ошибочна."
},
"Dismiss": {
"message": "Закрыть"
},
"Loading": {
"message": "Загрузка..."
},
"Mins": {
"message": "мин"
},
"Secs": {
"message": "сек"
},
"Hide": {
"message": "Не показывать"
},
"hitGoBack": {
"message": "Нажмите «Назад», чтобы вернуться обратно."
},
"unskip": {
"message": "Назад"
},
"reskip": {
"message": "Пропустить"
},
"paused": {
"message": "Пауза"
},
"confirmMSG": {
"message": "\n\nЧтобы изменить или удалить отдельные значения, нажмите кнопку «Информация» или откройте всплывающее окно расширения, щелкнув значок расширения в правом верхнем углу."
},
"clearThis": {
"message": "Вы уверены, что хотите удалить эту информацию?\n\n"
},
"Unknown": {
"message": "При отправке отчета о спонсорском сегменте произошла ошибка. Попытайтесь отправить его позже."
},
"sponsorFound": {
"message": "Спонсоры этого видео уже находятся в базе данных!"
},
"sponsor404": {
"message": "Спонсорские вставки не найдены"
},
"sponsorStart": {
"message": "Спонсорская вставка начинается сейчас"
},
"sponsorEnd": {
"message": "Спонсорская вставка оканчивается сейчас"
},
"noVideoID": {
"message": "Возможно, это не вкладка YouTube, или Вы нажали слишком рано. \n Если это вкладка YouTube,\n закройте это всплывающее окно и откройте его снова."
},
"success": {
"message": "Успех!"
},
"voted": {
"message": "Голос засчитан!"
},
"voteFail": {
"message": "Вы уже проголосовали таким образом раньше."
},
"serverDown": {
"message": "Кажется, сервер не работает. Свяжитесь с разработчиком."
},
"connectionError": {
"message": "Ошибка соединения. Код ошибки: "
},
"wantToSubmit": {
"message": "Вы точно хотите отправить отчёт о спонсорских вставках в видео с идентификатором"
},
"leftTimes": {
"message": "Вы ещё не отправили отчёты о некоторых спонсорских вставках. Хотите вернуться на эту страницу, чтобы отправить их (они не удаляются)."
},
"submitCheck": {
"message": "Вы уверены, что хотите отправить эту информацию?"
},
"whitelistChannel": {
"message": "Добавить канал в белый список"
},
"removeFromWhitelist": {
"message": "Удалить канал из белого списка"
},
"voteOnTime": {
"message": "Проголосовать за время спонсорской вставки"
},
"recordTimes": {
"message": "Записать время спонсорской вставки"
},
"soFarUHSubmited": {
"message": "На данный момент Вы отправили"
},
"savedPeopleFrom": {
"message": "Вы помогли людям сэкономить "
},
"viewLeaderboard": {
"message": "Посмотреть доску почёта"
},
"here": {
"message": "здесь"
},
"recordTimesDescription": {
"message": "Нажмите кнопку ниже, когда спонсорская вставка начинается и заканчивается, чтобы записать\nи отправить её в базу данных."
},
"popupHint": {
"message": "Подсказка: нажмите ;, чтобы сообщить начало/конец спонсорской вставки, и \", чтобы отправить. (Это можно изменить в настройках)"
},
"lastTimes": {
"message": "Последнее выбранное время спонсорской вставки"
},
"clearTimesButton": {
"message": "Очистить время"
},
"submitTimesButton": {
"message": "Отправить время"
},
"publicStats": {
"message": "Оно используется на публичной странице статистики, чтобы показать Ваш вклад. Её можно посмотреть "
},
"setUsername": {
"message": "Установить имя пользователя"
},
"discordAdvert": {
"message": "Присоединяйтесь к официальному серверу Discord, чтобы оставить предложения и обратную связь!"
},
"hideThis": {
"message": "Скрыть это"
},
"Options": {
"message": "Настройки"
},
"showButtons": {
"message": "Показывать кнопки в плеере YouTube"
},
"hideButtons": {
"message": "Скрыть кнопки в плеере YouTube"
},
"hideButtonsDescription": {
"message": "Эта настройка скрывает кнопки для отправки спонсорских вставок, которые появляются в плеере YouTube. Они могут раздражать\n некоторых. Вместо кнопок для отправки спонсорских вставок можно использовать это всплывающее окно. Чтобы скрыть\nуведомление, нажмите кнопку \"Не показывать снова\" в уведомлении. Вы всегда сможете включить эти настройки обратно."
},
"showInfoButton": {
"message": "Показывать кнопку информации в плеере YouTube"
},
"hideInfoButton": {
"message": "Скрыть кнопку информации в плеере YouTube"
},
"whatInfoButton": {
"message": "Эта кнопка открывает всплывающее окно на странице YouTube."
},
"hideDeleteButton": {
"message": "Скрыть кнопку удаления в плеере YouTube"
},
"showDeleteButton": {
"message": "Показывать кнопку удаления в плеере YouTube"
},
"whatDeleteButton": {
"message": "Эта кнопка позволяет Вам очистить все спонсорские вставки в плеере YouTube."
},
"disableViewTracking": {
"message": "Отключить отслеживание количества пропусков спонсорских вставок"
},
"enableViewTracking": {
"message": "Включить отслеживание количества пропусков спонсорских вставок"
},
"whatViewTracking": {
"message": "Эта возможность отслеживает, какие спонсорские вставки Вы пропустили, чтобы помочь пользователям узнать, насколько их\nвклад помог другим, и используется как метрика, чтобы убедиться, что спам не попадает в базу данных. Расширение отправляет\nсообщение на сервер каждый раз, когда Вы пропускаете спонсорскую вставку. Надеемся, большая часть пользователей не поменяет эту настройку, так что у нас будет точная статистика просмотров :)"
},
"showNotice": {
"message": "Показывать уведомление снова"
},
"longDescription": {
"message": "SponsorBlock — это расширение, которое пропускает спонсорские вставки в видео на YouTube. SponsorBlock — это краудсорсинговое расширение, которое позволяет каждому отправить время начала и конца спонсорских сегментов в видео на YouTube. После того, как кто-нибудь отправляет эту информацию, все остальные пользователи расширения будут автоматически пропускать спонсорские сегменты.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Сайт",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "Исходный код",
"description": "Used on Firefox Store Page"
},
"noticeUpdate": {
"message": "Уведомление было обновлено!",
"description": "The first line of the message displayed after the notice was upgraded."
},
"noticeUpdate2": {
"message": "Если оно Вам всё равно не нравится, нажмите \"не показывать\".",
"description": "The second line of the message displayed after the notice was upgraded."
},
"setStartSponsorShortcut": {
"message": "Назначить горячую клавишу для начала спонсорской вставки"
},
"setSubmitKeybind": {
"message": "Назначить горячую клавишу для отправки"
},
"keybindDescription": {
"message": "Нажмите клавишу, чтобы выбрать её"
},
"keybindDescriptionComplete": {
"message": "Клавиша назначена на: "
},
"0": {
"message": "Таймаут подключения. Проверьте ваше соединение с интернетом. Если ваш интернет работает, сервер, скорее всего, перегружен или лежит."
},
"disableSkipping": {
"message": "Отключить SponsorBlock"
},
"enableSkipping": {
"message": "Включить SponsorBlock"
},
"yourWork": {
"message": "Ваша работа",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "Похоже, сервер перегружен. Попробуйте ещё раз через несколько секунд."
},
"errorCode": {
"message": "Код ошибки: "
},
"noticeTitleNotSkipped": {
"message": "Пропустить спонсорскую вставку?"
},
"skip": {
"message": "Пропустить"
},
"disableAutoSkip": {
"message": "Отключить автоматический пропуск"
},
"enableAutoSkip": {
"message": "Включить автоматический пропуск"
},
"autoSkipDescription": {
"message": "Автоматический пропуск будет пропускать спонсорские вставки за Вас. Если выключено, будет показываться уведомление с предложением пропустить."
},
"youHaveSkipped": {
"message": "Вы пропустили "
},
"youHaveSaved": {
"message": "Вы сэкономили "
},
"minLower": {
"message": "минуту"
},
"minsLower": {
"message": "минут"
},
"hourLower": {
"message": "час"
},
"hoursLower": {
"message": "часов"
},
"youHaveSavedTime": {
"message": "Вы сэкономили людям"
},
"youHaveSavedTimeEnd": {
"message": " их жизней."
},
"guildlinesSummary": {
"message": "- Убедитесь, что Ваш сегмент содержит только платную интеграцию, и больше ничего.\n- Убедитесь, что пропуск этого сегмента не пропустит никакой ценный контент\n- Если всё видео целиком спонсорское, пожалуйста, не сообщайте о нём. Система для сообщения о целых видео скоро выйдет.\n- Пожалуйста, не сообщайте об отказах от ответственности, которые могут показать предвзятость (если видео с обзором проплачено, не пропускайте, когда они это упоминают)."
},
"statusReminder": {
"message": "Смотрите состояние сервера на status.sponsor.ajay.app."
},
"changeUserID": {
"message": "Импортировать/экспортировать Ваш идентификатор пользователя"
},
"whatChangeUserID": {
"message": "Это нужно держать в секрете. Это как пароль, не стоит им ни с кем делиться. Если он у кого-то есть, он сможет выдать себя за Вас."
},
"setUserID": {
"message": "Установить идентификатор пользователя"
},
"userIDChangeWarning": {
"message": "Внимание: изменение идентификатора пользователя необратимо. Вы действительно хотите это сделать? Сделайте резервную копию вашего старого на всякий случай."
},
"createdBy": {
"message": "Создано"
},
"autoSkip": {
"message": "Автоматический пропуск"
},
"showSkipNotice": {
"message": "Показывать уведомление после пропуска спонсорской вставки"
},
"keybindCurrentlySet": {
"message": ". Он сейчас назначен на:"
},
"supportInvidious": {
"message": "Поддержка Invidious"
},
"supportInvidiousDescription": {
"message": "Invidious (invidio.us) — это неофициальный клиент YouTube. Чтобы включить поддержку, Вам понадобится принять дополнительные разрешения. Это НЕ работает в приватном режиме в Chrome и других вариантах Chromium."
},
"optionsInfo": {
"message": "Включить поддержку Invidious, выключить автоматический пропуск, скрыть кнопки и не только."
},
"addInvidiousInstance": {
"message": "Добавить инстанс Invidious"
},
"addInvidiousInstanceDescription": {
"message": "Добавить свой инстанс Invidious. Формат: ТОЛЬКО домен. Например, invidious.ajay.app"
},
"add": {
"message": "Добавить"
},
"addInvidiousInstanceError": {
"message": "Это неправильный домен. Введите ТОЛЬКО домен. Например, invidious.ajay.app"
},
"resetInvidiousInstance": {
"message": "Сбросить список инстансов Invidious"
},
"resetInvidiousInstanceAlert": {
"message": "Вы собираетесь сбросить список инстансов Invidious"
},
"currentInstances": {
"message": "Текущие инстансы:"
},
"enableAutoUpvote": {
"message": "Автоматически голосовать \"за\""
},
"whatAutoUpvote": {
"message": "Если это включено, расширение будет голосовать \"за\" все предложения других пользователей, если Вы на них не пожалуетесь. Если уведомление отключено, это не будет происходить."
},
"minDuration": {
"message": "Минимальная длительность (секунд):"
},
"minDurationDescription": {
"message": "Спонсорские сегменты короче этого значения не будут пропускаться и не будут показаны в плеере."
},
"shortCheck": {
"message": "Следующий диапазон времени короче, чем Ваша настройка минимальной длительности. Это может означать, что он уже был отправлен, и просто игнорируется из-за этой настройки. Вы действительно хотите отправить?"
},
"showUploadButton": {
"message": "Показывать кнопку отправки"
},
"whatUploadButton": {
"message": "Эта кнопка появляется в плеере YouTube после того, как Вы выбрали отметку времени и готовы к отправке."
},
"customServerAddress": {
"message": "Адрес сервера SponsorBlock"
},
"customServerAddressDescription": {
"message": "Адрес, по которому SponsorBlock обращается к серверу.\nМеняйте только если Вы подняли свой сервер."
},
"save": {
"message": "Сохранить"
},
"reset": {
"message": "Сбросить"
},
"customAddressError": {
"message": "Этот адрес неправильного формата. Убедитесь, что он начинается с http:// или https://, и что на конце нет слэшей."
},
"areYouSureReset": {
"message": "Вы действительно хотите это сбросить?"
},
"confirmPrivacy": {
"message": "Было обнаружено, что это видео непубличное. Нажмите \"отмена\", если не хотите проверять его на спонсоров."
},
"unlistedCheck": {
"message": "Игнорировать непубличные видео"
},
"whatUnlistedCheck": {
"message": "Эта настройка значительно замедлит SponsorBlock. Поиск спонсоров требует отправки идентификатора видео на сервер. Если Вас беспокоит отправка идентификаторов непубличных видео по интернету, включите эту настройку."
},
"mobileUpdateInfo": {
"message": "m.youtube.com теперь поддерживается"
}
}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1 @@
{}

View File

@@ -80,13 +80,15 @@
border-radius: 5px;
animation: fadeIn 0.5s;
border-spacing: 5px 10px;
padding-left: 5px;
padding-right: 5px;
}
.sponsorSkipNoticeFadeIn {
animation: fadeIn 0.5s;
}
.sponsorSkipNoticeFadeOut {
animation: fadeOut 3s cubic-bezier(0.55, 0.055, 0.675, 0.19);
}
@@ -311,4 +313,66 @@
.sponsorSkipDontShowButton:active {
position:relative;
top:1px;
}
/* Submission Notice */
.sponsorTimeDisplay {
font-size: 15px;
}
.sponsorTimeEditButton {
text-decoration: underline;
margin-left: 20px;
margin-right: 20px;
font-size: 13px;
cursor: pointer;
}
.sponsorTimeEdit > input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
.sponsorTimeMessagesRow {
max-height: 300px;
display: flex;
overflow: auto;
}
.sponsorTimeEdit {
font-size: 14px;
-moz-appearance: textfield;
}
.sponsorTimeEditMinutes {
width: 30px;
}
.sponsorTimeEditSeconds {
width: 60px;
}
.sponsorNowButton {
font-size: 11px;
cursor: pointer;
text-decoration: underline;
}
.sponsorTimeCategories {
margin-top: 5px;
margin-bottom: 5px;
background-color: rgba(28, 28, 28, 0.9);
border-color: rgb(130,0,0,0.9);
color: white;
border-width: 3px;
padding: 3px;
}

View File

@@ -1,5 +1,8 @@
<!DOCTYPE html>
<head>
<title> SponsorBlock </title>
<meta charset="utf-8">
<link href="styles.css" rel="stylesheet"/>
</head>
@@ -7,16 +10,16 @@
<body>
<div id="title">
<img src="https://github.com/ajayyy/SponsorBlock/raw/master/icons/LogoSponsorBlocker256px.png" height="80" class="profilepic"/>
<img src="../icons/LogoSponsorBlocker256px.png" height="80" class="profilepic"/>
SponsorBlock
</div>
<center>
<div class="container">
<p class="createdBy">Created By <a href="https://ajay.app">Ajay Ramachandran</a> <img src="https://ajay.app/newprofilepic.jpg" height="30" class="profilepiccircle"/></p>
<p>
Thanks for installing SponsorBlock. Here are some quick tips for getting started. Please join the Discord if you have any questions or suggestions.
Thanks for installing SponsorBlock. Here are some quick tips for getting started. Feel free to contact me if you have any questions.
</p>
<p class="projectPreview">
@@ -27,10 +30,13 @@
Come contribute, make some suggestions and help out in the Discord: <a href="https://discord.gg/QnmVMpU">https://discord.gg/QnmVMpU</a>
</p>
<a class="bigText" href="/options/options.html">Enable Invidious Support</a>
<div class="center">
<a class="bigText" href="/options/options.html">Enable optional features</a>
</div>
<p>
Invidious is a third-party YouTube viewer. SponsorBlock now supports invidious along with YouTube. Please visit the options page to make sure everything is how you want it to be.
Some features, such as support for non third-party YouTube sites, are disabled by default and can be enabled in the options. These can be enabled or disabled at any time.
You can also hide/show all UI elements added to the YouTube page.
</p>
<h1>How skipping works</h1>
@@ -48,7 +54,7 @@
Whenever you skip a video, you will get a notice report that submission. If the timing seems wrong, report it! You can also vote in the popup. The extension auto upvotes it if you don't report it, so make sure to report when necessary (this can be disabled in the options).
</p>
<center><img height="120px" src="https://user-images.githubusercontent.com/12688112/63067735-5a638700-bede-11e9-8147-f321b57527ec.gif"></center>
<div class="center"><img height="120px" src="https://user-images.githubusercontent.com/12688112/63067735-5a638700-bede-11e9-8147-f321b57527ec.gif"></div>
<h1>Submitting</h1>
@@ -80,6 +86,7 @@
<p>
There are hotkeys if you want to use them. You must be focused on the YouTube player to use them. Press the semicolon key to indicate the start/end of a sponsor segment and click the appostrophe to submit.
These can be changed in the options. If you don't use QWERTY, you should probably change the keybinds.
</p>
<h1>I hate these buttons, they are so ugly</h1>
@@ -106,7 +113,7 @@
Ask on Discord or make an Issue on GitHub. I am happy to hear suggestions or improvements you want. You may also contribute code or graphics if you would like.
</p>
<h1>Where can I get the source code</h1>
<h1>Where can I get the source code?</h1>
<h4 style="display: inline">Client:</h4>
<!-- Github logo -->
@@ -116,7 +123,7 @@
<!-- Github logo -->
<a href="https://github.com/ajayyy/SponsorBlockServer"><svg aria-hidden="true" version="1.1" viewBox="0 0 16 16" height="58px" style="padding-left: 15px"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path></svg></a>
<h1>Credit</h1>
<h1>Credits</h1>
<p>The awesome <a href="https://github.com/omarroth/invidious/wiki/API">Invidious API</a> is used to grab the time the video was published.</p>
@@ -124,6 +131,6 @@
<p>Some icons made by <a href="https://www.flaticon.com/authors/freepik" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a> and are licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a></p>
</center>
</div>
</body>

View File

@@ -4,6 +4,16 @@
body {
background-color: #333333;
font-family: sans-serif;
}
.center {
text-align: center;
}
.container {
max-width: 60%;
margin: auto;
}
.projectPreview {
@@ -12,24 +22,24 @@ body {
.projectPreviewImage {
position: absolute;
left: -90;
width: 80;
left: -90px;
width: 80px;
top: 50%;
transform: translateY(-50%);
}
.projectPreviewImageLarge {
position: absolute;
left: -210;
width: 200;
left: -210px;
width: 200px;
top: 50%;
transform: translateY(-20%);
}
.projectPreviewImageLargeRight {
position: absolute;
right: -210;
width: 200;
right: -210px;
width: 200px;
top: 50%;
transform: translateY(-50%);
}
@@ -47,37 +57,27 @@ body {
text-align: center;
vertical-align: middle;
font-family: sans-serif;
font-size: 50;
font-size: 50px;
color: #212121;
/* height: 100; */
padding: 20;
padding: 20px;
text-decoration: none;
transition: font-size 1s;
}
#title:hover {
font-size: 60;
transition: font-size 1s;
}
.subtitle {
font-family: sans-serif;
font-size: 40;
font-size: 40px;
color: #dad8d8;
padding-top: 10;
padding-top: 10px;
transition: font-size 0.4s;
}
.subtitle:hover {
font-size: 45;
font-size: 45px;
transition: font-size 0.4s;
}
@@ -99,7 +99,7 @@ a {
}
.link {
padding: 20;
padding: 20px;
height: 80px;
@@ -113,13 +113,12 @@ a {
}
#contact,.smalllink {
font-family: sans-serif;
font-size: 25;
font-size: 25px;
color: #e8e8e8;
text-align: center;
padding: 10;
padding: 10px;
}
#contact {
@@ -127,15 +126,11 @@ a {
}
p,li,a {
font-family: sans-serif;
font-size: 20;
font-size: 20px;
color: #c4c4c4;
padding: 10;
}
p,li,code,a {
max-width: 60%;
text-align: left;
overflow-wrap: break-word;
}
@@ -147,7 +142,7 @@ p,li,code,a {
.projectPreviewImage {
position: unset;
width: 130;
width: 130px;
display: block;
margin: auto;
transform: none;
@@ -165,20 +160,18 @@ img {
}
#recentPostTitle {
font-family: sans-serif;
font-size: 30;
font-size: 30px;
color: #dad8d8;
}
#recentPostDate {
font-family: sans-serif;
font-size: 15;
font-size: 15px;
color: #dad8d8;
}
h1,h2,h3,h4,h5,h6 {
font-family: sans-serif;
color: #dad8d8;
text-align: center;
}
svg {

View File

Before

Width:  |  Height:  |  Size: 551 B

After

Width:  |  Height:  |  Size: 551 B

View File

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

BIN
public/icons/beep.ogg Normal file

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 83 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -1,6 +1,6 @@
/* Options page CSS */
body {
font-family: Sans-Serif;
font-family: sans-serif;
}
.center {
@@ -25,12 +25,12 @@ body {
.small-description {
color: white;
font-size: 13;
font-size: 13px;
}
.medium-description {
color: white;
font-size: 15;
font-size: 15px;
}
.option-text-box {
@@ -76,6 +76,11 @@ body {
color: white;
}
.text-label-container {
font-size: 14px;
color: white;
}
.switch {
position: relative;
display: inline-block;
@@ -151,24 +156,24 @@ body {
.projectPreviewImage {
position: absolute;
left: -90;
width: 80;
left: -90px;
width: 80px;
top: 50%;
transform: translateY(-50%);
}
.projectPreviewImageLarge {
position: absolute;
left: -210;
width: 200;
left: -210px;
width: 200px;
top: 50%;
transform: translateY(-20%);
}
.projectPreviewImageLargeRight {
position: absolute;
right: -210;
width: 200;
right: -210px;
width: 200px;
top: 50%;
transform: translateY(-50%);
}
@@ -188,37 +193,27 @@ body {
text-align: center;
vertical-align: middle;
font-family: sans-serif;
font-size: 50;
font-size: 50px;
color: #212121;
/* height: 100; */
padding: 20;
padding: 20px;
text-decoration: none;
transition: font-size 1s;
}
#title:hover {
font-size: 60;
transition: font-size 1s;
}
.subtitle {
font-family: sans-serif;
font-size: 40;
font-size: 40px;
color: #dad8d8;
padding-top: 10;
padding-top: 10px;
transition: font-size 0.4s;
}
.subtitle:hover {
font-size: 45;
font-size: 45px;
transition: font-size 0.4s;
}
@@ -240,7 +235,7 @@ a {
}
.link {
padding: 20;
padding: 20px;
height: 80px;
@@ -254,13 +249,12 @@ a {
}
#contact,.smalllink {
font-family: sans-serif;
font-size: 25;
font-size: 25px;
color: #e8e8e8;
text-align: center;
padding: 10;
padding: 10px;
}
#contact {
@@ -268,11 +262,10 @@ a {
}
p,li {
font-family: sans-serif;
font-size: 20;
font-size: 20px;
color: #c4c4c4;
padding: 10;
padding: 10px;
}
p,li,code,a {
@@ -288,7 +281,7 @@ p,li,code,a {
.projectPreviewImage {
position: unset;
width: 130;
width: 130px;
display: block;
margin: auto;
transform: none;
@@ -306,22 +299,51 @@ img {
}
#recentPostTitle {
font-family: sans-serif;
font-size: 30;
font-size: 30px;
color: #dad8d8;
}
#recentPostDate {
font-family: sans-serif;
font-size: 15;
font-size: 15px;
color: #dad8d8;
}
h1,h2,h3,h4,h5,h6 {
font-family: sans-serif;
color: #dad8d8;
}
svg {
text-decoration: none;
}
.number-container:before {
content: attr(label-name);
padding-right: 4px;
width: max-content;
font-size: 14px;
color: white;
}
/* React styles */
.categoryTableElement {
font-size: 16px;
color: white;
}
.categoryTableElement > * {
padding-right: 15px;
padding-bottom: 15px;
}
.categoryOptionsSelector {
background-color: #c00000;
color: white;
border: none;
font-size: 14px;
padding: 5px;
border-radius: 5px;
}

View File

@@ -1,11 +1,13 @@
<!DOCTYPE html>
<head>
<title>Options - SponsorBlock</title>
<meta charset="utf-8">
<link href="options.css" rel="stylesheet"/>
<script src="../utils.js"></script>
<script src="../SB.js"></script>
<script src="options.js"></script>
<script src="../js/vendor.js"></script>
<script src="../js/options.js"></script>
</head>
<body class="sponsorBlockPageBody">
@@ -22,6 +24,13 @@
<div id="options" class="hidden">
<div id="category-type" option-type="react-CategoryChooserComponent">
</div>
<br/>
<br/>
<div id="support-invidious" option-type="toggle" sync-option="supportInvidious">
<label class="switch-container" label-name="__MSG_supportInvidious__">
<label class="switch">
@@ -39,7 +48,7 @@
<br/>
<br/>
<div option-type="text-change" sync-option="invidiousInstances">
<div option-type="private-text-change" sync-option="invidiousInstances">
<div class="option-button trigger-button">
__MSG_addInvidiousInstance__
</div>
@@ -75,23 +84,6 @@
<br/>
<br/>
<div option-type="toggle" toggle-type="reverse" sync-option="disableAutoSkip">
<label class="switch-container" label-name="__MSG_autoSkip__">
<label class="switch">
<input type="checkbox" checked>
<span class="slider round"></span>
</label>
</label>
<br/>
<br/>
<div class="small-description">__MSG_autoSkipDescription__</div>
</div>
<br/>
<br/>
<div option-type="keybind-change" sync-option="startSponsorKeybind">
<div class="option-button trigger-button">
__MSG_setStartSponsorShortcut__
@@ -130,6 +122,32 @@
</span>
</div>
</div>
<br/>
<br/>
<div option-type="number-change" sync-option="minDuration">
<label class="number-container" label-name="__MSG_minDuration__">
<input type="number" step="0.1" min="0">
</label>
<br/>
<br/>
<div class="small-description">__MSG_minDurationDescription__</div>
</div>
<br/>
<br/>
<div option-type="toggle" toggle-type="reverse" sync-option="dontShowNotice">
<label class="switch-container" label-name="__MSG_showSkipNotice__">
<label class="switch">
<input type="checkbox" checked>
<span class="slider round"></span>
</label>
</label>
</div>
<br/>
<br/>
@@ -185,6 +203,40 @@
<br/>
<br/>
<div option-type="toggle" toggle-type="reverse" sync-option="hideUploadButtonPlayerControls">
<label class="switch-container" label-name="__MSG_showUploadButton__">
<label class="switch">
<input type="checkbox" checked>
<span class="slider round"></span>
</label>
</label>
<br/>
<br/>
<div class="small-description">__MSG_whatUploadButton__</div>
</div>
<br/>
<br/>
<div option-type="toggle" sync-option="audioNotificationOnSkip">
<label class="switch-container" label-name="__MSG_audioNotification__">
<label class="switch">
<input type="checkbox" checked>
<span class="slider round"></span>
</label>
</label>
<br/>
<br/>
<div class="small-description">__MSG_audioNotificationDescription__</div>
</div>
<br/>
<br/>
<div option-type="toggle" sync-option="autoUpvote">
<label class="switch-container" label-name="__MSG_enableAutoUpvote__">
<label class="switch">
@@ -215,11 +267,28 @@
<div class="small-description">__MSG_whatViewTracking__</div>
</div>
<br/>
<br/>
<div option-type="toggle" sync-option="checkForUnlistedVideos">
<label class="switch-container" label-name="__MSG_unlistedCheck__">
<label class="switch">
<input type="checkbox">
<span class="slider round"></span>
</label>
</label>
<br/>
<br/>
<div class="small-description">__MSG_whatUnlistedCheck__</div>
</div>
<br/>
<br/>
<div option-type="text-change" sync-option="userID" confirm-message="userIDChangeWarning">
<div option-type="private-text-change" sync-option="userID" confirm-message="userIDChangeWarning">
<div class="option-button trigger-button">
__MSG_changeUserID__
</div>
@@ -241,19 +310,87 @@
</div>
</div>
</div>
<br/>
<br/>
<div option-type="toggle" toggle-type="reverse" sync-option="dontShowNotice">
<label class="switch-container" label-name="__MSG_showSkipNotice__">
<div option-type="private-text-change" sync-option="*" confirm-message="exportOptionsWarning">
<div class="option-button trigger-button">
__MSG_exportOptions__
</div>
<br/>
<div class="small-description">__MSG_whatExportOptions__</div>
<div class="option-hidden-section hidden">
<br/>
<input class="option-text-box" type="text">
<br/>
<br/>
<div class="option-button text-change-set">
__MSG_setOptions__
</div>
</div>
</div>
<br/>
<br/>
<div option-type="button-press" sync-option="copyDebugInformation" confirm-message="copyDebugInformation">
<div class="option-button trigger-button">
__MSG_copyDebugInformation__
</div>
<br/>
<div class="small-description">__MSG_copyDebugInformationOptions__</div>
</div>
<br/>
<br/>
<div option-type="toggle" sync-option="testingServer" confirm-message="testingServerWarning">
<label class="switch-container" label-name="__MSG_enableTestingServer__">
<label class="switch">
<input type="checkbox" checked>
<input type="checkbox">
<span class="slider round"></span>
</label>
</label>
<br/>
<br/>
<div class="small-description">__MSG_whatEnableTestingServer__</div>
</div>
<br/>
<br/>
<div option-type="text-change" sync-option="serverAddress">
<label class="text-label-container">
<div>__MSG_customServerAddress__</div>
<input class="option-text-box" type="text">
</label>
<div class="option-button text-change-set inline">
__MSG_save__
</div>
<div class="option-button text-change-reset inline">
__MSG_reset__
</div>
<br/>
<br/>
<div class="small-description">__MSG_customServerAddressDescription__</div>
</div>
</div>
</div>

View File

@@ -1,9 +1,8 @@
<html>
<head>
<title>__MSG_openPopup__</title>
<script src="SB.js"></script>
<link id="sponorBlockPopupFont" rel="stylesheet" type="text/css" href="/libs/Source+Sans+Pro.css"/>
<link id="sponorBlockStyleSheet" rel="stylesheet" type="text/css" href="popup.css"/>
<link id="sponsorBlockPopupFont" rel="stylesheet" type="text/css" href="/libs/Source+Sans+Pro.css"/>
<link id="sponsorBlockStyleSheet" rel="stylesheet" type="text/css" href="popup.css"/>
</head>
<body class="popupBody">
@@ -40,29 +39,15 @@
<div id="submissionSection" class="popupElement" style="display: none">
<h3 class="popupElement">__MSG_lastTimes__</h3>
<b>
<div id="sponsorMessageTimes" class="popupElement">
</div>
</b>
<b>Sponsor Editing has been moved and will appear after you click submit</b>
<br/>
<button id="clearTimes" class="smallButton popupElement">__MSG_clearTimesButton__</button>
<div id="submitTimesContainer" class="popupElement" style="display: none">
<br/>
<br/>
<button id="submitTimes" class="smallButton popupElement">__MSG_submitTimesButton__</button>
<div id="submitTimesInfoMessageContainer" class="popupElement" style="display: none">
<h3 id="submitTimesInfoMessage" class="popupElement">
</h3>
</div>
</div>
</div>
@@ -146,7 +131,7 @@
<span id="sponsorTimesSkipsDoneDisplay" class="popupElement">
0
</span>
<span id="sponsorTimesSkipsDoneEndWord" class="popupElement">__MSG_Segments__</span> since December 5th.
<span id="sponsorTimesSkipsDoneEndWord" class="popupElement">__MSG_Segments__</span> (since February).
</div>
<div id="sponsorTimeSavedContainer" class="popupElement" style="display: none">
@@ -154,7 +139,7 @@
<span id="sponsorTimeSavedDisplay" class="popupElement">
0
</span>
<span id="sponsorTimeSavedEndWord" class="popupElement">__MSG_minsLower__</span> since December 5th.
<span id="sponsorTimeSavedEndWord" class="popupElement">__MSG_minsLower__</span>.
</br/>
</br/>
@@ -210,7 +195,6 @@
</body>
<!-- Scripts that need to load after the html -->
<script src="config.js"></script>
<script src="utils.js"></script>
<script src="popup.js"></script>
<script src="./js/vendor.js"></script>
<script src="./js/popup.js"></script>
</html>

View File

@@ -1,12 +1,22 @@
isBackgroundScript = true;
import * as Types from "./types";
import Config from "./config";
// Make the config public for debugging purposes
(<any> window).SB = Config;
import Utils from "./utils";
var utils = new Utils({
registerFirefoxContentScript,
unregisterFirefoxContentScript
});
// Used only on Firefox, which does not support non persistent background pages.
var contentScriptRegistrations = {};
// Register content script if needed
if (isFirefox()) {
wait(() => SB.config !== undefined).then(function() {
if (SB.config.supportInvidious) setupExtraSiteContentScripts();
if (utils.isFirefox()) {
utils.wait(() => Config.config !== null).then(function() {
if (Config.config.supportInvidious) utils.setupExtraSiteContentScripts();
});
}
@@ -18,6 +28,9 @@ chrome.tabs.onUpdated.addListener(function(tabId) {
chrome.runtime.onMessage.addListener(function (request, sender, callback) {
switch(request.message) {
case "openConfig":
chrome.runtime.openOptionsPage();
return
case "submitTimes":
submitTimes(request.videoID, callback);
@@ -32,8 +45,8 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) {
case "getSponsorTimes":
getSponsorTimes(request.videoID, function(sponsorTimes) {
callback({
sponsorTimes: sponsorTimes
})
sponsorTimes
});
});
//this allows the callback to be called later
@@ -54,9 +67,7 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) {
registerFirefoxContentScript(request);
return false;
case "unregisterContentScript":
contentScriptRegistrations[request.id].unregister();
delete contentScriptRegistrations[request.id];
unregisterFirefoxContentScript(request.id)
return false;
}
});
@@ -66,7 +77,7 @@ chrome.runtime.onInstalled.addListener(function (object) {
// This let's the config sync to run fully before checking.
// This is required on Firefox
setTimeout(function() {
const userID = SB.config.userID;
const userID = Config.config.userID;
// If there is no userID, then it is the first install.
if (!userID){
@@ -74,13 +85,9 @@ chrome.runtime.onInstalled.addListener(function (object) {
chrome.tabs.create({url: chrome.extension.getURL("/help/index_en.html")});
//generate a userID
const newUserID = generateUserID();
const newUserID = utils.generateUserID();
//save this UUID
SB.config.userID = newUserID;
//TODO: Remove when invidious support is old
// Don't show this to new users
SB.config.invidiousUpdateInfoShowCount = 6;
Config.config.userID = newUserID;
}
}, 1500);
});
@@ -100,14 +107,24 @@ function registerFirefoxContentScript(options) {
js: options.js,
css: options.css,
matches: options.matches
}).then(() => void (contentScriptRegistrations[options.id] = registration));
}).then((registration) => void (contentScriptRegistrations[options.id] = registration));
}
/**
* Only works on Firefox.
* Firefox requires that this is handled by the background script
*
*/
function unregisterFirefoxContentScript(id: string) {
contentScriptRegistrations[id].unregister();
delete contentScriptRegistrations[id];
}
//gets the sponsor times from memory
function getSponsorTimes(videoID, callback) {
let sponsorTimes = [];
let sponsorTimesStorage = SB.config.sponsorTimes.get(videoID);
let sponsorTimesStorage = Config.config.sponsorTimes.get(videoID);
if (sponsorTimesStorage != undefined && sponsorTimesStorage.length > 0) {
sponsorTimes = sponsorTimesStorage;
}
@@ -130,22 +147,22 @@ function addSponsorTime(time, videoID, callback) {
}
//save this info
SB.config.sponsorTimes.set(videoID, sponsorTimes);
Config.config.sponsorTimes.set(videoID, sponsorTimes);
callback();
});
}
function submitVote(type, UUID, callback) {
let userID = SB.config.userID;
let userID = Config.config.userID;
if (userID == undefined || userID === "undefined") {
//generate one
userID = generateUserID();
SB.config.userID = userID;
userID = utils.generateUserID();
Config.config.userID = userID;
}
//publish this vote
sendRequestToServer("POST", "/api/voteOnSponsorTime?UUID=" + UUID + "&userID=" + userID + "&type=" + type, function(xmlhttp, error) {
utils.sendRequestToServer("POST", "/api/voteOnSponsorTime?UUID=" + UUID + "&userID=" + userID + "&type=" + type, function(xmlhttp, error) {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
callback({
successType: 1
@@ -167,13 +184,13 @@ function submitVote(type, UUID, callback) {
});
}
async function submitTimes(videoID, callback) {
async function submitTimes(videoID: string, callback) {
//get the video times from storage
let sponsorTimes = SB.config.sponsorTimes.get(videoID);
let userID = SB.config.userID;
let sponsorTimes = Config.config.sponsorTimes.get(videoID);
let userID = Config.config.userID;
if (sponsorTimes != undefined && sponsorTimes.length > 0) {
let durationResult = await new Promise((resolve, reject) => {
let durationResult = <Types.VideoDurationResponse> await new Promise((resolve, reject) => {
chrome.tabs.query({
active: true,
currentWindow: true
@@ -193,51 +210,33 @@ async function submitTimes(videoID, callback) {
//submit these times
for (let i = 0; i < sponsorTimes.length; i++) {
//to prevent it from happeneing twice
let increasedContributionAmount = false;
//to prevent it from happeneing twice
let increasedContributionAmount = false;
//submit the sponsorTime
sendRequestToServer("GET", "/api/postVideoSponsorTimes?videoID=" + videoID + "&startTime=" + sponsorTimes[i][0] + "&endTime=" + sponsorTimes[i][1]
+ "&userID=" + userID, function(xmlhttp, error) {
if (xmlhttp.readyState == 4 && !error) {
callback({
statusCode: xmlhttp.status
});
//submit the sponsorTime
utils.sendRequestToServer("GET", "/api/postVideoSponsorTimes?videoID=" + videoID + "&startTime=" + sponsorTimes[i][0] + "&endTime=" + sponsorTimes[i][1]
+ "&userID=" + userID, function(xmlhttp, error) {
if (xmlhttp.readyState == 4 && !error) {
callback({
statusCode: xmlhttp.status,
responseText: xmlhttp.responseText
});
if (xmlhttp.status == 200) {
//add these to the storage log
currentContributionAmount = SB.config.sponsorTimesContributed;
//save the amount contributed
if (!increasedContributionAmount) {
increasedContributionAmount = true;
SB.config.sponsorTimesContributed = currentContributionAmount + sponsorTimes.length;
}
//save the amount contributed
if (!increasedContributionAmount) {
increasedContributionAmount = true;
Config.config.sponsorTimesContributed = Config.config.sponsorTimesContributed + sponsorTimes.length;
}
} else if (error) {
callback({
statusCode: -1
});
}
} else if (error) {
callback({
statusCode: -1
});
}
});
}
}
}
function sendRequestToServer(type, address, callback) {
let xmlhttp = new XMLHttpRequest();
xmlhttp.open(type, serverAddress + address, true);
if (callback != undefined) {
xmlhttp.onreadystatechange = function () {
callback(xmlhttp, false);
};
xmlhttp.onerror = function(ev) {
callback(xmlhttp, true);
};
}
//submit this request
xmlhttp.send();
}
}

Some files were not shown because too many files have changed in this diff Show More