441 Commits

Author SHA1 Message Date
nin0dev
92543510a6 Merge branch 'main' into videojs 2024-08-01 07:47:42 -04:00
ashley
f9474cb95e 1 2024-08-01 11:41:44 +00:00
ashley
fceb1f9622 1a1a1 2024-08-01 11:39:13 +00:00
ashley
db5685e54f 1a 2024-08-01 11:34:15 +00:00
ashley
8068a207ce . 2024-08-01 11:26:08 +00:00
ashley
6349ccf0aa h 2024-08-01 11:23:17 +00:00
ashley
34dcf5b91f Update html/poketube.ejs 2024-08-01 11:21:41 +00:00
ashley
a0daea7b6b Update html/poketube.ejs 2024-08-01 11:15:43 +00:00
ashley
837e1d159f ehe 2024-08-01 11:12:56 +00:00
ashley
ef4c2af36b Update html/poketube.ejs 2024-08-01 11:08:22 +00:00
ashley
1f8d6c394c h 2024-08-01 11:06:51 +00:00
ashley
d7f5808467 . 2024-08-01 10:59:20 +00:00
ashley
5b57061be1 Update html/poketube.ejs 2024-08-01 10:56:43 +00:00
ashley
deeec99d62 1a 2024-08-01 10:53:34 +00:00
ashley
63af6b4abf aaaaaaaaaaaaaaaaaaaaaaa 2024-07-31 21:30:16 +00:00
ashley
4723a36649 videojs )test 2024-07-31 21:14:04 +00:00
ashley
9bb865bf21 gwa 2024-07-31 21:13:19 +00:00
nin0dev
aaf729306f Merge branch 'videojs' of https://codeberg.org/ashley/poke into videojs 2024-07-31 13:40:54 -04:00
ashley
5df22d0f4c bwa 2024-07-31 18:16:58 +00:00
ashley
16e0848ddf gwa 2024-07-31 18:06:32 +00:00
ashley
9b4343a3bb yesh 2024-07-31 18:03:11 +00:00
ashley
cc505447e0 1a 2024-07-31 17:59:26 +00:00
nin0dev
a24d8c4fff idk 2024-07-31 13:40:11 -04:00
ashley
abed47554c ehe 2024-07-31 16:41:11 +00:00
ashley
6847ee37ce add funny easter egg :3 2024-07-31 16:37:45 +00:00
nin0dev
c8a008a526 . 2024-07-31 12:20:50 -04:00
nin0dev
a9fcb28b1b added very very bad audio 2024-07-31 12:01:46 -04:00
ashley
e050e53653 gwa 2024-07-31 17:24:42 +00:00
nin0dev
b1d6389e3d initial videojs (driving me insane) 2024-07-31 11:31:20 -04:00
ashley
50d2ff9955 gwa gwa 2024-07-31 15:29:58 +00:00
ashley
5529ea0727 make the sh filter and stuff better :3 2024-07-31 15:25:46 +00:00
ashley
220e3bdea0 add hr clasesssssssssssssss 2024-07-31 11:36:48 +00:00
ashley
7b634e9fe3 o 2024-07-31 11:32:29 +00:00
ashley
2ac328dcd0 gwa 2024-07-31 11:30:53 +00:00
ashley
4b1b5e9dd1 bwa v3 2024-07-31 11:27:10 +00:00
ashley
0faf254338 bwa v1 2024-07-31 11:24:29 +00:00
ashley
27827f2576 privacy policy update 2 2024-07-31 11:17:34 +00:00
ashley
3d23f2c18d privacy policy update 1 2024-07-31 11:11:15 +00:00
ashley
943307177a gwagwa 2024-07-28 14:07:38 +00:00
ashley
6639fafbcc embed test a 2024-07-28 13:53:43 +00:00
ashley
cbdfed5eb1 require 18 and above 2024-07-28 12:27:39 +00:00
ashley
7267e706b5 add facebook and threads regex 2024-07-28 11:33:51 +00:00
ashley
fe1bed37df revert teh thing 2024-07-27 11:27:59 +00:00
ashley
e71322bf0d [IN TESTING] attempt to fix #106 2024-07-27 11:26:12 +00:00
ashley
769a6dea2d [IN TESTING] attempt to fix #106 2024-07-27 11:23:38 +00:00
ashley
edf8991914 test ignore 2024-07-27 11:21:39 +00:00
ashley
5dd37cc23e gwa gwa 2024-07-27 11:12:37 +00:00
ashley
0b48788174 [IN TESTING] attempt to fix #106 2024-07-26 21:37:58 +00:00
ashley
8054805054 [IN TESTING] attempt to fix #103 2024-07-26 20:40:10 +00:00
ashley
64b52c36d9 add gaza esims link :3 2024-07-26 17:57:01 +00:00
ashley
29aea0be35 bwa bwa 2024-07-25 22:22:01 +00:00
ashley
dbde6dbfb9 ehe 2024-07-25 20:54:19 +00:00
ashley
b5307ddfc8 bwa! 2024-07-25 17:02:44 +00:00
ashley
eb26dbd0e2 oopsie 2024-07-24 14:41:12 +00:00
ashley
6842c3c622 add blur owo :3 2024-07-24 14:39:26 +00:00
ashley
98a0799e27 bwa 2024-07-24 14:25:22 +00:00
ashley
319bdd20c8 add blur bg :3 2024-07-24 14:05:38 +00:00
ashley
0b2917e40d fix the contunation bug :p 2024-07-24 12:49:18 +00:00
ashley
98dd3d1135 bump version!! :3 2024-07-24 10:42:55 +00:00
ashley
49429389ad add blur owo :3 2024-07-24 10:41:18 +00:00
ashley
dae6282b85 remove channelfirstvideoobject :3 2024-07-24 10:12:48 +00:00
ashley
e5ec4e6679 bwa 2024-07-23 19:39:38 +00:00
ashley
dac8758fb8 bwaa!!! 2024-07-23 14:27:36 +00:00
ashley
dd96734ffd bwa 2024-07-23 12:41:05 +00:00
ashley
e6075e7c56 add stuff 2024-07-23 12:40:30 +00:00
ashley
e39f50c930 add background color and radius!!! 2024-07-23 10:18:35 +00:00
ashley
d7f76f3a2c test commit ignore pls 2024-07-23 10:12:43 +00:00
ashley
29bd9352a0 add open on youtube link 2024-07-23 09:48:37 +00:00
ashley
2e99413e48 ehe 2024-07-22 20:10:34 +00:00
ashley
0b1d2c6b0e bwa!!! 2024-07-22 20:09:06 +00:00
ashley
c762d55946 remove broken code 2024-07-22 10:43:48 +00:00
ashley
bf03245830 new splash texts!! - 21J2024 2024-07-21 20:33:04 +00:00
ashley
7260558276 Update html/poketube.ejs 2024-07-20 15:36:47 +00:00
ashley
098c13b966 test if this works (DO NOT PULL) 2024-07-20 14:02:06 +00:00
ashley
740a5d82e1 bwa 2024-07-19 12:43:48 +00:00
ashley
431d458cb5 remove these 2024-07-18 14:10:36 +00:00
ashley
8187d5b389 oh my god lmafo 2024-07-18 13:59:27 +00:00
ashley
c16e19eb1b aaa 2024-07-18 13:56:59 +00:00
ashley
2445d8fb49 Update src/libpoketube/init/pages-video.js 2024-07-18 13:53:00 +00:00
ashley
cb02f8f255 last commit today trust 2024-07-18 13:46:11 +00:00
ashley
8a2d8eddc9 fix height :3 2024-07-18 13:42:46 +00:00
ashley
7303b9c241 gwa 2024-07-18 13:40:26 +00:00
ashley
999b18e4bb new splashes :3 2024-07-17 23:38:54 +00:00
ashley
e6f0591fc4 make it funnier 2024-07-17 15:24:08 +00:00
ashley
57eaae43aa lol 2024-07-17 15:20:42 +00:00
ashley
eae7d4500c test commit ignore pls 2024-07-17 10:22:23 +00:00
ashley
ac72e2ccb3 wdfgefjıtgfu 2024-07-16 20:31:42 +00:00
ashley
ccf32b9b43 Update html/poketube.ejs 2024-07-16 20:30:02 +00:00
ashley
da5bafacd4 Update html/poketube.ejs 2024-07-16 20:28:47 +00:00
ashley
8354108df7 add stuff 2024-07-16 20:26:24 +00:00
ashley
6c7f16f66f bwaa 2024-07-16 19:52:03 +00:00
ashley
27c9168f85 Update html/poketube.ejs 2024-07-16 19:51:19 +00:00
ashley
581137ec02 FIX: skill issue :3 2024-07-16 19:48:16 +00:00
ashley
2fa69f81ca add stream music button !!!!!! 2024-07-16 19:45:55 +00:00
ashley
d659e388fd update regex ^_^ 2024-07-16 19:44:19 +00:00
ashley
1d2fdc3ea2 Update src/libpoketube/init/pages-video.js 2024-07-16 19:38:05 +00:00
ashley
c89ba51f57 Update html/poketube.ejs 2024-07-16 12:40:42 +00:00
ashley
40a8e92e80 fix shitcode :3 2024-07-15 20:54:14 +00:00
ashley
51a2f042c1 Update src/libpoketube/init/pages-channel-and-download.js 2024-07-15 20:21:59 +00:00
ashley
7767c69ad1 Update src/libpoketube/init/pages-channel-and-download.js 2024-07-15 20:09:54 +00:00
ashley
e01174182c hm 2024-07-15 20:07:20 +00:00
ashley
cd27910117 bwa 2024-07-15 20:04:43 +00:00
ashley
1b2e86f5f8 mv 2024-07-15 20:02:58 +00:00
ashley
867bb45e42 test ignore 2024-07-15 20:00:18 +00:00
ashley
40095fe64e Update src/libpoketube/init/pages-channel-and-download.js 2024-07-15 17:55:56 +00:00
ashley
d449d412f1 remove j :3 2024-07-15 17:50:51 +00:00
ashley
4b76c5187b make the channel pages faster,, 2024-07-15 17:47:55 +00:00
ashley
e2120319f4 bwa 2024-07-15 15:41:52 +00:00
ashley
505e9c1c61 :3 2024-07-15 15:41:18 +00:00
ashley
5606cd7684 use the channel avatar :3 2024-07-15 15:17:33 +00:00
ashley
7ddbe0641a fix channel pages :3 2024-07-15 14:58:32 +00:00
ashley
cd9786f699 use ChannelFirstVideoObject 2024-07-15 14:53:00 +00:00
ashley
d4a7a2cded add the firstvideo thing :3 2024-07-15 14:46:53 +00:00
ashley
dafaedef2e stuff 2024-07-15 10:19:35 +00:00
ashley
f2fd62dce0 Update src/libpoketube/init/pages-channel-and-download.js 2024-07-14 11:07:59 +00:00
ashley
5e4097b88c Update src/libpoketube/init/pages-404-and-main.js 2024-07-14 11:03:51 +00:00
ashley
75164fce6f use the api key 2024-07-14 11:01:45 +00:00
ashley
798688d105 use the api key 2024-07-14 11:00:19 +00:00
ashley
a62433c6f9 Update config.json 2024-07-14 10:59:22 +00:00
ashley
153416e458 add version information :3 2024-07-13 12:23:30 +00:00
ashley
80403f650e add 60fps indicator :3 2024-07-13 12:02:19 +00:00
ashley
37ec1f248c Update html/poketube.ejs 2024-07-13 11:03:26 +00:00
ashley
4b21f43ba9 add volume :3 2024-07-12 15:37:07 +00:00
ashley
e3ab50216c use data-channel instead ^_^ 2024-07-10 12:23:12 +00:00
ashley
3e85cf91a8 use data-author instead ^_^ 2024-07-10 12:17:22 +00:00
ashley
5b7762f2cb test commit ignore pls 2024-07-08 15:06:33 +00:00
ashley
96c61f26d0 fix stuff 2024-07-07 20:49:24 +00:00
ashley
47833803b2 fix seekbar on fulscreen 2024-07-07 19:58:53 +00:00
ashley
f124efc8e3 fix stuff :3 2024-07-07 17:56:59 +00:00
ashley
fc08e94049 try this 2024-07-06 16:31:21 +00:00
ashley
90910bfee4 Update html/poketube.ejs 2024-07-06 14:27:58 +00:00
ashley
913ccef4a7 remove broken code 2024-07-06 14:14:54 +00:00
ashley
97bb31f304 fix stuff 2024-07-06 14:11:16 +00:00
ashley
8990672e62 fix : use readystate 2024-07-06 13:44:53 +00:00
ashley
673142052e fix: remove autosync for now 2024-07-06 11:16:02 +00:00
ashley
692fbf1d5d fix some stuff :3 2024-07-06 09:48:02 +00:00
ashley
c2625bd79d fix issue 2024-07-06 09:20:55 +00:00
ashley
9484df8780 FIX: Medium videoplayback having a skill issue :3 2024-07-05 18:59:54 +00:00
ashley
70221f1f41 fix some autosync issue lol 2024-07-05 17:18:38 +00:00
ashley
5be52a9d7b add error notices :3 2024-07-05 13:59:13 +00:00
ashley
8d60655fa7 oops 2024-07-03 23:14:01 +00:00
ashley
b765e8eb06 add masterpiece video :3 2024-07-03 23:11:22 +00:00
ashley
34c7b787e7 revert #91 bwaaaaa 2024-07-03 21:04:48 +00:00
ashley
5c62905ce5 Update src/libpoketube/init/pages-video.js 2024-07-03 21:00:40 +00:00
ashley
8cc53b114b put it to pt_version 2024-07-03 20:56:58 +00:00
ashley
9f52dbf33c bwa 2024-07-03 20:54:59 +00:00
ashley
2a59d97d62 use execSync instead of exec 2024-07-03 20:52:22 +00:00
ashley
63ac519d60 bwa 2024-07-03 20:36:31 +00:00
ashley
e28361bab3 Update html/poketube.ejs 2024-07-03 13:15:09 +00:00
ashley
38d4913834 oops 2024-07-03 10:49:12 +00:00
ashley
184c935251 test commit ignore pls 2024-07-03 10:47:56 +00:00
ashley
f7d614007a Update html/poketube.ejs 2024-07-03 10:32:42 +00:00
ashley
8071330fc6 Update src/libpoketube/init/pages-video.js 2024-07-03 10:30:50 +00:00
ashley
61db054304 bwa :3 2024-07-03 10:30:11 +00:00
ashley
41486bf8a3 oops 2024-07-03 10:22:46 +00:00
ashley
8b5bd59420 add itag_hd 2024-07-03 10:20:01 +00:00
ashley
9b7a612bc4 mb lmao 2024-07-03 08:52:10 +00:00
ashley
f6f0614d1f ehe 2024-07-03 08:51:19 +00:00
ashley
a5596afc4c add sugesstion api :3 2024-07-03 08:49:11 +00:00
ashley
57d19f5326 change api url :3 2024-07-03 08:47:01 +00:00
ashley
8f28bc4842 re-add videos :3 2024-07-03 08:06:38 +00:00
ashley
ab3b30d618 fix stuff :3 2024-07-03 08:05:43 +00:00
ashley
c64c800024 fix url :3 2024-07-03 07:00:30 +00:00
ashley
99cc288726 bwa 2024-07-02 22:09:57 +00:00
ashley
6658fdc5a7 add hd video!! 2024-07-02 22:09:19 +00:00
ashley
be0fd4ae31 Update html/poketube.ejs 2024-06-29 15:47:15 +00:00
ashley
7da7d37c00 Update html/poketube.ejs 2024-06-29 15:45:41 +00:00
ashley
a05ab40086 Update html/poketube.ejs 2024-06-26 14:59:19 +00:00
ashley
6fce8fde00 lol 2024-06-26 14:58:25 +00:00
ashley
5adb35ad94 TEST IGNORE 2024-06-26 14:54:34 +00:00
Ashley ////
b6dda9ac2d Merge pull request 'merger: Fix f string bug' (#96) from nin0dev/poke:main into main
Reviewed-on: https://codeberg.org/ashley/poke/pulls/96
2024-06-26 11:04:59 +00:00
nin0dev
75a6333f96 Update videobundler/README.md 2024-06-26 10:21:53 +00:00
nin0dev
ccd1eab93c Merge branch 'main' into main 2024-06-26 10:20:30 +00:00
nin0dev
dd517abe97 Fix f string bug 2024-06-26 06:17:04 -04:00
Ashley ////
f875214bee Merge pull request '(videobundler) implement streaming and fix unknown var issue' (#95) from nin0dev/poke:main into main
Reviewed-on: https://codeberg.org/ashley/poke/pulls/95
2024-06-26 07:59:30 +00:00
Ashley ////
1e0d1f77f9 Merge branch 'main' into main 2024-06-26 07:59:20 +00:00
nin0dev
e21718181e edited cmdline 2024-06-25 14:34:41 -04:00
Korbs
f903092531 Merge pull request 'Update instances.json' (#91) from blade10101/poke:main into main
Reviewed-on: https://codeberg.org/ashley/poke/pulls/91
2024-06-25 03:13:45 +00:00
blade10101
3ddbf9eed0 Merge branch 'main' into main 2024-06-25 01:25:56 +00:00
blade10101
9f42bcc8c6 Update instances.json 2024-06-25 01:24:19 +00:00
nin0dev
174e0564a7 apparently there are things to commit 2024-06-24 03:55:25 -04:00
nin0dev
ac1cf91adc Added separate browser handling
Chromium shits itself if i give it a streamed output from ffmpeg, so i just do old behavior of downloading file if its not a firefox browser
2024-06-24 03:54:37 -04:00
nin0dev
f16ebe8aa3 Merge branch 'main' into main 2024-06-24 07:20:16 +00:00
nin0dev
113fbd91f8 Added video streaming 2024-06-24 00:26:57 -04:00
nin0dev
6dafa572a4 stop writing bundler output to disk 2024-06-23 23:28:08 -04:00
Korbs
4d31a08fef Rename to "Poke", use PokeTube org's package, and note about ARM64/v7 2024-06-24 02:50:05 +00:00
nin0dev
08271eb2b4 nothing more 2024-06-23 16:11:12 -04:00
nin0dev
6826788925 Merge branch 'main' into main 2024-06-23 18:36:11 +00:00
nin0dev
a3bd8ec957 Fixed bug where video would get corrupted over not correctly getting id 2024-06-23 14:34:36 -04:00
Ashley ////
678e30c89a Merge pull request 'improve videobundler' (#93) from nin0dev/poke:main into main
Reviewed-on: https://codeberg.org/ashley/poke/pulls/93
2024-06-23 16:22:42 +00:00
nin0dev
70243b5b76 Updated videobundler to add concurrency and caching 2024-06-23 12:21:01 -04:00
nin0dev
00d21afbc5 Merge branch 'main' into main 2024-06-23 15:37:28 +00:00
Ashley ////
f7c961ae93 Merge pull request 'Add: Suggestions for Search Bar' (#94) from Korbs/poke:main into main
Reviewed-on: https://codeberg.org/ashley/poke/pulls/94
2024-06-23 11:50:08 +00:00
Korbs
0fdbeea5d5 Add suggestions to search bar (Landing) 2024-06-23 04:17:34 -04:00
Korbs
cf7cf98dd5 Merge pull request 'main' (#7) from ashley/poke:main into main
Reviewed-on: https://codeberg.org/Korbs/poke/pulls/7
2024-06-23 07:57:23 +00:00
blade10101
8ae73e932f Update instances.json 2024-06-23 02:00:33 +00:00
nin0dev
bbff542938 Added concurrency 2024-06-22 18:02:30 -04:00
nin0dev
a1e1c3e33f Merge branch 'main' into main 2024-06-22 21:59:42 +00:00
ashley
b7e6d55fcc o7 2024-06-22 21:12:05 +00:00
nin0dev
2adf9231a8 Merge branch 'main' into main 2024-06-22 19:31:40 +00:00
nin0dev
7fbd295c87 Fixed f string error 2024-06-22 15:30:35 -04:00
Ashley ////
bd6337cc5c Merge pull request 'Add videobundler' (#92) from nin0dev/poke:main into main
Reviewed-on: https://codeberg.org/ashley/poke/pulls/92
2024-06-22 19:03:56 +00:00
nin0dev
a5e9c3089b Added videobundler 2024-06-22 14:58:11 -04:00
blade10101
8a0f821eb3 Update instances.json 2024-06-22 02:41:52 +00:00
ashley
b9fe538feb Update README.md 2024-06-21 20:57:15 +00:00
ashley
052547350a Upload files to "css" 2024-06-20 21:57:57 +00:00
ashley
b91601209d bump version 2024-06-19 11:01:01 +00:00
ashley
03cc26622a revert teh thing 2024-06-17 15:39:51 +00:00
ashley
bbd409d28f block videos from tom macdonald in discover 2024-06-17 15:29:31 +00:00
ashley
ab16327c4b add author :3 2024-06-17 15:26:56 +00:00
ashley
771eaeeb8a new discover page :3 2024-06-17 15:17:09 +00:00
ashley
d06ac6a18e :3 2024-06-17 13:53:54 +00:00
ashley
904d6e79b2 add credits for narvi :3 2024-06-16 20:28:22 +00:00
ashley
0f0e142daf change api url :3 2024-06-15 11:52:43 +00:00
ashley
3c5710e192 woo :3 2024-06-15 11:49:13 +00:00
ashley
177d5f7a63 add discord link :3 2024-06-13 22:46:49 +00:00
ashley
daf8e56e8d oops 2024-06-13 22:25:08 +00:00
ashley
bcb14824d7 test new ui 2024-06-13 22:22:13 +00:00
ashley
de9a688f08 o7 2024-06-13 16:32:39 +00:00
Korbs
66ef437a98 Update link to SudoVanilla instance 2024-06-13 01:57:19 +00:00
ashley
ceae76f50e change api url :3 2024-06-11 22:12:49 +00:00
ashley
568a8dc53a mb sorry 2024-06-11 22:09:38 +00:00
ashley
5d4e5024ab test 2024-06-11 22:07:18 +00:00
ashley
269b02f0fc add user score!! to mobile 2024-06-11 22:02:58 +00:00
ashley
7ec38a9933 fix some issues :3 2024-06-10 22:27:48 +00:00
ashley
faa535bd0b mb lmao 2024-06-10 22:26:05 +00:00
ashley
8b1e2bc26b add user score!! 2024-06-10 22:24:47 +00:00
ashley
038b1f610f add dislikePercentage :3 2024-06-10 22:20:12 +00:00
ashley
bccb0a3928 ok am stupid 2024-06-10 21:43:06 +00:00
ashley
e979a3eaa4 rsufjgdujfgfdjghrf 2024-06-10 21:42:36 +00:00
ashley
941ade3d26 bleh 2024-06-10 21:41:53 +00:00
ashley
c5b0107746 mb 2024-06-10 21:34:25 +00:00
ashley
15fadaad41 ehe 2024-06-10 21:33:40 +00:00
ashley
2301392ba4 add likePercentage :3 2024-06-10 21:29:10 +00:00
ashley
a41df78164 new splash texts!! 2024-06-09 19:06:29 +00:00
ashley
9527c91e98 add discord server shortcut :3 2024-06-09 08:40:00 +00:00
ashley
12f43c3acf fix download :3 2024-06-09 08:32:16 +00:00
ashley
e1a38eba0e add search on web button to search :^ 2024-06-09 08:30:35 +00:00
ashley
ea7ca735a0 Update html/search.ejs 2024-06-09 08:26:19 +00:00
ashley
482b9ff833 testing 2024-06-09 08:24:07 +00:00
ashley
cb34181115 add discord link instead 2024-06-07 11:32:23 +00:00
ashley
06cf3cd7d6 mb sorry 2024-06-05 17:34:51 +00:00
ashley
ddad3663cf add girls 2024-06-02 19:50:06 +00:00
ashley
ae741e1c30 use github user content for instance fetch (related: #87) 2024-06-01 22:24:55 +00:00
Korbs
5ef6b6bfcd Convert to Codeberg and use ARM64 2024-06-01 21:18:14 +00:00
ashley
64096ff275 add embedtype :3 2024-06-01 05:44:11 +00:00
ashley
efc2a5d468 add this :3 2024-06-01 05:42:02 +00:00
ashley
0fc44971a1 check if param exists 2024-05-31 11:42:39 +00:00
ashley
ccd7f8e14b im sorry lol 2024-05-31 11:41:01 +00:00
ashley
8203cc8f81 add a 404 to games if it doesnt exist :3 2024-05-31 11:40:18 +00:00
ashley
d46e1dfb80 fix a > issue :3 2024-05-31 11:35:34 +00:00
ashley
f1029b0b93 oops lmao 2024-05-31 11:20:43 +00:00
ashley
024fad830a lets test this :3 2024-05-31 11:16:44 +00:00
ashley
7aa8181f6f add a check for artists 2024-05-31 11:08:45 +00:00
Ashley ////
9edfb9c216 Merge pull request 'Replace "poke.am1.shiggy.cloud" and "poke.am2.shiggy.cloud" with online instances.' (#88) from anotherkai/poke:replace-instances into main
Reviewed-on: https://codeberg.org/ashley/poke/pulls/88
2024-05-30 19:21:03 +00:00
anotherkai
9e79555951 Replace "poke.am1.shiggy.cloud" and "poke.am2.shiggy.cloud" with online instances. 2024-05-29 19:19:04 +00:00
ashley
dcb80d6a51 test ignore 2024-05-26 20:40:10 +00:00
ashley
a9e0acbd0a oops 2024-05-26 20:37:47 +00:00
ashley
9adc242445 fix the contunation bug :p 2024-05-26 20:34:06 +00:00
ashley
93ffc6ea42 bye 2024-05-25 23:08:48 +00:00
ashley
165c6a53ae fix height :3 2024-05-25 23:04:52 +00:00
ashley
8b52cddd22 add x.authorId 2024-05-25 05:46:31 +00:00
ashley
463cad66e6 Update html/playlist.ejs 2024-05-24 14:54:09 +00:00
ashley
2658ca8fdf my sorry 2024-05-24 14:50:18 +00:00
ashley
ca63841dee OOOPS SORRY 2024-05-24 14:49:00 +00:00
ashley
8449a2ea60 lol 2024-05-24 14:46:10 +00:00
ashley
7fcf4647cc add red-tape lol 2024-05-24 14:19:20 +00:00
ashley
ddb1bf189e add red tape lol 2024-05-24 14:11:54 +00:00
Korbs
13477769fb Switch to Codeberg for image host and provide arm64 build
https://codeberg.org/Korbs/-/packages/container/poke/amd64
https://codeberg.org/Korbs/-/packages/container/poke/arm64
2024-05-24 03:30:54 +00:00
Korbs
cf048ce7d8 Merge pull request 'main' (#6) from ashley/poke:main into main
Reviewed-on: https://codeberg.org/Korbs/poke/pulls/6
2024-05-24 03:26:58 +00:00
ashley
4d3e63970d test commit ignore pls 2024-05-23 20:12:24 +00:00
ashley
4515b3ca13 oops lmao 2024-05-23 20:09:45 +00:00
ashley
de4343a001 add warning for dis lol 2024-05-23 20:06:05 +00:00
ashley
6214f1a0a1 test commit ignore pls 2024-05-22 20:07:45 +00:00
ashley
76dae85866 remove vidoes if theres none duh 2024-05-22 20:03:55 +00:00
ashley
358a4d8311 redirect to shorts if theres no videos :3 2024-05-22 19:59:42 +00:00
ashley
43682f2a87 add verified checkmark :3 2024-05-22 13:47:26 +00:00
ashley
ba9820aee4 add new download button :3 2024-05-22 09:10:13 +00:00
ashley
32753be835 new banner :3 2024-05-20 14:47:46 +00:00
ashley
b47f66773b Fix search 2024-05-18 11:13:17 +00:00
ashley
733a99cdc4 add the discover button :3 2024-05-16 18:57:21 +00:00
ashley
99ef160678 add the discover button :3 2024-05-15 23:57:40 +00:00
ashley
ea60a07202 OOOPS SORRY 2024-05-15 23:53:21 +00:00
ashley
b10d91e1c0 add new header 2024-05-15 23:48:34 +00:00
ashley
0b86cb9a1f bump bundle version :3 2024-05-13 16:05:04 +00:00
ashley
06a9e61330 add toggleTheaterMode :3 2024-05-13 16:04:04 +00:00
ashley
54da43668d use theatermodeon 2024-05-13 16:00:39 +00:00
ashley
5ee8a6f847 oops 2024-05-13 15:50:20 +00:00
ashley
77248156a5 bump bundle version :3 2024-05-13 04:35:00 +00:00
Ashley ////
81e74bdfa3 Merge pull request 'Optimize Landing and Improve Theather Mode' (#87) from Korbs/poke:main into main
Reviewed-on: https://codeberg.org/ashley/poke/pulls/87
2024-05-13 04:30:47 +00:00
Korbs
79111259f6 Remove HD videos and keep 480p version on landing background 2024-05-12 18:26:57 -04:00
Korbs
e4263b18f3 Strink height of theather mode for 720p screens 2024-05-12 18:25:55 -04:00
Korbs
f23f9cfd20 Add error template to layouts folder 2024-05-12 18:25:33 -04:00
Korbs
e3b35a4426 Merge pull request 'main' (#5) from ashley/poke:main into main
Reviewed-on: https://codeberg.org/Korbs/poke/pulls/5
2024-05-12 19:27:39 +00:00
ashley
996221f39e oops 2024-05-12 18:47:09 +00:00
ashley
7df79c7da8 lol 2024-05-12 18:46:09 +00:00
ashley
9e2b8e39c4 mb lol 2024-05-11 20:49:15 +00:00
ashley
efc7e8a687 use javascript file 2024-05-11 20:48:52 +00:00
ashley
8ec890dea1 add a file for maps instead 2024-05-11 20:46:47 +00:00
ashley
c540ff27df add clock :3 2024-05-11 19:40:35 +00:00
ashley
a74dea4fb4 oops 2024-05-11 16:02:12 +00:00
ashley
0d128656b7 add funny easter egg :3 2024-05-11 16:00:06 +00:00
ashley
b1f011f907 add a rparamm 2024-05-11 02:54:08 +00:00
ashley
1735f548d6 AM DUMB SORRY 2024-05-11 02:40:23 +00:00
ashley
c49abee128 redirect to the account page :3 2024-05-11 02:37:03 +00:00
ashley
d7ef10b65e fix the XSS in user pages 2024-05-11 02:33:43 +00:00
ashley
75e4e37789 add download button to search :3 2024-05-11 01:20:51 +00:00
ashley
913a43e0cb final commmit hopefull 2024-05-11 00:12:22 +00:00
ashley
284ca61bb9 lets try this 2024-05-11 00:11:16 +00:00
ashley
2349a5f67f test commit ignore pls 2024-05-11 00:09:34 +00:00
ashley
f78344e756 make it 1.5 2024-05-11 00:06:11 +00:00
ashley
667abd4764 OOOPS SORRY 2024-05-11 00:04:47 +00:00
ashley
6134c84047 save every 5 seconds instead 2024-05-11 00:00:36 +00:00
ashley
1d07846314 lol 2024-05-10 23:17:49 +00:00
ashley
d25f416411 added read if cute splah 2024-05-10 23:16:31 +00:00
ashley
0d5494bff2 lol sorry 2024-05-10 21:41:46 +00:00
ashley
87ceaf1a8a fix stuff 2024-05-10 21:36:08 +00:00
ashley
93edc7411c hmm 2024-05-10 21:27:51 +00:00
ashley
026a060c3c mb lmao 2024-05-10 21:24:38 +00:00
ashley
3bdf5a5254 test ignore 2024-05-10 21:22:58 +00:00
ashley
a897c79243 test ignore 2024-05-10 21:09:09 +00:00
ashley
a58a01e1df revert teh thing 2024-05-10 19:59:34 +00:00
Ashley ////
e35d806f51 Merge pull request 'Format Poketube.ejs with Beautify' (#86) from Korbs/poke:main into main
Reviewed-on: https://codeberg.org/ashley/poke/pulls/86
2024-05-10 19:44:00 +00:00
Korbs
1caa2c150d Format with Beautify 2024-05-10 15:37:49 -04:00
ashley
d9ac3f21d0 add regex :3 2024-05-10 10:55:04 +00:00
ashley
78de660963 add regex for vid ids 2024-05-10 10:48:31 +00:00
Korbs
adf09e5dfa Merge pull request 'main' (#4) from ashley/poke:main into main
Reviewed-on: https://codeberg.org/Korbs/poke/pulls/4
2024-05-10 07:09:15 +00:00
ashley
62d7def602 test commit ignore pls 2024-05-09 15:03:50 +00:00
ashley
fd26924324 add commmit field 2024-05-09 14:58:20 +00:00
ashley
3a3cacb6d0 add poke.blahai.gay 2024-05-09 14:37:29 +00:00
ashley
c6cb1334b2 oops 2024-05-09 13:43:29 +00:00
ashley
bcdab77856 more poketube --> poke 2024-05-08 21:19:47 +00:00
ashley
ba5fa3f4e8 bump bundle version :3 2024-05-08 13:57:37 +00:00
ashley
8aaa41de3d remove IE support :p 2024-05-08 13:56:04 +00:00
Korbs
43cf7dc468 Merge pull request 'main' (#3) from ashley/poke:main into main
Reviewed-on: https://codeberg.org/Korbs/poke/pulls/3
2024-05-08 05:56:03 +00:00
ashley
cdcec542d0 bump version!! :3 2024-05-06 15:36:09 +00:00
ashley
00e6597265 lol mb 2024-05-05 18:21:24 +00:00
ashley
0f025be830 ad stuff :.3 2024-05-05 18:13:56 +00:00
ashley
44f6697b02 mb 2024-05-05 15:46:56 +00:00
ashley
8a31d194fa oops 2024-05-05 15:45:57 +00:00
ashley
bc917b4727 bump version!! :3 2024-05-05 15:45:33 +00:00
ashley
ab96d0fa34 fix video search 2024-05-05 12:57:16 +00:00
ashley
ae935825f4 add stuff 2024-05-05 12:19:28 +00:00
ashley
8c3692d94a add ascii txt :3 2024-05-04 16:41:41 +00:00
ashley
19fa78253c add poke logo 2024-05-04 16:33:55 +00:00
ashley
b7907c8459 add info cards api 2024-05-04 10:10:42 +00:00
ashley
bc9643c5e7 lint code :3 2024-05-04 05:31:35 +00:00
ashley
a0cebd409c return 404 if errors 2024-05-04 05:28:55 +00:00
ashley
d4521153b1 lint code :3 2024-05-04 05:28:05 +00:00
ashley
d451a834a2 new 404 string 2024-05-04 05:16:16 +00:00
ashley
27b7a248e9 am dumb 2024-05-02 22:17:19 +00:00
ashley
fa5a1b9a37 change to eu proxy 2024-05-02 22:03:26 +00:00
ashley
35b89add2f add new splash hehe 2024-05-02 03:48:30 +00:00
ashley
b041062c6a add new screenshot :3 2024-05-02 03:33:38 +00:00
ashley
94a1e3d4c0 add new screenshot :3 2024-05-02 03:32:49 +00:00
ashley
e2adc76b7d bump bundle version :3 2024-05-02 02:13:04 +00:00
ashley
98b310342e fix stats for nerds :p 2024-05-02 02:12:44 +00:00
ashley
def705d37a fix january in school 2024-05-02 02:06:22 +00:00
ashley
4ba2b7c466 bump bundle version :3 2024-05-02 02:03:15 +00:00
ashley
10ef769b6c bump bundle version :3 2024-05-02 02:02:02 +00:00
ashley
66ee2e0a8d dont display theather mode without js 2024-05-02 02:00:23 +00:00
Ashley ////
3e5ba0da0b Merge pull request 'Minor UI Improvements' (#82) from Korbs/poke:main into main
Reviewed-on: https://codeberg.org/ashley/poke/pulls/82
2024-05-02 01:53:27 +00:00
Korbs
c46d95c196 Clean up area above searched videos 2024-05-01 17:32:37 -04:00
Korbs
83d06e8584 Clean up area under video and add Theater toggle 2024-05-01 17:32:08 -04:00
Korbs
7db35edfda Merge pull request 'main' (#2) from ashley/poke:main into main
Reviewed-on: https://codeberg.org/Korbs/poke/pulls/2
2024-05-01 21:31:28 +00:00
ashley
1938f35856 fix silly issues 2024-05-01 16:11:56 +00:00
ashley
c8b1c644d1 my sorry 2024-05-01 16:10:31 +00:00
ashley
d56e224f3b fix result 2024-05-01 16:08:14 +00:00
ashley
a8b35495f6 make search work again!! 2024-05-01 16:05:41 +00:00
ashley
6f1af7c36d oops 2024-05-01 13:46:00 +00:00
ashley
7a6a1e99a5 add more splash texts :3 2024-05-01 13:45:11 +00:00
ashley
1077a5ef60 remove old icons :3 2024-05-01 12:02:11 +00:00
ashley
35b9412e7c my bad lmao- 2024-05-01 09:33:43 +00:00
ashley
f5d8863236 add more splash texts :3 2024-05-01 09:32:28 +00:00
ashley
f941957dea remove icons lol 2024-05-01 09:00:01 +00:00
ashley
ff45b70bcd add proxyurl 2024-05-01 06:41:06 +00:00
ashley
b8dad3e52b add fontawsome :3 2024-05-01 06:40:12 +00:00
ashley
477ba74e83 Update html/landing.ejs 2024-05-01 06:31:56 +00:00
ashley
1ed3fe20b1 change parts of readme 2024-05-01 06:27:27 +00:00
Ashley ////
11e0cf2580 Merge pull request 'Update Landing and README' (#81) from Korbs/poke:main into main
Reviewed-on: https://codeberg.org/ashley/poke/pulls/81
2024-05-01 06:25:18 +00:00
ashley
21ae44ca15 add splash text :3 2024-05-01 06:24:48 +00:00
ashley
aa9daac6f4 add text lol :3 2024-05-01 06:22:58 +00:00
Korbs
1f4d9c3282 Add links to bottom cards 2024-04-30 23:12:50 -04:00
Korbs
98c1d4a638 Merge pull request 'main' (#1) from ashley/poke:main into main
Reviewed-on: https://codeberg.org/Korbs/poke/pulls/1
2024-05-01 03:10:00 +00:00
Korbs
b634646d4b Update parts of README 2024-04-30 23:07:06 -04:00
Korbs
d85f362544 Remove old file 2024-04-30 23:06:54 -04:00
Korbs
cc3b9fd5d6 Add header partial 2024-04-30 23:06:19 -04:00
Korbs
82a5cb5e3a Add cart partial 2024-04-30 23:06:09 -04:00
Korbs
f64e1d21df Update landing page 2024-04-30 23:05:57 -04:00
Korbs
c488771d5d Add secure and verify to landing 2024-04-30 23:04:20 -04:00
ashley
24c51c85a3 use value instead lol 2024-04-30 13:47:11 +00:00
ashley
6822e5fc1e add channel search placeholder 2024-04-30 13:40:37 +00:00
ashley
cdd0cbf72b add more redirects :3 2024-04-29 21:11:50 +00:00
Ashley ////
c80793cb2e test this 2024-04-27 18:47:23 +00:00
Ashley ////
312f717713 add escape buttono to close the popup 2024-04-27 18:31:05 +00:00
Ashley ////
2e7a43ad7c oops 2024-04-27 15:12:42 +00:00
Ashley ////
e2dd39b5e3 css fixes 2024-04-27 15:11:23 +00:00
Ashley ////
82e838438d add the div 2024-04-27 15:07:51 +00:00
Ashley ////
f0fd776104 mb agaij 2024-04-27 15:06:01 +00:00
Ashley ////
a6383824b2 oops 2024-04-27 15:04:21 +00:00
Ashley ////
9f3ec29813 add tags for channels 2024-04-27 15:01:21 +00:00
Ashley ////
4b7d4d2f43 add margin 2024-04-27 08:52:02 +00:00
Ashley ////
8a5d09e7d6 test commit ignore pls 2024-04-27 08:50:28 +00:00
Ashley ////
0180cc7ab0 test ignore 2024-04-27 08:48:13 +00:00
Ashley ////
9b10540fb9 test commit ignore pls 2024-04-27 08:45:37 +00:00
Ashley ////
6da10df705 test commit ignore pls 2024-04-27 08:42:20 +00:00
Ashley ////
1640f7e66c test author verified,, 2024-04-27 08:39:10 +00:00
Ashley ////
c611d23b3d use usa proxy :3 2024-04-27 08:01:15 +00:00
Ashley ////
5b4b454f92 set to invidious proxy 2024-04-27 08:00:26 +00:00
Ashley ////
3cbdec493b lol 2024-04-26 18:50:10 +00:00
Ashley ////
7eea8c3cc0 use kuylars proxy for now 2024-04-26 18:40:53 +00:00
Ashley ////
81fcbe2be0 OOOPS SORRY 2024-04-26 18:34:23 +00:00
Ashley ////
1231ddb1b3 Update src/libpoketube/libpoketube-dislikes.js 2024-04-26 18:29:53 +00:00
Ashley ////
ffd18e8629 oops 2024-04-26 18:24:58 +00:00
Ashley ////
952c1f453c fix videoplayback 2024-04-26 18:23:10 +00:00
Ashley ////
49c03bf3c0 mhm 2024-04-26 15:50:27 +00:00
Ashley ////
35e06ef2e8 lets ee 2024-04-26 15:46:52 +00:00
Ashley ////
d445e462c5 fix videos :3 2024-04-26 15:42:06 +00:00
Ashley ////
23e742697a h 2024-04-25 18:37:22 +00:00
Ashley ////
38a624bd48 Update src/libpoketube/libpoketube-core.js 2024-04-25 18:20:06 +00:00
Ashley ////
b5e34674eb Update src/libpoketube/libpoketube-core.js 2024-04-25 18:15:11 +00:00
Ashley ////
1c6673f62e use config.invidapi instead 2024-04-25 18:05:45 +00:00
Ashley ////
fe86bf06ca do 2 2024-04-25 17:58:49 +00:00
Ashley ////
3270d2b5a0 mb 2024-04-25 17:53:54 +00:00
Ashley ////
b9992fc0df try this 2024-04-25 17:48:30 +00:00
Ashley ////
043406f0d5 lets see 2024-04-25 17:37:00 +00:00
Ashley ////
68d54e7ea1 do 2 2024-04-25 17:35:05 +00:00
Ashley ////
a4df679439 test commit ignore pls 2024-04-25 17:33:36 +00:00
Korbs
2b35a27252 Remove Vern's instance 2024-04-24 23:59:57 +00:00
Ashley ////
a68fcde7f9 test ignore 2024-04-24 15:44:33 +00:00
Ashley ////
61fb7ee345 lol 2024-04-24 14:20:08 +00:00
Ashley ////
6a83a1343e fix a issue :3 2024-04-23 19:53:28 +00:00
Ashley ////
32924854b6 mb 2024-04-23 15:36:36 +00:00
Ashley ////
d019ad69ed o7 2024-04-23 15:02:59 +00:00
Ashley ////
1f5a286195 mb lmao 2024-04-23 14:13:32 +00:00
Ashley ////
743229525a use invidious comments 2024-04-23 14:08:44 +00:00
Ashley ////
928a686cf5 bring back invidious comments 2024-04-23 14:06:02 +00:00
Ashley ////
614e38600b oops 2024-04-23 13:48:21 +00:00
Ashley ////
e54eb5c764 bunp undici 2024-04-23 13:44:57 +00:00
Ashley ////
38481ef63d test commit ignore pls 2024-04-23 10:48:11 +00:00
Ashley ////
6f660d5bff use the url instead 2024-04-23 10:27:33 +00:00
56 changed files with 2475 additions and 1302 deletions

View File

@@ -1,19 +1,19 @@
kind: pipeline
type: exec
name: Build and Push Docker Image (Quay)
name: Build and Push Docker Image
platform:
os: linux
arch: amd64
arch: arm64
steps:
- name: Build
environment:
QUAY_USERNAME:
from_secret: QUAY_USERNAME
QUAY_PASSWORD:
from_secret: QUAY_PASSWORD
CODEBERG_USERNAME:
from_secret: CODEBERG_USERNAME
CODEBERG_PASSWORD:
from_secret: CODEBERG_PASSWORD
commands:
- echo $QUAY_PASSWORD | docker login quay.io --username $QUAY_USERNAME --password-stdin
- docker build -t quay.io/sudovanilla/poketube .
- docker push quay.io/sudovanilla/poketube
- echo $CODEBERG_PASSWORD | docker login codeberg.org --username $CODEBERG_USERNAME --password-stdin
- docker build -t codeberg.org/korbs/poke:arm64 .
- docker push codeberg.org/korbs/poke:arm64

238
README.md
View File

@@ -1,159 +1,87 @@
<h1 align="center">
<a href="https://poketube.fun/watch?v=9sJUDx7iEJw&quality=medium&=sjohgteojgytrueugtye4jhtytjrjnyıı">
<img src="https://poketube.fun/css/logo-poke.svg" width="400">
<a href="http://www.defectivebydesign.org/drm-free">
<img src="https://static.fsf.org/dbd/label/DRM-free%20label%20120.en.png"
alt="DefectiveByDesign.org"
width="65" height="65" border="0" align="middle" /></a>
</a>
<p>The Ultimate Privacy App</p>
</h1>
<img src="https://poketube.fun/css/logo-poke.svg" width="400">
</a>
<a href="http://www.defectivebydesign.org/drm-free">
<img src="https://static.fsf.org/dbd/label/DRM-free%20label%20120.en.png"
alt="DRM Free" width="65" height="65" border="0" align="middle" />
</a>
<p>PRIVACY APP OF YOUR DREAMS! :3</p>
</h1>
<div align="center">
<span> Be Anonymous watching epic videos, searching thingys on the interwebs and listening to music on poke - the free privacy front end!</span>
<span>"Since you work on poke, Are you in touch with its lead developer "Jose marchasi"? <br>
-RMS
Stallman though poke was GNU poke lmaoooo
</span>
</div>
<div align="center">
[Welcome!](#welcome)&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;[Features](#features)&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;[No non-free codec needed](#no-non-free-codec-needed-3)&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;[Hosting Poke~](#hosting-poketube)&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;[Poke community!](#poketube-community)&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;[The Legal Stuff (boring tbh)](#the-legal-stuff-boring-tbh)
<a href="https://status.poketube.fun" target="_blank">
<img
width="170"
src="https://api.netweak.com/status-badges/K2LY9"
alt="Netweak status badge"
/>
</a><br>
<a href="https://tosdr.org/en/service/7114">
<img src="https://shields.tosdr.org/en_7114.svg"/>
</a>
<img src="https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg"> <a href="./LICENSE"><img src="https://img.shields.io/badge/License-GPL--3-FF6666" alt="License - GPL-3"></a>
<a href="https://ci.poketube.fun/ashley/poke">
<img src="https://ci.poketube.fun/api/badges/ashley/poke/status.svg" />
</a>
<p>Be anonymous while watching (cat falling) videos, searching the web, and listening to music on Poke - the free privacy front-end!</p>
</div>
<div align="center">
<a href="#welcome">Welcome!</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#features">Features</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#no-non-free-codec-needed">No Non-Free Codec</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#hosting-poke">Hosting</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#poke-community">Community</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#legal">Legal</a>
<br><br>
<a href="https://status.poketube.fun" target="_blank">
<img width="170" src="https://api.netweak.com/status-badges/K2LY9" alt="Status Badge"/>
</a>
<img src="https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg" alt="Stand with Ukraine">
<a href="./LICENSE">
<img src="https://img.shields.io/badge/License-GPL--3-FF6666" alt="GPL-3 License">
</a>
</div>
![Preview](./css/README_Preview.png)
## Welcome!
This is the source code of Poke (formerly PokeTube), the privacy-friendly youtube front-end built with the InnerTube API!
Welcome to Poke (formerly PokeTube), the privacy-friendly YouTube front-end built with the InnerTube API! Imagine paying for YouTube Premium just to download videos - couldn't be us (literally).
## Features
| <img width="100%" style="border-radius: 24px" src="./css/README_RYD.png"> | <div style="text-align: left"><h3>🔙 Built-In Return YouTube Dislikes</h3>See the dislikes from *returnyoutubedislike* - because sometimes you need to know how bad that video really is :3</div> |
| - | - |
| <div style="text-align: right"><h3>📱 PWA Support</h3>With PWA Support, you can install Poke on your mobile device. Now you can pretend to be productive while watching cat videos on the go, mreoww! :3</div> | <img width="100%" style="border-radius: 24px" src="./css/README_PWA.jpg"> |
| <h3>🎨 Customize</h3>Customize Poke however you want. Make it as unique as your taste in memes. | <h3>📥 Accounts</h3>Suscribe (yes Suscribe hehe sussy baka) to whaever channel you want! </div> |
| <h3>🔍 Web Search</h3>Search the web privately on PokeTube. Incognito mode who? | <h3>🎶 And...</h3>Ambient mode, HQ audio, and even more! :3 |
## No Non-Free Codec Needed
Poke uses OpenH264, which is free software! No non-free components included :3 View the source code of OpenH264 [here](https://github.com/cisco/openh264.git). Because who wants to deal with non-free stuff? Not us!~
## Hosting Poke
### NodeJS
1. **Install Packages**
- Fedora/RHEL: `$ sudo dnf install git make gcc libcurl nodejs python libcurl4 g++`
- Debian/Ubuntu: `$ sudo apt install git make gcc libcurl4-openssl-dev nodejs npm python g++`
2. **Clone Repo**
- Codeberg: `$ git clone https://codeberg.org/ashley/poke.git`
- GitHub: `$ git clone https://github.com/ashley0143/poke.git`
3. **Install Dependencies**
- `$ cd poke`
- `$ npm install`
4. **Start Server**
- `$ node server.js`
Congrats! PokeTube should now be running on `localhost:6003`! 🎉
### Docker
1. **Create Directory**
- `$ mkdir poketube && cd poketube`
2. **Download Config**
- `$ curl -O https://codeberg.org/Ashley/poke/raw/branch/main/docker-compose.yml`
3. **Run PokeTube**
- `$ docker compose up -d`
Congrats! PokeTube should now be running on `localhost:6003`! 🎉
## Poke Community
Join us on [Revolt](https://rvlt.gg/poketube) or [Matrix](https://matrix.to/#/#poke:vern.cc)! I promise we're cool! <3
<h1>Features</h1>
<h3>Return Youtube Dislikes Built-in </h3>
<img src="https://autumn.revolt.chat/attachments/0JlGwlnJdMcQwc6qzoo2qpmMAOWbrYMZ9vDX50l80r/resim.png">
<p>See the dislikes from returnyoutubedislike!</p>
<h3>Customize</h3>
Customize Poketube However you want :3
<h3>PWA</h3>
Install PokeTube as a pwa on your mobile device :3
<h3>Accounts </h3>
Suscribe (yes Suscribe hehe sussy baka) to whaever channel you want!
<h3>Web Search </h3>
Search the web privatly on poketube :3
<br>
<h3>And... </h3>
<p>
Ambient mode, HQ audio And Even more!!!!!
</p>
## Written by humans - not gpt
poke is made by hard-working hoomans - not gpt :3<br>
<a href="https://notbyai.fyi"><img src="https://cdn.glitch.global/d68d17bb-f2c0-4bc3-993f-50902734f652/Written-By-Human-Not-By-AI-Badge-white.svg?v=1696672202901" alt="Written by Humanss, Not by AI"></a>
## No Non-free codec needed :3
Poke uses openh264 which is free software! poketube does not inculude non free stuff owowowoow!!!!
you can view the source code of the openh264 codec in this repo :3 --> https://github.com/cisco/openh264.git
PLEASE NOTE THAT THIS SOFTWARE MAY INCULUDE CODECS THAT IN CERTAIN COUNTRIES MAY BE COVERED BY PATENTS OR HAVE LEGAL ISSUES. PATENT AND COPYRIGHT LAWS OPERATE DIFFERENTLY DEPENDING ON WHICH COUNTRY YOU ARE IN. PLEASE OBTAIN LEGAL ADVICE IF YOU ARE UNSURE WHETHER A PARTICULAR PATENT OR RESTRICTION APPLIES TO A CODEC YOU WISH TO USE IN YOUR COUNTRY.
## Hosting Poke~
### IMPORTANT
Before you host, if ur server is in usa, set the proxylocation to `USA` (which is the default) - if you use any eu server set it to `EU` instead to make videos load faster
### With NodeJS
- To self host your own Poke instance, you'll need the following:
- [Node.js](https://nodejs.org/en/download/)
- [npm](http://npmjs.com) (Included with Node.js)
Once you have everything, clone our repo:
```
git clone https://codeberg.org/ashley/poke.git
```
You can also clone using our Github mirror if you'd prefer:
```
git clone https://github.com/ashley0143/poke.git
```
Or you can use our forgejo instance:
```
git clone https://git.poketube.fun/ashley/poke.git
```
Now, install the needed dependencies within the Poke folder:
( go to the folder by running cd poke)
```
npm install
```
Once everythings installed, start your server with the following command:
```
node server.js
```
Congrats, Poketube should now be running on `localhost:6003`!
### With Docker
Create a new directory for PokeTube:
```
mkdir poketube && cd poketube
```
Download the docker compose and config file:
```
curl -O https://codeberg.org/Ashley/poke/raw/branch/main/docker-compose.yml
```
Run PokeTube:
```
docker compose up -d
```
PokeTube should be running on `http://localhost:6003`.
The port can be changed with the config file you downloaded, just change the `server_port` option.
## Hosting Image Proxy
see [here](https://codeberg.org/Ashley/poke/src/branch/main/january) :3
just uhh change the url in config.json to ur image proxy
## Poke community!
Join the community on [revolt](https://rvlt.gg/poketube) or [matrix](https://matrix.to/#/#poke:vern.cc) :3
## The Legal Stuff (boring tbh)
the main parts of the project is Under GPL-3.0-OR-LATER :3
@@ -161,18 +89,22 @@ the main parts of the project is Under GPL-3.0-OR-LATER :3
see the each sections LICENSE tho!!
Copyleft 2021-202x Poke Project
[Code Of conduct](https://codeberg.org/Ashley/poke/src/branch/main/CODE_OF_CONDUCT.md)
[Privacy Policy](https://poketube.fun/privacy)
TL;DR: we dont collect or share your personal info, that's it lol.
We additionally use the GNU Coding Standard, see [this link.](https://www.gnu.org/prep/standards)
We use the GNU Coding Standard Thingy, see [this link.](https://www.gnu.org/prep/standards)
<div>
<h3>some parts of poketube.fun is proudly hosted on glitch.com since <i>2020</i> </h3>
<a href="https://glitch.com/"><img src="https://cdn.glitch.global/d68d17bb-f2c0-4bc3-993f-50902734f652/glitch-fastly-lock-up.svg?v=1696671148266"></a><br><hr>
<a href="https://gnu.org/not-open-source"><img width="200" src="https://autumn.revolt.chat/attachments/eNpfwV2C1_wudONe43YCvWr-4vbvLpG78HbuXgOYfO"></a>
<div align="center">
<p>Parts of Poke are hosted on Glitch.com since <i>2020</i>.</p>
<a href="https://glitch.com/">
<img src="https://cdn.glitch.global/d68d17bb-f2c0-4bc3-993f-50902734f652/glitch-fastly-lock-up.svg">
</a>
<br><hr>
<a href="https://gnu.org/not-open-source">
<img width="200" src="https://autumn.revolt.chat/attachments/eNpfwV2C1_wudONe43YCvWr-4vbvLpG78HbuXgOYfO">
</a>
</div>

25
ascii_txt.txt Normal file
View File

@@ -0,0 +1,25 @@
_____ _______ _____ _____
/\ \ /::\ \ /\ \ /\ \
/::\ \ /::::\ \ /::\____\ /::\ \
/::::\ \ /::::::\ \ /:::/ / /::::\ \
/::::::\ \ /::::::::\ \ /:::/ / /::::::\ \
/:::/\:::\ \ /:::/~~\:::\ \ /:::/ / /:::/\:::\ \
/:::/__\:::\ \ /:::/ \:::\ \ /:::/____/ /:::/__\:::\ \
/::::\ \:::\ \ /:::/ / \:::\ \ /::::\ \ /::::\ \:::\ \
/::::::\ \:::\ \ /:::/____/ \:::\____\ /::::::\____\________ /::::::\ \:::\ \
/:::/\:::\ \:::\____\ |:::| | |:::| | /:::/\:::::::::::\ \ /:::/\:::\ \:::\ \
/:::/ \:::\ \:::| ||:::|____| |:::| |/:::/ |:::::::::::\____\/:::/__\:::\ \:::\____\
\::/ \:::\ /:::|____| \:::\ \ /:::/ / \::/ |::|~~~|~~~~~ \:::\ \:::\ \::/ /
\/_____/\:::\/:::/ / \:::\ \ /:::/ / \/____|::| | \:::\ \:::\ \/____/
\::::::/ / \:::\ /:::/ / |::| | \:::\ \:::\ \
\::::/ / \:::\__/:::/ / |::| | \:::\ \:::\____\
\::/____/ \::::::::/ / |::| | \:::\ \::/ /
~~ \::::::/ / |::| | \:::\ \/____/
\::::/ / |::| | \:::\ \
\::/____/ \::| | \:::\____\
~~ \:| | \::/ /
\|___| \/____/

View File

@@ -1,6 +1,6 @@
{
"tubeApi": "https://inner-api.poketube.fun/api/",
"invapi": "https://invid-api.poketube.fun/api/v1",
"invapi": "https://invid-api.poketube.fun/bHj665PpYhUdPWuKPfZuQGoX/api/v1",
"dislikes": "https://returnyoutubedislikeapi.com/votes?videoId=",
"invchannel": "https://invid-api.poketube.fun/api/v1",
"p_url":"https://p.poketube.fun",

BIN
css/Poke-Mobile.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 670 KiB

BIN
css/README_PWA.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

BIN
css/README_Preview.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1000 KiB

BIN
css/README_RYD.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 KiB

View File

@@ -82,6 +82,14 @@ document.addEventListener('DOMContentLoaded', function() {
window.addEventListener('resize', lazyLoadBg);
});
const htmlContent = `<!DOCTYPE html><html><head><title>Browser is not supported :p</title><style>body{margin-left:auto;margin-right:auto;display:flex;max-width:43em;font-family:sans-serif;background-color:white;}</style></head><body><h1>Heyo :3</h1><br><p style="margin-top:4em;margin-left:-7.4em;">hoi - poke does and <b>will not work</b> on Internet Explorer :p<br>if u wanna use poke try using Firefox (firefox.com) or Chromium :3<br>love u :3</p></body></html>`;
if (/MSIE \d|Trident.*rv:/.test(navigator.userAgent)) {
document.open();
document.write(htmlContent);
document.close();
}
// Fade in elements on scroll or fullscreen change
function fadeInElements() {
const elements = document.querySelectorAll('.fade-in');
@@ -361,9 +369,11 @@ video.addEventListener("contextmenu", function(event) {
});
speedOption.addEventListener("click", function() {
var currentSpeed = video.playbackRate;
var newSpeed = getNextSpeed(currentSpeed);
video.playbackRate = newSpeed;
document.getElementById("aud").playbackRate = newSpeed;
speedOption.innerHTML = "<i class='fa-light fa-gauge'></i> Speed: " + newSpeed.toFixed(2) + "x";
});

Binary file not shown.

Binary file not shown.

View File

@@ -719,76 +719,12 @@ li > a {cursor: var(--pointer-cursor)}
.btn {cursor: var(--pointer-cursor) !important}
@font-face {
font-family: "PokeTube Flex";
src: url("https://p.poketube.fun/https://cdn.glitch.global/43b6691a-c8db-41d4-921c-8cf6aa0d9108/robotoflex.ttf?v=16683434286881");
font-family: "PokeTube Flex";
font-style: normal;
font-stretch: 1% 800%;
font-display: swap;
}
blockquote {
background: #f2dda8;
margin: 0;
padding: 6px 12px;
border-radius: 4px;
color: #000;
position: sticky;
top: 12px;
z-index: 5;
}
.header-content {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
height: 100px;
}
.header-content-start img {
width: 140px;
}
.header-content-end a {
color: #fff;
padding: 10px 12px;
border-radius: 50px;
}
.header-content-end a:hover {
background: #ffffff2e;
}
#fname {
background: #331a22;
border: 2px #612153 solid;
padding: 8px 16px;
border-radius: 24px;
color: #fff;
margin-right: 6px;
}
#fname:focus {
outline: 0;
}
button[type="submit"] {
color: #fff;
background: #331a22;
border: 2px #612153 solid;
border-radius: 24px;
padding: 8px 10px;
cursor: var(--pointer-cursor);
}
button[type="submit"]:hover {
background: #ffffff2e;
}
.footer {
border-top: 1px #ffffff1f solid;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
height: 100px;
margin-top: auto;
}
.footer a {
color: #fff;
margin-left: 12px;
text-decoration: none;
}
@media only screen and (max-width: 1328px) {
body {
padding: 0 48px !important;
@@ -823,20 +759,20 @@ button[type="submit"]:hover {
}
}
.landing {
text-align: center;
margin: auto;
position: relative;
margin-top: 240px;
max-width: 1200px;
}
.landing h1 {
font-size: xxx-large;
font-family: "PokeTube flex";
font-stretch: ultra-expanded;
font-weight: 1000;
text-align: center;
}
.landing img {
width: 100%;
margin-top: 48px;
height: 700px;
height: 503px;
object-fit: cover;
object-position: top;
mask-image: linear-gradient(#5315ff,#0000);
@@ -854,7 +790,6 @@ button[type="submit"]:hover {
}
.features {
display: flex;
justify-content: center;
}
.features p {
border-radius: 48px;
@@ -870,6 +805,53 @@ button[type="submit"]:hover {
border-radius: 24px;
margin: -10px 10px -10px -24px;
}
img[src="/static/poke-chan-outfit-a.png"] {
height: 400px;
width: 369px;
mask-image: none;
z-index: 5;
transform: scaleX(1);
float: right;
display: flex;
position: absolute;
right: 10px;
margin: -237px -60px 0px 0px;
}
.new-feature-set {
display: grid;
margin: 54px 0px 24px 0px;
max-width: 1200px;
grid-template-columns: repeat(auto-fit,minmax(350px,1fr));
text-align: left;
}
.feature-set {
padding: 32px;
}
.feature-set p {
text-align: left;
}
.feature-set svg {
width: 32px;
height: 32px;
border-radius: 5rem;
padding: 6px;
}
.feature-set-title {
display: flex;
align-items: center;
gap: 12px;
justify-content: left;
}
.feature-set-title h2 {
font-family: "PokeTube flex";
font-stretch: ultra-expanded;
font-weight: 1000;
margin: 0px;
}
@media only screen and (max-width: 1420px) {
.landing {
width: calc(100% - 24px);
@@ -911,3 +893,12 @@ video {
display: none;
}
}
.adaptive-grid {
display: grid;
grid-template-columns: repeat(auto-fit,minmax(350px,1fr));
max-width: 1200px;
margin: auto;
grid-gap: 12px;
}

33
css/maps.js Normal file
View File

@@ -0,0 +1,33 @@
var bbox = "?bbox=-165.76171875000003%2C-3.864254615721396%2C30.410156250000004%2C72.44879155730672&amp;layer=mapnik"
var iframe = document.getElementById('myFrame');
iframe.src=`https://www.openstreetmap.org/export/embed.html${bbox}`
iframe.addEventListener('load', function() {
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
var links = iframeDocument.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
links[i].addEventListener('click', function(event) {
var url = event.target.href;
if (url.includes('www.openstreetmap.org')) {
event.preventDefault();
iframe.src = url;
window.history.pushState(null, '', url);
} else {
window.location.href = url;
}
});
}
});
window.onpopstate = function(event) {
iframe.src = window.location.href;
};
iframe.addEventListener('load', function() {
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
var elements = iframeDocument.querySelectorAll('[style*="//dka575ofm4ao0.cloudfront.net"]');
for (var i = 0; i < elements.length; i++) {
var style = elements[i].style.backgroundImage;
var newStyle = style.replace('//dka575ofm4ao0.cloudfront.net', 'https://p.poketube.fun/https://dka575ofm4ao0.cloudfront.net');
elements[i].style.backgroundImage = newStyle;
}
});

BIN
css/poke-chan-v2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
css/poke-screnshot-v2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1020 KiB

View File

@@ -573,7 +573,8 @@ a.avatar {
border-radius: 8px;
font-family: "Montserrat", sans-serif;
box-shadow: var(--border-color) 0 0 5px;
background-color: var(--context-menu-background);
background-color: #222022d6;
backdrop-filter: blur(20px);
}
.dropdown__item {
@@ -731,30 +732,30 @@ a.new-button:hover {
display: none;
}
.v:checked ~ .div_box {
display: flex;
margin-top: -51em;
text-align: left;
background: #0009;
border-radius: 10px;
height: fit-content;
padding: 10px;
font-family: "ubuntu", sans-serif;
margin-left: -11em;
width: 43em;
position: absolute;
white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: pre-wrap; /* css-3 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
white-space: -webkit-pre-wrap; /* Newer versions of Chrome/Safari*/
word-break: break-all;
white-space: normal;
height: -moz-fit-content;
height: -webkit-fit-content;
max-width: 708px;
max-height: 185.6px;
.v:checked~.div_box {
display:flex;
margin-top:-51em;
text-align:left;
background:#0009;
border-radius:10px;
height:fit-content;
padding:10px;
font-family:ubuntu,sans-serif;
width:43em;
position:absolute;
white-space:-moz-pre-wrap!important;
white-space:-pre-wrap;
white-space:-o-pre-wrap;
white-space:pre-wrap;
word-wrap:break-word;
white-space:-webkit-pre-wrap;
word-break:break-all;
white-space:normal;
height:-moz-fit-content;
height:-webkit-fit-content;
max-width:708px;
max-height:185.6px;
margin-right: 13em;
}
@media screen and (min-width: 1400px) {
@@ -783,6 +784,23 @@ a.new-button:hover {
display: none;
}
.pwp {
display: flex;
align-items: center;
justify-content: end;
gap: 6px;
padding: 16px 0px;
}
.pwp a, .fnt {
background: #452f37;
border-radius: 6px;
display: flex;
align-items: center;
gap: 12px;
padding: 6px 12px;
color: white;
}
.hj:checked ~ .flying_cmnt {
display: grid;
position: absolute;
@@ -813,8 +831,14 @@ marquee {
display:none;
}
@media screen and (max-height: 840px) {
.theatermodeon {
max-height: 10% !important;
}
}
#video:target {
object-fit:none;
object-fit:contain;
}
#secret-theme:target{

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.4 MiB

BIN
css/red-tape.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

View File

@@ -1035,3 +1035,10 @@ a.icon-button > img {
width: 500px;
padding: 8px;
}
.search-options {
display: flex;
justify-content: space-evenly;
width: 100%;
max-width: 855px;
margin: auto;
}

View File

@@ -1,7 +1,8 @@
# To run, please do either docker compose up -d (for docker's own version) or docker-compose up -d (for your OSes package managers verison)
services:
poketube:
image: quay.io/sudovanilla/poketube
poke:
image: codeberg.org/poketube/poke:amd64
# image: codeberg.org/poketube/poke:arm64 # Works with ARM64/v8, not ARM64/v7
restart: unless-stopped
volumes:
- ./config.json:/poketube/config.json

View File

@@ -1,4 +1,4 @@
<%- include('error.ejs', {
error: "404",
description: "Very 1984 Innit? I dont think this webpage exist :p"
<%- include('./layouts/error.ejs', {
error: "404 ER_ROR",
description: "you are in violation. thEy mustn't know you were here. no one should ever find out About this. you can never tell anyone about thiS -- for The sake of the others' survIval, you muSt keep this silent. we mUst keeP silent. no one can know. no one can know. no o ne c an kn ow_ (Violation Code. 15398642_14)"
}) %>

View File

@@ -1,4 +1,4 @@
<%- include('error.ejs', {
<%- include('./layouts/error.ejs', {
error: "502",
description: "An error has occurred. Try again or come back later."
}) %>

View File

@@ -63,10 +63,10 @@ var apiurl = "https://poketube.fun/api"
if(!localStorage.getItem("UserID")) {
localStorage.setItem('UserID', `<%- userid %>`);
<% db.set(`user.${userid}`, userid) %>
location.href = "/my-acc?ID=" + `<%- userid %>`
location.href = "/my-acc?ID=" + `<%- userid %>` + "&rparam=1"
}
if(localStorage.getItem("UserID")) {
location.href = "/my-acc?ID=" + localStorage.getItem("UserID")
location.href = "/my-acc?ID=" + localStorage.getItem("UserID") + "&rparam=1"
}
</script>

View File

@@ -24,19 +24,16 @@
<% if (ID === "UCFAiFyGs6oDiF1Nf-rRJpZA") { %>
<title>Technoblade Never Dies! - PokeTube</title>
<% } %>
<title><%=j.Channel?.Metadata.Name%> - PokeTube</title>
<title><%=j.Channel?.Metadata.Name%> - Poke</title>
<link rel="manifest" href="/manifest.json">
<link href="css/yt-ukraine.svg" rel=icon>
<meta content=website property=og:type>
<link rel="alternate" type="application/rss+xml" href="/feeds/videos.xml?channel_id=<%=ID%>">
<meta content="<%=j.Channel?.Metadata.Name%> - PokeTube" property=og:title>
<meta content="<%=j.Channel?.Metadata.Name%> - Poke" property=og:title>
<meta content="<%- cinv.description %>" property=twitter:description>
<meta name="darkreader-lock"> <!-- tells dark reader that the site has a dark theme and to turn itself off -->
<% if (j.Channel?.Metadata.Banners.Thumbnail) { %>
<meta content="<%=j.Channel?.Metadata?.Banners.Thumbnail[2].$t%>" property=og:image>
<% } %>
<meta content=summary_large_image name=twitter:card>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta content="<%=j.Channel?.Metadata.Avatars.Thumbnail?.$t%>" property=og:image>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
* {
color:#fff
@@ -198,6 +195,22 @@ padding-bottom: 32px;
<!-- STYLES START -->
<style>
.tags-channel {
display:flex;
flex-direction:row;
overflow-x:auto;
column-gap:3px
}
.tag-channel {
background:#333;
padding:5px;
border-radius:4px;
word-break:break-all;
white-space:nowrap;
font-family:Montserrat,sans-serif
}
a.class:hover {
text-decoration:underline;
font-weight:bold
@@ -561,7 +574,7 @@ color:#ea9999 !important;
<div class="search" style="margin-right: 5em;">
<form action="/search">
<input class="search-bar" autocomplete="on" id="fname" name="query" placeholder="" style="color:#fff;font-family:Inter,sans-serif;border-radius: 8px;" data-ddg-inputtype="identities.firstName">
<input class="search-bar" autocomplete="on" id="fname" name="query" value="channel:<%=ID%>" style="color:#fff;font-family:Inter,sans-serif;border-radius: 8px;" data-ddg-inputtype="identities.firstName">
<button class="btn btn-success" type="submit"><i class="fa-light fa-search"></i></button>
@@ -632,7 +645,7 @@ height: 100%;
</style>
<img class="banned-user" src="<%- media_proxy_url %>/proxy?url=https://yt3.googleusercontent.com/a/default-user=s100-c-k-c0x00ffffff-no-rj">
<p class="ban-reason"> <%- cinv.error %> - literally 1984 lmao</p>
<p class="ban-reason"> <%- cinv.error %> </p>
<% } %>
@@ -646,20 +659,20 @@ height: 100%;
<% if (!isMobile) { %>
<div class="channel-info-container" style="text-align: center;">
<% if (j?.Channel?.Metadata?.Banners.Thumbnail) { %>
<% let thumbnailFound = false; %>
<% for (let i = 5; i >= 1; i--) { %>
<% if (j.Channel.Metadata.Banners.Thumbnail[i]?.['$t']) { %>
<img src="<%- media_proxy_url %>/proxy?url=<%= j.Channel.Metadata.Banners.Thumbnail[i].$t %>" style="height: 30em; object-fit: cover; pointer-events: none;" id="thumbnail_version_<%= i %>">
<% thumbnailFound = true; %>
<% if (cinv?.authorBanners) { %>
<% let bannerFound = false; %>
<% for (let i = 0; i < cinv.authorBanners.length; i++) { %>
<% if (cinv.authorBanners[i]?.url) { %>
<img src="<%- media_proxy_url %>/proxy?url=<%= cinv.authorBanners[i].url %>" style="height: 30em; object-fit: cover; pointer-events: none;" id="banner_version_<%= i %>">
<% bannerFound = true; %>
<% break; %>
<% } %>
<% } %>
<% if (!thumbnailFound) { %>
<img src="/static/shapes-dark.png" style="height: 30em; object-fit: cover; pointer-events: none;" id="default_thumbnail">
<% if (!bannerFound) { %>
<img src="/static/shapes-dark.png" style="height: 30em; object-fit: cover; pointer-events: none;" id="default_banner">
<% } %>
<% } else { %>
<img src="/static/shapes-dark.png" style="height: 30em; object-fit: cover; pointer-events: none;" id="default_thumbnail">
<img src="/static/shapes-dark.png" style="height: 30em; object-fit: cover; pointer-events: none;" id="default_banner">
<% } %>
@@ -685,7 +698,7 @@ height: 100%;
<div class="name" style="background: #333;border-radius: 12px;padding: 17px;height: 7em;margin-left: 4em;margin-top: 7px;gap: 3px;">
<p style="font-family:PokeTube Flex,sans-serif;font-weight:1000;font-stretch: ultra-expanded;margin-top: 16px;margin-bottom: 15px;"><%=j.Channel?.Metadata.Name%>
<% if (cinv?.authorVerified) { %>
<% if (firstVideo?.authorVerified) { %>
<span style="padding: 1px;padding-top: 2.5px !important;display: inline-flex;border-radius: 3px;">
@@ -695,7 +708,7 @@ height: 100%;
<% } %>
<span style="font-size: 10px;color: gray;">@<%- cinv.authorId %>@youtube.com</span>
</p>
<p style="margin-bottom: -17px;" class="subs"><%=subs%> subscribers - <%- pronoun %></p>
<p style="margin-bottom: -17px;" class="subs"><%= subs %> subscribers - <%- pronoun %></p>
<p style="padding:0;font-weight:bold;max-inline-size: 37em;display: -webkit-box;-webkit-line-clamp: 3;-webkit-box-orient: vertical;">
@@ -880,8 +893,15 @@ white-space: nowrap;text-decoration: none;" href="/feeds/videos.xml?channel_id=<
<% } %>
<% if (tab === "shorts") { %>
<% if (Array?.isArray(tj?.videos)) { %>
<% if (tj?.videos[0]) { %>
<% if (turntomins(tj?.videos[0]?.lengthSeconds) != "aN:aN" ) { %>
<a href="/channel?id=<%=ID%>" class="tab" style="color:#cfe2f3;">Videos</a>
<% } %>
<% } %>
<% } %>
<% if (Array?.isArray(shorts?.videos)) { %>
<a href="/channel?id=<%=ID%>&tab=shorts" class="tab active shr">Shorts</a>
@@ -980,7 +1000,7 @@ width: fit-content;
<div class="name">
<p style="font-family:PokeTube Flex,sans-serif;font-weight:1000;font-stretch: ultra-expanded;white-space:yes;"> <%=j.Channel?.Metadata.Name%> </p>
<p style="margin: -9px;">
<%=subs%> subscribers - <%- pronoun %>
<%= subs %> subscribers - <%- pronoun %>
</p>
</div>
@@ -1224,13 +1244,16 @@ width: fit-content;
<div class="video-grid" >
<% if (!Array.isArray( tj?.videos)) { %>
<p> No content on this channel :c <% if (Array?.isArray( shorts.videos)) { %> try <a href="/channel?id=<%=ID%>&tab=shorts"> Try Looking at shorts maybe lol :p</a> </p>
<% } %>
<% } %>
<% if (Array.isArray( tj?.videos)) { %>
<% tj.videos.forEach (x => { %>
<a href="/watch?v=<%- x.videoId %>" class="video">
<div class="thumbnail" style="background-image: url('<%- media_proxy_url %>/proxy?url=https://vid.puffyan.us/vi/<%= x.videoId %>/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBy_x4UUHLNDZtJtH0PXeQGoRFTgw');border-radius: 10px;"><span class="video-length"><%- turntomins(x.lengthSeconds) %></span></div>
<div class="thumbnail" style="background-image: url('<%- media_proxy_url %>/proxy?url=https://i.ytimg.com/vi/<%= x.videoId %>/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBy_x4UUHLNDZtJtH0PXeQGoRFTgw');border-radius: 10px;"><span class="video-length"><%- turntomins(x.lengthSeconds) %></span></div>
<div class="info">
<span class="title max-lines-2" style="font-family:PokeTube flex,sans-serif;font-weight: 1000;font-stretch: ultra-expanded;"><%- x.title %></span>
@@ -1244,12 +1267,33 @@ width: fit-content;
</div>
<% if (tj?.continuation) { %>
<div class="pagination-buttons" style="border-top: none;justify-content: center">
<a style="color:#fff" href="/channel?id=<%=ID%>&continuation=<%=tj.continuation%>">Next Page</a>
</div>
<% if (!isMobile) { %>
<script>
window.addEventListener('scroll', function() {
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
var currentUrl = new URL(window.location.href);
var params = new URLSearchParams(currentUrl.search);
var continuationValue = '<%=tj.continuation%>';
if (params.has('continuation')) {
params.set('continuation', continuationValue);
} else {
params.append('continuation', continuationValue);
}
currentUrl.search = params.toString();
window.location.href = currentUrl.toString();
}
});
</script> <% } %>
<% } %>
@@ -1286,7 +1330,7 @@ width: fit-content;
<% if (Array?.isArray( shorts.videos)) { %>
<% shorts.videos.forEach (x => { %>
<a href="/shorts/<%- x.videoId %>" class="shorts-video" >
<img load="lazy" onerror="this.src=`<%- media_proxy_url %>/proxy?url=https://vid.puffyan.us/vi/<%= x.videoId %>/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBy_x4UUHLNDZtJtH0PXeQGoRFTgw`" src='<%- media_proxy_url %>/proxy?url=https://vid.puffyan.us/vi/<%= x.videoId %>/maxresdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBy_x4UUHLNDZtJtH0PXeQGoRFTgw'>
<img load="lazy" onerror="this.src=`<%- media_proxy_url %>/proxy?url=https://i.ytimg.com/vi/<%= x.videoId %>/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBy_x4UUHLNDZtJtH0PXeQGoRFTgw`" src='<%- media_proxy_url %>/proxy?url=https://i.ytimg.com/vi/<%= x.videoId %>/maxresdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBy_x4UUHLNDZtJtH0PXeQGoRFTgw'>
<span class="shorts-title"><%- x.title %></span>
</a>
<% }) %>
@@ -1387,7 +1431,7 @@ width: fit-content;
<% stream.videos.forEach (x => { %>
<a href="/watch?v=<%- x.videoId %>" class="video">
<div class="thumbnail" style="background-image: url('<%- media_proxy_url %>/proxy?url=https://vid.puffyan.us/vi/<%= x.videoId %>/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBy_x4UUHLNDZtJtH0PXeQGoRFTgw');border-radius: 10px;"><span class="video-length"><%- turntomins(x.lengthSeconds) %></span></div>
<div class="thumbnail" style="background-image: url('<%- media_proxy_url %>/proxy?url=https://i.ytimg.com/vi/<%= x.videoId %>/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBy_x4UUHLNDZtJtH0PXeQGoRFTgw');border-radius: 10px;"><span class="video-length"><%- turntomins(x.lengthSeconds) %></span></div>
<div class="info">
<span class="title max-lines-2" style="font-family:PokeTube flex,sans-serif;font-weight: 1000;font-stretch: ultra-expanded;"><%- x.title %></span>
@@ -1497,7 +1541,7 @@ width: fit-content;
<video class="player" style="border-radius: 16px;
" controls
poster="<%- media_proxy_url %>/proxy?url=https://vid.puffyan.us/vi/<%=x.attachment.videoId%>/maxresdefault.jpg?v=607ddcd4">
poster="<%- media_proxy_url %>/proxy?url=https://i.ytimg.com/vi/<%=x.attachment.videoId%>/maxresdefault.jpg?v=607ddcd4">
<source src="https://tube.kuylar.dev/proxy/media/<%=x.attachment.videoId%>/22" type="video/mp4; codecs=&quot;avc1.64001F, mp4a.40.2&quot;" label="hd720" selected="false">
@@ -1568,13 +1612,26 @@ width: fit-content;
<div onclick="closePopup()" id="popup-container">
<div id="close-btn" onclick="closePopup()">X</div>
<div class="video-title" style=";font-stretch: extra-expanded;margin-top: 10px;margin-bottom: -10px;padding: 10px;border-top-left-radius: 11px;border-top-right-radius: 11px;font-family: &quot;poketube flex&quot; , sans-serif;font-weight: 850;text-align: left;">About</div>
<% if (cinv.descriptionHtml) { %>
<p style="color:#fff;margin-left: 10px;font-weight: bold;text-align: left;"><%-cinv.descriptionHtml%></p>
<% if (Array.isArray(cinv?.tags)) { %>
<div class="video-title" style=";font-stretch: extra-expanded;margin-top: 10px;margin-bottom: -10px;padding: 10px;border-top-left-radius: 11px;border-top-right-radius: 11px;font-family: &quot;poketube flex&quot; , sans-serif;font-weight: 1000;text-align: left;">Tags</div>
<div class="tags-channel" style="padding: 10px;background: #272727;margin-top: 10px;border-radius: 11px;">
<br>
<% cinv.tags.forEach(x => { %>
<div class="tag-channel">
<a href="/hashtag/<%=x %>" style="color:var(--text-color)">
<%=x %>
</a>
</div> <% }) %>
<% } %>
</div>
<% } %>
<% } %>
<% } %>
@@ -1649,6 +1706,12 @@ document.getElementById('search').addEventListener('keyup', function () {
event.preventDefault();
togglePopup();
});
document.addEventListener('keydown', function (event) {
if (event.key === 'Escape' && isPopupOpen) {
closePopup();
}
});
// @license-end
</script>

View File

@@ -327,7 +327,9 @@ margin-left: auto;
background: var(--not-quite-black);
text-decoration: none;
border-radius: 1em;
} </style>
}
</style>
<style>
@@ -413,12 +415,10 @@ border:solid;
<div class="channel-page" >
<audio id="audio" style="display:none;" loop autoplay></audio>
<img src="https://t.poketube.fun/t/rep.gif" style="width: 0;visibility: hidden;display:none;" id="discover_main">
<h1 style="font-size: 2em;margin-left: auto;margin-right: auto;text-align: center;font-family: poketube flex;font-weight: 1000;font-stretch: ultra-expanded;color: #fff;margin-bottom: 7px;margin-top: 31px;">
Discover Popular videos on poketube!
</h1>
Popular Videos On Poke :3 </h1>
<% if (!tab) { %>
<div class="tabs tabs-center">
@@ -492,9 +492,9 @@ Discover Popular videos on poketube!
<div class="video-grid" style="border-radius:12px">
<div class="video-grid" style="border-top-left-radius:2em;width: 80em;border-top-right-radius: 2em;border: solid 1px purple;">
<% inv.forEach(x => { %>
<a href="/watch?v=<%- x.videoId %>" class="video">
<a href="/watch?v=<%- x.videoId %>" class="video canloadhd" data-author="<%- x.author %>" >
<div class="thumbnail" style="background-image: url('/vi/<%= x.videoId %>/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBy_x4UUHLNDZtJtH0PXeQGoRFTgw');border-radius: 10px;"><span class="video-length"><%- turntomins(x.lengthSeconds) %></span></div>
<div class="info">
<span class="title max-lines-2" title="<%- x.title %>" style="font-family:Inter,sans-serif;"><%- x.title %></span>
@@ -506,7 +506,7 @@ Discover Popular videos on poketube!
<% }) %>
<p>u reached the end.... :sob: </p>
</div>

View File

@@ -139,7 +139,7 @@
</a>
</div>
</div>
<script src="/static/data-mobile.js"></script
<script src="/static/data-mobile.js"></script>
</body>
</html>
<% } %>

View File

@@ -2,7 +2,7 @@
This Source Code Form is subject to the terms of the GNU General Public License:
Copyright (C) 2021-2024 POKETUBE (https://codeberg.org/Ashley/poketube)
Copyright (C) 2021-2024 Poke (https://codeberg.org/Ashley/poke)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -10,34 +10,43 @@
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see https://www.gnu.org/licenses/.
--->
<!DOCTYPE html>
<html lang="en">
<head>
<title>Poke | The Ultimate Privacy App!</title>
<title>Poke | The privacy app of your dreams!</title>
<meta charset="UTF-8">
<meta name="theme-color" content="#414161">
<meta http-equiv="content-language" content="en-us">
<meta name="viewport" content="width=device-1200px, initial-scale=1.0, shrink-to-fit=yes, viewport-fit=cover">
<link rel="stylesheet" href="/css/landing.css?v=244">
<link rel="stylesheet" href="/css/landing.css?v=2544">
<link rel="stylesheet" href="/css/snow.css">
<link rel="stylesheet" href="/css/app.main.css">
<link href=/css/yt-ukraine.svg?v=6 rel=icon>
<link rel="manifest" href="/manifest.json">
<meta name="darkreader-lock"> <!-- tells dark reader that the site has a dark theme and to turn itself off -->
<meta content="▶▶ Poke - The Ultimate privacy App!" property=og:title>
<meta content="Watch Silly videos or search the interwebs while being anonymous on poke!"
property=twitter:description>
<meta
content="https://cdn.glitch.global/d68d17bb-f2c0-4bc3-993f-50902734f652/aa70111e-5bcd-4379-8b23-332a33012b78.image.png?v=1701898829884"
property="og:image" />
<meta content="▶▶ Poke - The privacy app of your dreams!" property=og:title>
<% if(embedtype === "woke") { %>
<meta content="Poke is a 𝔀𝓸𝓴𝓮 software YouTube front-end, search engine, translator, 𝔀𝓸𝓴𝓮 app, and even 𝔀𝓸𝓴𝓮!! Watch 𝔀𝓸𝓴𝓮 videos, search the internet, and do all of that and more 𝔀𝓸𝓴𝓮 in this all-in-one 𝔀𝓸𝓴𝓮 app!!!"
property="twitter:description">
<meta content="https://cdn.glitch.global/302c6ee0-629f-453b-9024-bad1f8d7be36/9fhFiXJ.png?v=1717357642758"
property="og:image">
<% } else { %>
<meta content="Poke is a free software YouTube front-end, search engine, translator, map app, and more!! Watch silly videos, search the internet, and do all of that and more anonymously in this all-in-one privacy app!!!"
property="twitter:description">
<meta content="https://cdn.glitch.global/302c6ee0-629f-453b-9024-bad1f8d7be36/poke.png?v=1716216428745"
property="og:image">
<% } %>
<meta content="summary_large_image" name="twitter:card" />
<% if(isOldWindows) { %>
<style>
@@ -58,6 +67,26 @@
overflow-x: hidden;
}
.discover-video-button > a {
border: 2px white solid;
border-radius: 3rem;
padding: 12px 1em 12px 12px;
display: flex;
align-items: center;
width: 146px;
text-align: center;
margin: auto;
color: #fff;
margin-bottom: 2em;
margin-top: 26px;
text-decoration: none;
}
.discover-video-button > a:hover {
filter: brightness(0.8);
}
.subtitle {
text-align: center;
color: #FFFF00;
@@ -84,60 +113,105 @@
</head>
<body>
<video id="HD-BG" playsinline autoplay muted loop><source src="/bg-full.webm" type="video/webm"/></video>
<video id="SD-BG" playsinline autoplay muted loop><source src="/bg-480.webm" type="video/webm"/></video>
<div class="header">
<div class="header-content">
<div class="header-content-start">
<a href="/" style="text-decoration:none;"><img style="width: 130px;" src="/css/logo-poke.svg" />
<p class="subtitle"> <%- random %></p>
</a>
</div>
<div class="header-content-center" style="margin-left: -30px;">
<form action=/search><input class=search-bar autocomplete="on" id=fname name=query><button
class="btn btn-success" type=submit><i class="fa-light fa-search"></i></button></form>
</div>
<div class="header-content-end">
<a href="https://codeberg.org/Ashley/poketube/src/branch/main/instances.json"><i
class="fa-sharp fa-solid fa-server"></i></a>
<a href="/apps"><i class="fa-sharp fa-solid fa-grid-2"></i></a>
<a href="/game-hub"><i class="fa-sharp fa-solid fa-gamepad-modern"></i></a>
</div>
</div>
</div>
<div class="features">
<a style="color: white; text-decoration: none;" href="https://war.ukraine.ua/donate/">
<p><i class="fa-duotone fa-handshake-angle"></i> Support Ukraine </p>
</a>
<a style="color: white; text-decoration: none;"
href="https://buildpalestine.com/2021/05/15/trusted-organizations-to-donate-to-palestine/">
<p><i class="fa-duotone fa-handshake-angle"></i> Support Palestine</p>
</a>
</div>
<%- include('./partials/header.ejs') %>
<video playsinline autoplay muted loop><source src="/bg-480.webm" type="video/webm"/></video>
<div class="landing">
<h1>The Ultimate Privacy App</h1>
<p style="max-width: 800px; text-align: center; margin: 20px auto;"> Be Anonymous watching epic videos, searching
thingys on the interwebs and listening to music on poketube - the free yt front end thats focused on ur privacy!!
</p>
<div class="features">
<p><i class="fa-sharp fa-solid fa-eye-low-vision"></i> No Tracking & Ads</p>
<p><i class="fa-sharp fa-solid fa-rabbit-running"></i>Very Fast</p>
<p><i class="fa-sharp fa-solid fa-download"></i>Built-in video downloader</p>
<p><i class="fa-sharp fa-solid fa-search"></i>Web Search</p>
<h1>PRIVACY APP OF YOUR DREAMS</h1>
<p style="max-width: 800px;">Poke is a free software youtube front-end, search engine, translator, map app and even more!!1!! Watch silly videos, search stuff on the internet and do all of that and more anonymously in this all-in-one privacy app!!!1! :3</p><br>
<a style="color: white; text-decoration: underline;" href="https://buildpalestine.com/2021/05/15/trusted-organizations-to-donate-to-palestine">Help & Support Palestine</a> <a style="color: white; text-decoration: underline;" href="https://gazaesims.com">(or donate esims to gaza!)</a> - <a style="color: white; text-decoration: underline;" href="https://war.ukraine.ua/donate"> Donate to Ukraine </a>
<img src="/static/poke-chan-outfit-a.png" title="Poke-chan sitting :3">
<div style="display: flex; gap: 12px;">
<img src="/static/poke-screnshot-v2.png" />
<img src="/static/Poke-Mobile.jpg" />
</div>
<!-- source: https://picrew.me/share?cd=GD9wwCo5YY -->
<img src="/static/poke-chan-outfit-a.png"
style="height: 400px;width: 369px;mask-image: none;margin-top: -14em;margin-left: -2em;margin-bottom: -13em;z-index: 999;position: absolute;-webkit-transform: scaleX(-1);transform: scaleX(-1);border-radius: 0px;"
title="Poke-chan sitting :3">
<img src="/static/poke-screnshot-a.png" />
<style>
@import url(https://ka-p.fontawesome.com/releases/v6.4.2/css/pro.min.css?token=fe06fc099b);
@import url(https://ka-p.fontawesome.com/releases/v6.4.2/css/pro-v4-shims.min.css?token=fe06fc099b);
@import url(https://ka-p.fontawesome.com/releases/v6.4.2/css/pro-v5-font-face.min.css?token=fe06fc099b);
@import url(https://ka-p.fontawesome.com/releases/v6.4.2/css/pro-v4-font-face.min.css?token=fe06fc099b);
@import url(https://ka-p.fontawesome.com/assets/fe06fc099b/108504408/custom-icons.css?token=fe06fc099b);
</style>
<!-- Icons are from Iconoir -->
<h1 style="margin-left: auto;margin-right: auto;text-align: center;margin-bottom: -1em;margin-top: 1em;"> Why Choose Poke Lol? </h1>
<div class="new-feature-set">
<div class="feature-set">
<div class="feature-set-title">
<?xml version="1.0" encoding="UTF-8"?><svg style="background: #ea6d6d;" width="24px" height="24px" viewBox="0 0 24 24" stroke-width="1.5" fill="none" xmlns="http://www.w3.org/2000/svg" color="#ffffff" style="--darkreader-inline-color: #e8e6e3;" data-darkreader-inline-color=""><path d="M19.5 16L17.0248 12.6038" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M12 17.5V14" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M4.5 16L6.96895 12.6124" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M3 8C6.6 16 17.4 16 21 8" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path></svg>
<h2>No Tracking and Ads</h2>
</div>
<p> Poke Has no Trackers or ads - we dont and we wont see the vids ur watching :3</p>
</div>
<div class="feature-set">
<div class="feature-set-title">
<?xml version="1.0" encoding="UTF-8"?><svg style="background: #6d8cea;" width="24px" height="24px" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="#ffffff" style="--darkreader-inline-color: #e8e6e3;" data-darkreader-inline-color=""><path d="M15 7C16.1046 7 17 6.10457 17 5C17 3.89543 16.1046 3 15 3C13.8954 3 13 3.89543 13 5C13 6.10457 13.8954 7 15 7Z" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M12.6133 8.26691L9.30505 12.4021L13.4403 16.5374L11.3727 21.0861" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M6.4104 9.5075L9.79728 6.19931L12.6132 8.26692L15.508 11.5752H19.2297" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M8.89152 15.7103L7.65095 16.5374H4.34277" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path></svg>
<h2>Very Fast</h2>
</div>
<p> Poke is really ligthweight (both on server and client :3) so you can still use it on poor connections :3</p>
</div>
<div class="feature-set">
<div class="feature-set-title">
<?xml version="1.0" encoding="UTF-8"?><svg style="background: #519355;" width="24px" height="24px" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="#ffffff" style="--darkreader-inline-color: #e8e6e3;" data-darkreader-inline-color=""><path d="M12 8V16M12 16L15.5 12.5M12 16L8.5 12.5" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path></svg>
<h2>Downloader</h2>
</div>
<p>You wouldnt download a car - welp i would :D u can download videos from poke for 0$!</p>
</div>
<div class="feature-set">
<div class="feature-set-title">
<?xml version="1.0" encoding="UTF-8"?><svg style="background: #ea6ddc;" width="24px" height="24px" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="#ffffff" style="--darkreader-inline-color: #e8e6e3;" data-darkreader-inline-color=""><path d="M21 12V10C21 7.23858 18.7614 5 16 5H8C5.23858 5 3 7.23858 3 10V10C3 12.7614 5.23858 15 8 15H12" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M20.1241 19.1185C20.6654 18.5758 21 17.827 21 17C21 15.3431 19.6569 14 18 14C16.3431 14 15 15.3431 15 17C15 18.6569 16.3431 20 18 20C18.8299 20 19.581 19.663 20.1241 19.1185ZM20.1241 19.1185L22 21" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path></svg>
<h2>Web Search</h2>
</div>
<p>u can search the interwebs for anything that u wan!! (ik wha ur gonna search :p) </p>
</div>
<div class="feature-set">
<div class="feature-set-title">
<?xml version="1.0" encoding="UTF-8"?><svg style="background: #b7a358;" width="24px" height="24px" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="#ffffff" style="--darkreader-inline-color: #e8e6e3;" data-darkreader-inline-color=""><path d="M4.62323 5.24841C2.99408 7.02743 2 9.39765 2 12C2 17.5229 6.47715 22 12 22C14.5361 22 16.8517 21.0559 18.6146 19.5" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M21.3021 15.6775C21.7525 14.5392 22 13.2985 22 12C22 6.47715 17.5228 2 12 2C10.7687 2 9.58934 2.22255 8.5 2.62961" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M9 15C9.64448 15.8593 10.8428 16.3494 12 16.391C13.1141 16.431 14.1901 16.0554 14.6973 15.1933" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M12 16.391V18.5" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M9.5 9.5C9.5 10.6811 10.3525 11.1647 11.3862 11.5" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M15 8.5C14.315 7.81501 13.1087 7.33855 12 7.30872V5.5" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M3 3L21 21" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path></svg>
<h2>DRM Free</h2>
</div>
<p> Poke comes without digital restrictions management - poke is free software :3</p>
</div>
<div class="feature-set">
<div class="feature-set-title">
<?xml version="1.0" encoding="UTF-8"?><svg style="background: #886dea;" width="24px" height="24px" viewBox="0 0 24 24" stroke-width="1.5" fill="none" xmlns="http://www.w3.org/2000/svg" color="#ffffff"><path d="M17.5 17.5C20 21 23.9486 18.4151 23 15C21.5753 9.87113 20.8001 7.01556 20.3969 5.50793C20.1597 4.62136 19.3562 4 18.4384 4L5.56155 4C4.64382 4 3.844 4.62481 3.62085 5.515C2.7815 8.86349 2.0326 11.8016 1.14415 15C0.195501 18.4151 4.14415 21 6.64415 17.5" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M16 4V6C16 7.10457 15.1046 8 14 8H10C8.89543 8 8 7.10457 8 6L8 4" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M8 16C9.10457 16 10 15.1046 10 14C10 12.8954 9.10457 12 8 12C6.89543 12 6 12.8954 6 14C6 15.1046 6.89543 16 8 16Z" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M16 16C17.1046 16 18 15.1046 18 14C18 12.8954 17.1046 12 16 12C14.8954 12 14 12.8954 14 14C14 15.1046 14.8954 16 16 16Z" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg>
<h2>Games Included</h2>
</div>
<p> U can play funnie games on poke! </p>
</div>
</div>
<div class="adaptive-grid">
<%- include('./partials/card',
icon_background='transparent',
icon="none",
title='Join Us',
description='join our community if you want to! :3',
actions='true',
has_secondary_action='true',
secondary_icon='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M524.5 69.8a1.5 1.5 0 0 0 -.8-.7A485.1 485.1 0 0 0 404.1 32a1.8 1.8 0 0 0 -1.9 .9 337.5 337.5 0 0 0 -14.9 30.6 447.8 447.8 0 0 0 -134.4 0 309.5 309.5 0 0 0 -15.1-30.6 1.9 1.9 0 0 0 -1.9-.9A483.7 483.7 0 0 0 116.1 69.1a1.7 1.7 0 0 0 -.8 .7C39.1 183.7 18.2 294.7 28.4 404.4a2 2 0 0 0 .8 1.4A487.7 487.7 0 0 0 176 479.9a1.9 1.9 0 0 0 2.1-.7A348.2 348.2 0 0 0 208.1 430.4a1.9 1.9 0 0 0 -1-2.6 321.2 321.2 0 0 1 -45.9-21.9 1.9 1.9 0 0 1 -.2-3.1c3.1-2.3 6.2-4.7 9.1-7.1a1.8 1.8 0 0 1 1.9-.3c96.2 43.9 200.4 43.9 295.5 0a1.8 1.8 0 0 1 1.9 .2c2.9 2.4 6 4.9 9.1 7.2a1.9 1.9 0 0 1 -.2 3.1 301.4 301.4 0 0 1 -45.9 21.8 1.9 1.9 0 0 0 -1 2.6 391.1 391.1 0 0 0 30 48.8 1.9 1.9 0 0 0 2.1 .7A486 486 0 0 0 610.7 405.7a1.9 1.9 0 0 0 .8-1.4C623.7 277.6 590.9 167.5 524.5 69.8zM222.5 337.6c-29 0-52.8-26.6-52.8-59.2S193.1 219.1 222.5 219.1c29.7 0 53.3 26.8 52.8 59.2C275.3 311 251.9 337.6 222.5 337.6zm195.4 0c-29 0-52.8-26.6-52.8-59.2S388.4 219.1 417.9 219.1c29.7 0 53.3 26.8 52.8 59.2C470.7 311 447.5 337.6 417.9 337.6z"/></svg>',
secondary_text='Discord',
secondary_link='https://discord.poketube.fun',
primary_icon='<svg version="1.1" viewBox="0 0 27.9 32" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><g transform="translate(-.095 .005)" fill="#040404"><path d="m27.1 31.2v-30.5h-2.19v-0.732h3.04v32h-3.04v-0.732z"/><path d="m8.23 10.4v1.54h0.044c0.385-0.564 0.893-1.03 1.49-1.37 0.58-0.323 1.25-0.485 1.99-0.485 0.72 0 1.38 0.14 1.97 0.42 0.595 0.279 1.05 0.771 1.36 1.48 0.338-0.5 0.796-0.941 1.38-1.32 0.58-0.383 1.27-0.574 2.06-0.574 0.602 0 1.16 0.074 1.67 0.22 0.514 0.148 0.954 0.383 .32 0.707 0.366 0.323 0.653 0.746 0.859 1.27 0.205 0.522 0.308 1.15 0.308 1.89v7.63h-3.13v-6.46c0-0.383-0.015-0.743-0.044-1.08-0.0209-0.307-0.103-0.607-0.242-0.882-0.133-0.251-0.336-0.458-0.584-0.596-0.257-0.146-0.606-0.22-1.05-0.22-0.44 0-0.796 0.085-1.07 0.253-0.272 0.17-0.485 0.39-0.639 0.662-0.159 0.287-0.264 0.602-0.308 0.927-0.052 0.347-0.078 0.697-0.078 1.05v6.35h-3.13v-6.4c0-0.338-7e-3 -0.673-0.021-1-0.0114-0.314-0.0749-0.623-0.188-0.916-0.108-0.277-0.3-0.512-0.55-0.673-0.258-0.168-0.636-0.253-1.14-0.253-0.198 0.0083-0.394 0.042-0.584 0.1-0.258 0.0745-0.498 0.202-0.705 0.374-0.228 0.184-0.422 0.449-0.584 0.794-0.161 0.346-0.242 0.798-0.242 1.36v6.62h-3.13v-11.4z"/><path d="m0.936 0.732v30.5h2.19v0.732h-3.04v-32h3.03v0.732z"/></g></svg>',
primary_text='Matrix',
primary_link='https://matrix.to/#/%23poke:vern.cc'
)%>
<%- include('./partials/card',
icon_background='transparent',
icon="none",
title='Free and libre',
description='Poke is free and libre software! u can view, edit and redistribute under GNU GPL 3 or later :3',
actions='true',
has_secondary_action='true',
secondary_icon='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>',
secondary_text='GitHub',
secondary_link='https://github.com/ashley0143/poke',
primary_icon='<svg xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="svg1468" version="1.1" viewBox="0 0 4.233 4.233"><title id="title16">Codeberg logo</title><defs id="defs1462"><linearGradient id="linearGradient6918" x1="42519.285" x2="42575.336" y1="-7078.789" y2="-6966.931" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6924"></linearGradient><linearGradient id="linearGradient6924"><stop style="stop-color:#2185d0;stop-opacity:0" id="stop6920" offset="0"></stop><stop id="stop6926" offset=".495" style="stop-color:#000000;stop-opacity:.48923996"></stop><stop style="stop-color:#000000;stop-opacity:.63279623" id="stop6922" offset="1"></stop></linearGradient><linearGradient id="linearGradient6918-3" x1="42519.285" x2="42575.336" y1="-7078.789" y2="-6966.931" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient6924-6"></linearGradient><linearGradient id="linearGradient6924-6"><stop style="stop-color:#000000;stop-opacity:0" id="stop6920-7" offset="0"></stop><stop id="stop6926-5" offset=".495" style="stop-color:#000000;stop-opacity:.30000001"></stop><stop style="stop-color:#000000;stop-opacity:.30000001" id="stop6922-3" offset="1"></stop></linearGradient></defs><metadata id="metadata1465"></metadata><g id="g370484" transform="matrix(0.06551432,0,0,0.06551432,-2.232417,-1.431776)"><path id="path6733-5" style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:url(#linearGradient6918-3);fill-opacity:1;stroke:none;stroke-width:3.67846;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke markers fill;stop-color:#000;stop-opacity:1" d="m 42519.285,-7078.7891 a 0.76086879,0.56791688 0 0 0 -0.738,0.6739 l 33.586,125.8886 a 87.182358,87.182358 0 0 0 39.381,-33.7636 l -71.565,-92.5196 a 0.76086879,0.56791688 0 0 0 -0.664,-0.2793 z" transform="matrix(0.37058478,0,0,0.37058478,-15690.065,2662.0533)"></path><path id="path360787" style="opacity:1;fill:#000000;fill-opacity:1;stroke-width:17.0055;paint-order:markers fill stroke;stop-color:#000" d="m 11249.461,-1883.6961 c -12.74,0 -23.067,10.3275 -23.067,23.0671 0,4.3335 1.22,8.5795 3.522,12.2514 l 19.232,-24.8636 c 0.138,-0.1796 0.486,-0.1796 0.624,0 l 19.233,24.8646 c 2.302,-3.6721 3.523,-7.9185 3.523,-12.2524 0,-12.7396 -10.327,-23.0671 -23.067,-23.0671 z" transform="matrix(1.4006354,0,0,1.4006354,-15690.065,2662.0533)"></path></g></svg>',
primary_text='Codeberg',
primary_link='https://codeberg.org/ashley/poke'
)%>
</div>
<h1 style="font-size: xx-large;text-align: center;">So, wha ru waiting 4? </h1>
<div class="discover-video-button">
<a href="/app">Start Discovering! :3</a>
</div>
<script>
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-3.0-or-later

View File

@@ -44,40 +44,6 @@
//--><!]]>
</script>
<script>
var bbox = "?bbox=-165.76171875000003%2C-3.864254615721396%2C30.410156250000004%2C72.44879155730672&amp;layer=mapnik"
var iframe = document.getElementById('myFrame');
iframe.src=`https://www.openstreetmap.org/export/embed.html${bbox}`
iframe.addEventListener('load', function() {
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
var links = iframeDocument.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
links[i].addEventListener('click', function(event) {
var url = event.target.href;
if (url.includes('www.openstreetmap.org')) {
event.preventDefault();
iframe.src = url;
window.history.pushState(null, '', url);
} else {
window.location.href = url;
}
});
}
});
window.onpopstate = function(event) {
iframe.src = window.location.href;
};
iframe.addEventListener('load', function() {
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
var elements = iframeDocument.querySelectorAll('[style*="//dka575ofm4ao0.cloudfront.net"]');
for (var i = 0; i < elements.length; i++) {
var style = elements[i].style.backgroundImage;
var newStyle = style.replace('//dka575ofm4ao0.cloudfront.net', 'https://p.poketube.fun/https://dka575ofm4ao0.cloudfront.net');
elements[i].style.backgroundImage = newStyle;
}
});
</script>
<script src="/static/maps.js"></script><script src="/static/data-mobile.js"></script>
</body>
</html>

71
html/partials/card.ejs Normal file
View File

@@ -0,0 +1,71 @@
<div class="card">
<div class="card-title">
<div class="card-icon" style="background: <%= icon_background %>;">
<% if(icon="none"){ %><% } else{ %> <%- icon %><% } %>
</div>
<h2><%= title %></h2>
</div>
<p><%= description %></p>
<% if (actions=="true") { %>
<div class="card-actions">
<% if (has_secondary_action=="true") { %>
<a class="card-secondary" href="<%= secondary_link %>"><%- secondary_icon %> <%= secondary_text %></a>
<% } %>
<a class="card-primary" href="<%= primary_link %>"><%- primary_icon %> <%= primary_text %></a>
</div>
<% }%>
</div>
<style>
.card {
padding: 24px;
}
.card-title {
display: flex;
align-items: center;
}
.card-title h2 {
font-family: "PokeTube flex";
font-stretch: ultra-expanded;
font-weight: 1000;
margin: 0px;
}
.card-title svg {
width: 32px;
height: 32px;
margin-right: 12px;
}
.card-actions {
display: flex;
align-items: center;
justify-content: right;
gap: 12px;
}
.card-actions a {
color: white;
border: 2px white solid;
border-radius: 3rem;
padding: 12px 24px 12px 12px;
display: flex;
align-items: center;
}
.card-actions a:hover {
filter: brightness(0.8);
text-decoration: nones;
}
.card-actions svg {
width: 24px !important;
height: 24px !important;
margin-right: 6px;
}
.card-actions .card-primary {
background: white;
color: black;
}
.card-actions .card-primary svg {
fill: black;
}
.card-actions .card-secondary svg {
fill: white;
}
</style>

123
html/partials/header.ejs Normal file
View File

@@ -0,0 +1,123 @@
<!--
This Source Code Form is subject to the terms of the GNU General Public License:
Copyright (C) 2021-2024 Poke (https://codeberg.org/Ashley/poke)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see https://www.gnu.org/licenses/.
--->
<!-- Global Header-->
<!-- This should be inserted as a component/partial -->
<header>
<div class="header-content">
<div class="header-start">
<a title="Poke Homepage" href="/playlist?list=PL3roRV3JHZzbatp5PvE-88ApmVishqGHN">
<img src="/css/logo-poke.svg?v=5"/>
<img src="/css/red-tape.png?v=5" style="margin-left: -8em;opacity: 0.9;height: 2em;">
<p class="subtitle"> <%- random %></p>
</a>
</div>
<div class="header-center">
<%- include('./search.ejs') %>
</div>
<div class="header-end">
<a href="https://codeberg.org/Ashley/poketube/src/branch/main/instances.json"><?xml version="1.0" encoding="UTF-8"?><svg width="24px" height="24px" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="#ffffff" style="--darkreader-inline-color: #e8e6e3;" data-darkreader-inline-color=""><path d="M6 18.01L6.01 17.9989" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M6 6.01L6.01 5.99889" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M2 9.4V2.6C2 2.26863 2.26863 2 2.6 2H21.4C21.7314 2 22 2.26863 22 2.6V9.4C22 9.73137 21.7314 10 21.4 10H2.6C2.26863 10 2 9.73137 2 9.4Z" stroke="#ffffff" stroke-width="1.5" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path><path d="M2 21.4V14.6C2 14.2686 2.26863 14 2.6 14H21.4C21.7314 14 22 14.2686 22 14.6V21.4C22 21.7314 21.7314 22 21.4 22H2.6C2.26863 22 2 21.7314 2 21.4Z" stroke="#ffffff" stroke-width="1.5" style="--darkreader-inline-stroke: #ffffff;" data-darkreader-inline-stroke=""></path></svg></a>
<a href="/apps"><?xml version="1.0" encoding="UTF-8"?><svg width="24px" height="24px" viewBox="0 0 24 24" stroke-width="1.5" fill="none" xmlns="http://www.w3.org/2000/svg" color="#ffffff"><path d="M17.5 17.5C20 21 23.9486 18.4151 23 15C21.5753 9.87113 20.8001 7.01556 20.3969 5.50793C20.1597 4.62136 19.3562 4 18.4384 4L5.56155 4C4.64382 4 3.844 4.62481 3.62085 5.515C2.7815 8.86349 2.0326 11.8016 1.14415 15C0.195501 18.4151 4.14415 21 6.64415 17.5" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M16 4V6C16 7.10457 15.1046 8 14 8H10C8.89543 8 8 7.10457 8 6L8 4" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M8 16C9.10457 16 10 15.1046 10 14C10 12.8954 9.10457 12 8 12C6.89543 12 6 12.8954 6 14C6 15.1046 6.89543 16 8 16Z" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M16 16C17.1046 16 18 15.1046 18 14C18 12.8954 17.1046 12 16 12C14.8954 12 14 12.8954 14 14C14 15.1046 14.8954 16 16 16Z" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></a>
<a href="/account-create"><?xml version="1.0" encoding="UTF-8"?><svg width="24px" height="24px" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" color="#ffffff"><path d="M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2Z" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M4.271 18.3457C4.271 18.3457 6.50002 15.5 12 15.5C17.5 15.5 19.7291 18.3457 19.7291 18.3457" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M12 12C13.6569 12 15 10.6569 15 9C15 7.34315 13.6569 6 12 6C10.3431 6 9 7.34315 9 9C9 10.6569 10.3431 12 12 12Z" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg> Account</a>
</div>
</div>
</header>
<style>
header {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
padding: 12px 0px;
background: rgb(0, 0, 0, 0.5);
}
.header-content {
display: flex;
align-items: center;
justify-content: space-between;
max-width: 1264px;
margin: auto;
height: 3em;
}
.header-start {
display: flex;
align-items: center;
}
.header-start img {
height: 32px;
margin-top: 3em;
}
form[action="/search"] {
display: flex
}
.header-center #fname {
background: rgba(255, 255, 255, 0.2);
border: 1px #605e5e solid;
border-radius: 6px 0px 0px 6px;
color: white;
font-size: 14px;
padding: 6px 12px;
border-right: none;
cursor: default;
width: 300px;
}
.header-center button {
background: rgba(255, 255, 255, 0.2);
border: 1px #605e5e solid;
border-radius: 0px 6px 6px 0px;
color: white;
border-left: none;
cursor: pointer;
}
.header-center #fname:focus {
outline: none;
border-color: #8a8a8a;
}
.header-center button svg {
width: 18px;
}
.header-end {
display: flex;
align-items: center;
gap: 6px;
}
.header-end a {
/* border: 2px #605e5e solid; */
border-radius: 3rem;
display: flex;
align-items: center;
padding: 6px;
color: white;
gap: 6px;
}
</style>
<link href="<%- proxyurl %>/https://site-assets.fontawesome.com/releases/v6.1.1/css/all.css" rel=stylesheet>

88
html/partials/search.ejs Normal file
View File

@@ -0,0 +1,88 @@
<form action="/search">
<input autocomplete="off" type="search" class="search-bar" id="fname" name="query">
<button><?xml version="1.0" encoding="UTF-8"?><svg width="24px" height="24px" viewBox="0 0 24 24" stroke-width="1.5" fill="none" xmlns="http://www.w3.org/2000/svg" color="#ffffff"><path d="M17 17L21 21" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M3 11C3 15.4183 6.58172 19 11 19C13.213 19 15.2161 18.1015 16.6644 16.6493C18.1077 15.2022 19 13.2053 19 11C19 6.58172 15.4183 3 11 3C6.58172 3 3 6.58172 3 11Z" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></button>
</form>
<div style="opacity: 0;" class="suggestions"></div>
<script>
/*
@licstart The following is the entire license notice for the
JavaScript code in this page.
Copyright (C) 2024 Poke Project
The JavaScript code in this page is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this page.
*/
// Dismiss when the end-user clicks else where
document.body.addEventListener("click", function (evt) {
document.querySelector('.suggestions').style.opacity = '0'
});
// When the end-user starts typing, trigget the fetch function
document.querySelector('input[type="search"]').addEventListener('input', function(e) {
if (e.target.value !== '') {
document.querySelector('.suggestions').style.opacity = '1'
GetResults()
}
else {null}
});
// Fetch
function GetResults() {
var SearchValue = document.querySelector('input[type="search"]').value
var YouTubeSuggestions = document.querySelector('.suggestions')
fetch(window.location.origin + `/api/improving-poke/getsugesstions?q=${SearchValue}`)
.then(response => response.json())
.then(data => {YouTubeSuggestions.innerHTML = ListOfSuggestionsYT(data)})
}
// Create List
function ListOfSuggestionsYT(data) {
const text = data.suggestions.map(data => `<a href="/search?query=${data}">${data}</a>`).join("\n")
return `${text}`
}
</script>
<style>
.suggestions {
position: absolute;
display: grid;
background: #473e46d6;
border-radius: 6px;
margin-top: 10px;
width: 329px;
z-index: 5;
backdrop-filter: blur(10px);
gap: 4px;
padding: 4px 0px;
}
.suggestions a {
color: white;
background: transparent;
padding: 6px 12px;
border-radius: 4px;
margin: 0px 4px;
}
.suggestions a:hover {
background: #f9f9f917;
text-decoration: none;
}
</style>

View File

@@ -246,8 +246,9 @@ font-family:Ubuntu
<%- x.title %>
</a>
<div>
<a href="/channel?id=<%- x.authorId %>" style="border-radius:0em"><%- x.author %></a>
</div>
<a href="/channel?id=<%- x.authorId %>" style="border-radius:0em"><%- x.author %></a><br>
<a href="/download?id=<%- x.videoId %>" style="border-radius:0em"> Download </a>
</div>
</div>
</div>

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
<!--
This Source Code Form is subject to the terms of the GNU General Public License:
Copyright (C) 2021-2023 POKETUBE (https://codeberg.org/Ashley/poketube)
Copyright (C) 2021-2024 poke (https://codeberg.org/Ashley/poketube)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,7 +19,7 @@
<% if (!isMobile) { %>
<!DOCTYPE html><html class="background"><head>
<title>PokeTube | Legal mumbo jumbo</title>
<title>Poke | Legal mumbo jumbo</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="/css/app-cdn.min.css" rel="stylesheet">
@@ -250,19 +250,20 @@ section#landing-page {
transform: translateY(50%);
}
.heading {
color: #fff;
font-size: xxx-large;
font-family: 'PokeTube flex';
font-stretch: ultra-expanded;
font-weight: 1000;
margin-top: -27.5em;
margin-top: -22.5em;
width: 100px;
text-align: left;
}
.i-cant-find-a-class-name-help-me {
margin-top: -69em;
margin-top: -53.3em;
max-width: 39em;
color: white;
background: #333;
@@ -408,7 +409,7 @@ z-index: 10; /* Was 2 */"
<div class="content-inner" style="color:#fff;">
<br>
<h1 class="heading">PokeTube Privacy Policy</h1>
<h1 class="heading">Poke Privacy Policy</h1>
<div style="text-align: center;color: #fff;margin-top: 8px;margin-bottom:8px">
We dont collect or share your personal information! That's our privacy policy TL;DR lol
</div>
@@ -418,7 +419,7 @@ z-index: 10; /* Was 2 */"
</div>
<div class="description i-cant-find-a-class-name-help-me">
Poketube does not collect or share personal information. poketube is a free software program that you can fork it yourself. you can see the repo <a href="https://codeberg.org/ashley/poketube/">here</a>.<br><br> <a href="https://codeberg.org/Ashley/poketube/commits/main/html/priv.ejs">see history of this privacy policy here</a>
Poke does not collect or share personal information. Poke is a free software program that you can fork it yourself. you can see the repo <a href="https://codeberg.org/ashley/poke/">here</a>.<br><br> <a href="https://codeberg.org/Ashley/poketube/commits/main/html/priv.ejs">see history of this privacy policy here</a>
<p style="color:#fff;">
You dont have to read this entire policy as it might put you to sleep. So in TL;DR:We dont collect or share your personal information. thats it lol
@@ -432,10 +433,9 @@ z-index: 10; /* Was 2 */"
<i>Please note that im not a lawyer, so dont execpt too much on this policy :P</i>
</p>
<p style="color:#fff">
Haiii! Welcome to PokeTubes Privacy Policy! We Dont collect or share your information. Ever. When we collect information, we mean, aggregated information (see "Information Collected" section for more info). The main reason that we dont collect your information is we care about your privacy. like alot (like alot alot). see; whynottrack.com<br><br>
Haiii! Welcome to Poke Privacy Policy! We Dont collect or share your information. Ever. When we collect information, we mean, aggregated information (see "Information Collected" section for more info). The main reason that we dont collect your information is we care about your privacy. like alot (like alot alot). see; whynottrack.com<br><br>
We are free software, meaning you have freedom while using PokeTube. <a href="https://www.gnu.org/philosophy/free-software-even-more-important.html">Learn why you should care about your freedom here</a>.
<br><br>
We dont use javascript on the front-end of PokeTube. Meaning that you can use PokeTube With no javascript add-ons. <a href="https://www.gnu.org/philosophy/javascript-trap.html">Learn Why here.</a>
<br><br>
P.S:I love you <3
</p>
@@ -443,52 +443,36 @@ P.S:I love you <3
<p>START OF PRIVACY POLICY</p>
<a class="anchor" name="s1"></a>
<h3 class="hd-md">
We dont collect your personal information
We Dont Collect Information that can indentify you
</h3>
<br>
(<a href="https://codeberg.org/ashley/poke/src/branch/main/css/data-mobile.js">see source</a>) <br><br>
We use Matomo (https://matomo.org/) to gather and store non-identifying information for statistical purposes. The data collected includes details such as your country (inferred from anonymized IP addresses like 111.xx.xxx.xx), operating system, browser version and name, and screen size. This information helps us understand and improve our services. <br><br>
we dont collect your personal information or share it. We dont collect your IP address. Your device metadata (e.g. device resolution, OS etc.) is not collected in anyway. <br>
The above doesn't apply if you have Do Not Track or Global Privacy Control enabled on the browser level.
<hr class="hr" />
<hr class="hr" />
<h3 class="hd-md">
We dont see the videos you watch
</h3>
<br>
Our servers are secured with SHA-384 Signature Algorithm; meaning we cant see the videos you watching, things you search, or things you do. Learn more <a href="https://en.wikipedia.org/wiki/Secure_Hash_Algorithms">About hash Algorithms here.</a><br><br>
When the Video gets sent to the matomo server, we encrypt it using SHA-256 Signature Algorithm; (<a href="https://codeberg.org/ashley/poke/src/branch/main/css/data-mobile.js#L19-L23">See source</a>) meaning we cant see the videos you watching or things you do. Learn more <a href="https://en.wikipedia.org/wiki/Secure_Hash_Algorithms">About hash Algorithms here.</a><br><br>
We migth use third party services on PokeTube, but third party request on PokeTube is proxied by default. no third party can see wat the hell ru doing on PokeTube. We do this by proxying the requests via a whole diffrent server, so no third party can see you.<br>
We migth use third party services on Poke, but third party request on Poke is proxied by default. no third party can see wat the hell ru doing on PokeTube. We do this by proxying the requests via a whole diffrent server, so no third party can see you.<br>
<hr class="hr" />
<h3 class="hd-md">
We dont see the videos you watch
</h3>
<br>
When you watch a video at PokeTube, we don't know who you are and there is no way to tie the things you are watching.
When you access a website, your Web browser automatically sends information about your computer. (e.g. your User agent and IP address.)<br><br>
Because this information could be used to link you to your peronsal information, we do not log (store) it at all. This is a very unusual practice, but we feel it is an important step to protect your privacy.
It is unusual for a reason. most server software auto-stores this information, so you have to go out of your way not to store it.
<br>
<h3 class="hd-md">
We dont track you through cookies
</h3><br>
on PokeTube, no cookies are used by default. PokeTube Doesnt use cookies (See the storage tab yourself!). altho we use local storage to save stuff like themes.
on Poke, no cookies are used by default. (<a href="https://codeberg.org/ashley/poke/src/branch/main/css/data-mobile.js#L79">see source</a>) Poke Doesnt use cookies (See the storage tab yourself!). altho we use local storage to save stuff like themes.
<br>
<h3 class="hd-md">
We only collect your email if you want us to
</h3><br>
if you Subscribe to updates on <a href="//status.poketube.fun">PokeTube status site</a>, we may be store your email to send you email notifications whenever we create, update or resolve an incident. you can also use a alias adress such as <a href="https://duckduckgo.com/email/">Private Duck Address</a> to keep your email identity hidden <br>
<h3 class="hd-md">
We improve poketube by using anonymous methods
</h3><br>
We use a tool called Piwik (A free software Web analytics system, see piwik.org) to collect information. By information we mean, aggregated data about things such as the number of visits daily/weekly/monthly to PokeTube. <br><br> This data can't be used to identify you or your device or to learn anything about you individually. This Information thats being collected is anonymous and only analyzed in aggregate. It will never identify you or your machine.<br><br>
This Process does not use cookies in any way. If you want to opt out (for some reason, we still dont know why lol), Click the "Opt out Of Metrics" Button on the bottom rigth side of the player. No data that identifies you or that can be linked to you as an individual is collected on poketube.</p><p>We Also save searches, but again, not in a personally identifiable way, as we do not store IP addresses or unique User agent strings. We use aggregate, non-personal search data.<br>
<h3 class="hd-md">

View File

@@ -17,7 +17,9 @@
NodeList.prototype.forEach = Array.prototype.forEach;
</script>
<style>
* {
font-family: "poketube flex" !important
}
@keyframes gradient {
0% {
background-position: 0 50%;
@@ -36,18 +38,27 @@
background-size: 400% 400%;
}
a {
color: #fff;
font-weight: 686;
font-stretch: extra-expanded;
}
.downnav {
position: fixed;
padding:10px;
bottom: 0;
left: 0;
width: 100%;
margin: auto;
overflow: hidden;
z-index: 1;
color:#fff;
background-color: #0f0f0f;
}</style>
background-color: #0007;
border-radius: 5px;
width: calc(100% - 33px);
margin-left: 6px;
}
</style>
<script>
<!--//--><![CDATA[//><!--
/**
@@ -219,18 +230,16 @@
<input placeholder="Search the web" name="query" autocomplete="off" id="search_form_input_homepage" class="search__input" type="text" autofocus />
<div>
<button class="btn btn-success" type="submit" style="margin-top: 1em;margin-left: auto;text-align: center;display: flex;flex-direction: column;background: #fff;background-color: #303134;border: 1px solid #303134;border-radius: 4px;color: #e8eaed;font-family: arial,sans-serif;font-size: 14px;padding: 0 16px;line-height: 27px;height: 36px;min-width: 54px;margin-right: 13em;text-align: center;cursor: pointer;user-select: none;">
<button class="btn btn-success" type="submit" style="margin-top: 1em;margin-left: auto;text-align: center;display: flex;flex-direction: column;background: #fff;background-color: #303134;border: 1px solid #303134;border-radius: 4px;color: #e8eaed;font-family: arial,sans-serif;font-size: 14px;padding: 0 16px;line-height: 27px;height: 36px;min-width: 54px;margin-right: 9em;text-align: center;cursor: pointer;user-select: none;">
<p style="margin-top: auto;margin-bottom: auto;font-weight: 1000;margin-left: 6px;font-stretch: ultra-expanded;font-family:&quot;poketube flex&quot;;Poketube flex;">Search Poke</p>
</button>
<button class="btn btn-success" name="lucky" value="true" type="submit" style="margin-top: 1em;margin-left: auto;text-align: center;display: flex;flex-direction: column;background: #fff;background-color: #303134;border: 1px solid #303134;border-radius: 4px;color: #e8eaed;font-family: arial,sans-serif;font-size: 14px;padding: 0 16px;line-height: 27px;height: 36px;min-width: 54px;margin-right: 9em;text-align: center;cursor: pointer;user-select: none;margin-top: -38px;margin-left: 21em;">
<p style="margin-top: auto;margin-bottom: auto;font-weight: 1000;margin-left: 6px;font-stretch: ultra-expanded;font-family:&quot;poketube flex&quot;;Poketube flex;">Im feeling lucky</p>
</button>
<div style="margin-left: 5.5em;margin-right: auto;width: fit-content;color: #fff;font-weight: 1000;font-stretch: ultra-expanded;font-size: 33px;margin-bottom: -1em;margin-top: 6px;" id="clock"></div>
<span style="color:#fff;margin-left: auto;margin-right: 8em;text-align: center;display: flex;width: fit-content;margin-top: 2em;font-size: ;" id="weatherInfo"></span>
</div>
</form>
<div class="downnav">
<span style="color:#fff;" id="weatherInfo"></span> - <a style="color:#fff" href="/translate"> Translate </a> - <a style="color:#fff" href="/map"> PokeMaps </a> - <a style="color:#fff" href="/account-create">My Account</a> - <a style="color:#fff" href="/privacy">Privacy</a> - <a style="color:#fff" href="https://codeberg.org/ashley/poketube">Git</a>
<a style="color:#fff" href="/translate"> Translate </a> - <a style="color:#fff" href="/map"> PokeMaps </a> - <a style="color:#fff" href="/account-create">My Account</a> - <a style="color:#fff" href="/privacy">Privacy</a> - <a style="color:#fff" href="https://codeberg.org/ashley/poketube">Git</a>
<div style="float: right;">
<a style="color:#fff" id="osInfo"></a> <a style="color:#fff;margin-right: 1em;" href="/license">License</a>
</div>
@@ -257,6 +266,27 @@ if (userAgent.includes("windows")) {
const osInfoElement = document.getElementById("osInfo");
osInfoElement.textContent = `${osName} - `;
function updateClock() {
var now = new Date();
var hours = now.getHours();
var minutes = now.getMinutes();
var seconds = now.getSeconds();
// Add leading zeros to minutes and seconds
minutes = (minutes < 10 ? "0" : "") + minutes;
seconds = (seconds < 10 ? "0" : "") + seconds;
// Display the time in the "clock" div
document.getElementById("clock").innerHTML = hours + ":" + minutes + ":" + seconds;
// Update the clock every second
setTimeout(updateClock, 1000);
}
// Call the function to initially display the clock
updateClock();
</script> <script>
const css = localStorage.getItem("poke-custom-css");
@@ -320,7 +350,7 @@ if (window.location.hostname === "poketube.fun" && config.plausible_enabled == t
// Call the fetchAndDisplayWeather function when the page loads
fetchAndDisplayWeather();
</script><script src="/static/emojis.js"></script><style> img.emoji {height: 1em;width: 1em;margin: 0 .05em 0 .1em;vertical-align: -0.1em;}</style>
</script><script src="/static/emojis.js"></script><script src="/static/data-mobile.js"></script><style> img.emoji {height: 1em;width: 1em;margin: 0 .05em 0 .1em;vertical-align: -0.1em;}</style>
<script>twemoji.parse(document.body,{ base: 'https://p.poketube.fun/https://cdn.zptr.cc/twemoji/' })</script></div>
</div> <!-- id="content_homepage" -->
</div> <!-- id="content_wrapper_homepage" -->

View File

@@ -451,22 +451,22 @@ Web
</div>
<p style="margin-top: -21px;margin-left: 62em;font-family: &quot;Poketube flex&quot;;color: #ffacbb;display: flex;flex-direction: row;gap: 5px;">Powered by <a href="https://ark.sudovanilla.org/Korbs/NarviSearch">NarviSearch ! :3</a> </p>
</div>
<div class="video-list" >
<% results.forEach(x => { %>
<div class="video" style="height: 6em;">
<div class="video" style="height: 8em;">
<a style="min-width: 81em;" href="<%= x.link %>"><%= x.title %></a><br>
<p style="color:gray;display: flex;flex-direction: column;width: 48em;margin-top: -8em;"><%= x.link %><br>
<a style="min-width: 81em;" href="<%= x.url %>"><%= x.title %></a><br>
<p style="color:gray;display: flex;flex-direction: column;width: 48em;margin-top: -8em;"><%= x.url %><br>
<% if (!isMobile) { %>
<span style="color:white;width: 48em;display: flex;"><%= x.snippet %></span>
<span style="color:white;width: 48em;display: flex;"><%= x.description %></span>
<% } %>
<% if (isMobile) { %>
<span style="color:white;max-width: 15em;display: flex;"><%= x.snippet %></span>
<span style="color:white;max-width: 15em;display: flex;"><%= x.description %></span>
<% } %>
</p>
</div>

View File

@@ -24,7 +24,7 @@
<link href=/css/yt-ukraine.svg?v=6 rel=icon>
<link href=/css/app-cdn.min.css rel=stylesheet>
<link href=/css/app.main.css?v=44600 rel=stylesheet>
<link href=/css/search.main.css?v=57 rel=stylesheet>
<link href=/css/search.main.css?v=547 rel=stylesheet>
<link href=/css/watch.main.css rel=stylesheet>
<meta name="darkreader-lock"> <!-- tells dark reader that the site has a dark theme and to turn itself off -->
<meta content="Searching <%=q%> - Poke" property=og:title>
@@ -62,34 +62,32 @@ summary:hover{
</style>
<link href=https://p.poketube.fun/https://site-assets.fontawesome.com/releases/v6.1.1/css/all.css rel=stylesheet>
<link href="https://p.poketube.fun/https://cdn.jsdelivr.net/npm/ionicons@4.5.0-0/dist/css/ionicons.min.css" rel=stylesheet>
<style>
.tags.rec {
font-weight: 600;
font-stretch: expanded;
overflow:hidden;
width: auto;
max-width: fit-content;
margin-right: auto;
padding-left: 1.5em;
margin-top: 7px;
.search-options {
display: flex;
gap: 3px;
margin-inline: auto;
margin-left: 8em;
}
justify-content: space-between;
width: 100%;
max-width: 855px;
margin: auto;
padding: 24px 0px 12px 0px;
}
.tags.rec:hover{
overflow-x:auto;
}
.tags.rec {
display: flex;
gap: 12px;
height: max-content;
}
.tags.rec > .tag {
border-radius: 8px;
background:var(--chip-background-hover);
background: var(--chip-background-hover);
padding: 8px 16px;
}
.tag {
@@ -100,6 +98,19 @@ summary:hover{
font-family: ubuntu, sans-serif;
}
#filters-collapse summary {
color: white;
font-weight: bold;
font-size: 20px;
}
.filter-options div {
padding: 6px 12px;
}
.filter-name.underlined {
padding: 12px 0px 12px 23px;
font-weight: bold;
}
.container {
max-width: 800px;
margin: 0 auto;
@@ -493,59 +504,125 @@ video[counter].classList.add("shake");
Videos
</a>
<a href="/web?query=<%=q%>" style="color:#fff;text-decoration:none;
<a href="/web?query=<%=q%>" style="color:#fff;text-decoration:none;display:none;
" class="tag c">
Web </a>
</div>
</div>
<% if (q.includes("suicide")) { %>
<%
const searchStrings = [
"suicide", "self harm", "self-harm", "support", "murder", "how to murder", "kill myself",
"end my life", "depressed", "depression", "lonely",
"hurt myself", "selfharm", "selfharm", "dying", "want to die",
"kill", "die", "family problems", "family issues", "abuse",
"domestic violence", "abusive parents", "family conflict",
"estranged", "disowned", "run away", "runaway"
];
if (searchStrings.some(str => q.toLowerCase().includes(str))) {
%>
<div class="container">
<span style="font-size: 7em; color: pink;margin-bottom: 3em;">❤️</span><br>
<h2 style="font-family: 'PokeTube Flex';font-size: large;text-align: left;font-stretch: ultra-expanded;
font-weight: 1000;">You are not alone</h2>
<p>
if you or somebody you know is having a bad time, talk to somebody today.
</p>
<p>
if you are from the US, call 988. if you arent <a href="https://www.psychologytoday.com/us/basics/suicide/suicide-prevention-hotlines-resources-worldwide"> see this url.</a>
<br> <br> dont worry, ur not alone <3 and you are really important btw!
</p>
<p>
If you're having a tough time or know someone who is, reaching out and talking to someone can really help.
</p>
<p>
In the US? Call <strong>988</strong> for support. Not in the US? <a href="https://www.psychologytoday.com/us/basics/suicide/suicide-prevention-hotlines-resources-worldwide">Check out this link</a> for worldwide help.
</p>
<p>
LGBTQ+ and need someone to talk to? Try the <a href="https://www.thetrevorproject.org/">Trevor Project</a> at <strong>1-866-488-7386</strong> or text <strong>START</strong> to <strong>678-678</strong>. For more options, <a href="https://www.imalive.org/">IMAlive</a> is also available.
</p>
<p>
Remember, ur not alone. u matter, and there's always someone who cares. and you are really important btw! <span style="font-family: 'PokeTube Flex';">❤️</span>
</p>
</div>
<% } %>
<% if (q.includes("whats your eta")) { %>
<a href="/watch?v=mREOvIgImmo" style="text-align: center;margin-left: auto;margin-right: auto;font-family: 'PokeTube Flex';font-stretch: ultra-expanded;font-weight: 1000;color: #fff;"><h1 style="font-family: 'PokeTube Flex';font-stretch: ultra-expanded;
font-weight: 1000;">2 MINUTES!</h1></a>
<% } %>
</div>
<% } %>
<% if (!tab) { %>
<style>
.thumbnail {
position: relative;
display: inline-block;
}
<% invresults.forEach (x => { %>
<div class="video-list" >
.thumbnail .hover-text {
display: none;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: white;
font-size: 24px;
font-weight: bold;
background-color: rgba(0, 0, 0, 0.5);
padding: 5px 10px;
border-radius: 5px;
z-index: 2;
}
.thumbnail:hover .hover-text {
display: block;
}
.thumbnail .video-length {
position: absolute;
bottom: 10px;
right: 10px;
z-index: 1;
}
.thumbnail:hover .video-length {
display: none;
}
</style>
<% invresults.forEach (x => { %>
<div class="video-list">
<div class="video">
<a
href="/watch?v=<%= x.videoId %>"
<a href="/watch?v=<%= x.videoId %>"
class="thumbnail"
style="background-image: url('<%- media_proxy_url %>/proxy?url=https://yt.miruku.cafe/vi/<%= x.videoId %>/hqdefault.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&amp;rs=AOn4CLBmAOZV7CM3NdDKlEFxGX7PpI5UWQ');border-radius: 10px;"
><span class="video-length"><%=turntomins(x.lengthSeconds) %></span></a>
<div class="info" style="color:#fff;text-align: left;font-weight: 1000;">
style="background-image: url('<%- media_proxy_url %>/proxy?url=https://i.ytimg.com/vi/<%= x.videoId %>/hqdefault.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&amp;rs=AOn4CLBmAOZV7CM3NdDKlEFxGX7PpI5UWQ');border-radius: 10px;">
<span class="hover-text">Watch :3</span>
<span class="video-length"><%= turntomins(x.lengthSeconds) %></span>
</a>
<div class="info" style="color:#fff;text-align: left;font-weight: 1000;">
<a style="font-family: 'PokeTube Flex';font-size: large;text-align: left;font-stretch: extra-expanded;
font-weight: 1000;
" href="/watch?v=<%= x.videoId %>" class="title max-lines-2"
><%= x.title %></a>
font-weight: 1000;" href="/watch?v=<%= x.videoId %>" class="title max-lines-2"><%= x.title %></a>
<div style="display: flex; flex-direction: column; row-gap: 8px;font-weight:bold">
<a href="/watch?v=<%= x.videoId %>"><span><%= x.viewCountText %></span> <span>•</span> <span><%= x.publishedText %></span></a>
<a href="/channel?id=<%= x.authorId %>"><%=x.author %></a>
<a href="/channel?id=<%= x.authorId %>"><%= x.author %><% if (x?.authorVerified) { %>
<i class="icon ion ion-md-checkmark-circle" title="verified channel"></i><% } %></a>
<div style="display: inline-flex;flex-direction: row;min-width: 6em;gap: 4px;">
<a href="/download?v=<%= x.videoId %>" style="background: #333;width: 7.6em;border-radius: 18px;">
<div style="display: flex;">
<i class="fa-light fa-download" style="display: flex;font-size: 16px;padding: 5px;border-radius: 18px;margin-left: 2px;"></i><span style="margin-top: 6px;">Download</span>
</div>
</a>
<a href="https://youtube.com/watch?v=<%= x.videoId %>" style="background: #333;width: 7.6em;border-radius: 18px;height: 2em;width: 12.5em;">
<div style="display: flex;">
<i class="fa-brands fa-youtube" style="display: flex;font-size: 16px;padding: 5px;border-radius: 18px;margin-left: 2px;"></i><span style="margin-top: 6px;">Open on YouTube :/</span>
</div>
</a>
</div>
</div>
</div>
</div>
</div>
<% }) %>
</div>
</div>
<% }) %>

6
infocards.json Normal file
View File

@@ -0,0 +1,6 @@
{
"Open Source":{
"infocard":"<i>Open Source</i> is a wrong terminology",
"more_info":"https://gnu.org/not-open-source"
}
}

View File

@@ -8,38 +8,24 @@
"proxy": true,
"official": true,
"DEFAULT": true,
"region": "🇺🇸",
"region": "🇩🇪",
"software": {
"name": "poketube",
"name": "poke",
"version": "lastest",
"branch": "dev"
}
}
],
[
"poketube.sudovanilla.com",
"pt.sudovanilla.org",
{
"uri": "https://poketube.sudovanilla.com",
"CLOUDFLARE": true,
"piwik": false,
"region": "🇺🇸",
"software": {
"name": "poketube",
"version": "lastest",
"branch": "dev"
}
}
],
[
"poke.vern.cc",
{
"uri": "https://poke.vern.cc",
"uri": "https://pt.sudovanilla.org",
"CLOUDFLARE": false,
"piwik": false,
"region": "🇺🇸",
"software": {
"name": "poketube",
"version": "latest",
"name": "poke",
"version": "lastest",
"branch": "dev"
}
}
@@ -52,7 +38,7 @@
"piwik": false,
"region": "🇺🇸",
"software": {
"name": "poketube",
"name": "poke",
"version": "latest",
"branch": "dev"
}
@@ -66,7 +52,7 @@
"piwik": false,
"region": "🇬🇧",
"software": {
"name": "poketube",
"name": "poke",
"version": "latest",
"branch": "dev"
}
@@ -81,7 +67,7 @@
"proxy": false,
"region": "🇺🇸",
"software": {
"name": "poketube",
"name": "poke",
"version": "latest",
"branch": "dev"
}
@@ -103,29 +89,43 @@
}
],
[
"poke.am1.shiggy.cloud",
"poke.uk1.littkai.co.uk",
{
"uri": "https://poke.am1.shiggy.cloud",
"uri": "https://poke.uk1.littkai.co.uk",
"CLOUDFLARE": false,
"piwik": false,
"proxy": false,
"region": "🇳🇱",
"region": "🇬🇧",
"software": {
"name": "poketube",
"name": "poke",
"version": "latest",
"branch": "dev"
}
}
], [
"poke.am2.shiggy.cloud",
"poke.uk2.littlekai.co.uk",
{
"uri": "https://poke.am2.shiggy.cloud",
"uri": "https://poke.uk2.littlekai.co.uk",
"CLOUDFLARE": false,
"piwik": false,
"proxy": false,
"region": "🇳🇱",
"region": "🇬🇧",
"software": {
"name": "poketube",
"name": "poke",
"version": "latest",
"branch": "dev"
}
}
], [
"poke.blahai.gay",
{
"uri": "https://poke.blahai.gay/",
"CLOUDFLARE": true,
"piwik": false,
"proxy": false,
"region": "🇩🇪",
"software": {
"name": "poke",
"version": "latest",
"branch": "dev"
}

View File

@@ -73,6 +73,7 @@ const proxy = async (req, res) => {
return res.status(400).send("Malformed URL");
}
// Sanity check, to avoid being used as an open proxy
if (!URL_WHITELIST.includes(url.host)) {
console.log(`==> Refusing to proxy host ${url.host}`);
res.status(401).send(`Hostname '${url.host}' is not permitted`);

View File

@@ -28,17 +28,17 @@
"node-libcurl": "^3.0.0",
"uglify-js": "^3.17.4",
"ping": "^0.4.4",
"undici": "^5.25.2",
"undici": "^6.14.0",
"express-rate-limit": "^7.0.2",
"toobusy-js": "^0.5.1",
"quick.db": "^7.1.3",
"activitypub-express": "^4.4.1",
"duck-duck-scrape": "^2.2.5",
"google-it": "^1.6.4",
"youtubei.js": "^9.2.0"
"youtubei.js": "^9.3.0"
},
"engines": {
"node": "16.x"
"node": ">=18"
},
"repository": {
"url": "https://codeberg.org/Ashley/poketube"

View File

@@ -32,9 +32,19 @@
const media_proxy = require("./src/libpoketube/libpoketube-video.js");
const { sinit } = require("./src/libpoketube/init/superinit.js");
const innertube = require("./src/libpoketube/libpoketube-youtubei-objects.json");
const fs = require("fs");
const config = require("./config.json");
const u = await media_proxy();
fs.readFile("ascii_txt.txt", "utf8", (err, data) => {
if (err) {
console.error("Error reading the file:", err);
return;
}
// Log the ASCII art to the console
console.log(data);
});
initlog("Loading...");
initlog(
"[Welcome] Welcome To Poke - The ultimate privacy app - :3 " +
@@ -65,11 +75,10 @@
const sha384 = modules.hash;
const rateLimit = require("express-rate-limit");
const limiter = rateLimit({
windowMs:45 * 1000, // 45 Seconds
max: 886, // limit each IP to 866 requests per windowMs
});
const limiter = rateLimit({
windowMs: 45 * 1000, // 45 Seconds
max: 886, // limit each IP to 866 requests per windowMs
});
var app = modules.express();
app.use(limiter);
@@ -79,7 +88,7 @@
app.use(modules.useragent.express());
app.use(modules.express.json()); // for parsing application/json
app.enable("trust proxy");
var toobusy = require('toobusy-js')
var toobusy = require("toobusy-js");
const renderTemplate = async (res, req, template, data = {}) => {
res.render(
@@ -88,25 +97,24 @@
);
};
// Set check interval to a faster value. This will catch more latency spikes
// but may cause the check to be too sensitive.
toobusy.interval(110);
// Set check interval to a faster value. This will catch more latency spikes
// but may cause the check to be too sensitive.
toobusy.interval(110);
toobusy.maxLag(3500);
toobusy.maxLag(3500);
app.use(function(req, res, next) {
if (toobusy()) {
res.send(503, "I'm busy right now, sorry.");
} else {
next();
}
});
toobusy.onLag(function(currentLag) {
process.exit(1);
console.log("Event loop lag detected! Latency: " + currentLag + "ms");
});
app.use(function (req, res, next) {
if (toobusy()) {
res.send(503, "I'm busy right now, sorry.");
} else {
next();
}
});
toobusy.onLag(function (currentLag) {
process.exit(1);
console.log("Event loop lag detected! Latency: " + currentLag + "ms");
});
const random_words = [
"banana pie",
@@ -140,8 +148,8 @@ toobusy.maxLag(3500);
res.header("secure-poketube-instance", "1");
// opt out of googles "FLOC" bullcrap :p See https://spreadprivacy.com/block-floc-with-duckduckgo/
res.header("Permissions-Policy", "interest-cohort=()")
res.header("software-name", "poke")
res.header("Permissions-Policy", "interest-cohort=()");
res.header("software-name", "poke");
next();
});
@@ -162,10 +170,22 @@ toobusy.maxLag(3500);
});
app.use(function (req, res, next) {
res.header("X-PokeTube-Youtube-Client-Name", innertube.innertube.CONTEXT_CLIENT.INNERTUBE_CONTEXT_CLIENT_NAME);
res.header("Hey-there", "Do u wanna help poke? contributons are welcome :3 https://codeberg.org/Ashley/poke")
res.header("X-PokeTube-Youtube-Client-Version", innertube.innertube.CLIENT.clientVersion);
res.header("X-PokeTube-Client-name", innertube.innertube.CLIENT.projectClientName);
res.header(
"X-PokeTube-Youtube-Client-Name",
innertube.innertube.CONTEXT_CLIENT.INNERTUBE_CONTEXT_CLIENT_NAME
);
res.header(
"Hey-there",
"Do u wanna help poke? contributons are welcome :3 https://codeberg.org/Ashley/poke"
);
res.header(
"X-PokeTube-Youtube-Client-Version",
innertube.innertube.CLIENT.clientVersion
);
res.header(
"X-PokeTube-Client-name",
innertube.innertube.CLIENT.projectClientName
);
res.header("X-PokeTube-Speeder", "3 seconds no cache, 280ms w/cache");
res.header("X-HOSTNAME", req.hostname);
if (req.url.match(/^\/(css|js|img|font)\/.+/)) {

View File

@@ -47,15 +47,60 @@ const splash = [
"pika!",
"fsf.org",
"ssfffssfssfffaassssfsdf!",
"𝓯𝓻𝓮𝓪𝓴𝔂poke",
"can you save my hds?",
"sahlo folina!",
"we come for you!",
"no chances!",
"dema dont control us!",
"i see your problem is, your proctologist",
"got both hands on your shoulder",
"while ur bottomless!",
"you should bounce bounce bounce man!",
"its lavish!",
"im vibin, vibin!",
"i would swim the paladin strait",
"hello clancy!",
"NO NOT ME,ITS FOR A FRIEND",
"im fairly local!",
"i dont wanna go like this!",
"east is up!",
"not done, josh dun!",
"your the judge, oh no!",
"I dont wanna backslide",
"welcome back to trench!",
"sai is propaganda!",
" •|i|• Ø i+! ].[",
"stay alive! |-/",
"the few, the proud, the Emotional!",
"ill morph into someone else",
"still alive",
"follow the torches",
"i created this world!",
"to feel some control!",
"destory it if i want!",
"o7 keons",
"at least let me clean my room",
"100+ stars on gh!",
"let the vibe slide over me!",
"sip a capri sun like its don peregon",
"now even gayer!",
"its joever..",
"poketube!!!",
"rvlt.gg/poke!",
"discord.poketube.fun!",
"women are pretty!",
"men are handsome!",
"enbys are cute!",
"you are cute :3",
"stallmansupport.org!!!"
"read if cute!",
"stallmansupport.org!!!",
"does not include revolt.chat!",
"revolt-free!",
"not for revolt users!",
"%99 free of revolt!",
"does include nya~!!!",
"you're literally showing ads!",
"actually stable! :3"
]
@@ -84,7 +129,7 @@ module.exports = function (app, config, renderTemplate) {
const t = getJson(await invtrend.text());
const invpopular = await fetch(
`https://invid-api.poketube.fun/api/v1/popular`
`https://invid-api.poketube.fun/bHj665PpYhUdPWuKPfZuQGoX/api/v1/popular`
);
const p = getJson(await invpopular.text());
@@ -116,6 +161,17 @@ module.exports = function (app, config, renderTemplate) {
const random = splash[Math.floor(Math.random() * splash.length)];
const browser = req.useragent.browser;
const isOldWindows = (uaos === "Windows 7" || uaos === "Windows 8") && browser === "Firefox";
var proxyurl = config.p_url;
const secure = [
"poketube.fun",
"localhost" // Testing purposes
].includes(req.hostname);
const verify = [
"poketube.fun",
"poke.ashley0143.xyz",
"localhost"
].includes(req.hostname);
const rendermainpage = () => {
if (req.useragent.isMobile) {
@@ -123,7 +179,11 @@ module.exports = function (app, config, renderTemplate) {
}
return renderTemplate(res, req, "landing.ejs", {
secure,
embedtype:req.query.embedtype,
verify,
isOldWindows,
proxyurl,
random
});
};

View File

@@ -70,17 +70,17 @@ app.get("/api/set-channel-subs", async function (req, res) {
channelName: channelToSubName,
avatar: avatar, // Store the avatar URL along with the subscription
});
res.json("user subbed");
res.redirect("/account-create")
} else if (!db.get(`user.${userid}.subs.${channelToSub}`)) {
// If the user has 'subs' but not this particular subscription, add it
db.set(`user.${userid}.subs.${channelToSub}`, {
channelName: channelToSubName,
avatar: avatar, // Store the avatar URL along with the subscription
});
res.json("user subbed");
res.redirect("/account-create")
} else {
// If the user is already subscribed to this channel, send a message indicating so
res.json("user already subscribed");
res.json("ur already subscribed");
}
});
@@ -104,10 +104,17 @@ app.get("/account-create", async function (req, res) {
}
});
app.get("/my-acc", async function (req, res) {
var userid = req.query.ID
var userSubs = db.get(`user.${userid}.subs`)
renderTemplate(res, req, "account-me.ejs", { userid, userSubs });
app.get("/my-acc", async function (req, res) {
var userid = req.query.ID;
// Check if userid is more than 7 characters
if (userid.length > 7) {
return res.status(400).json({ error: "IDs can be 7 characters max silly :3" });
}
var userSubs = db.get(`user.${userid}.subs`);
renderTemplate(res, req, "account-me.ejs", { userid, userSubs });
});
};

View File

@@ -30,14 +30,15 @@ const pkg = require("../../../package.json");
const os = require('os');
const cnf = require("../../../config.json");
const innertube = require("../libpoketube-youtubei-objects.json");
const { execSync } = require('child_process');
const verfull = "v24.2801-JeSsIcA-MAJOR-stable-dev-nonLTS-git-MTcwNjQzMTc0OQ==";
const versmol = "v24.2801-JeSsIcA"
const verfull = "v24.1906-sho-MAJOR_UPDATE-stable-dev-nonLTS-git-MTcxODc5NDY3NQ==";
const versmol = "v24.1906-sho"
const branch = "dev/master";
const codename = "jessica";
const versionnumber = "273";
const relaseunixdate = "MTcwNjQzMTc0OQ=="
const updatequote = "Empty your cup so that it may be filled; become devoid to gain totality. - Bruce Lee"
const codename = "sho";
const versionnumber = "293";
const relaseunixdate = "MTcxODc5NDY3NQ=="
const updatequote = "pls fund vennie plush -Bims"
module.exports = function (app, config, renderTemplate) {
@@ -116,7 +117,7 @@ app.get("/avatars/:v", async function (req, res) {
var format = "mp3";
}
const url = `https://tube.kuylar.dev/proxy/media/${v}/${q}`;
const url = `https://tube-nightly.kuylar.dev/proxy/media/${v}/${q}`;
res.redirect(url);
});
@@ -192,6 +193,18 @@ app.use("/sb/i/:v/:imagePath/:img", async function (req, res) {
f.body.pipe(res);
});
app.get("/api/improving-poke/getsugesstions", async (req, res) => {
const query = req.query.q;
let url = `https://invid-api.poketube.fun/bHj665PpYhUdPWuKPfZuQGoX/api/v1/search/suggestions?q=${query}`;
let f = await modules.fetch(url, {
method: req.method,
});
f.body.pipe(res);
});
app.get("/api/redirect", async (req, res) => {
const red_url = atob(req.query.u);
@@ -211,8 +224,10 @@ app.use("/sb/i/:v/:imagePath/:img", async function (req, res) {
});
app.get("/api/version.json", async (req, res) => {
let latestCommitHash;
const invidious = await modules
.fetch("https://invid-api.poketube.fun/api/v1/stats")
.fetch("https://invid-api.poketube.fun/bHj665PpYhUdPWuKPfZuQGoX/api/v1/stats")
.then((res) => res.text())
.then((txt) => getJson(txt));
@@ -220,10 +235,20 @@ app.use("/sb/i/:v/:imagePath/:img", async function (req, res) {
const totalMemory = os.totalmem() / (1024 * 1024 * 1024);
const roundedMemory = totalMemory.toFixed(2);
execSync('git rev-list HEAD -n 1 --abbrev-commit', (error, stdout, stderr) => {
if (error || stderr) {
console.error(`Error executing command: ${error || stderr}`);
return;
}
latestCommitHash = stdout.trim();
});
const response = {
pt_version: {
version:versmol,
version_full:verfull
version_full:verfull,
commit: latestCommitHash
},
branch,
updatequote,
@@ -260,7 +285,7 @@ app.use("/sb/i/:v/:imagePath/:img", async function (req, res) {
const { fetch } = await import("undici");
try {
const url = `https://codeberg.org/Ashley/poketube/raw/branch/main/instances.json`;
const url = `https://raw.githubusercontent.com/ashley0143/poke/main/instances.json`;
let f = await fetch(url)
.then((res) => res.text())

View File

@@ -108,13 +108,26 @@ module.exports = function (app, config, renderTemplate) {
const poketube_universe_value = "poketube_smart_search";
if (query?.includes("youtube.com/watch?v=")) {
try {
var videoid = query?.split("v=");
if (query) {
let redirectTo = null;
let splitParam = ":";
res.redirect("/watch?v=" + videoid[1]);
} catch {
return;
if (query.includes("youtube.com/watch?v=")) {
redirectTo = "/watch";
splitParam = "?v=";
} else if (query.includes("channel:")) {
redirectTo = "/channel?id=";
} else if (query.includes("video:")) {
redirectTo = "/watch?v=";
}
if (redirectTo) {
try {
const id = query.split(splitParam)[1];
res.redirect(`${redirectTo}${splitParam}${id}`);
} catch {
return;
}
}
}
@@ -171,70 +184,7 @@ module.exports = function (app, config, renderTemplate) {
});
app.get("/web", async (req, res) => {
const query = req.query.query;
const tab = req.query.tab;
const { fetch } = await import("undici");
const search = await fetch(
`https://librex.uk.to/api.php?q=${query}&p=1&t=0`
);
const web = getJson(await search.text());
if (req.query.lucky === "true") {
res.redirect("/im-feeling-lucky?query=" + query);
}
var uaos = req.useragent.os;
var IsOldWindows;
if (uaos == "Windows 7" && req.useragent.browser == "Firefox") {
IsOldWindows = true;
} else if (uaos == "Windows 8" && req.useragent.browser == "Firefox") {
IsOldWindows = true;
} else {
IsOldWindows = false;
}
const poketube_universe_value = "poketube_smart_search";
if (query?.includes("youtube.com/watch?v=")) {
try {
var videoid = query?.split("v=");
res.redirect("/watch?v=" + videoid[1]);
} catch {
return;
}
}
if (query && query.startsWith("!") && query.length > 2) {
res.redirect("https://lite.duckduckgo.com/lite/?q=" + query);
}
if (!query) {
return renderTemplate(res, req, "search-web-main.ejs");
}
let continuation = req.query.continuation || "";
try {
const results = Object.entries(web);
renderTemplate(res, req, "search-web.ejs", {
j: "",
IsOldWindows,
h: "",
tab,
continuation,
isMobile: req.useragent.isMobile,
results: results,
q: query,
summary: "",
});
} catch (error) {
console.error(`Error while searching for '${query}':`, error);
res.redirect("/");
}
res.redirect("/");
});
app.get("/channel/", async (req, res) => {
@@ -255,6 +205,7 @@ module.exports = function (app, config, renderTemplate) {
if (ID.endsWith("@poketube.fun")) {
ID = ID.slice(0, -"@poketube.fun".length);
}
const tab = req.query.tab;
const cache = {};
@@ -306,8 +257,8 @@ module.exports = function (app, config, renderTemplate) {
)}/${ID}/?hl=en-US`;
const channelINVUrl = `${apiUrl}${ID}/`;
const checkPronoun = async (id) => (await (await fetch('https://codeberg.org/ashley/poke-pronouns-db/raw/branch/main/pronouns.json')).json())[id] || `no pronouns set`;
const pronoun = await checkPronoun(ID);
const pronoun = "no pronouns :c";
var [tj, shorts, playlist, stream, c, cinv] = await Promise.all([
getChannelData(channelUrl),
@@ -346,7 +297,7 @@ module.exports = function (app, config, renderTemplate) {
var { tj, shorts, stream, c, boutJson } = cache[ID].result;
}
const subscribers = boutJson.Channel?.Metadata.Subscribers;
const subscribers = convert(cinv?.subCount);
const about = boutJson?.Channel?.Contents?.ItemSection?.About;
const description = about?.Description.toString().replace(
/\n/g,
@@ -354,10 +305,25 @@ module.exports = function (app, config, renderTemplate) {
);
const dnoreplace = about?.Description.toString();
if (continuation) {
const currentAuthorId = String(cinv.authorId).trim();
const firstVideoAuthorId = String(tj?.videos[0].authorId).trim();
if (currentAuthorId.localeCompare(firstVideoAuthorId) !== 0) {
res.status(400).send("Continuation does not match the channel :c");
}
}
let ChannelFirstVideoObject = {
subCountText: "0",
authorVerified: false,
};
renderTemplate(res, req, "channel.ejs", {
ID,
tab,
shorts,
firstVideo: ChannelFirstVideoObject,
j: boutJson,
sort: sort_by,
stream,

View File

@@ -210,11 +210,20 @@ module.exports = function (app, config, renderTemplate) {
}
});
app.get("/game-hub", function (req, res) {
renderTemplate(res, req, "gamehub.ejs", {
game: req.query.game,
});
app.get("/game-hub", function (req, res) {
var gameslist = ["pong", "tic-tac-toe", "sudoku", "snake"];
var requestedGame = req.query.game;
if (req.query.game && !gameslist.includes(requestedGame)) {
return renderTemplate(res, req, "404.ejs");
}
renderTemplate(res, req, "gamehub.ejs", {
game: requestedGame,
});
});
app.get("/static/:id", (req, res) => {
const id = req.params.id;

View File

@@ -141,8 +141,8 @@ function lightOrDark(color) {
}
function isDntEnabled(req) {
const dntHeader = req.header('DNT');
return dntHeader && (dntHeader === '1' || dntHeader === 'true');
const dntHeader = req.header("DNT");
return dntHeader && (dntHeader === "1" || dntHeader === "true");
}
function IsInArray(array, id) {
@@ -168,7 +168,14 @@ const X_REGEX = /https:\/\/twitter.com\/(?<name>[\w\d_-]+)/;
const CORD_REGEX = /https:\/\/discord.gg\/(?<name>[\w\d_-]+)/;
const TWITCH_REGEX = /https:\/\/twitch.tv\/(?<name>[\w\d_-]+)/;
const REDDIT_REGEX = /https:\/\/reddit\.com\/r\/(?<name>[\w\d_-]+)/;
/* meta software */
const INSTAGRAM_REGEX = /https:\/\/www.instagram.com\/(?<name>[\w\d_-]+)/;
const THREADS_BY_INSTAGRAM_REGEX = /https:\/\/www.threads.net\/(?<name>[\w\d_-]+)/;
const FACEBOOK_REGEX = /https:\/\/www.facebook.com\/(?<name>[\w\d_-]+)/;
/* music */
const LNKTO_REGEX = /https:\/\/(?<subdomain>\w+).lnk.to\/(?<path>\S*)/;
module.exports = function (app, config, renderTemplate) {
app.get("/encryption", async function (req, res) {
@@ -190,6 +197,13 @@ module.exports = function (app, config, renderTemplate) {
return res.redirect("/");
}
const regex = new RegExp("^([a-zA-Z0-9_-]{11})");
const isMatch = regex.test(v);
if (!isMatch) {
return res.redirect("/");
}
var contentlang = hl || "en-US";
var contentregion = region || "US";
@@ -203,148 +217,162 @@ module.exports = function (app, config, renderTemplate) {
const secure = ["poketube.fun"].includes(req.hostname);
const verify = req.hostname === "poketube.sudovanilla.com";
INNERTUBE.getYouTubeApiVideo(f, v, contentlang, contentregion).then((data) => {
try {
const k = data?.video;
const channel_uploads = data?.channel_uploads
const json = data?.json;
const engagement = data?.engagement;
const inv_comments = data?.comments || "Disabled";
const inv_vid = data?.vid;
const desc = data?.desc || "";
let d = false;
if (desc !== "[object Object]") {
d = desc.toString().replace(/\n/g, " <br> ");
}
const descriptionString = String(inv_vid?.description);
function extractInfo(regex) {
return descriptionString !== "[object Object]"
? (regex.exec(descriptionString) ?? {}).groups
: undefined;
}
const support = extractInfo(PATREON_REGEX);
const twitter = extractInfo(X_REGEX);
const discord = extractInfo(CORD_REGEX);
const twitch = extractInfo(TWITCH_REGEX);
const reddit = extractInfo(REDDIT_REGEX);
const instagram = extractInfo(INSTAGRAM_REGEX);
var proxyurl = config.p_url;
var vidurl = u.url;
var isvidious = u.isInvidiousURL;
var mediaproxy = config.media_proxy
if (inv_vid?.genre === "Music") {
var vidurl = u.losslessurl;
}
var vidurl = config.videourl;
var isvidious = true;
if (req.useragent.source.includes("Pardus")) {
var vidurl = "https://iv.ggtyler.dev";
var mediaproxy = "https://media-proxy.ashley0143.xyz"
var isvidious = true;
var isSchoolProxy = "";
}
// unused
let badges = "";
let comments = "";
let nnn = "";
const dnt_val = isDntEnabled(req)
if (
inv_vid?.error ===
"The uploader has not made this video available in your country" ||
inv_vid?.error === "This video is not available"
) {
res.send(
"error: " + inv_vid.error + " please refresh the page please qt"
);
}
var uaos = req.useragent.os;
const browser = req.useragent.browser;
const IsOldWindows =
(uaos === "Windows 7" || uaos === "Windows 8") &&
browser === "Firefox";
if (uaos === "Windows XP" || uaos === "Windows Vista")
res.redirect("/lite?v=" + req.query.v);
if (req.query.from === "short") var shortsui = true;
INNERTUBE.getYouTubeApiVideo(f, v, contentlang, contentregion).then(
(data) => {
try {
renderTemplate(res, req, "poketube.ejs", {
color: data.color,
color2: data.color2,
linkify,
engagement,
IsOldWindows,
channelurlfixer,
support,
shortsui,
u: vidurl,
isvidious: isvidious,
video: json,
date: k.Video.uploadDate,
e,
a,
twitter,
k,
dm,
proxyurl,
media_proxy_url: mediaproxy,
instagram,
useragent: req.useragent,
verify,
discord,
turntomins,
twitch,
dnt_val,
reddit,
channel_uploads,
secure,
process,
isSchoolProxy,
sha384,
lightOrDark,
isMobile: req.useragent.isMobile,
tj: data.channel,
r,
qua: q,
inv: inv_comments,
convert,
universe,
wiki: data.wiki,
escapeHtml,
f,
t: config.t_url,
optout: m,
badges,
desc,
comments,
n: nnn,
inv_vid,
lyrics: "",
});
} catch {
const k = data?.video;
const channel_uploads = data?.channel_uploads;
const json = data?.json;
const engagement = data?.engagement;
const inv_comments = data?.comments || "Disabled";
const inv_vid = data?.vid;
const desc = data?.desc || "";
let d = false;
if (desc !== "[object Object]") {
d = desc.toString().replace(/\n/g, " <br> ");
}
const descriptionString = String(inv_vid?.description);
function extractInfo(regex) {
return descriptionString !== "[object Object]"
? (regex.exec(descriptionString) ?? {}).groups
: undefined;
}
const support = extractInfo(PATREON_REGEX);
const STUPID_ELON_MUSK_WEBSITE_HE_IS_TRYING_TO_CALL_IT_X_FOR_SOME_REASON_WHICH_IS_A_STUPID_NAME_THAT_SHOULD_HAVE_STOPPED_WITH_PAYPAL_WE_WILL_FOREVER_CALL_IT_TWITTER_AND_HE_CAN_DO_NOTHING_ABOUT_IT_LOL_FUCK_YOU_ELON_TRANS_RIGHTS_BTW = extractInfo(X_REGEX);
const linkto = extractInfo(LNKTO_REGEX);
const discord = extractInfo(CORD_REGEX);
const twitch = extractInfo(TWITCH_REGEX);
const reddit = extractInfo(REDDIT_REGEX);
const instagram = extractInfo(INSTAGRAM_REGEX);
const videoObject = inv_vid?.adaptiveFormats;
function findItag(adaptiveFormats) {
return;
}
const itag_hd = findItag(videoObject);
var proxyurl = config.p_url;
var vidurl = u.url;
var isvidious = u.isInvidiousURL;
var mediaproxy = config.media_proxy;
if (inv_vid?.genre === "Music") {
var vidurl = u.losslessurl;
}
var vidurl = config.videourl;
var isvidious = true;
if (req.useragent.source.includes("Pardus")) {
var vidurl = "https://iv.ggtyler.dev";
var mediaproxy = "https://nyc1.pokejan.ggtyler.dev/";
var isvidious = true;
var isSchoolProxy = "";
}
// unused
let badges = "";
let comments = "";
let nnn = "";
const dnt_val = isDntEnabled(req);
if (
inv_vid?.error ===
"The uploader has not made this video available in your country" ||
inv_vid?.error === "This video is not available"
) {
res.send(
"error: " + inv_vid.error + " please refresh the page please qt"
);
}
if (inv_vid?.error) {
renderTemplate(res, req, "404.ejs", {
v,
});
}
var uaos = req.useragent.os;
const browser = req.useragent.browser;
const IsOldWindows =
(uaos === "Windows 7" || uaos === "Windows 8") &&
browser === "Firefox";
if (uaos === "Windows XP" || uaos === "Windows Vista")
res.redirect("/lite?v=" + req.query.v);
if (req.query.from === "short") var shortsui = true;
try {
renderTemplate(res, req, "poketube.ejs", {
color: data.color,
color2: data.color2,
linkify,
engagement,
linkto,
IsOldWindows,
channelurlfixer,
itag_hd,
support,
shortsui,
u: vidurl,
isvidious: isvidious,
video: json,
date: k.Video.uploadDate,
e,
a,
twitter:STUPID_ELON_MUSK_WEBSITE_HE_IS_TRYING_TO_CALL_IT_X_FOR_SOME_REASON_WHICH_IS_A_STUPID_NAME_THAT_SHOULD_HAVE_STOPPED_WITH_PAYPAL_WE_WILL_FOREVER_CALL_IT_TWITTER_AND_HE_CAN_DO_NOTHING_ABOUT_IT_LOL_FUCK_YOU_ELON_TRANS_RIGHTS_BTW,
k,
dm,
proxyurl,
media_proxy_url: mediaproxy,
instagram,
useragent: req.useragent,
verify,
discord,
turntomins,
twitch,
dnt_val,
reddit,
channel_uploads,
secure,
process,
isSchoolProxy,
sha384,
lightOrDark,
isMobile: req.useragent.isMobile,
tj: data.channel,
r,
qua: q,
inv: inv_comments,
convert,
universe,
wiki: data.wiki,
escapeHtml,
f,
t: config.t_url,
optout: m,
badges,
desc,
comments,
n: nnn,
inv_vid,
lyrics: "",
});
} catch {
return;
}
} catch (error) {
console.error(error);
return res.redirect(`/watch?v=${req.query.v}&fx=1&err=${error}`);
}
} catch (error) {
console.error(error);
return res.redirect(`/watch?v=${req.query.v}&fx=1&err=${error}`);
}
});
);
});
app.get("/lite", async (req, res) => {
@@ -367,144 +395,143 @@ module.exports = function (app, config, renderTemplate) {
const secure = ["poketube.fun"].includes(req.hostname);
const verify = req.hostname === "poketube.sudovanilla.com";
INNERTUBE.getYouTubeApiVideo(f, v, contentlang, contentregion).then((data) => {
try {
const k = data?.video;
const channel_uploads = data?.channel_uploads
const json = data?.json;
const engagement = data?.engagement;
const inv_comments = data?.comments || "Disabled";
const inv_vid = data?.vid;
const desc = data?.desc || "";
let d = false;
if (desc !== "[object Object]") {
d = desc.toString().replace(/\n/g, " <br> ");
}
const descriptionString = String(inv_vid?.description);
function extractInfo(regex) {
return descriptionString !== "[object Object]"
? (regex.exec(descriptionString) ?? {}).groups
: undefined;
}
const support = extractInfo(PATREON_REGEX);
const twitter = extractInfo(X_REGEX);
const discord = extractInfo(CORD_REGEX);
const twitch = extractInfo(TWITCH_REGEX);
const reddit = extractInfo(REDDIT_REGEX);
const instagram = extractInfo(INSTAGRAM_REGEX);
var proxyurl = config.p_url;
var vidurl = u.url;
var isvidious = u.isInvidiousURL;
var mediaproxy = config.media_proxy
if (inv_vid?.genre === "Music") {
var vidurl = u.losslessurl;
}
var vidurl = "https://eu-proxy.poketube.fun";
var isvidious = true;
if (req.useragent.source.includes("Pardus")) {
var vidurl = "https://iv.ggtyler.dev";
var mediaproxy = "https://media-proxy.ashley0143.xyz"
var isvidious = true;
var isSchoolProxy = "";
}
// unused
let badges = "";
let comments = "";
let nnn = "";
const dnt_val = isDntEnabled(req)
if (
inv_vid?.error ===
"The uploader has not made this video available in your country" ||
inv_vid?.error === "This video is not available"
) {
res.send(
"error: " + inv_vid.error + " please refresh the page please qt"
);
}
var uaos = req.useragent.os;
const browser = req.useragent.browser;
const IsOldWindows =
(uaos === "Windows 7" || uaos === "Windows 8") &&
browser === "Firefox";
if (req.query.from === "short") var shortsui = true;
INNERTUBE.getYouTubeApiVideo(f, v, contentlang, contentregion).then(
(data) => {
try {
renderTemplate(res, req, "lite.ejs", {
color: data.color,
color2: data.color2,
linkify,
engagement,
IsOldWindows,
channelurlfixer,
support,
shortsui,
u: vidurl,
isvidious: isvidious,
video: json,
date: k.Video.uploadDate,
e,
a,
twitter,
k,
dm,
proxyurl,
media_proxy_url: mediaproxy,
instagram,
useragent: req.useragent,
verify,
discord,
turntomins,
twitch,
dnt_val,
reddit,
channel_uploads,
secure,
process,
isSchoolProxy,
sha384,
lightOrDark,
isMobile: req.useragent.isMobile,
tj: data.channel,
r,
qua: q,
inv: inv_comments,
convert,
universe,
wiki: data.wiki,
f,
t: config.t_url,
optout: m,
badges,
desc,
comments,
n: nnn,
inv_vid,
lyrics: "",
});
} catch {
return;
const k = data?.video;
const channel_uploads = data?.channel_uploads;
const json = data?.json;
const engagement = data?.engagement;
const inv_comments = data?.comments || "Disabled";
const inv_vid = data?.vid;
const desc = data?.desc || "";
let d = false;
if (desc !== "[object Object]") {
d = desc.toString().replace(/\n/g, " <br> ");
}
const descriptionString = String(inv_vid?.description);
function extractInfo(regex) {
return descriptionString !== "[object Object]"
? (regex.exec(descriptionString) ?? {}).groups
: undefined;
}
const support = extractInfo(PATREON_REGEX);
const twitter = extractInfo(X_REGEX);
const discord = extractInfo(CORD_REGEX);
const twitch = extractInfo(TWITCH_REGEX);
const reddit = extractInfo(REDDIT_REGEX);
const instagram = extractInfo(INSTAGRAM_REGEX);
var proxyurl = config.p_url;
var vidurl = u.url;
var isvidious = u.isInvidiousURL;
var mediaproxy = config.media_proxy;
if (inv_vid?.genre === "Music") {
var vidurl = u.losslessurl;
}
var vidurl = "https://eu-proxy.poketube.fun";
var isvidious = true;
if (req.useragent.source.includes("Pardus")) {
var vidurl = "https://iv.ggtyler.dev";
var mediaproxy = "https://media-proxy.ashley0143.xyz";
var isvidious = true;
var isSchoolProxy = "";
}
// unused
let badges = "";
let comments = "";
let nnn = "";
const dnt_val = isDntEnabled(req);
if (
inv_vid?.error ===
"The uploader has not made this video available in your country" ||
inv_vid?.error === "This video is not available"
) {
res.send(
"error: " + inv_vid.error + " please refresh the page please qt"
);
}
var uaos = req.useragent.os;
const browser = req.useragent.browser;
const IsOldWindows =
(uaos === "Windows 7" || uaos === "Windows 8") &&
browser === "Firefox";
if (req.query.from === "short") var shortsui = true;
try {
renderTemplate(res, req, "lite.ejs", {
color: data.color,
color2: data.color2,
linkify,
engagement,
IsOldWindows,
channelurlfixer,
support,
shortsui,
u: vidurl,
isvidious: isvidious,
video: json,
date: k.Video.uploadDate,
e,
a,
twitter,
k,
dm,
proxyurl,
media_proxy_url: mediaproxy,
instagram,
useragent: req.useragent,
verify,
discord,
turntomins,
twitch,
dnt_val,
reddit,
channel_uploads,
secure,
process,
isSchoolProxy,
sha384,
lightOrDark,
isMobile: req.useragent.isMobile,
tj: data.channel,
r,
qua: q,
inv: inv_comments,
convert,
universe,
wiki: data.wiki,
f,
t: config.t_url,
optout: m,
badges,
desc,
comments,
n: nnn,
inv_vid,
lyrics: "",
});
} catch {
return;
}
} catch (error) {
console.error(error);
return res.redirect(`/watch?v=${req.query.v}&fx=1&err=${error}`);
}
} catch (error) {
console.error(error);
return res.redirect(`/watch?v=${req.query.v}&fx=1&err=${error}`);
}
});
);
});
app.get("/music", async function (req, res) {

View File

@@ -11,7 +11,6 @@ const { curly } = require("node-libcurl");
const getdislikes = require("../libpoketube/libpoketube-dislikes.js");
const getColors = require("get-image-colors");
const config = require("../../config.json")
const { Innertube, UniversalCache } = require('youtubei.js');
/**
@@ -31,7 +30,13 @@ class InnerTubePokeVidious {
this.config = config;
this.cache = {};
this.language = "hl=en-US";
this.param = "2AMB"
this.param_legacy = "CgIIAdgDAQ%3D%3D"
this.apikey = "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8"
this.ANDROID_API_KEY = "AIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w"
this.ANDROID_APP_VERSION = "19.14.42"
this.ANDROID_VERSION = "13"
this.useragent = "com.google.android.youtube/19.14.42 (Linux; U; Android 12; US) gzip"
this.INNERTUBE_CONTEXT_CLIENT_VERSION = "1"
this.region = "region=US";
this.sqp = "-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBy_x4UUHLNDZtJtH0PXeQGoRFTgw";
@@ -71,7 +76,6 @@ class InnerTubePokeVidious {
async getYouTubeApiVideo(f, v, contentlang, contentregion) {
const { fetch } = await import("undici");
const yt = await Innertube.create({ cache: new UniversalCache(false), generate_session_locally: true });
if (v == null) return "Gib ID";
@@ -84,7 +88,8 @@ class InnerTubePokeVidious {
let desc = "";
try {
const [videoInfo, videoData] = await Promise.all([
const [invComments, videoInfo, videoData] = await Promise.all([
fetch(`${this.config.invapi}/comments/${v}?hl=${contentlang}&region=${contentregion}&h=${btoa(Date.now())}`).then((res) => res.text()),
fetch(`${this.config.invapi}/videos/${v}?hl=${contentlang}&region=${contentregion}&h=${btoa(Date.now())}`).then((res) => res.text()),
curly
.get(`${this.config.tubeApi}video?v=${v}`, {
@@ -98,7 +103,7 @@ class InnerTubePokeVidious {
]);
const comments = await yt.getComments(v);
const comments = await this.getJson(invComments);
const vid = await this.getJson(videoInfo);
const { json, video } = videoData;
@@ -162,7 +167,9 @@ class InnerTubePokeVidious {
*/
isvalidvideo(v) {
if (v != "assets" && v != "cdn-cgi" && v != "404") {
return true;
const regex = new RegExp("^([a-zA-Z0-9_-]{11})");
const isMatch = regex.test(v);
return isMatch;
} else {
return false;
}
@@ -181,7 +188,7 @@ class InnerTubePokeVidious {
// Create an instance of InnerTubePokeVidious with the provided config
const pokeTubeApiCore = new InnerTubePokeVidious({
tubeApi: "https://inner-api.poketube.fun/api/",
invapi: "https://invid-api.poketube.fun/api/v1",
invapi: "https://invid-api.poketube.fun/bHj665PpYhUdPWuKPfZuQGoX/api/v1",
invapi_alt: config.proxylocation === "EU" ? "https://invid-api.poketube.fun/api/v1" : "https://iv.ggtyler.dev/api/v1",
dislikes: "https://returnyoutubedislikeapi.com/votes?videoId=",
t_url: "https://t.poketube.fun/",

View File

@@ -47,7 +47,6 @@ class PokeTubeDislikesAPIManager {
const { fetch } = await import("undici");
const engagement = await fetch(apiUrl).then((res) => res.json());
engagement.viewCount = this.videoId === "cc2-4ci4G84" ? 1406988074 : engagement.viewCount;
return engagement;
}

View File

@@ -14,7 +14,7 @@
"INNERTUBE_CONTEXT_CLIENT_NAME": "1",
"INNERTUBE_CONTEXT_CLIENT_VERSION": "2.20240214.05.00",
"INNERTUBE_CONTEXT_GL": "US",
"INNERTUBE_CONTEXT_HL": "en-US"
"INNERTUBE_CONTEXT_HL": "en"
},
"LATEST_ECATCHER_SERVICE_PARAMS": { "client.name": "WEB" },
"INNERTUBE_API_KEYS": {

View File

@@ -0,0 +1,5 @@
TIME_BEFORE_DELETE=30
INACTIVE_TIME_BEFORE_DELETE=3600
PORT=45872
# DO NOT PUT A / AT THE END OF THE URL
PROXY_URL=https://eu-proxy.poketube.fun

170
videobundler/.gitignore vendored Normal file
View File

@@ -0,0 +1,170 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
.pdm.toml
.pdm-python
.pdm-build/
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
bin/
include/
lib64/
pyvenv.cfg
*.m4a
*.mp4
.env
done.*

21
videobundler/README.md Normal file
View File

@@ -0,0 +1,21 @@
# poke-videobundler
Takes 2 input streams, downloads them, and spits out a combined file.
## Installation
1. Make sure `ffmpeg` and Python 3 are all installed.
2. Download the program files to your computer - `main.py` and `.env.example`.
3. Run `python3 -m pip install aiohttp`.
## Usage
1. `python3 main.py`.
2. If everything went well, you shouldn't see any output at launch.
3. You will now be able to call the server at :3030.
## Endpoints
- `/`: Will return `{success:true}` if alive.
- `/[ANYTHING]?id=VIDEO_ID&audio_itag=AUDIO_ITAG&video_itag=VIDEO_ITAG`: Starts the merging process. ID is the youtube video ID, and itags are self explanatory. As a response, you will get a job ID that you will be able to use in future requests to query the video or its status. When this process is finished, the inactive autodelete counter will start, which will allow you to fetch the video until the countdown is over.
> Replace `[ANYTHING]` with absolutely anything, however it has to be unique to the request. Preferably use an UUID

104
videobundler/main.py Normal file
View File

@@ -0,0 +1,104 @@
import asyncio
import aiohttp
from aiohttp import web
import string
import os
import random
import subprocess
from aiohttp.web import Response, FileResponse
app = web.Application()
app.router._frozen = False
def get_random_string(length):
# choose from all lowercase letter
letters = string.ascii_lowercase
result_str = "".join(random.choice(letters) for i in range(length))
return result_str
async def run_command(cmd):
# Create subprocess
process = await asyncio.create_subprocess_shell(
cmd,
stdout=asyncio.subprocess.PIPE,
)
# Wait for the subprocess to finish
stdout, stderr = await process.communicate()
# Check for errors
if process.returncode!= 0:
# Log or handle the error
print(f"Command '{args}' failed with return code {process.returncode}")
return None
# Decode stdout and return
return stdout
async def merge(request: aiohttp.web.Request):
# register params
video_id: str = request.rel_url.query["id"]
audio_itag: str = request.rel_url.query["audio_itag"]
video_itag: str = request.rel_url.query["video_itag"]
# validate
if " " in video_id or len(video_id) > 11:
print(f"Video {video_id} flagged as invalid, dropping request")
return
if not audio_itag.isdigit():
print(f"Audio itag {audio_itag} flagged as invalid, dropping request")
return
if not video_itag.isdigit():
print(f"Video itag {video_itag} flagged as invalid, dropping request")
return
if "Firefox" in request.headers["User-Agent"]:
# Sane browser that supports streaming
cmdline = f"ffmpeg -i \"https://eu-proxy.poketube.fun/latest_version?id={video_id}&itag={audio_itag}&local=true\" -i \"https://eu-proxy.poketube.fun/latest_version?id={video_id}&itag={video_itag}&local=true\" -c copy -f mp4 -movflags frag_keyframe+empty_moov -"
process = await asyncio.create_subprocess_shell(
cmdline,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE
)
response = web.StreamResponse(status=206, reason='OK', headers={
'Content-Type': 'application/octet-stream',
'Transfer-Encoding': 'chunked',
'Content-Disposition': 'inline'
})
await response.prepare(request)
try:
while True:
chunk = await process.stdout.readline()
if not chunk:
break
await response.write(chunk)
except Exception as e:
print(f"Error streaming FFmpeg output: {e}")
#finally:
#await response.write_eof()
else:
# Likely to be chromium browser, so to avoid browser shitting itself we download file
job_id = f'{request.rel_url.query["id"]}_{request.rel_url.query["audio_itag"]}_{request.rel_url.query["video_itag"]}'
if os.path.isfile(f"{job_id}.mp4"):
return web.FileResponse(
path=f"{job_id}.mp4"
)
cmdline = f"ffmpeg -i \"https://eu-proxy.poketube.fun/latest_version?id={video_id}&itag={audio_itag}&local=true\" -i \"https://eu-proxy.poketube.fun/latest_version?id={video_id}&itag={video_itag}&local=true\" -c:v copy -f mp4 -movflags frag_keyframe+empty_moov {job_id}.mp4"
process = await asyncio.create_subprocess_shell(
cmdline
)
await process.wait()
if process.returncode != 0: # Log or handle the error
return None
response = FileResponse(path=f"{job_id}.mp4")
return response
async def ping(request):
return web.Response(body='{"success": true}', content_type="application/json")
async def init_app():
app.router.add_get("/{id:.+}", merge)
app.router.add_get("/", ping)
return app
if __name__ == '__main__':
loop = asyncio.get_event_loop()
app = loop.run_until_complete(init_app())
web.run_app(app, port=3030)