Compare commits
1 commit
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7a6a02b87c |
58 changed files with 9116 additions and 3572 deletions
|
|
@ -1,19 +1,2 @@
|
|||
node_modules
|
||||
.gitpod.yml
|
||||
.vscode
|
||||
.gitattributes
|
||||
.well-known
|
||||
views/archive
|
||||
ngrok.exe
|
||||
pnpm-lock.yaml
|
||||
debug.log
|
||||
lib/rammerhead/sessions/*
|
||||
!lib/rammerhead/sessions/.gitkeep
|
||||
lib/rammerhead/cache-js/*
|
||||
!lib/rammerhead/cache-js/.gitkeep
|
||||
views/dist/*
|
||||
src/.shutdown
|
||||
lib/rammerhead/src/client/hammerhead.min.js
|
||||
lib/rammerhead/src/client/rammerhead.min.js
|
||||
views/archive/gfiles/rarch/roms
|
||||
.idea
|
||||
node_modules/
|
||||
views/archive/
|
||||
|
|
|
|||
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
|
|
@ -1,7 +1,7 @@
|
|||
# These are supported funding model platforms
|
||||
|
||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: holyunblockerlts
|
||||
patreon: #
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
|
|
|
|||
11
Dockerfile
11
Dockerfile
|
|
@ -4,20 +4,15 @@ WORKDIR /app
|
|||
|
||||
LABEL org.opencontainers.image.title="Holy Unblocker LTS" \
|
||||
org.opencontainers.image.description="An effective, privacy-focused web proxy service" \
|
||||
org.opencontainers.image.version="6.9.3" \
|
||||
org.opencontainers.image.version="6.8.5" \
|
||||
org.opencontainers.image.authors="Holy Unblocker Team" \
|
||||
org.opencontainers.image.source="https://github.com/QuiteAFancyEmerald/Holy-Unblocker/"
|
||||
|
||||
RUN apk add --no-cache tor bash
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN npm run fresh-install
|
||||
RUN npm run build
|
||||
|
||||
EXPOSE 8080 9050 9051
|
||||
EXPOSE 8080
|
||||
|
||||
COPY serve.sh /serve.sh
|
||||
RUN chmod +x /serve.sh
|
||||
|
||||
CMD ["/serve.sh"]
|
||||
CMD ["node", "backend.js"]
|
||||
229
README.md
229
README.md
|
|
@ -9,11 +9,13 @@
|
|||
[](https://hub.docker.com/r/quiteafancyemerald/holy-unblocker)
|
||||
[](https://hub.docker.com/r/quiteafancyemerald/holy-unblocker)
|
||||
|
||||
Holy Unblocker LTS is an experimental web proxy service that can bypass web filters or "blockers" regardless of whether the method of censorship is client-side or network-based. This includes the ability to bypass content blockers from governments, chrome extensions, localized client firewalls, and network-related filters. The project even allows the ability to browse Tor/Onion sites in any browser (even Chromium) all through a website!
|
||||
Holy Unblocker LTS, an experimental web proxy service, can bypass web filters or "blockers" regardless of whether the method of censorship is client-side or network-based. This includes the potential ability to bypass content blockers from governments, chrome extensions, localized client firewalls, and network-related filters. The project even allows the ability to browse Tor/Onion sites in any browser (even Chromium) all through a website!
|
||||
|
||||
## You can support Holy Unblocker by starring the repository!
|
||||
|
||||
This project serves mostly as a proof of concept for the ideal clientless solution to bypassing censorship. A good use case of this project would be if you ever needed a clientless solution to use Tor or leave minimal traces of device activity. Simply host this project on any domain and have an alternative solution to a VPN without needing to download anything on said device. Being a secure web proxy service, it supports numerous sites while being updated frequently and concentrating on being easy to self-host. Holy Unblocker LTS works with a large number of sites, including YouTube, Discord, GeForce NOW and more!
|
||||
This project serves mostly as a proof of concept for the ideal clientless solution to bypassing censorship. Simply host this project on any domain and have an alternative solution to a VPN without needing to download anything on said device. Being a secure web proxy service, it supports numerous sites while being updated frequently and concentrating on being easy to self-host.
|
||||
|
||||
Works with a large number of sites, including YouTube, Discord, and more!
|
||||
Also has a good amount of locally hosted games featured on the site.
|
||||
|
||||
### Over 30M+ users since 2020. Thank you so much for the support I could have never imagined how massive the web proxy community has become.
|
||||
|
|
@ -24,15 +26,17 @@ Also has a good amount of locally hosted games featured on the site.
|
|||
|
||||
- Latest (master; built for FOSS and SEO)
|
||||
- Beta (pending changes; changes that may break things)
|
||||
- Production (v4, v5, v6; stable version of Holy Unblocker LTS. Changes for self hosting in production settings; max filtering evasion and request handling)
|
||||
- Stable (v4, v5, v6; stable version of Holy Unblocker LTS)
|
||||
- Production (changes for self hosting in production settings; max filtering evasion and request handling)
|
||||
</details>
|
||||
|
||||
#### Considering switching branches for self-hosting to a production branch!
|
||||
|
||||
View the <a href="#deploy-holy-unblocker">self-deployment options</a> if you wish to self host this project. Can't deploy using any of the free options? Check out Railway or look into cheap, paid VPS hosting solutions. If you don't wish to self-host join the discord for more official instance links that are restocked frequently.
|
||||
Read below for information if the official site is blocked or for obtaining more links. Can't deploy using any of the free options below? Check out Railway or look into cheap, paid VPS hosting solutions.
|
||||
|
||||
**Be sure to join Titanium Network's Discord for more official site links:** <a href="https://discord.gg/unblock">https://discord.gg/unblock</a>
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
> [!CAUTION]
|
||||
|
|
@ -41,16 +45,16 @@ View the <a href="#deploy-holy-unblocker">self-deployment options</a> if you wis
|
|||
> [!TIP]
|
||||
> Holy Unblocker LTS is optimized for self-hosting to provide you with maximum privacy control! Fork this repository and consider starring. You can self-host using either free or paid deployment options, or set it up on a dedicated instance (VPS) for enhanced performance.
|
||||
|
||||
| **Supported Sites** | **Features** |
|
||||
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Youtube | Built-in variety of open source web proxies with both a focus on speed and/or security |
|
||||
| Reddit | Features Source Randomization and DOM Masquerading to circumvent major filters effectively along with randomizations to proxy globals |
|
||||
| Discord | Tab title + icon customization using the Settings Menu for improved browsing history stealth |
|
||||
| Instagram | Adblocking support across all websites while surfing and low latency DNS on official servers |
|
||||
| Reddit.com | SOCKS5 and Onion routing support with Tor within the Settings Menu. Use Tor/Onion sites in any browser! |
|
||||
| GeForce NOW | Game library with moderately decent titles and open-source emulation projects |
|
||||
| Spotify | Bypass regional proxy blocks by swapping regions or enabling Tor |
|
||||
| And essentially all sites! | Built for intensive production loads and ease of setup |
|
||||
| **Supported Sites** | **Features** |
|
||||
| -------------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
||||
| Youtube | Built-in variety of open source web proxies with both a focus on speed and/or security |
|
||||
| CoolMathGames | Features "Source Randomization" to circumvent major filters effectively along with randomizations to proxy globals |
|
||||
| Discord | Tab title + icon customization using the Settings Menu for improved browsing stealth |
|
||||
| Now.gg | Adblocking support across all websites while surfing |
|
||||
| Reddit.com | SOCKS5 and Onion routing support with Tor within the Settings Menu. Use Tor/Onion sites in any browser! |
|
||||
| GeForce NOW | Game library with moderately decent titles and open-source emulation projects |
|
||||
| Spotify | Has frequent support articles for issues relating to various proxy instances |
|
||||
| And essentially all sites! | Built for intensive production loads and speed |
|
||||
|
||||
<img src="https://raw.githubusercontent.com/titaniumnetwork-dev/Holy-Unblocker/master/views/assets/img/preview/hu-v6.4.3-preview.png"></img>
|
||||
<img src="https://raw.githubusercontent.com/titaniumnetwork-dev/Holy-Unblocker/master/views/assets/img/preview/hu-v6.3.0-preview-settings.png"></img>
|
||||
|
|
@ -61,11 +65,10 @@ View the <a href="#deploy-holy-unblocker">self-deployment options</a> if you wis
|
|||
|
||||
[](https://app.koyeb.com/deploy?name=holy-unblocker&type=git&repository=QuiteAFancyEmerald%2FHoly-Unblocker&branch=v6.3_production&builder=buildpack&env%5B%5D=&ports=8080%3Bhttp%3B%2F)
|
||||
[](https://cloud.oracle.com/resourcemanager/stacks/create?zipUrl=https://github.com/BinBashBanana/deploy-buttons/archive/refs/heads/main.zip)
|
||||
[](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/QuiteAFancyEmerald/Holy-Unblocker/refs/heads/master/docker-compose.yml)
|
||||
|
||||
<details><summary>Alternative Free Sources</summary>
|
||||
<details><summary>More</summary>
|
||||
|
||||
[](https://app.cyclic.sh/api/app/deploy/shuttlenetwork/shuttle)
|
||||
[](https://render.com/deploy?repo=https://github.com/QuiteAFancyEmerald/Holy-Unblocker)
|
||||
[](https://fly.io/launch?repo=https://github.com/QuiteAFancyEmerald/Holy-Unblocker)
|
||||
|
||||
</details>
|
||||
|
|
@ -120,68 +123,43 @@ Replit is no longer free and Heroku has a set policy against web proxies. Try Gi
|
|||
|
||||
## How to Setup
|
||||
|
||||
#### It is highly recommended you switch branches via your IDE to a production released branch. Often the master branch contains unstable or WIP changes.|
|
||||
#### It is highly recommended you switch branches via your IDE to a production released branch. Often the master branch contains unstable or WIP changes.
|
||||
|
||||
#### Example: v6.x_production instead of master
|
||||
|
||||
### Terminal
|
||||
|
||||
Either use the button above to deploy to the deployment options above or type the commands below on a dedicated server
|
||||
|
||||
**THIS PROJECT REQUIRES NGINX NOT CADDY.**
|
||||
|
||||
Please ensure you are using Node 20.x as well:
|
||||
Either use the button above to deploy to the deployment options above or type the commands below on a dedicated server:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/QuiteAFancyEmerald/Holy-Unblocker.git
|
||||
git clone https://github.com/titaniumnetwork-dev/Holy-Unblocker.git
|
||||
|
||||
cd Holy-Unblocker
|
||||
|
||||
# Edit config.js and set production to true if you want to use pm2 (Allows for easier VPS hosting)
|
||||
# Using the configuration file you can automatically use pm2 if you are hosting on a VPS!
|
||||
npm run fresh-install
|
||||
npm start
|
||||
|
||||
# Or on subsequent uses...
|
||||
npm restart
|
||||
|
||||
# For killing any production processes made with pm2
|
||||
npm run kill
|
||||
|
||||
# For clearing respective Rammerhead cache
|
||||
npm run clean
|
||||
|
||||
# If you encounter any build errors...
|
||||
npm run build
|
||||
|
||||
# If you encounter any service errors...
|
||||
npm run test
|
||||
npm run proxy-validator
|
||||
```
|
||||
|
||||
This website is hosted locally with Scramjet, Ultraviolet (Wisp, Bare-Mux, EpoxyTransport, CurlTransport) and Rammerhead built-in.
|
||||
|
||||
### For security reasons when hosting with a reverse proxy PLEASE use NGINX not Caddy. This is due to wisp-js using loopbacks.
|
||||
You will need Node.js and Git installed; below is an example for Debian/Ubuntu.
|
||||
|
||||
#### Detailed Setup (Ubuntu Example)
|
||||
You will need Node.js 20.x and Git installed; below is an example for Debian/Ubuntu setup.
|
||||
<details>
|
||||
|
||||
For simplicity sake you can join the TN discord at discord.gg/unblock and request for mirror site links (that are restocked and unblocked).
|
||||
|
||||
### Hosting
|
||||
|
||||
If you wish to self-host however you will first need a VPS or hosting provider:
|
||||
|
||||
- https://docs.titaniumnetwork.org/guides/vps-hosting/
|
||||
- https://github.com/QuiteAFancyEmerald/Holy-Unblocker#deploy-holy-unblocker
|
||||
- https://docs.titaniumnetwork.org/guides/dns-setup/
|
||||
|
||||
### Dependencies
|
||||
|
||||
You will then need to setup git, nginx (or caddy) and Node.js. Here is an example for Ubuntu LTS:
|
||||
```
|
||||
sudo apt update
|
||||
sudo apt upgrade
|
||||
sudo apt install curl git nginx
|
||||
sudo apt install curl git nginx
|
||||
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
|
||||
|
||||
|
|
@ -190,40 +168,25 @@ export NVM_DIR="$HOME/.nvm"
|
|||
|
||||
nvm install 20
|
||||
nvm use 20
|
||||
```
|
||||
https://github.com/nvm-sh/nvm
|
||||
https://docs.titaniumnetwork.org/guides/nginx/
|
||||
|
||||
### Tor Support (Optional)
|
||||
https://github.com/QuiteAFancyEmerald/Holy-Unblocker#toronionsocks5-routing-setup
|
||||
|
||||
### Configurating Holy Unblocker
|
||||
Most important options are production along with the obfuscation and DOM masquerading techniques.
|
||||
|
||||
From there just configure as needed: https://github.com/QuiteAFancyEmerald/Holy-Unblocker#configuration
|
||||
|
||||
### Cloning and Running Holy Unblocker
|
||||
|
||||
Then run the respective process; if you have production set to true in the configuration pm2 will be automatically enabled with our own workers/cache system.
|
||||
|
||||
```
|
||||
git clone https://github.com/QuiteAFancyEmerald/Holy-Unblocker.git
|
||||
cd Holy-Unblocker
|
||||
|
||||
npm run fresh-start
|
||||
```
|
||||
npm run fresh-install
|
||||
|
||||
# Then edit config.json to change production to true to automatically use pm2
|
||||
|
||||
npm start
|
||||
|
||||
# Then setup a reverse proxy using NGINX; use the link below for the NGINX guide. You can edit the file in /etc/nginx
|
||||
|
||||
Then of course if you used NGINX or caddy please restart/reload it
|
||||
```
|
||||
sudo systemctl restart nginx
|
||||
sudo systemctl restart tor
|
||||
```
|
||||
|
||||
# For Tor look it up if you need it setup
|
||||
```
|
||||
</details>
|
||||
|
||||
|
||||
Resources for self-hosting:
|
||||
|
||||
Resources:
|
||||
- https://github.com/nvm-sh/nvm
|
||||
- https://docs.titaniumnetwork.org/guides/nginx/
|
||||
- https://docs.titaniumnetwork.org/guides/vps-hosting/
|
||||
|
|
@ -233,46 +196,21 @@ Resources for self-hosting:
|
|||
|
||||
#### Server Configuration Setup
|
||||
|
||||
The default PORT for the proxy when started is `http://localhost:8080`. You can change the PORT and other production metrics if needed in `./ecosystem.config.js`.
|
||||
The default place for the proxy when its started is `http://localhost:8080`, but you can change it if needed in `./ecosystem.config.js`. You can also modify the other configuration values at `./config.json`. To clarify you change the PORT and other production metrics via `./ecosystem.config.js`. Localized changes for source randomization, auto-minify, etc. are located in `./config.json`.
|
||||
|
||||
The default PORT for Rammerhead is `3000`. You can change this <a href="https://github.com/QuiteAFancyEmerald/Holy-Unblocker/blob/8f6dcfedb71439a43a19cc0a015ee6ca7e29fd11/lib/rammerhead/holy-config.js#L9">here</a>.
|
||||
|
||||
Every other localized changes for source randomization, auto-minify, etc. are located in `./config.json`.
|
||||
|
||||
**config.json**
|
||||
- `minifyScripts`: Automatically minify respective static assets upon starting the server.
|
||||
- `randomizeIdentifiers`: Enable experimental proxy global randomization for Ultraviolet. This reduces the chances of UV being detected by any extension based filters.
|
||||
- `production`: Utilize a pre-configured production setup for server hosting. Automatically has cache control, session jobs for Rammerhead and source rewrites setup.
|
||||
- `disguiseFiles`: Enable DOM masquerading which obfuscates real the real content fetches for HU LTS. This is done through disguising requests, decompressing and then reconstructing the DOM tree.
|
||||
- `usingSEO`: Enable Source Randomization which randomizes the source by swapping chunks of data specified in `./src/data.json`. Highly useful for masking keywords that will automatically flag or block Holy Unblocker LTS as well as preventing source blocks.
|
||||
|
||||
#### Tor/Onion/SOCKS5 Routing Setup
|
||||
|
||||
You need to setup Tor (no GUI need/GUI is alright. With GUI replace port 9050 with 9150) in order for the Onion Routing setting to work!
|
||||
#### Tor/Onion Routing Setup
|
||||
|
||||
Simply host Tor using this guide: https://tb-manual.torproject.org/installation/
|
||||
|
||||
Alternative Guide (for CLI): https://community.torproject.org/onion-services/setup/install/
|
||||
|
||||
If you are hosting Holy Unblocker LTS on a VPS utilizing Ubuntu consider attaching Tor to systemctl for easier production management. Once Tor is up and running on either Linux or Windows it will work automatically with Holy Unblocker LTS when enabled by the user via the Settings menu.
|
||||
|
||||
If you wish to use a custom HTTP/HTTPS/SOCKS5 proxy to route all traffic through for Scramjet and Ultraviolet this is handled in `./views/assets/js/register-sw.js.` Modify `proxyUrl` with the respective protocol and address. This is done via the proxy option for Wisp. You can change the cases as needed.
|
||||
|
||||
```js
|
||||
proxyUrl = {
|
||||
tor: 'socks5h://localhost:9050',
|
||||
eu: 'socks5h://localhost:7000',
|
||||
jp: 'socks5h://localhost:7001',
|
||||
}
|
||||
```
|
||||
|
||||
#### Proxy Configuration
|
||||
|
||||
The primary location for tweaking any web proxy related settings assigned via the Settings menu is `./views/assets/js/register-sw.js`. Here you can modify the provided transport options set locally via a cookie, swap out SOCKS5 proxies, change Onion routing ports, specify a blacklist, and more.
|
||||
|
||||
- `stockSW`: The default service worker configuration file for Ultraviolet. For Holy Unblocker however adblocking is automatically enabled so this is not used by default.
|
||||
- `blacklistSW`: A modified version of Ultraviolet that allows for blacklisting domains and adblocking.
|
||||
- `proxyUrl`: Specifies a SOCKS5/HTTPS/HTTP protocol URL defaulting to the default Tor proxy port. This can be swapped out with any valid port or SOCK5s proxy. This is done via the proxy option for both epoxy and libcurl.
|
||||
- `proxyUrl`: Specifies a SOCKS5 protocol URL defaulting to the default Tor proxy port. This can be swapped out with any valid port or SOCK5s proxy.
|
||||
- `transports`: Specifies any provided ports to be swapped via Bare-Mux and utilize Wisp.
|
||||
- `wispUrl`: Modify the pathname or url handling for Wisp
|
||||
- `defaultMode`: Specify the default transport used globally (can be swapped by the users still via the Settings menu)
|
||||
|
|
@ -326,9 +264,7 @@ prSet('pr-example', 'example');
|
|||
|
||||
#### Games Management
|
||||
|
||||
As stated above all game links that need to be appended to a page (including images and descriptions) are managed via the nav files in`./views/assets/json`.
|
||||
|
||||
Download the latest release <a href="https://github.com/QuiteAFancyEmerald/Holy-Unblocker/blob/master/views/GAMES.md">here</a> and extract it within a folder called `/views/archive`.
|
||||
As stated above all game links that need to be appended to a page (including images and descriptions) are managed via the nav files in`./views/assets/json`. Download the latest release <a href="https://github.com/QuiteAFancyEmerald/Holy-Unblocker/blob/master/views/GAMES.md">here</a>.
|
||||
|
||||
- `views/archive/g`: Contains any local or external HTML5/web games.
|
||||
- `views/archive/gfiles/flash`: Contains Ruffle (an Adobe Flash emulator) and a collection of flash games linked to an external CDN.
|
||||
|
|
@ -338,6 +274,32 @@ Download the latest release <a href="https://github.com/QuiteAFancyEmerald/Holy-
|
|||
|
||||
<details><summary>Web Pages</summary>
|
||||
|
||||
WIP
|
||||
|
||||
- `index.html`: The homepage of the site.
|
||||
- `error.html`: A general error page for all 404 errors and other errors.
|
||||
- `info.html`: Documentation (This page!)
|
||||
- `faq.html`: Frequently asked questions page.
|
||||
- `hidden.html`: Fake "Site not Found" page (unused)
|
||||
- `frame.html`: Handles any pages under stealth.
|
||||
- `surf.html`: Web Proxies page, page offers to be redirected to any proxies you would like to add. In this case, Ultraviolet and Rammerhead.
|
||||
- `credits.html`: List of all contributors to the site.
|
||||
- `bookmarklets.html`: Bookmarklets page, to be worked on more in the future.
|
||||
- `icons.html`: Information regarding Settings Menu page. Added this in for standard users.
|
||||
- `terms.html`: Terms of Services, AUP and Privacy Policy page.
|
||||
- `gtools.html`: Games page, help from @BinBashBanana and @kinglalu.
|
||||
- `games5.html`: HTML5 game navigation page.
|
||||
- `emulators.html`: Emulator navigation page, using <a href="https://github.com/BinBashBanana/webretro">webretro</a>.
|
||||
- `emulibrary.html`: Games page for emulated games (not included in public release)
|
||||
- `flash.html`: Games page for flash games, credits given to @BinBashBanana and Titanium Network for its assets.
|
||||
- `ultraviolet.html`: TODO
|
||||
- `scramjet.html`: TODO
|
||||
- `rammerhead.html`: TODO
|
||||
- `youtube.html`: A proxied version of Youtube running off the locally hosted Ultraviolet.
|
||||
- `discord.html`: Hub for the Discord proxy.
|
||||
- `reddit.html`: Hub for the Reddit proxy.
|
||||
</details>
|
||||
|
||||
### Structure Information
|
||||
|
||||
- `/views/`: The physical site base of Holy Unblocker goes here where static assets are served.
|
||||
|
|
@ -345,66 +307,69 @@ Download the latest release <a href="https://github.com/QuiteAFancyEmerald/Holy-
|
|||
|
||||
#### Details of `/views/`
|
||||
|
||||
- `/dist/` is used for minfied files. Created on build.
|
||||
- `/archive/` is used for game pages and vibeOS.
|
||||
- `/pages/` is used for the HTML for the site.
|
||||
- `/assets/` is used for storing various CSS, JS, image, and JSON files.
|
||||
- `/scram/` contains the respective local Scramjet implementation. Some files are overridden by the node module.
|
||||
- `/uv/` contains the UV implementation.
|
||||
|
||||
#### Scripts located in `/views/assets/js/`
|
||||
|
||||
- `bareTransport.js` is a locally installed version of the bare transport module which allows Ultraviolet to function.
|
||||
- `card.js` adds a fancy visual effect to the box cards displayed on the welcome screen.
|
||||
- `common.js` is used on all pages and allows most site features to function such as autocomplete.
|
||||
- `csel.js` manages the settings menu, omnibox function and other additional features.
|
||||
- `loader.js` is used as an asset for DOM masquerading.
|
||||
- `common.js` is used on all pages and allows commonly used features to function.
|
||||
- `csel.js` manages the settings menu on the header.
|
||||
- `particles.js` is the animated background effect that's present on all pages.
|
||||
- `register-sw.js` creates and manages service workers that allow Ultraviolet to function, and also uses bare transport.
|
||||
|
||||
</details>
|
||||
|
||||
## Future Additions
|
||||
|
||||
<a href="https://github.com/QuiteAFancyEmerald/Holy-Unblocker/blob/master/TODO.md">This</a> is our nonexhaustive todo list for Holy Unblocker LTS v6.x.x and above. Release for production will be v7.x.x and above.
|
||||
|
||||
## Vague Explanation for Beginners With External Proxies and Hosting
|
||||
|
||||
You will first want to host your proxies locally or externally.
|
||||
You will first want to host your proxies locally or externally. OUTDATED
|
||||
|
||||
#### List of some good hosting options:
|
||||
|
||||
- <a href="https://crunchbits.com/">Crunchbits</a> ( Current Hosting Provider)
|
||||
- <a href="https://greencloudvps.com">Greencloud</a> (Paid)
|
||||
- <a href="https://www.oracle.com/cloud">Oracle Cloud</a> (Free, Paid, Dedicated)
|
||||
- <a href="#">Oracle Cloud</a> (Free, Paid, Dedicated)
|
||||
- <a href="https://repl.it">Repl.it</a> (Free)
|
||||
- <a href="https://azure.microsoft.com">Azure</a> (Free and Paid)
|
||||
|
||||
Out of the list of hosting providers Dedipath and Azure rank first as a preference. You may also self-host.
|
||||
|
||||
After you have selected a decent VPS, use Cloudflare for the DNS records for both the site and the subdomains for the proxies.
|
||||
|
||||
This is an example of DNS records. Self-hosting will require `A records` preferably.
|
||||
This is an example of DNS records involving Heroku. Self-hosting will require `A records` preferably.
|
||||
<img src="https://raw.githubusercontent.com/titaniumnetwork-dev/Holy-Unblocker/master/views/assets/img/dnssetup.png" width="500"></img>
|
||||
|
||||
- `@` and `www.example.com` are being used for Holy Unblocker LTS.
|
||||
- `a.example.com` is being used for other instances like Libreddit, Invidious or web ported games depending on what the site maintainer needs.
|
||||
- `@` and `www.example.ml` are being used for Holy Unblocker LTS.
|
||||
- `client.example.ml` is being used for other instances like Libreddit or Invidious.
|
||||
|
||||
As stated previously, Holy Unblocker is hosted locally with Scramjet, Ultraviolet and Rammerhead out of the box. No need for external instances.
|
||||
|
||||
#### Domain Steps
|
||||
#### Freenom/Domain Steps
|
||||
|
||||
- If you prefer to obtain premium domains (TLDs) then use <a href="https://porkbun.com">Porkbun</a>, which offers domains for amazing prices. Literally a `.org` domain normally costs around $5 first year.
|
||||
For beginners, Freenom is a good provider for obtaining domains for free. However, Freenom only provides their TLDs (`.cf`, `.ml`, `.gq`, `.ga`, and `.tk`) for free, which can be easily blocked.
|
||||
|
||||
- Get some Freenom domains then add them to your Heroku instance (Personal > [App Name] > Settings > Domains)
|
||||
Add a domain for both `www.example.cf` and `example.cf` with .cf being interchangeable with other Freenom domain names.
|
||||
- If you prefer to obtain premium domains (TLDs) then use <a href="https://porkbun.com">Porkbun</a>, which offers domains for amazing prices. Literally a `.net` domain normally costs around $10. On Porkbun for the first year it costs $3 so its definitely a deal.
|
||||
|
||||
#### Cloudflare Steps
|
||||
|
||||
- Use Cloudflare (make an account), add your site and then add your various DNS targets to Cloudflare. Make sure you add Cloudflare's Nameservers which will be given later when you are adding your site.
|
||||
- Use Cloudflare (make an account), add your site (Freenom Domain or other) and then add your various DNS targets to Cloudflare. Make sure you add Cloudflare's Nameservers which will be given later when you are adding your site.
|
||||
|
||||
Make sure they are CNAME although A records also work and try to follow this structure:
|
||||
|
||||
**Type | Name | Target**
|
||||
|
||||
`A | @ | VPS IP GOES HERE`
|
||||
`A | www | VPS IP GOES HERE`
|
||||
`A | a | VPS IP GOES HERE`
|
||||
`CNAME | @ | your-main-heroku-target-here.herokudns.com`
|
||||
`CNAME | www | your-main-heroku-target-here.herokudns.com`
|
||||
|
||||
Make sure HTTPS is forced and have SSL set to Flexible (if you don't use LetsEncrypt). Otherwise you can have SSL set to Full.
|
||||
**Below are if you want external proxies also with your site:**
|
||||
|
||||
`CNAME | a | your-womginx-instance-here.herokudns.com`
|
||||
|
||||
Make sure HTTPS is forced and have SSL set to Flexible for some services. Otherwise you can have SSL set to Full.
|
||||
|
||||
#### Workspace Configurations
|
||||
|
||||
|
|
@ -417,15 +382,7 @@ git clone https://github.com/QuiteAFancyEmerald/Holy-Unblocker.git
|
|||
|
||||
cd Holy-Unblocker
|
||||
|
||||
npm run fresh-install
|
||||
|
||||
# If you wish to start the project
|
||||
|
||||
npm start
|
||||
|
||||
# For testing endpoints and errors
|
||||
|
||||
npm run test
|
||||
npm install
|
||||
```
|
||||
|
||||
Now simply add the folder you cloned this repo in in VSC. Then run `npm install`. I recommend that if you are releasing this publically on GitHub that you add a `.gitignore` in your root directory with the following exclusions:
|
||||
|
|
|
|||
46
TODO.md
46
TODO.md
|
|
@ -1,19 +1,31 @@
|
|||
This will be our nonexhaustive todo list for Holy Unblocker LTS v6.x.x and above. Release for production will be v8.x.x and above.
|
||||
|
||||
## Code Cleanup
|
||||
|
||||
- [ ] Optimize the JS. This time it won't be in one line and will be somewhat thoroughly commented.
|
||||
- [x] Ensure all the original submodules get added back to HU-Archive
|
||||
- [x] SEO overhaul adapted from the v3 SEO Guide format - partial
|
||||
- [x] Optimize the stylesheets and the HTML layout. Add more proper commenting and redivide the code so that it's less hard on the eyes.
|
||||
- [x] Remove all current obfuscation in the source code. It needs to be dynamically obfuscated if anything, or not obfuscated at all. This option will be a config option on the server side before rendering with Fastify for a performance focus. Meta elements will have an additonal attribute indicating if they should be moved. This is to ensure a SEO source can be served by config or a source focused on pure censorship evasion.
|
||||
- [x] Restructure navigation scripts to ensure updated proxy functionality is sanitized and effective - done
|
||||
- [x] Particles.js automatically adjusting per display size - done
|
||||
- [x] Fix routes.mjs throwing with incorrect paths - done
|
||||
- [x] Create test script - done
|
||||
- [x] XSS and fingerprinting protection (may need updates) - done
|
||||
- [x] Greatly improved native source rewrites and routing - done
|
||||
- [x] Update games navigation JS and page/change to JSON object system - done
|
||||
- [x] Mobile support - (welcome screen only, partial/needs work)
|
||||
- [x] Fastify routes modified to ensure perfect SEO. This means absolute paths such as /example instead of ?z - done
|
||||
- [x] Randomize the \_\_uv$config global, and optionally randomize the UV prefix and URL encoding via cookies
|
||||
|
||||
## Proxy/Site Functionality
|
||||
|
||||
- [ ] Update to use scramjetFrame instead of our own window handling
|
||||
- [ ] Implement wisp python to the project instead of the unreliable wisp-server-node
|
||||
- [ ] Add booksmark menu (source wise already present pretty much)
|
||||
- [ ] Add Chii + ensuring users can access devtools while browsing - partial
|
||||
- [ ] Setting to open multiple stealth frames; basically about:blank but using our system. Pops out in another tab
|
||||
- [ ] Omnibox should state what the current site the user is on like a proper URL bar
|
||||
- [ ] Improve adblocking functions on site using Workerware + a pre-bundled uBlock Origin
|
||||
- [ ] Add a "website self-destruct" button to the settings menu
|
||||
- [ ] Transport Options Swapping on Frame (Settings Menu doesn't swap)
|
||||
- [ ] Implement advanced data URI system
|
||||
- [ ] Allow custom Wisp urls from the settings menu (not config side)
|
||||
- [x] Swap to wisp-js over wisp-server-node for security and performance - done
|
||||
- [ ] Implement wisp python to the project instead of the unreliable wisp-server-node (not good for production)
|
||||
- [ ] Added Eruda ensuring users can access a someone crafted devtools while browsing - partial
|
||||
- [x] Fix keyword/descriptor randomisation - done
|
||||
- [x] Adapt Wisp protocol replacing bare which is very unsecure - done
|
||||
- [x] Improved error handling for proxy errors - done
|
||||
|
|
@ -39,24 +51,6 @@ This will be our nonexhaustive todo list for Holy Unblocker LTS v6.x.x and above
|
|||
- [x] Servers now utilise NextDNS w/ ads and malware blocked; anycast + low latency - done
|
||||
- [x] Revamp the Stealth Frame with a slight animation (ease in and then the wheeling loading with a gradient fading away once its loaded or shows the error page LOL), a loading wheel/page and lastly a omnibox widget. It will have like nav buttons, some of the settings from the settings menu, a home button, a button that brings up the Setting menu and be in a designed position. Intent is to reduce the back/forth nature that users have to do currently making it more tedious to use the site. - partial. needs functionality.
|
||||
|
||||
## Code Cleanup
|
||||
|
||||
- [x] Optimize the JS. This time it won't be in one line and will be somewhat thoroughly commented.
|
||||
- [x] Ensure all the original submodules get added back to HU-Archive
|
||||
- [x] SEO overhaul adapted from the v3 SEO Guide format - partial
|
||||
- [x] Optimize the stylesheets and the HTML layout. Add more proper commenting and redivide the code so that it's less hard on the eyes.
|
||||
- [x] Remove all current obfuscation in the source code. It needs to be dynamically obfuscated if anything, or not obfuscated at all. This option will be a config option on the server side before rendering with Fastify for a performance focus. Meta elements will have an additonal attribute indicating if they should be moved. This is to ensure a SEO source can be served by config or a source focused on pure censorship evasion.
|
||||
- [x] Restructure navigation scripts to ensure updated proxy functionality is sanitized and effective - done
|
||||
- [x] Particles.js automatically adjusting per display size - done
|
||||
- [x] Fix routes.mjs throwing with incorrect paths - done
|
||||
- [x] Create CI testing script - done
|
||||
- [x] XSS and fingerprinting protection (may need updates) - done
|
||||
- [x] Greatly improved native source rewrites and routing - done
|
||||
- [x] Update games navigation JS and page/change to JSON object system - done
|
||||
- [x] Mobile support - (partial)
|
||||
- [x] Fastify routes modified to ensure perfect SEO. This means absolute paths such as /example instead of ?z - done
|
||||
- [x] Randomize the \_\_uv$config global, and optionally randomize the UV prefix and URL encoding via cookies
|
||||
|
||||
## Site Redesign
|
||||
|
||||
- [x] Documentation on-site + Getting Started information updated (Tor, etc.) - partial; good enough
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ version: "3.9"
|
|||
|
||||
services:
|
||||
holy-unblocker:
|
||||
image: quiteafancyemerald/holy-unblocker:6.9.4
|
||||
image: quiteafancyemerald/holy-unblocker:6.8.5
|
||||
build: .
|
||||
container_name: holy-unblocker
|
||||
ports:
|
||||
|
|
|
|||
2498
package-lock.json
generated
2498
package-lock.json
generated
File diff suppressed because it is too large
Load diff
23
package.json
23
package.json
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "holyunblocker",
|
||||
"version": "6.9.4",
|
||||
"version": "6.8.7",
|
||||
"repository": "https://github.com/QuiteAFancyEmerald/Holy-Unblocker",
|
||||
"description": "Holy Unblocker LTS is a web proxy service that helps you access websites that may be blocked by your network, government or policy all within your browser with no download or setup.",
|
||||
"main": "backend.js",
|
||||
|
|
@ -31,24 +31,23 @@
|
|||
"author": "Titanium Network",
|
||||
"license": "GNU AFFERO",
|
||||
"dependencies": {
|
||||
"@fastify/helmet": "^13.0.2",
|
||||
"@fastify/static": "^8.3.0",
|
||||
"@fastify/helmet": "^13.0.1",
|
||||
"@fastify/static": "^8.2.0",
|
||||
"@mercuryworkshop/bare-mux": "^2.1.7",
|
||||
"@mercuryworkshop/epoxy-transport": "^2.1.28",
|
||||
"@mercuryworkshop/libcurl-transport": "^1.5.1",
|
||||
"@mercuryworkshop/libcurl-transport": "^1.5.0",
|
||||
"@mercuryworkshop/scramjet": "https://github.com/MercuryWorkshop/scramjet/releases/download/latest/mercuryworkshop-scramjet-2.0.0-alpha.tgz",
|
||||
"@mercuryworkshop/wisp-js": "^0.4.0",
|
||||
"@titaniumnetwork-dev/ultraviolet": "^3.2.10",
|
||||
"axios": "^1.13.2",
|
||||
"chii": "^1.15.5",
|
||||
"fastify": "^5.6.1",
|
||||
"pm2": "^6.0.13",
|
||||
"puppeteer": "^24.29.1",
|
||||
"utf-8-validate": "^6.0.5",
|
||||
"axios": "^1.11.0",
|
||||
"eruda": "^3.4.3",
|
||||
"fastify": "^5.5.0",
|
||||
"pm2": "^6.0.8",
|
||||
"puppeteer": "^24.17.0",
|
||||
"wisp-server-node": "^1.1.7",
|
||||
"ws": "^8.18.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/node": "^7.28.0",
|
||||
"esbuild": "^0.25.12"
|
||||
"esbuild": "^0.25.9"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,5 @@
|
|||
services:
|
||||
- type: web
|
||||
runtime: docker
|
||||
name: hu-lts
|
||||
repo: https://github.com/QuiteAFancyEmerald/Holy-Unblocker
|
||||
region: oregon
|
||||
name: project
|
||||
env: docker
|
||||
plan: free
|
||||
branch: master
|
||||
|
|
@ -191,7 +191,7 @@ commands: for (let i = 2; i < process.argv.length; i++)
|
|||
baremux: baremuxPath,
|
||||
uv: uvPath,
|
||||
scram: scramjetPath,
|
||||
chii: 'node_modules/chii',
|
||||
eruda: 'node_modules/eruda',
|
||||
};
|
||||
for (const path of Object.entries(compilePaths)) {
|
||||
const prefix = path[0] + '/',
|
||||
|
|
|
|||
5
serve.sh
5
serve.sh
|
|
@ -1,5 +0,0 @@
|
|||
#!/bin/sh
|
||||
# Start Tor in the background; note that this may take awhile even after the app starts
|
||||
tor &
|
||||
|
||||
exec node backend.js
|
||||
|
|
@ -1,42 +1,19 @@
|
|||
{
|
||||
"chars": ["­", "​", "­"],
|
||||
"keywords": [
|
||||
"Pencil",
|
||||
"Notebook",
|
||||
"Pad",
|
||||
"Document",
|
||||
"Text",
|
||||
"Editor",
|
||||
"Writing",
|
||||
"Notes",
|
||||
"Markdown",
|
||||
"Note-taking",
|
||||
"Note",
|
||||
"Notepad",
|
||||
"Notebooks",
|
||||
"Textpad",
|
||||
"Text Pad",
|
||||
"Text Editor",
|
||||
"Text Editors",
|
||||
"Write",
|
||||
"Writing App",
|
||||
"Writing Apps",
|
||||
"Writer",
|
||||
"Writers",
|
||||
"Jotter",
|
||||
"Jotters",
|
||||
"Diary",
|
||||
"Diaries"
|
||||
"Example1",
|
||||
"Example2",
|
||||
"Example3",
|
||||
"Example4",
|
||||
"Example5",
|
||||
"Example6",
|
||||
"Example7",
|
||||
"Example8",
|
||||
"Example9"
|
||||
],
|
||||
"content": [
|
||||
"This is a document with text and editing features. You can write notes, create lists, and format your text using Markdown syntax. It's a simple and efficient way to keep track of your ideas and tasks.",
|
||||
"This example is a sample text that demonstrates the capabilities of the text editor. You can easily create headings, bold or italicize text, and add links or images. The editor supports various formatting options to enhance your writing experience.",
|
||||
"Feel free to explore the features of this text editor. You can create bullet points, numbered lists, and even code snippets. The editor is designed to be user-friendly and intuitive, making it easy for anyone to use.",
|
||||
"Whether you're jotting down quick notes or composing longer documents, this text editor has you covered. You can save your work, export it in different formats, and even collaborate with others in real-time.",
|
||||
"With this text editor, you can organize your thoughts and ideas effectively. Use headings to structure your content, and take advantage of the various formatting options to make your text visually appealing.",
|
||||
"You can also use this editor to write blog posts, articles, or any other type of content. The Markdown syntax allows for easy formatting, and the live preview feature lets you see how your text will look as you write.",
|
||||
"Overall, this text editor is a versatile tool for anyone who needs to write and edit text. Whether you are a student, professional, or casual writer, you'll find it to be a valuable resource for your writing needs.",
|
||||
"Start writing your next masterpiece today with this powerful and user-friendly text editor. Happy writing!"
|
||||
"Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1Example1",
|
||||
"Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2Example2"
|
||||
],
|
||||
"delimiter": "*",
|
||||
"textMasks": {
|
||||
|
|
@ -44,22 +21,14 @@
|
|||
"Holy Unblocker LTS": ["H*ol*y *Un*b*lo*c*k*er *L*T*S"],
|
||||
"Webretro": ["W*e*b*r*e*t*r*o"],
|
||||
"Ruffle": ["R*u*f*f*l*e"],
|
||||
"Tab Cloaker": ["T*a*b C*l*o*a*k*e*r"],
|
||||
"Tab Cloakers": ["T*a*b C*l*o*a*k*e*rs"],
|
||||
"Search": ["S*e*a*r*c*h"],
|
||||
"Searching": ["S*e*a*r*c*h*i*n*g"],
|
||||
"Freely": ["F*r*e*e*l*y"],
|
||||
"Free": ["F*r*e*e"],
|
||||
"Surfing": ["S*u*r*f*i*n*g"],
|
||||
"Surf": ["S*u*r*f"],
|
||||
"VPN": ["V*P*N"],
|
||||
"VPNs": ["V*P*N*s"],
|
||||
"Server": ["S*e*r*v*e*r"],
|
||||
"Servers": ["S*e*r*v*e*r*s"],
|
||||
"Network": ["N*e*t*w*o*r*k"],
|
||||
"Networks": ["N*e*t*w*o*r*k*s"],
|
||||
"Connection": ["C*o*n*n*e*c*t*i*o*n"],
|
||||
"Connections": ["C*o*n*n*e*c*t*i*o*n*s"],
|
||||
"Tab Cloaker": ["t*a*b c*l*o*a*k*e*r", "t*a*b c*l*o*a*k*e*rs"],
|
||||
"Search": ["S*e*a*r*c*h", "S*e*a*r*c*h*i*n*g"],
|
||||
"Freely": ["F*r*e*e*l*y", "F*r*e*e"],
|
||||
"Surf": ["S*u*r*f*i*n*g", "S*u*r*f"],
|
||||
"VPN": ["V*P*N", "V*P*N*s"],
|
||||
"Server": ["S*e*r*v*e*r", "S*e*r*v*e*r*s"],
|
||||
"Network": ["N*e*t*w*o*r*k", "N*e*t*w*o*r*k*s"],
|
||||
"Connection": ["C*o*n*n*e*c*t*i*o*n", "C*o*n*n*e*c*t*i*o*n*s"],
|
||||
"Privacy": ["P*r*i*v*a*c*y"],
|
||||
"Private": ["P*r*i*v*a*t*e"],
|
||||
"Games": ["G*a*m*e*s"],
|
||||
|
|
@ -87,5 +56,5 @@
|
|||
"splash": [
|
||||
"{{mask}}{{This version is the public build of the HU LTS project, and it's being worked on via the master branch! Stuff will NOT work!}}"
|
||||
],
|
||||
"version": ["6.9.3"]
|
||||
"version": ["6.8.7"]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@ let pages = {
|
|||
'robots.txt': 'robots.txt',
|
||||
'sitemap.xml': 'sitemap.xml',
|
||||
'browserconfig.xml': 'browserconfig.xml',
|
||||
'favicon.ico': 'favicon.ico',
|
||||
};
|
||||
|
||||
let externalPages = {
|
||||
|
|
@ -100,9 +101,7 @@ let externalPages = {
|
|||
codespaces: 'https://github.com/codespaces',
|
||||
'tor-project': 'https://tb-manual.torproject.org/installation',
|
||||
'titaniumnetwork-documentation': 'https://docs.titaniumnetwork.org',
|
||||
'patreon': 'https://www.patreon.com/holyunblockerlts',
|
||||
'titaniumnetwork-discord': 'https://discord.gg/CwWpdGkuWY',
|
||||
'truffled': 'https://truffled.lol',
|
||||
'rammerhead-discord': 'https://discord.gg/VNT4E7gN5Y',
|
||||
};
|
||||
|
||||
|
|
@ -137,7 +136,6 @@ let altPaths = {
|
|||
codespaces: 'codesp',
|
||||
'tor-project': 'tr',
|
||||
'titaniumnetwork-discord': 'social',
|
||||
'truffled': 'educational',
|
||||
'rammerhead-discord': 'rdis',
|
||||
/* Raw File Names */
|
||||
files: {
|
||||
|
|
@ -166,7 +164,6 @@ let altPaths = {
|
|||
roms: 'ms',
|
||||
uv: 'network',
|
||||
scram: 'worker',
|
||||
chii: 'ani',
|
||||
epoxy: 'epoch',
|
||||
libcurl: 'unix',
|
||||
bareasmodule: 'utc',
|
||||
|
|
@ -242,8 +239,6 @@ const insert = JSON.parse(
|
|||
if (!config.usingSEO) {
|
||||
useAltPaths(altPaths, pages);
|
||||
useAltPaths(altPaths, externalPages);
|
||||
delete pages['robots.txt'];
|
||||
delete pages['sitemap.xml'];
|
||||
}
|
||||
|
||||
const cookingInserts = insert.content,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import Fastify from 'fastify';
|
||||
import { createServer } from 'node:http';
|
||||
import { server as wisp, logging } from "@mercuryworkshop/wisp-js/server";
|
||||
import wisp from 'wisp-server-node';
|
||||
import createRammerhead from '../lib/rammerhead/src/server/index.js';
|
||||
import fastifyHelmet from '@fastify/helmet';
|
||||
import fastifyStatic from '@fastify/static';
|
||||
|
|
@ -21,21 +21,6 @@ import { existsSync, unlinkSync } from 'node:fs';
|
|||
*/
|
||||
console.log(serverUrl);
|
||||
|
||||
// Wisp Configuration: Refer to the documentation at https://www.npmjs.com/package/@mercuryworkshop/wisp-js
|
||||
|
||||
logging.set_level(logging.NONE);
|
||||
wisp.options.allow_udp_streams = false;
|
||||
wisp.options.allow_loopback_ips = true;
|
||||
|
||||
// For security reasons only allow these ports. Any additional regional proxies or default sandboxed Tor ports should be added here.
|
||||
wisp.options.port_whitelist = [
|
||||
80,
|
||||
443,
|
||||
9050,
|
||||
7000,
|
||||
7001
|
||||
];
|
||||
|
||||
// The server will check for the existence of this file when a shutdown is requested.
|
||||
// The shutdown script in run-command.js will temporarily produce this file.
|
||||
const shutdown = fileURLToPath(new URL('./.shutdown', import.meta.url));
|
||||
|
|
@ -98,10 +83,8 @@ const serverFactory = (handler) => {
|
|||
|
||||
// Set logger to true for logs.
|
||||
const app = Fastify({
|
||||
routerOptions: {
|
||||
ignoreDuplicateSlashes: true,
|
||||
ignoreTrailingSlash: true,
|
||||
},
|
||||
ignoreDuplicateSlashes: true,
|
||||
ignoreTrailingSlash: true,
|
||||
logger: false,
|
||||
serverFactory: serverFactory,
|
||||
});
|
||||
|
|
@ -129,7 +112,7 @@ app.register(fastifyStatic, {
|
|||
'epoxy',
|
||||
'libcurl',
|
||||
'baremux',
|
||||
'chii',
|
||||
'eruda',
|
||||
].forEach((prefix) => {
|
||||
app.register(fastifyStatic, {
|
||||
root: fileURLToPath(new URL('../views/dist/' + prefix, import.meta.url)),
|
||||
|
|
@ -186,45 +169,29 @@ const supportedTypes = {
|
|||
if (config.disguiseFiles) {
|
||||
const getActualPath = (path) =>
|
||||
path.slice(0, path.length - 1 - disguise.length),
|
||||
shouldNotHandle = new RegExp(`\\.(?!html$|${disguise}$)[\\w-]+$`, 'i'),
|
||||
isNotHtml = /\.(?!html$)[\w-]+$/i,
|
||||
exemptDirs = ['github', 'assets/ico'],
|
||||
loaderFile = tryReadFile(
|
||||
'../views/dist/pages/misc/deobf/loader.html',
|
||||
import.meta.url,
|
||||
false
|
||||
);
|
||||
let exemptDirs = [
|
||||
'assets',
|
||||
'uv',
|
||||
'scram',
|
||||
'epoxy',
|
||||
'libcurl',
|
||||
'baremux',
|
||||
'wisp',
|
||||
'chii',
|
||||
].map((dir) => getAltPrefix(dir, serverUrl.pathname).slice(1, -1)),
|
||||
exemptPages = ['login', 'test-shutdown', 'favicon.ico'];
|
||||
for (const [key, value] of Object.entries(externalPages))
|
||||
if ('string' === typeof value) exemptPages.push(key);
|
||||
else exemptDirs.push(key);
|
||||
for (const path of rammerheadScopes)
|
||||
if (!shouldNotHandle.test(path)) exemptDirs.push(path.slice(1));
|
||||
exemptPages = exemptPages.concat(exemptDirs);
|
||||
let exemptPages = ['login', 'test-shutdown'];
|
||||
if (pages.default === 'login') exemptPages.push('');
|
||||
|
||||
app.addHook('preHandler', (req, reply, done) => {
|
||||
if (req.params.modified) return done();
|
||||
const reqPath = new URL(req.url, serverUrl).pathname.slice(
|
||||
serverUrl.pathname.length
|
||||
);
|
||||
if (
|
||||
shouldNotHandle.test(reqPath) ||
|
||||
exemptDirs.some((dir) => reqPath.indexOf(dir + '/') === 0) ||
|
||||
exemptPages.includes(reqPath) ||
|
||||
rammerheadSession.test(serverUrl.pathname + reqPath)
|
||||
(!reqPath.endsWith('.' + disguise) && isNotHtml.test(reqPath)) ||
|
||||
exemptDirs.some(
|
||||
(dir) => reqPath.indexOf(dir + '/') === 0 || reqPath === dir
|
||||
) ||
|
||||
exemptPages.includes(reqPath)
|
||||
)
|
||||
return done();
|
||||
|
||||
if (!reqPath.endsWith('.' + disguise)) {
|
||||
if (!reqPath.endsWith('.' + disguise) || reqPath in pages) {
|
||||
reply.type(supportedTypes.html).send(loaderFile);
|
||||
reply.hijack();
|
||||
return done();
|
||||
|
|
@ -234,7 +201,6 @@ if (config.disguiseFiles) {
|
|||
if (req.params.path) req.params.path = getActualPath(req.params.path);
|
||||
if (req.params['*']) req.params['*'] = getActualPath(req.params['*']);
|
||||
reply.type(supportedTypes[disguise]);
|
||||
reply.header('Access-Control-Allow-Origin', 'null');
|
||||
}
|
||||
return done();
|
||||
});
|
||||
|
|
@ -252,16 +218,7 @@ app.get(serverUrl.pathname + ':path', (req, reply) => {
|
|||
|
||||
const reqPath = req.params.path;
|
||||
|
||||
// Ignore browsers' automatic requests to favicon.ico, since it does not exist.
|
||||
// This approach is needed for certain pages to not have an icon.
|
||||
if (reqPath === 'favicon.ico') {
|
||||
reply.send();
|
||||
return reply.hijack();
|
||||
}
|
||||
|
||||
if (reqPath in externalPages) {
|
||||
if (req.params.modified)
|
||||
return reply.code(404).type(supportedTypes.html).send(preloaded404);
|
||||
let externalRoute = externalPages[reqPath];
|
||||
if (typeof externalRoute !== 'string')
|
||||
externalRoute = externalRoute.default;
|
||||
|
|
@ -317,7 +274,6 @@ else {
|
|||
|
||||
app.listen({ port: serverUrl.port, host: serverUrl.hostname });
|
||||
console.log(`Holy Unblocker is listening on port ${serverUrl.port}.`);
|
||||
console.log(`When hosting with a reverse proxy please ensure you are using NGINX only.\nCaddy and Apache are not supported and have security risks due to wisp-js and loopbacks.\nPorts are whitelisted and security is maintained with NGINX only.`);
|
||||
if (config.disguiseFiles)
|
||||
console.log(
|
||||
'disguiseFiles is enabled. Visit src/routes.mjs to see the entry point, listed within the pages variable.'
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ const regExpEscape = /[-[\]{}()*+?.,\\^$#\s]/g,
|
|||
basicStrEscape = /["'`$\\]/g,
|
||||
charset = /­|​|­|<wbr>/gi,
|
||||
subtermsByCaps = /[A-Z]?[^A-Z]+|[A-Z]/g,
|
||||
subtermsByVowels = /(?<=[AEIOUYaeiouy])(?!$)/g,
|
||||
subtermsByVowels = /(?<=[AEIOUYaeiouy])/g,
|
||||
termsBySpaces = /\S+/g,
|
||||
containsMask = /&#\d+;|&#x[A-z\d]+;|&[A-z]+;/,
|
||||
getEndPoint = /((?<![^\/])github\/)?[^\/]+$/,
|
||||
|
|
@ -74,7 +74,6 @@ const regExpEscape = /[-[\]{}()*+?.,\\^$#\s]/g,
|
|||
return str.replace(replaceParams, replaceFunc);
|
||||
},
|
||||
ifSEO = (text) => (config.usingSEO ? text : ''),
|
||||
ifDisguise = (text) => (config.disguiseFiles ? text : ''),
|
||||
randomListItem = (lis) => () => lis[(Math.random() * lis.length) | 0],
|
||||
getRandomChar = randomListItem(charRandom),
|
||||
/* Text masks, found in src/data.json, are meant to be variations of the
|
||||
|
|
@ -120,11 +119,8 @@ const regExpEscape = /[-[\]{}()*+?.,\\^$#\s]/g,
|
|||
: term.replace(subtermsByVowels, getRandomChar)
|
||||
),
|
||||
route = (text, conditionalRoute = false) =>
|
||||
conditionalRoute && routeConditions[conditionalRoute]
|
||||
? text.replace(
|
||||
getEndPoint,
|
||||
(name) => cacheBustList[name] || flatAltPaths['files/' + name] || name
|
||||
)
|
||||
conditionalRoute && !routeConditions[conditionalRoute]
|
||||
? text.replace(getEndPoint, (name) => cacheBustList[name] || name)
|
||||
: text
|
||||
.replace(
|
||||
getEndPoint,
|
||||
|
|
@ -239,7 +235,6 @@ const regExpEscape = /[-[\]{}()*+?.,\\^$#\s]/g,
|
|||
[route, 2],
|
||||
[route, 1],
|
||||
[ifSEO, 1],
|
||||
[ifDisguise, 1],
|
||||
[mask, 1],
|
||||
[inline, 1],
|
||||
],
|
||||
|
|
@ -248,16 +243,15 @@ const regExpEscape = /[-[\]{}()*+?.,\\^$#\s]/g,
|
|||
config.randomizeIdentifiers ? createRandomID() : '__uv$config'
|
||||
),
|
||||
version: versionValue,
|
||||
cacheVal: crypto.getRandomValues(new Uint32Array(1))[0],
|
||||
defaultSearch: '{{DuckDuckGo}}',
|
||||
defaultSearch: '{{Brave}}',
|
||||
}),
|
||||
// List of manual censors for unavoidable cases.
|
||||
manualCensors = Object.freeze({
|
||||
Google: 'Google',
|
||||
Bing: 'Bing',
|
||||
Google: 'Glasses',
|
||||
Bing: 'Bell Sound',
|
||||
Brave: 'Brave',
|
||||
DuckDuckGo: 'DuckDuckGo',
|
||||
Startpage: 'Startpage',
|
||||
DuckDuckGo: '2x Waterfowl Moves',
|
||||
Startpage: 'Beginning Sheet',
|
||||
'wisp-transport': 'wst',
|
||||
libcurl: 'unix',
|
||||
epoxy: 'epoch',
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ const __dirname = '../views/pages/misc/deobf',
|
|||
regExpEscape2 = /[-[\]{}()*+?.,\\^$|#\s]/g,
|
||||
isImage = /\.(?:ico|png|jpg|jpeg)$/,
|
||||
templateNames = [
|
||||
'anti-exfil',
|
||||
'head-content',
|
||||
'header',
|
||||
'footer',
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ see https://raw.githubusercontent.com/arcticicestudio/nord-docs/develop/assets/i
|
|||
--radio-label-color: var(--nord0);
|
||||
--switch-bg: var(--nord3);
|
||||
--switch-checked-bg: var(--nord9);
|
||||
--select-hover-bg: var(--nord0);
|
||||
--select-hover-bg: var(--nord2);
|
||||
--cf-bg: var(--nord0);
|
||||
--cf-color: var(--nord5);
|
||||
--csel-input: var(--nord4);
|
||||
|
|
@ -142,10 +142,8 @@ html {
|
|||
color: var(--html-color, white);
|
||||
font-family: 'Rethink Sans', sans-serif;
|
||||
font-weight: 300;
|
||||
scroll-behavior: smooth;
|
||||
text-wrap: balance;
|
||||
word-break: normal;
|
||||
overflow-wrap: break-word;
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
body {
|
||||
|
|
@ -193,10 +191,6 @@ h6 {
|
|||
font-weight: 900;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
}
|
||||
|
|
@ -216,13 +210,13 @@ img {
|
|||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background-color: var(--nord11);
|
||||
background-color: var(--nord0m1);
|
||||
border-radius: 5px;
|
||||
border: 3px solid var;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background-color: var(--nord11);
|
||||
background-color: var(--nord0m1);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:active {
|
||||
|
|
@ -331,7 +325,7 @@ details[open] summary {
|
|||
justify-content: space-between;
|
||||
align-items: center;
|
||||
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.274);
|
||||
padding: 25px 180px 25px 180px;
|
||||
padding: 15px 200px;
|
||||
z-index: 2;
|
||||
position: relative;
|
||||
}
|
||||
|
|
@ -373,12 +367,9 @@ details[open] summary {
|
|||
#footer {
|
||||
font-family: 'Lato', sans-serif;
|
||||
padding-top: 15vw;
|
||||
background: var(--footer-img, url('{{route}}{{/assets/img/waves.svg}}')),
|
||||
linear-gradient(
|
||||
to bottom,
|
||||
transparent 0 15vw,
|
||||
var(--footer-grad, #1d2029) 15vw 100%
|
||||
);
|
||||
background:
|
||||
var(--footer-img, url('{{route}}{{/assets/img/waves.svg}}')),
|
||||
linear-gradient(to bottom, transparent 0 15vw, var(--footer-grad, #1d2029) 15vw 100%);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100vw auto;
|
||||
position: relative;
|
||||
|
|
@ -421,6 +412,7 @@ details[open] summary {
|
|||
.logo {
|
||||
width: 70px;
|
||||
height: 70px;
|
||||
margin-right: 10px;
|
||||
background-image: var(--logo-img, url('{{route}}{{/assets/img/logo.webp}}'));
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
|
|
@ -448,23 +440,6 @@ details[open] summary {
|
|||
color: var(--nord4) !important;
|
||||
}
|
||||
|
||||
.smenu .white-text > a {
|
||||
background-color: var(--nord17);
|
||||
padding: 10px 20px 10px 20px;
|
||||
border-radius: 30px;
|
||||
transition: background-color .3s ease;
|
||||
}
|
||||
|
||||
.smenu .white-text > a:hover {
|
||||
background-color: #d5484f;
|
||||
}
|
||||
|
||||
.navbar-group {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.navbar-1 {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
|
|
@ -476,34 +451,31 @@ details[open] summary {
|
|||
}
|
||||
|
||||
.navbar-1 > li {
|
||||
margin-left: 45px;
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
.navbar-1 > li > a.line {
|
||||
.navbar-1 > li > a {
|
||||
text-decoration: none;
|
||||
color: var(--nord4);
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.new {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
padding-bottom: 0.35em;
|
||||
}
|
||||
|
||||
.navbar-1 > li > a.line::after {
|
||||
.new::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background-color: var(--nord17);
|
||||
transform: scaleX(0);
|
||||
transform-origin: left center;
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.navbar-1 > li > a.line:hover::after,
|
||||
.navbar-1 > li > a.line:focus::after {
|
||||
transform: scaleX(1);
|
||||
display: inline-block;
|
||||
width: 84px;
|
||||
height: 45px;
|
||||
margin-left: 8px;
|
||||
margin-top: 2px;
|
||||
background-image: url('{{route}}{{/assets/svg/new.svg}}');
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
image-rendering: -webkit-optimize-contrast;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.subnavbar {
|
||||
|
|
@ -529,17 +501,12 @@ details[open] summary {
|
|||
margin: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
letter-spacing: 1px;
|
||||
order: 3;
|
||||
}
|
||||
|
||||
.navbar > .dmenu {
|
||||
margin-left: 30px;
|
||||
margin-top: 2px;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.navbar > .smenu {
|
||||
margin-left: 25px;
|
||||
.navbar > li {
|
||||
margin-left: 50px;
|
||||
}
|
||||
|
||||
.navbar > li > a {
|
||||
|
|
@ -566,14 +533,17 @@ details[open] summary {
|
|||
margin-top: 15px;
|
||||
font-family: 'Rethink Sans', sans-serif;
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease, transform 0.3s ease;
|
||||
transform: translateY(-20px);
|
||||
transition:
|
||||
opacity 0.3s ease,
|
||||
transform 0.3s ease;
|
||||
}
|
||||
|
||||
.dropdown-parent:focus-within .dropdown-child {
|
||||
display: block;
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
transform: translateY(10px) translateX(-30px);
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
.subnavbar {
|
||||
|
|
@ -586,7 +556,9 @@ details[open] summary {
|
|||
padding: 5px 15px;
|
||||
border-radius: 5px;
|
||||
color: var(--nord4);
|
||||
transition: background-color 0.3s ease, color 0.3s ease;
|
||||
transition:
|
||||
background-color 0.3s ease,
|
||||
color 0.3s ease;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
|
|
@ -648,7 +620,6 @@ details[open] summary {
|
|||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||
transition: opacity .3s ease;
|
||||
}
|
||||
|
||||
.settings-header {
|
||||
|
|
@ -673,7 +644,10 @@ details[open] summary {
|
|||
|
||||
.close-settings-btn:hover {
|
||||
color: var(--close-btn-color, lightgray);
|
||||
transition: background-color 0.3s ease, color 0.3s ease, transform 0.3s ease;
|
||||
transition:
|
||||
background-color 0.3s ease,
|
||||
color 0.3s ease,
|
||||
transform 0.3s ease;
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
|
|
@ -800,11 +774,6 @@ details[open] summary {
|
|||
transform: translateX(14px);
|
||||
}
|
||||
|
||||
#csel #newtab {
|
||||
padding: 2.25px 4.5px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
select {
|
||||
margin: 0 0 0 10px;
|
||||
padding: 10px;
|
||||
|
|
@ -814,22 +783,10 @@ select {
|
|||
color: var(--settings-color, var(--nord6));
|
||||
max-width: 300px;
|
||||
box-sizing: border-box;
|
||||
appearance: none;
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.3s ease, border-color 0.3s ease;
|
||||
}
|
||||
|
||||
select:hover {
|
||||
background-color: var(--select-hover-bg, var(--nord1));
|
||||
}
|
||||
|
||||
select::after {
|
||||
content: '▼';
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
pointer-events: none;
|
||||
background-color: var(--select-hover-bg, var(--nord3));
|
||||
}
|
||||
|
||||
.default-badge,
|
||||
|
|
@ -913,7 +870,10 @@ input[type='text'] {
|
|||
margin: 5px 0;
|
||||
background-color: var(--nord0);
|
||||
border: 1px solid var(--nord9);
|
||||
transition: background-color 0.3s ease, color 0.3s ease, transform 0.3s ease;
|
||||
transition:
|
||||
background-color 0.3s ease,
|
||||
color 0.3s ease,
|
||||
transform 0.3s ease;
|
||||
}
|
||||
|
||||
#csel input[type='text']:focus {
|
||||
|
|
@ -922,7 +882,10 @@ input[type='text'] {
|
|||
}
|
||||
|
||||
#csel input:is([type='submit'], [type='button']):hover {
|
||||
transition: background-color 0.3s ease, color 0.3s ease, transform 0.3s ease;
|
||||
transition:
|
||||
background-color 0.3s ease,
|
||||
color 0.3s ease,
|
||||
transform 0.3s ease;
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
|
|
@ -1071,7 +1034,8 @@ input[type='text'] {
|
|||
border-radius: 12px;
|
||||
overflow: hidden;
|
||||
background-color: var(--nord0);
|
||||
background-image: url('{{route}}{{/assets/img/noise.webp}}'),
|
||||
background-image:
|
||||
url('{{route}}{{/assets/img/noise.webp}}'),
|
||||
linear-gradient(
|
||||
145deg,
|
||||
rgba(34, 38, 47, 0.9) 0%,
|
||||
|
|
@ -1127,7 +1091,7 @@ input[type='text'] {
|
|||
font-weight: 500;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
padding: 40px 40px 0 80px;
|
||||
padding: 40px 0 0 80px;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
|
@ -1328,13 +1292,12 @@ input[type='text'] {
|
|||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: #1d232a;
|
||||
background-image: radial-gradient(
|
||||
circle,
|
||||
rgba(131, 131, 131, 0.02) 1px,
|
||||
transparent 1px
|
||||
),
|
||||
background-image:
|
||||
radial-gradient(circle, rgba(131, 131, 131, 0.02) 1px, transparent 1px),
|
||||
radial-gradient(circle, rgba(148, 148, 148, 0.02) 1px, transparent 1px);
|
||||
background-position: 0 0, 5px 5px;
|
||||
background-position:
|
||||
0 0,
|
||||
5px 5px;
|
||||
background-size: 10px 10px;
|
||||
z-index: 3;
|
||||
align-items: center;
|
||||
|
|
@ -1342,7 +1305,9 @@ input[type='text'] {
|
|||
display: flex;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
transition: visibility 0s, opacity ease-in-out 0.3s;
|
||||
transition:
|
||||
visibility 0s,
|
||||
opacity ease-in-out 0.3s;
|
||||
transition-delay: 0.3s, 0s;
|
||||
}
|
||||
|
||||
|
|
@ -1399,13 +1364,12 @@ input[type='text'] {
|
|||
left: calc(50% - 20vw - 17px);
|
||||
width: 40vw;
|
||||
background-color: var(--omnibox-bg, var(--nord0));
|
||||
background-image: radial-gradient(
|
||||
circle,
|
||||
rgba(131, 131, 131, 0.02) 1px,
|
||||
transparent 1px
|
||||
),
|
||||
background-image:
|
||||
radial-gradient(circle, rgba(131, 131, 131, 0.02) 1px, transparent 1px),
|
||||
radial-gradient(circle, rgba(148, 148, 148, 0.02) 1px, transparent 1px);
|
||||
background-position: 0 0, 5px 5px;
|
||||
background-position:
|
||||
0 0,
|
||||
5px 5px;
|
||||
background-size: 10px 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
|
@ -1452,46 +1416,20 @@ input[type='text'] {
|
|||
position: absolute;
|
||||
background-color: var(--ac-bg, var(--nord0));
|
||||
color: var(--nord4);
|
||||
list-style: none;
|
||||
list-style-type: none;
|
||||
margin: 5px 3px;
|
||||
font-size: 18px;
|
||||
padding: 0;
|
||||
border: 0.5px solid #ff919369;
|
||||
border-radius: 15px;
|
||||
z-index: 2;
|
||||
max-height: calc(5 * (1.5em + 1px + 30px));
|
||||
max-height: calc(5 * (1.5em + 1px + 30px));
|
||||
overflow: auto;
|
||||
overflow-x: hidden;
|
||||
opacity: 0;
|
||||
transform: translateY(-10px);
|
||||
pointer-events: none;
|
||||
transition: opacity 0.25s ease, transform 0.25s ease,
|
||||
background-color 0.3s ease, border-color 0.3s ease;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: #ff919369 transparent;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
#autocomplete::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
#autocomplete::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
#autocomplete::-webkit-scrollbar-thumb {
|
||||
background-color: #ff919369;
|
||||
border-radius: 15px;
|
||||
border: 2px solid transparent;
|
||||
}
|
||||
|
||||
#autocomplete:not(:empty) {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
pointer-events: auto;
|
||||
#autocomplete:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#autocomplete li {
|
||||
|
|
@ -1551,7 +1489,10 @@ input[type='text'] {
|
|||
border: 1px solid #ff919369;
|
||||
padding: 6px 18px;
|
||||
color: var(--nord4);
|
||||
transition: top 0.3s, left 0.3s, transform 0.3s;
|
||||
transition:
|
||||
top 0.3s,
|
||||
left 0.3s,
|
||||
transform 0.3s;
|
||||
}
|
||||
|
||||
.omnibar-s:hover {
|
||||
|
|
@ -1584,7 +1525,8 @@ input[type='text'] {
|
|||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url('{{route}}{{/assets/img/noise.webp}}') repeat,
|
||||
background:
|
||||
url('{{route}}{{/assets/img/noise.webp}}') repeat,
|
||||
rgba(255, 255, 255, 0.03);
|
||||
opacity: var(--noise-opacity, 0.02);
|
||||
pointer-events: none;
|
||||
|
|
@ -1625,12 +1567,12 @@ input[type='text'] {
|
|||
}
|
||||
|
||||
.hero-text-wrap {
|
||||
margin-right: 15%;
|
||||
max-width: 53ch;
|
||||
margin-right: 25%;
|
||||
}
|
||||
|
||||
.hero-text-wrap p {
|
||||
margin-bottom: 50px;
|
||||
font-size: 17px;
|
||||
color: var(--nord4);
|
||||
}
|
||||
|
||||
|
|
@ -1639,12 +1581,6 @@ input[type='text'] {
|
|||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 10%;
|
||||
}
|
||||
|
||||
.image-container-hero > a {
|
||||
width: 150px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.hero {
|
||||
|
|
@ -1705,7 +1641,8 @@ input[type='text'] {
|
|||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url('{{route}}{{/assets/img/noise.webp}}') repeat,
|
||||
background:
|
||||
url('{{route}}{{/assets/img/noise.webp}}') repeat,
|
||||
rgba(46, 52, 64, 0.03);
|
||||
opacity: var(--noise-opacity, 0.02);
|
||||
pointer-events: none;
|
||||
|
|
@ -1808,7 +1745,7 @@ input[type='text'] {
|
|||
}
|
||||
|
||||
.box-text-container {
|
||||
max-width: 610px;
|
||||
max-width: 600px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
|
|
@ -1834,7 +1771,7 @@ input[type='text'] {
|
|||
padding: 15px 25px;
|
||||
margin-top: 10px;
|
||||
margin-right: 10px;
|
||||
border: var(--nord11) 1px solid;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
text-decoration: none;
|
||||
color: var(--box-btn-color, white) !important;
|
||||
|
|
@ -1843,10 +1780,6 @@ input[type='text'] {
|
|||
transition: background-color 0.3s ease;
|
||||
}
|
||||
|
||||
.box-button:hover {
|
||||
background-color: var(--mac-title-bg, var(--nord18));
|
||||
}
|
||||
|
||||
.box-image-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
|
@ -1856,7 +1789,7 @@ input[type='text'] {
|
|||
.box-pr-logo {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
width: 1000px;
|
||||
width: 500px;
|
||||
border-radius: 35px;
|
||||
}
|
||||
|
||||
|
|
@ -2108,20 +2041,12 @@ input[type='text'] {
|
|||
/* HU Games Directory
|
||||
/* ----------------------------------------------- */
|
||||
|
||||
.dir {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.box-g {
|
||||
padding: 10px 50px;
|
||||
}
|
||||
|
||||
/* Games list for non-flash games */
|
||||
|
||||
.proxy-form > .glist > a {
|
||||
border-radius: 10px !important;
|
||||
}
|
||||
|
||||
.glist {
|
||||
font-family: 'Lato', sans-serif;
|
||||
display: flex;
|
||||
|
|
@ -2138,7 +2063,7 @@ input[type='text'] {
|
|||
margin: 10px;
|
||||
border: 1px solid var(--nord9);
|
||||
border-radius: 15%;
|
||||
transition: ease-in-out 0.3s;
|
||||
transition: ease-in-out 0.5s;
|
||||
flex-grow: 0;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
|
@ -2166,7 +2091,7 @@ input[type='text'] {
|
|||
}
|
||||
|
||||
.glist > a p {
|
||||
margin: 5px 0 0 0;
|
||||
margin-bottom: 0;
|
||||
color: var(--nord4);
|
||||
}
|
||||
|
||||
|
|
@ -2272,7 +2197,10 @@ input[type='text'] {
|
|||
}
|
||||
|
||||
.pulse:hover {
|
||||
transition: background-color 0.3s ease, color 0.3s ease, transform 0.3s ease;
|
||||
transition:
|
||||
background-color 0.3s ease,
|
||||
color 0.3s ease,
|
||||
transform 0.3s ease;
|
||||
transform: scale(1.05) translateZ(0);
|
||||
}
|
||||
|
||||
|
|
@ -2324,13 +2252,17 @@ input[type='text'] {
|
|||
.glowbutton:active::after {
|
||||
background: linear-gradient(90deg, var(--nord7), var(--nord8), var(--nord7));
|
||||
background-size: 100px auto;
|
||||
animation: glowshadow 2s linear infinite, glowbg 2s linear infinite;
|
||||
animation:
|
||||
glowshadow 2s linear infinite,
|
||||
glowbg 2s linear infinite;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------
|
||||
/* Mobile Support
|
||||
/* ----------------------------------------------- */
|
||||
|
||||
/* Mobile Header Dropdown Menu */
|
||||
|
||||
/* For mobile-exclusive versions of certain UI elements. */
|
||||
.mobile {
|
||||
display: none;
|
||||
|
|
@ -2369,7 +2301,9 @@ input[type='text'] {
|
|||
.mnavebutton::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
transition: transform 0.2s ease-out, top 0.2s ease-out;
|
||||
transition:
|
||||
transform 0.2s ease-out,
|
||||
top 0.2s ease-out;
|
||||
}
|
||||
|
||||
.mnavebutton {
|
||||
|
|
@ -2388,8 +2322,7 @@ input[type='text'] {
|
|||
top: -12px;
|
||||
}
|
||||
|
||||
#mnavecb:focus-visible + .mnave,
|
||||
:focus-visible {
|
||||
#mnavecb:focus-visible + .mnave, :focus-visible {
|
||||
outline: var(--nord17) dashed 3px;
|
||||
}
|
||||
|
||||
|
|
@ -2407,69 +2340,10 @@ input[type='text'] {
|
|||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
.mobile-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(0,0,0,0.5);
|
||||
backdrop-filter: blur(10px);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding-top: calc(10% + 90px);
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
visibility: hidden;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
#mnavecb:checked ~ .mobile-overlay {
|
||||
opacity: 1;
|
||||
pointer-events: auto;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.mobile-overlay .navbar-1 {
|
||||
display: flex !important;
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.mobile-overlay .navbar-1 > li {
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.mobile-overlay a {
|
||||
display: block;
|
||||
width: 110px;
|
||||
padding: 15px;
|
||||
text-decoration: none;
|
||||
color: var(--nord4);
|
||||
padding: 15px 25px;
|
||||
border: var(--nord11) 1px solid;
|
||||
border-radius: 5px;
|
||||
color: var(--box-btn-color, white) !important;
|
||||
background-color: var(--mac-title-bg, var(--dark2));
|
||||
font-size: 16px;
|
||||
transition: background-color 0.3s ease;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------
|
||||
/* CSS Media Queries (largely for mobile support)
|
||||
/* ----------------------------------------------- */
|
||||
|
||||
@media (max-width: 1160px) {
|
||||
.navbar-1 {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.mnave {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1400px) {
|
||||
#header {
|
||||
padding: 15px 50px;
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB |
|
|
@ -21,7 +21,7 @@ const getDomain = () =>
|
|||
goFrame = (url) => {
|
||||
localStorage.setItem('{{hu-lts}}-frame-url', url);
|
||||
if (location.pathname !== '{{route}}{{/s}}')
|
||||
location.href = '{{route}}{{/s}}?cache={{cacheVal}}';
|
||||
location.href = '{{route}}{{/s}}';
|
||||
else document.getElementById('frame').src = url;
|
||||
},
|
||||
/* Used to set functions for the goProx object at the bottom.
|
||||
|
|
@ -516,6 +516,7 @@ const RammerheadEncode = async (baseUrl) => {
|
|||
const preparePage = async () => {
|
||||
// This won't break the service workers as they store the variable separately.
|
||||
uvConfig = self['{{__uv$config}}'];
|
||||
delete self['{{__uv$config}}'];
|
||||
sjObject = self['$scramjetLoadController'];
|
||||
if (sjObject)
|
||||
sjEncode = new (sjObject().ScramjetController)({
|
||||
|
|
@ -532,16 +533,16 @@ const preparePage = async () => {
|
|||
|
||||
rammerhead: asyncUrlHandler(rhUrl),
|
||||
|
||||
terraria: urlHandler(location.protocol + '//a.' + getDomain()),
|
||||
searx: urlHandler(location.protocol + `//c.${getDomain()}/engine/`),
|
||||
|
||||
webleste: urlHandler(location.protocol + '//b.' + getDomain()),
|
||||
libreddit: urlHandler(location.protocol + '//c.' + getDomain()),
|
||||
|
||||
rnav: urlHandler(location.protocol + '//client.' + getDomain()),
|
||||
|
||||
osu: urlHandler(location.origin + '{{route}}{{/archive/osu}}'),
|
||||
|
||||
agar: urlHandler(sjUrl('https://agar.io')),
|
||||
|
||||
tru: urlHandler(sjUrl('https://truffled.lol/g')),
|
||||
|
||||
prison: urlHandler(sjUrl('https://vimlark.itch.io/pick-up-prison')),
|
||||
|
||||
speed: urlHandler(sjUrl('https://captain4lk.itch.io/what-the-road-brings')),
|
||||
|
|
@ -565,16 +566,6 @@ const preparePage = async () => {
|
|||
hianime: urlHandler(sjUrl('https://www.hianime.to')),
|
||||
|
||||
twitter: urlHandler(sjUrl('https://twitter.com')),
|
||||
|
||||
twitch: urlHandler(sjUrl('https://www.twitch.tv')),
|
||||
|
||||
instagram: urlHandler(sjUrl('https://www.instagram.com')),
|
||||
|
||||
reddit: urlHandler(sjUrl('https://www.reddit.com')),
|
||||
|
||||
wikipedia: urlHandler(sjUrl('https://www.wikiwand.com')),
|
||||
|
||||
newgrounds: urlHandler(sjUrl('https://www.newgrounds.com')),
|
||||
});
|
||||
|
||||
// Call a function after a given number of service workers are active.
|
||||
|
|
@ -776,11 +767,6 @@ const preparePage = async () => {
|
|||
prSet('pr-tt', 'tiktok');
|
||||
prSet('pr-ha', 'hianime');
|
||||
prSet('pr-tw', 'twitter');
|
||||
prSet('pr-tc', 'twitch');
|
||||
prSet('pr-ig', 'instagram');
|
||||
prSet('pr-rt', 'reddit');
|
||||
prSet('pr-wa', 'wikipedia');
|
||||
prSet('pr-ng', 'newgrounds');
|
||||
|
||||
// Load the frame for stealth mode if it exists.
|
||||
const windowFrame = document.getElementById('frame'),
|
||||
|
|
@ -803,39 +789,20 @@ const preparePage = async () => {
|
|||
else loadFrame();
|
||||
}
|
||||
|
||||
const useModule = (moduleFunc, tries = 0) => {
|
||||
try {
|
||||
moduleFunc();
|
||||
} catch (e) {
|
||||
if (tries <= 5)
|
||||
setTimeout(() => {
|
||||
useModule(moduleFunc, tries + 1);
|
||||
}, 600);
|
||||
}
|
||||
};
|
||||
|
||||
if (document.getElementsByClassName('tippy-button').length >= 0)
|
||||
useModule(() => {
|
||||
tippy('.tippy-button', {
|
||||
delay: 50,
|
||||
animateFill: true,
|
||||
placement: 'bottom',
|
||||
});
|
||||
});
|
||||
if (document.getElementsByClassName('pr-tippy').length >= 0)
|
||||
useModule(() => {
|
||||
tippy('.pr-tippy', {
|
||||
delay: 50,
|
||||
animateFill: true,
|
||||
placement: 'bottom',
|
||||
});
|
||||
});
|
||||
|
||||
const banner = document.getElementById('banner');
|
||||
if (banner) {
|
||||
useModule(() => {
|
||||
AOS.init();
|
||||
});
|
||||
let tries = 0;
|
||||
const useAOS = () => {
|
||||
try {
|
||||
AOS.init();
|
||||
} catch (e) {
|
||||
if (tries <= 5) {
|
||||
tries++;
|
||||
setTimeout(useAOS, 600);
|
||||
}
|
||||
}
|
||||
};
|
||||
useAOS();
|
||||
|
||||
fetch('{{route}}{{/assets/json/splash.json}}', {
|
||||
mode: 'same-origin',
|
||||
|
|
@ -865,7 +832,6 @@ const preparePage = async () => {
|
|||
'emulib-nav': 'emulib-nav',
|
||||
'flash-nav': 'flash-nav',
|
||||
'h5-nav': 'h5-nav',
|
||||
'par-nav': 'par-nav',
|
||||
};
|
||||
|
||||
for (const [listId, filename] of Object.entries(navLists)) {
|
||||
|
|
@ -882,14 +848,12 @@ const preparePage = async () => {
|
|||
switch (filename) {
|
||||
case 'emu-nav':
|
||||
case 'emulib-nav':
|
||||
case 'par-nav':
|
||||
case 'h5-nav': {
|
||||
const dirnames = {
|
||||
// Set the directory of where each item of the corresponding JSON
|
||||
// list will be retrieved from.
|
||||
'emu-nav': 'emu',
|
||||
'emulib-nav': 'emulib',
|
||||
'par-nav': 'par',
|
||||
'h5-nav': 'h5g',
|
||||
},
|
||||
dir = dirnames[filename],
|
||||
|
|
@ -908,31 +872,18 @@ const preparePage = async () => {
|
|||
a = document.createElement('a'),
|
||||
img = document.createElement('img'),
|
||||
title = document.createElement('h3');
|
||||
((desc = document.createElement('p')),
|
||||
(credits = document.createElement('p')));
|
||||
|
||||
a.href = '#';
|
||||
img.src = `{{route}}{{/assets/img/}}${dir}/` + item.img;
|
||||
title.textContent = item.name;
|
||||
desc.textContent = item.description;
|
||||
credits.textContent = item.credits;
|
||||
|
||||
if (filename === 'par-nav') {
|
||||
if (item.credits === 'truf')
|
||||
desc.innerHTML +=
|
||||
'<br>{{mask}}{{Credits: Check out the full site at }}<a target="_blank" href="{{route}}{{/truffled}}">{{mask}}{{truffled.lol}}</a> //{{mask}}{{ discord.gg/vVqY36mzvj}}';
|
||||
}
|
||||
|
||||
a.appendChild(img);
|
||||
a.appendChild(title);
|
||||
a.appendChild(desc);
|
||||
|
||||
// Which function is used for the click event is determined by
|
||||
// the corresponding location/index in the dirnames object.
|
||||
const functionsList = [
|
||||
// emu-nav
|
||||
() => goFrame(item.path),
|
||||
// emulib-nav
|
||||
() =>
|
||||
goFrame(
|
||||
'{{route}}{{/webretro}}?core=' +
|
||||
|
|
@ -940,13 +891,8 @@ const preparePage = async () => {
|
|||
'&rom=' +
|
||||
item.rom
|
||||
),
|
||||
// par-nav
|
||||
item.custom && goProx[item.custom]
|
||||
item.custom
|
||||
? () => goProx[item.custom]('stealth')
|
||||
: () => {},
|
||||
// h5-nav
|
||||
item.custom && goProx[item.custom]
|
||||
? () => goProx[item.custom]('window')
|
||||
: () => goFrame('{{route}}{{/archive/g/}}' + item.path),
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -141,7 +141,9 @@ const storageId = '{{hu-lts}}-storage',
|
|||
defaultTheme = 'dark',
|
||||
// Choose the default transport mode, for proxying, based on the browser.
|
||||
// Firefox is not supported by epoxy yet, which is why this is implemented.
|
||||
defaultMode = '{{libcurl}}',
|
||||
defaultMode = /(?:Chrome|AppleWebKit)\//.test(navigator.userAgent)
|
||||
? '{{epoxy}}'
|
||||
: '{{libcurl}}',
|
||||
defaultSearch = '{{defaultSearch}}';
|
||||
|
||||
// All code in this block is used by menu items that adjust website settings.
|
||||
|
|
@ -330,7 +332,7 @@ if (document.getElementById('csel')) {
|
|||
},
|
||||
move: {
|
||||
enable: true,
|
||||
speed: parseFloat(styles.getPropertyValue('--particles-mv-spd')) || 0.3,
|
||||
speed: parseFloat(styles.getPropertyValue('--particles-mv-spd')) || 0.8,
|
||||
direction: 'none',
|
||||
outModes: {
|
||||
default: 'out',
|
||||
|
|
@ -346,11 +348,11 @@ if (document.getElementById('csel')) {
|
|||
opacity: {
|
||||
value: {
|
||||
min: 0.1,
|
||||
max: parseFloat(styles.getPropertyValue('--particles-op-max')) || 0.3,
|
||||
max: parseFloat(styles.getPropertyValue('--particles-op-max')) || 0.5,
|
||||
},
|
||||
animation: {
|
||||
enable: true,
|
||||
speed: parseFloat(styles.getPropertyValue('--particles-op-spd')) || 0.3,
|
||||
speed: parseFloat(styles.getPropertyValue('--particles-op-spd')) || 0.5,
|
||||
sync: false,
|
||||
},
|
||||
},
|
||||
|
|
@ -361,7 +363,7 @@ if (document.getElementById('csel')) {
|
|||
value: { min: 1, max: 5 },
|
||||
animation: {
|
||||
enable: true,
|
||||
speed: parseFloat(styles.getPropertyValue('--particles-sz-spd')) || 0.3,
|
||||
speed: parseFloat(styles.getPropertyValue('--particles-sz-spd')) || 0.5,
|
||||
sync: false,
|
||||
},
|
||||
},
|
||||
|
|
@ -445,7 +447,6 @@ if (document.getElementById('csel')) {
|
|||
classUpdateHandler(torCheck, 'off')();
|
||||
});
|
||||
|
||||
/* The Eruda devtools are an alternative to the Chii devtools.
|
||||
attachClassEventListener('eruda', 'change', (e) => {
|
||||
const enabled = checkBooleanState(e.target) === true;
|
||||
|
||||
|
|
@ -462,7 +463,6 @@ if (document.getElementById('csel')) {
|
|||
removeStorage('ErudaEnabled');
|
||||
}
|
||||
});
|
||||
*/
|
||||
}
|
||||
|
||||
/* END WEBSITE SETTINGS */
|
||||
|
|
@ -519,7 +519,6 @@ useStorageArgs('UseSocks5', (s) => {
|
|||
else if ('string' === typeof s) classUpdateHandler(regionList, s)();
|
||||
});
|
||||
|
||||
/*
|
||||
useStorageArgs('ErudaEnabled', (s) => {
|
||||
const erudaSwitch = document.getElementsByClassName('eruda');
|
||||
|
||||
|
|
@ -527,7 +526,6 @@ useStorageArgs('ErudaEnabled', (s) => {
|
|||
classUpdateHandler(erudaSwitch, 'on', classEvent(erudaSwitch, 'change'))();
|
||||
}
|
||||
});
|
||||
*/
|
||||
|
||||
useStorageArgs('UseAC', (s) => {
|
||||
if (s === false)
|
||||
|
|
|
|||
|
|
@ -1,320 +1,169 @@
|
|||
(() => {
|
||||
const windowEventListeners = [],
|
||||
documentEventListeners = [],
|
||||
loadedModules = [];
|
||||
let _addEventListener = addEventListener,
|
||||
_document = document,
|
||||
_window = window,
|
||||
origin = location;
|
||||
_addEventListener('keydown', (event) => {
|
||||
addEventListener('keydown', (event) => {
|
||||
if (event.ctrlKey && event.code === 'KeyM' && event.isTrusted) {
|
||||
if (localStorage.getItem('{{hu-lts}}-loader-key') !== navigator.userAgent)
|
||||
localStorage.setItem('{{hu-lts}}-loader-key', navigator.userAgent);
|
||||
else localStorage.removeItem('{{hu-lts}}-loader-key');
|
||||
_window.location.reload();
|
||||
location.reload();
|
||||
}
|
||||
});
|
||||
const setListeners = () => {
|
||||
const currentWindow = _window,
|
||||
currentDoc = _document;
|
||||
currentWindow.Window.prototype.addEventListener = (...args) => {
|
||||
windowEventListeners.push([...args]);
|
||||
return _addEventListener.bind(currentWindow)(...args);
|
||||
};
|
||||
currentWindow.Document.prototype.addEventListener = (...args) => {
|
||||
documentEventListeners.push([...args]);
|
||||
return _addEventListener.bind(currentDoc)(...args);
|
||||
};
|
||||
};
|
||||
setListeners();
|
||||
const displayErrorPage = (overwrite = false, currentDoc = _document) => {
|
||||
currentDoc.body.removeAttribute('style');
|
||||
if (overwrite)
|
||||
currentDoc.body.replaceWith(currentDoc.createElement('body'));
|
||||
currentDoc.body.insertAdjacentHTML(
|
||||
const displayErrorPage = () => {
|
||||
document.body.removeAttribute('style');
|
||||
document.body.insertAdjacentHTML(
|
||||
'afterbegin',
|
||||
'<center><h1>403 Forbidden</h1></center><center>You don’t have permission to access this page.</center><hr><center>nginx</center>'
|
||||
'<center><h1>500 Internal Server Error</h1></center><hr><center>nginx</center>'
|
||||
);
|
||||
let head = currentDoc.createElement('head'),
|
||||
title = currentDoc.createElement('title');
|
||||
let head = document.createElement('head'),
|
||||
title = document.createElement('title');
|
||||
title.textContent = '500 Internal Server Error';
|
||||
head.appendChild(title);
|
||||
currentDoc.head.replaceWith(head);
|
||||
if (currentDoc.currentScript) currentDoc.currentScript.remove();
|
||||
document.head.replaceWith(head);
|
||||
document.currentScript.remove();
|
||||
};
|
||||
if (
|
||||
_window.localStorage.getItem('{{hu-lts}}-loader-key') !==
|
||||
navigator.userAgent
|
||||
)
|
||||
if (localStorage.getItem('{{hu-lts}}-loader-key') !== navigator.userAgent)
|
||||
return displayErrorPage();
|
||||
const lastUpdated = '{{cacheVal}}',
|
||||
retrieveUrl = (pathname) => {
|
||||
let capturedUrl = new URL(pathname, origin),
|
||||
capturedParams = new URLSearchParams(capturedUrl.search);
|
||||
capturedParams.set('cache', lastUpdated);
|
||||
capturedUrl.search = capturedParams.toString();
|
||||
return capturedUrl;
|
||||
};
|
||||
|
||||
const loadAttachments = () => {
|
||||
if (_document.readyState === 'complete') loadPage()();
|
||||
else addEventListener('load', loadPage());
|
||||
_addEventListener('popstate', () => {
|
||||
if (_window.location.href.includes('#')) return;
|
||||
_window.console.clear();
|
||||
loadPage(location, false)();
|
||||
});
|
||||
};
|
||||
|
||||
const loadPage =
|
||||
(destination = origin, pushState = true) =>
|
||||
() => {
|
||||
_window
|
||||
.fetch(
|
||||
retrieveUrl(
|
||||
destination.pathname.replace(/\/+/g, '/').replace(/\/$/, '') +
|
||||
'.ico'
|
||||
),
|
||||
{ mode: 'same-origin' }
|
||||
)
|
||||
.then((response) => {
|
||||
let i = windowEventListeners.length - 1;
|
||||
for (; i >= 0; i--) {
|
||||
_window.removeEventListener(...windowEventListeners[i]);
|
||||
windowEventListeners.pop();
|
||||
}
|
||||
for (i = documentEventListeners.length - 1; i >= 0; i--) {
|
||||
_document.removeEventListener(...documentEventListeners[i]);
|
||||
documentEventListeners.pop();
|
||||
}
|
||||
if (destination !== _window.location && pushState) {
|
||||
_window.console.clear();
|
||||
if (response.status === 200) {
|
||||
if (_window === window)
|
||||
_window.history.pushState({}, '', retrieveUrl(destination));
|
||||
} else return _window.location.assign(new URL(destination, origin));
|
||||
}
|
||||
response.blob().then((blob) => {
|
||||
new _window.Response(
|
||||
blob.stream().pipeThrough(new _window.DecompressionStream('gzip'))
|
||||
)
|
||||
.text()
|
||||
.then((text) => {
|
||||
((currentDoc, newDoc) => {
|
||||
const deferScripts = [],
|
||||
syncScripts = [];
|
||||
let reachedEnd = false,
|
||||
waitForHead = false,
|
||||
headScripts = 0;
|
||||
const bodyLoader = () => {
|
||||
headScripts--;
|
||||
if (waitForHead && headScripts <= 0) {
|
||||
waitForHead = false;
|
||||
currentDoc.body.replaceWith(recursiveClone(newDoc.body));
|
||||
if (reachedEnd) loadNextScript(false)();
|
||||
}
|
||||
return waitForHead;
|
||||
};
|
||||
const loadNextScript = (isDefer, currentScript) => () => {
|
||||
if (
|
||||
!isDefer &&
|
||||
currentScript &&
|
||||
'head' ===
|
||||
currentScript.parentElement.tagName.toLowerCase()
|
||||
)
|
||||
bodyLoader();
|
||||
let nextScript = [...currentDoc.scripts].find(
|
||||
(script) =>
|
||||
script.getAttribute('itemprop') === 'script-insert' &&
|
||||
script.defer === isDefer
|
||||
const loadPage = () => {
|
||||
removeEventListener('load', loadPage);
|
||||
fetch(location.pathname + '.ico', { mode: 'same-origin' })
|
||||
.then((response) => {
|
||||
response.blob().then((blob) => {
|
||||
new Response(
|
||||
blob.stream().pipeThrough(new DecompressionStream('gzip'))
|
||||
)
|
||||
.text()
|
||||
.then((text) => {
|
||||
((currentDoc, newDoc) => {
|
||||
const deferScripts = [],
|
||||
syncScripts = [];
|
||||
let reachedEnd = false,
|
||||
waitForHead = false,
|
||||
headScripts = 0;
|
||||
const bodyLoader = () => {
|
||||
headScripts--;
|
||||
if (waitForHead && headScripts <= 0) {
|
||||
waitForHead = false;
|
||||
currentDoc.body.replaceWith(recursiveClone(newDoc.body));
|
||||
if (reachedEnd) loadNextScript(false)();
|
||||
}
|
||||
return waitForHead;
|
||||
};
|
||||
const loadNextScript = (isDefer, currentScript) => () => {
|
||||
if (
|
||||
!isDefer &&
|
||||
currentScript &&
|
||||
'head' === currentScript.parentElement.tagName.toLowerCase()
|
||||
)
|
||||
bodyLoader();
|
||||
let nextScript = [...currentDoc.scripts].find(
|
||||
(script) =>
|
||||
script.getAttribute('itemprop') === 'script-insert' &&
|
||||
script.defer === isDefer
|
||||
);
|
||||
if (nextScript) {
|
||||
const replacement = isDefer
|
||||
? deferScripts.shift()
|
||||
: syncScripts.shift();
|
||||
nextScript.replaceWith(replacement);
|
||||
if (replacement.childNodes.length > 0)
|
||||
loadNextScript(isDefer, replacement)();
|
||||
} else if (!isDefer && !waitForHead) loadNextScript(true)();
|
||||
else reachedEnd = true;
|
||||
};
|
||||
const recursiveClone = (node) => {
|
||||
if (node.nodeType !== Node.ELEMENT_NODE) return node;
|
||||
const nodeName = node.tagName.toLowerCase();
|
||||
if (['svg', 'xml'].includes(nodeName))
|
||||
return node.cloneNode(1);
|
||||
let elementCopy = currentDoc.createElement(nodeName);
|
||||
let j = 0,
|
||||
nodeList = [...node.attributes];
|
||||
for (; j < nodeList.length; j++)
|
||||
elementCopy.setAttribute(
|
||||
nodeList[j].nodeName,
|
||||
nodeList[j].nodeValue || ''
|
||||
);
|
||||
if (nextScript) {
|
||||
const replacement = isDefer
|
||||
? deferScripts.shift()
|
||||
: syncScripts.shift();
|
||||
nextScript.replaceWith(replacement);
|
||||
if (replacement.childNodes.length > 0)
|
||||
loadNextScript(isDefer, replacement)();
|
||||
} else if (!isDefer && !waitForHead) loadNextScript(true)();
|
||||
else {
|
||||
reachedEnd = true;
|
||||
if (waitForHead) return;
|
||||
[
|
||||
...windowEventListeners,
|
||||
...documentEventListeners,
|
||||
].forEach((listenerParams) => {
|
||||
if (listenerParams[0] === 'DOMContentLoaded')
|
||||
listenerParams[1](
|
||||
new _window.Event('DOMContentLoaded')
|
||||
);
|
||||
});
|
||||
windowEventListeners.forEach((listenerParams) => {
|
||||
if (listenerParams[0] === 'load')
|
||||
listenerParams[1](new _window.Event('load'));
|
||||
});
|
||||
}
|
||||
};
|
||||
const recursiveClone = (node) => {
|
||||
if (node.nodeType !== Node.ELEMENT_NODE) return node;
|
||||
const nodeName = node.tagName.toLowerCase();
|
||||
let src = { pathname: node.src || '' };
|
||||
if (
|
||||
node.src &&
|
||||
'./'.indexOf(node.getAttribute('src')[0]) >= 0
|
||||
) {
|
||||
src = retrieveUrl(node.src);
|
||||
node.setAttribute(
|
||||
'src',
|
||||
src.pathname + src.search + src.hash
|
||||
nodeList = [...node.childNodes];
|
||||
for (j = 0; j < nodeList.length; j++)
|
||||
elementCopy.appendChild(recursiveClone(nodeList[j]));
|
||||
if ('script' === nodeName && !node.async) {
|
||||
const isDefer =
|
||||
node.defer || 'module' === node.type.toLowerCase();
|
||||
let replacement = currentDoc.createElement('script');
|
||||
if (isDefer) replacement.setAttribute('defer', '');
|
||||
replacement.setAttribute('itemprop', 'script-insert');
|
||||
if (node.childNodes.length <= 0) {
|
||||
elementCopy.addEventListener(
|
||||
'load',
|
||||
loadNextScript(isDefer, elementCopy)
|
||||
);
|
||||
elementCopy.addEventListener(
|
||||
'error',
|
||||
loadNextScript(isDefer, elementCopy)
|
||||
);
|
||||
}
|
||||
if (['svg', 'xml'].includes(nodeName))
|
||||
return node.cloneNode(1);
|
||||
let elementCopy = currentDoc.createElement(nodeName);
|
||||
let j = 0,
|
||||
nodeList = [...node.attributes];
|
||||
for (; j < nodeList.length; j++) {
|
||||
let attrName = nodeList[j].nodeName;
|
||||
let attrValue = nodeList[j].nodeValue;
|
||||
elementCopy.setAttribute(attrName, attrValue || '');
|
||||
if (attrName.toLowerCase() === 'href')
|
||||
try {
|
||||
new URL(attrValue);
|
||||
} catch (e) {
|
||||
if ('./?'.indexOf(attrValue[0]) !== -1)
|
||||
if (
|
||||
nodeName === 'a' &&
|
||||
attrValue.indexOf('#') === -1
|
||||
)
|
||||
elementCopy.addEventListener('click', (event) => {
|
||||
event.preventDefault();
|
||||
if (attrValue === '{{route}}{{/}}')
|
||||
attrValue = '{{route}}{{/index}}';
|
||||
loadPage(new URL(attrValue, origin))();
|
||||
});
|
||||
else if (nodeName === 'link') {
|
||||
src = retrieveUrl(node.href);
|
||||
elementCopy.setAttribute(
|
||||
'href',
|
||||
src.pathname + src.search + src.hash
|
||||
);
|
||||
}
|
||||
}
|
||||
if (isDefer) deferScripts.push(elementCopy);
|
||||
else {
|
||||
syncScripts.push(elementCopy);
|
||||
if ('head' === node.parentElement.tagName.toLowerCase())
|
||||
headScripts++;
|
||||
}
|
||||
nodeList = [...node.childNodes];
|
||||
for (j = 0; j < nodeList.length; j++)
|
||||
elementCopy.appendChild(recursiveClone(nodeList[j]));
|
||||
if ('script' === nodeName) {
|
||||
if (
|
||||
node.async ||
|
||||
'module' === node.type.toLowerCase() ||
|
||||
node.hasAttribute('data-module')
|
||||
) {
|
||||
if (
|
||||
loadedModules.includes(
|
||||
src.pathname || node.textContent
|
||||
)
|
||||
)
|
||||
return currentDoc.createElement('script');
|
||||
loadedModules.push(src.pathname || node.textContent);
|
||||
if (node.async) return elementCopy;
|
||||
}
|
||||
const isDefer =
|
||||
node.defer || 'module' === node.type.toLowerCase();
|
||||
let replacement = currentDoc.createElement('script');
|
||||
if (isDefer) replacement.setAttribute('defer', '');
|
||||
replacement.setAttribute('itemprop', 'script-insert');
|
||||
if (node.childNodes.length <= 0) {
|
||||
elementCopy.addEventListener(
|
||||
'load',
|
||||
loadNextScript(isDefer, elementCopy)
|
||||
);
|
||||
elementCopy.addEventListener(
|
||||
'error',
|
||||
loadNextScript(isDefer, elementCopy)
|
||||
);
|
||||
}
|
||||
if (isDefer) deferScripts.push(elementCopy);
|
||||
else {
|
||||
syncScripts.push(elementCopy);
|
||||
if ('head' === node.parentElement.tagName.toLowerCase())
|
||||
headScripts++;
|
||||
}
|
||||
return replacement;
|
||||
} else if (['style', 'link'].includes(nodeName)) {
|
||||
if (
|
||||
'link' === nodeName &&
|
||||
!/^stylesheet$/i.test(node.rel)
|
||||
)
|
||||
return elementCopy;
|
||||
else if (node.childNodes.length <= 0) {
|
||||
elementCopy.addEventListener('load', bodyLoader);
|
||||
elementCopy.addEventListener('error', bodyLoader);
|
||||
if ('head' === node.parentElement.tagName.toLowerCase())
|
||||
headScripts++;
|
||||
}
|
||||
return replacement;
|
||||
} else if (['style', 'link'].includes(nodeName)) {
|
||||
if ('link' === nodeName && !/^stylesheet$/i.test(node.rel))
|
||||
return elementCopy;
|
||||
else if (node.childNodes.length <= 0) {
|
||||
elementCopy.addEventListener('load', bodyLoader);
|
||||
elementCopy.addEventListener('error', bodyLoader);
|
||||
if ('head' === node.parentElement.tagName.toLowerCase())
|
||||
headScripts++;
|
||||
}
|
||||
/*
|
||||
if (node.id === 'newtab')
|
||||
elementCopy.addEventListener('click', () => {
|
||||
origin = new URL(location.href);
|
||||
_window = open();
|
||||
_addEventListener = _addEventListener.bind(_window);
|
||||
_document = _window.document;
|
||||
setListeners();
|
||||
loadAttachments();
|
||||
}
|
||||
return elementCopy;
|
||||
};
|
||||
let currentType = currentDoc.doctype,
|
||||
newType = newDoc.doctype,
|
||||
currentDocNode = currentDoc.documentElement,
|
||||
newDocNode = newDoc.documentElement;
|
||||
if (currentType)
|
||||
if (newType) currentType.replaceWith(newType);
|
||||
else currentType.remove();
|
||||
else if (newType) currentDoc.prepend(newType);
|
||||
if (currentDocNode)
|
||||
if (newDocNode) {
|
||||
if (
|
||||
currentDocNode.tagName === newDocNode.tagName &&
|
||||
currentDoc.head &&
|
||||
newDoc.head &&
|
||||
currentDoc.body &&
|
||||
newDoc.body
|
||||
) {
|
||||
[...currentDocNode.attributes].forEach((attribute) => {
|
||||
currentDocNode.removeAttribute(attribute.nodeName);
|
||||
});
|
||||
*/
|
||||
return elementCopy;
|
||||
};
|
||||
let currentType = currentDoc.doctype,
|
||||
newType = newDoc.doctype,
|
||||
currentDocNode = currentDoc.documentElement,
|
||||
newDocNode = newDoc.documentElement;
|
||||
if (currentType)
|
||||
if (newType) currentType.replaceWith(newType);
|
||||
else currentType.remove();
|
||||
else if (newType) currentDoc.prepend(newType);
|
||||
if (currentDocNode)
|
||||
if (newDocNode) {
|
||||
if (
|
||||
currentDocNode.tagName === newDocNode.tagName &&
|
||||
currentDoc.head &&
|
||||
newDoc.head &&
|
||||
currentDoc.body &&
|
||||
newDoc.body
|
||||
) {
|
||||
[...currentDocNode.attributes].forEach((attribute) => {
|
||||
currentDocNode.removeAttribute(attribute.nodeName);
|
||||
});
|
||||
[...newDocNode.attributes].forEach((attribute) => {
|
||||
currentDocNode.setAttribute(
|
||||
attribute.nodeName,
|
||||
attribute.nodeValue || ''
|
||||
);
|
||||
});
|
||||
waitForHead = true;
|
||||
currentDoc.head.replaceWith(
|
||||
recursiveClone(newDoc.head)
|
||||
[...newDocNode.attributes].forEach((attribute) => {
|
||||
currentDocNode.setAttribute(
|
||||
attribute.nodeName,
|
||||
attribute.nodeValue || ''
|
||||
);
|
||||
} else
|
||||
currentDocNode.replaceWith(recursiveClone(newDocNode));
|
||||
} else currentDocNode.remove();
|
||||
else if (newDocNode)
|
||||
currentDocNode.appendChild(recursiveClone(newDocNode));
|
||||
});
|
||||
waitForHead = true;
|
||||
currentDoc.head.replaceWith(recursiveClone(newDoc.head));
|
||||
} else
|
||||
currentDocNode.replaceWith(recursiveClone(newDocNode));
|
||||
} else currentDocNode.remove();
|
||||
else if (newDocNode)
|
||||
currentDocNode.appendChild(recursiveClone(newDocNode));
|
||||
|
||||
loadNextScript(false)();
|
||||
})(
|
||||
_document,
|
||||
new _window.DOMParser().parseFromString(text, 'text/html')
|
||||
);
|
||||
});
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
_window.console.log(error);
|
||||
displayErrorPage(true);
|
||||
loadNextScript(false)();
|
||||
})(document, new DOMParser().parseFromString(text, 'text/html'));
|
||||
});
|
||||
});
|
||||
};
|
||||
loadAttachments();
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log(error);
|
||||
displayErrorPage();
|
||||
});
|
||||
};
|
||||
if (document.readyState === 'complete') loadPage();
|
||||
else addEventListener('load', loadPage);
|
||||
})();
|
||||
|
|
|
|||
|
|
@ -15,7 +15,9 @@
|
|||
proxyUrl = {
|
||||
tor: 'socks5h://localhost:9050',
|
||||
eu: 'socks5h://localhost:7000',
|
||||
jp: 'socks5h://localhost:7001',
|
||||
usWest: 'socks5h://localhost:7001',
|
||||
usEast: 'socks5h://localhost:7002',
|
||||
jp: 'socks5h://localhost:7003',
|
||||
},
|
||||
transports = {
|
||||
'{{epoxy}}': '{{route}}{{/epoxy/index.mjs}}',
|
||||
|
|
@ -24,7 +26,9 @@
|
|||
storageId = '{{hu-lts}}-storage',
|
||||
storageObject = () => JSON.parse(localStorage.getItem(storageId)) || {},
|
||||
readStorage = (name) => storageObject()[name],
|
||||
defaultMode = '{{libcurl}}';
|
||||
defaultMode = /(?:Chrome|AppleWebKit)\//.test(navigator.userAgent)
|
||||
? '{{epoxy}}'
|
||||
: '{{libcurl}}';
|
||||
|
||||
transports.default = transports[defaultMode];
|
||||
|
||||
|
|
|
|||
|
|
@ -4,16 +4,26 @@
|
|||
"path": "adarkroom/",
|
||||
"img": "darkroom.webp"
|
||||
},
|
||||
{
|
||||
"name": "Minecraft: Java Edition (1.12.2)",
|
||||
"path": "mcjava1122/",
|
||||
"img": "mcnow.webp"
|
||||
},
|
||||
{
|
||||
"name": "Celeste Web",
|
||||
"custom": "webleste",
|
||||
"path": "webleste/",
|
||||
"img": "celeste.webp"
|
||||
},
|
||||
{
|
||||
"name": "Terraria Web",
|
||||
"custom": "terraria",
|
||||
"path": "terraria/",
|
||||
"img": "terraria.webp"
|
||||
},
|
||||
{
|
||||
"name": "Minecraft: Java Edition (1.8.8)",
|
||||
"path": "mcjava188/",
|
||||
"img": "mcnow.webp"
|
||||
},
|
||||
{
|
||||
"name": "Gopher Cart",
|
||||
"path": "gopher/",
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
[
|
||||
{
|
||||
"name": "Truffled",
|
||||
"custom": "tru",
|
||||
"img": "truf.webp",
|
||||
"description": "Browse a list of games ported to the web, including Hollow Knight, FNAF, Ultrakill, Minecraft, Deltarune and more!",
|
||||
"credits": "truf"
|
||||
}
|
||||
]
|
||||
|
|
@ -9,16 +9,11 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -37,6 +32,8 @@
|
|||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/card.js}}{{inline}}"></script>
|
||||
}}
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -11,45 +11,11 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<style>
|
||||
body {
|
||||
color: #eceff4;
|
||||
background-color: #1d232a;
|
||||
font-family: 'Figtree', sans-serif;
|
||||
font-optical-sizing: auto;
|
||||
background-image:
|
||||
radial-gradient(
|
||||
circle,
|
||||
rgba(131, 131, 131, 0.02) 1px,
|
||||
transparent 1px
|
||||
),
|
||||
radial-gradient(
|
||||
circle,
|
||||
rgba(148, 148, 148, 0.02) 1px,
|
||||
transparent 1px
|
||||
);
|
||||
background-position:
|
||||
0 0,
|
||||
5px 5px;
|
||||
background-size: 10px 10px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #ff5861;
|
||||
font-size: 84px;
|
||||
font-weight: 900;
|
||||
margin-top: 6%;
|
||||
}
|
||||
</style>
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="background" class="fullwidth"></div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<div id="mainbody" class="fullwidth">
|
||||
|
|
@ -58,9 +24,6 @@
|
|||
<h2>
|
||||
{{mask}}{{Reload the page or do Ctrl+R!!! This fixes a lot of issues}}
|
||||
</h2>
|
||||
<h2>
|
||||
{{mask}}{{Blame BareMux! There are no bare clients.... reloading the page will resolve this issue.}}
|
||||
</h2>
|
||||
<p>
|
||||
{{mask}}{{Might be doing some maintenance or the web server is down.}}
|
||||
</p>
|
||||
|
|
@ -77,5 +40,8 @@
|
|||
<!--FOOTER-->
|
||||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -9,16 +9,11 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -38,6 +33,8 @@
|
|||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/card.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
|
|
|
|||
BIN
views/favicon.ico
Normal file
BIN
views/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 264 KiB |
107
views/index.html
107
views/index.html
|
|
@ -1,4 +1,4 @@
|
|||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
|
|
@ -74,20 +74,7 @@
|
|||
<meta name="apple-mobile-web-app-title" content="Holy Unblocker LTS" />
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script
|
||||
src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"
|
||||
defer
|
||||
data-module
|
||||
></script>
|
||||
<script
|
||||
src="https://unpkg.com/aos@next/dist/aos.js"
|
||||
defer
|
||||
data-module
|
||||
></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
<link rel="mask-icon" href="{{route}}{{new.svg}}" color="#b4213b" />
|
||||
<link rel="manifest" href="{{route}}{{manifest.json}}" />
|
||||
<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
|
||||
|
|
@ -274,7 +261,7 @@
|
|||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="password-field" class="flex flex-col space-y-2"><label for="pwd" class="text-sm font-medium text-gray-700">Password</label><input type="password" id="pwd" name="pwd" placeholder="********" class="px-4 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" /><input type="text" id="cc" name="cc" placeholder="1234 5678 9012 3456" class="px-4 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-gray-400" readonly title="" /></div>
|
||||
<div
|
||||
id="header"
|
||||
class="fullwidth"
|
||||
|
|
@ -284,7 +271,9 @@
|
|||
<!--HEADER-->
|
||||
</div>
|
||||
<div id="banner" class="fullwidth">
|
||||
<p class="text-center">{{getSplash}}</p>
|
||||
<p class="text-center">
|
||||
{{getSplash}}
|
||||
</p>
|
||||
</div>
|
||||
<div id="mainbody" class="fullwidth">
|
||||
<div id="background" class="fullwidth"></div>
|
||||
|
|
@ -294,11 +283,11 @@
|
|||
<h1>{{mask}}{{Privacy right at your fingertips.}}</h1>
|
||||
<a
|
||||
class="homebutton"
|
||||
href="{{route}}{{/browsing}}"
|
||||
href="#scrollfix"
|
||||
{{ifSEO}}{{
|
||||
aria-label="Bypass now"
|
||||
}}
|
||||
>By<wbr />pa<wbr />ss now?</a
|
||||
>By<wbr>pa<wbr>ss now?</a
|
||||
>
|
||||
<a
|
||||
class="homebutton mobile"
|
||||
|
|
@ -306,7 +295,7 @@
|
|||
{{ifSEO}}{{
|
||||
aria-label="Browse now"
|
||||
}}
|
||||
>By<wbr />p<wbr />as<wbr />s no<wbr />w?</a
|
||||
>By<wbr>p<wbr>as<wbr>s no<wbr>w?</a
|
||||
>
|
||||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
|
|
@ -322,18 +311,21 @@
|
|||
<p>
|
||||
<span class="cmd"
|
||||
>git clone --recurse-submodules<span class="url">
|
||||
{{mask}}{{https://github.com/QuiteAFancyEmerald/Holy-Unblocker.git}}</span
|
||||
{{mask}}{{https://github.com/QuiteAFancyEmerald/Holy-Unblocker.git}}</span
|
||||
> </span
|
||||
><br />
|
||||
<span class="cmd">cd {{mask}}{{Holy-Unblocker}} </span><br />
|
||||
<span class="comment">For first-time setup on a production branch...</span><br />
|
||||
<span class="cmd">npm run fresh-start </span><br />
|
||||
<span class="comment">Or typical uses...</span><br />
|
||||
<span class="comment"
|
||||
>Recommended you switch branches to a production branch
|
||||
such as v6.x instead of master.</span
|
||||
><br />
|
||||
<span class="cmd">npm run fresh-install </span><br />
|
||||
<span class="cmd">npm start </span><br />
|
||||
<span class="comment">Or on subsequent uses...</span><br />
|
||||
<span class="cmd">npm restart </span><br /><br />
|
||||
<span class="comment"
|
||||
>{{mask}}{{Holy Unblocker LTS}} v{{version}} // master</span
|
||||
>{{mask}}{{Holy Unblocker LTS}} v{{version}}
|
||||
// master</span
|
||||
><br />
|
||||
<span class="comment">Node.js v20.x</span><br />
|
||||
<span class="comment">Fastify v5.4.0</span><br /><br />
|
||||
|
|
@ -410,9 +402,6 @@
|
|||
<a class="fancybutton glowbutton" href="{{route}}{{/browsing}}"
|
||||
>Browse Now</a
|
||||
>
|
||||
<a class="fancybutton glowbutton" href="{{route}}{{/patreon}}"
|
||||
>Donate</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -592,12 +581,6 @@
|
|||
extensions, localized client firewalls, and network-related
|
||||
filters. }}
|
||||
</p>
|
||||
<p>
|
||||
{{mask}}{{ Please consider donating to this project so we can
|
||||
keep things free! We offer more domains per month, beta access,
|
||||
personal domains and priority feature requests. }}<br />
|
||||
You can donate <a href="{{route}}{{/patreon}}">here</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="image-container">
|
||||
|
|
@ -692,16 +675,17 @@
|
|||
<div class="text-wrap">
|
||||
<h1>{{mask}}{{Hosting and Deployment}}</h1>
|
||||
<p>
|
||||
<strong>{{mask}}{{Holy Unblocker LTS}}</strong> {{mask}}{{is an
|
||||
open-source solution designed with modularity, ease of use, and
|
||||
easy deployment in mind. Key features include ad-blocking,
|
||||
flexible source code generation, and advanced proxy
|
||||
navigation.}}<br /><br />
|
||||
<strong>{{mask}}{{Holy Unblocker}} LTS</strong> {{mask}}{{is
|
||||
designed with flexibility and ease of deployment in mind. As an
|
||||
open-source solution, it is straightforward to set up on both
|
||||
personal and production environments. Key features include
|
||||
modularity for ad-blocking, source randomization, and advanced
|
||||
proxy navigation.}}<br /><br />
|
||||
{{mask}}{{For comprehensive setup instructions, visit our
|
||||
official}}
|
||||
<a
|
||||
href="{{route}}{{/github}}"
|
||||
title="{{mask}}{{Holy Unblocker LTS}} GitHub Repository"
|
||||
title="{{mask}}{{Holy Unblocker}} LTS GitHub Repository"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>GitHub repository</a
|
||||
|
|
@ -716,9 +700,24 @@
|
|||
<a
|
||||
href="{{route}}{{/documentation}}"
|
||||
title="{{mask}}{{Additional Hosting Information}}"
|
||||
>{{mask}}{{the built-in documentation provided here}}</a
|
||||
>{{mask}}{{linked here on the main site}}</a
|
||||
>.
|
||||
</p>
|
||||
<p>
|
||||
{{mask}}{{Additional scripts can be found in}}
|
||||
<code>{{mask}}{{/views/assets/js/}}</code>:<br />
|
||||
- <strong>{{mask}}{{bareTransport.js}}</strong>{{mask}}{{:
|
||||
Locally installed module for Ultraviolet functionality.}}<br />
|
||||
- <strong>card.js</strong>: Adds visual effects to the box
|
||||
cards.<br />
|
||||
- <strong>common.js</strong>: Provides essential features across
|
||||
all pages.<br />
|
||||
- <strong>csel.js</strong>: Manages the settings menu.<br />
|
||||
- <strong>particles.js</strong>: Creates animated background
|
||||
effects.<br />
|
||||
- <strong>register-sw.js</strong>{{mask}}{{: Handles service
|
||||
workers and Ultraviolet integration.}}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="image-container">
|
||||
|
|
@ -735,7 +734,7 @@
|
|||
<div class="text-wrap">
|
||||
<h1>Contributing</h1>
|
||||
<p>
|
||||
<strong>{{mask}}{{Holy Unblocker LTS}}</strong>
|
||||
<strong>{{mask}}{{Holy Unblocker}} LTS</strong>
|
||||
{{mask}}{{thrives due to the dedicated efforts of our amazing
|
||||
contributors. As an open-source project,}}
|
||||
<strong>{{mask}}{{HU LTS}}</strong> {{mask}}{{relies on the
|
||||
|
|
@ -743,6 +742,21 @@
|
|||
continuous improvement and deliver the best experience for all
|
||||
users.}}
|
||||
</p>
|
||||
<p>
|
||||
{{mask}}{{There are numerous ways to get involved and make a
|
||||
meaningful impact on}}
|
||||
<strong>{{mask}}{{Holy Unblocker LTS}}</strong>:<br /><br />
|
||||
- <strong>Design</strong>: Contribute to the visual aesthetics
|
||||
and user experience.<br />
|
||||
- <strong>Core Development</strong>: Help enhance the core
|
||||
functionality and performance.<br />
|
||||
- <strong>{{mask}}{{Applications and Games}}</strong>{{mask}}{{:
|
||||
Develop and integrate new features or games.}}<br />
|
||||
- <strong>Documentation</strong>: Assist with creating and
|
||||
refining project documentation.<br />
|
||||
- <strong>Testing and QA</strong>: Ensure the software is
|
||||
bug-free and meets quality standards.
|
||||
</p>
|
||||
<p>
|
||||
To start contributing, visit our
|
||||
<a
|
||||
|
|
@ -751,7 +765,8 @@
|
|||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>GitHub repository</a
|
||||
>, and join our
|
||||
>
|
||||
and join our
|
||||
<a
|
||||
href="{{route}}{{/titaniumnetwork-discord}}"
|
||||
title="{{mask}}{{Holy Unblocker LTS Discord Server}}"
|
||||
|
|
@ -759,8 +774,7 @@
|
|||
rel="noopener noreferrer"
|
||||
>{{mask}}{{Discord server}}</a
|
||||
>
|
||||
for real-time discussions and updates. Suggestions and feedback
|
||||
are also welcome.
|
||||
for real-time discussions and updates.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -847,7 +861,10 @@
|
|||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/card.js}}{{inline}}"></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/aos@next/dist/aos.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -9,25 +9,23 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="{{route}}{{/scram/scramjet.all.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/baremux/index.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/uv/uv.bundle.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/uv/uv.config.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/scram/scramjet.all.js}}" defer></script>
|
||||
<script src="{{route}}{{/baremux/index.js}}" defer></script>
|
||||
<script src="{{route}}{{/uv/uv.bundle.js}}" defer></script>
|
||||
<script src="{{route}}{{/uv/uv.config.js}}" defer></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{/assets/js/register-sw.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div class="loader loader-active">
|
||||
<div class="loader-w"></div>
|
||||
</div>
|
||||
<div class="omnibar" id="pr-sj">
|
||||
<a class="logo" href="{{route}}{{/browsing}}" role="img" aria-label="Holy Unblocker Logo"></a>
|
||||
<div class="logo" role="img" aria-label="Holy Unblocker Logo"></div>
|
||||
<button title="Back"><i class="fas fa-arrow-left"></i></button>
|
||||
<button title="Forward"><i class="fas fa-arrow-right"></i></button>
|
||||
<button title="Refresh"><i class="fas fa-redo-alt"></i></button>
|
||||
|
|
@ -42,11 +40,9 @@
|
|||
/>
|
||||
<ul id="autocomplete"></ul>
|
||||
</div>
|
||||
<!--
|
||||
<button title="Bookmarks" id="bookmarks-toggle">
|
||||
<i class="fas fa-bookmark"></i>
|
||||
</button>
|
||||
-->
|
||||
<div title="Settings" class="dropdown-parent">
|
||||
<a href="#" tabindex="0">
|
||||
<i class="fas fa-cog pulse" aria-hidden="true"></i>
|
||||
|
|
@ -146,7 +142,7 @@
|
|||
setTimeout(() => {
|
||||
windowFrame.contentWindow.addEventListener('beforeunload', () => {
|
||||
loader.classList.toggle('loader-active', true);
|
||||
loaderTimeout(3000);
|
||||
loaderTimeout(5000);
|
||||
});
|
||||
windowFrame.contentWindow.addEventListener('unload', loadHandler);
|
||||
windowFrame.contentWindow.addEventListener(
|
||||
|
|
@ -160,5 +156,8 @@
|
|||
windowFrame.addEventListener('load', updateLoader);
|
||||
loadHandler();
|
||||
</script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
{{ifDisguise}}{{<form id="password-field" class="flex flex-col space-y-2"><label for="username" class="text-sm font-medium text-gray-700">Username</label><input type="text" autocomplete="username" id="username" name="username" placeholder="user" class="px-4 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" required /><label for="pwd" class="text-sm font-medium text-gray-700">Password</label><input type="password" autocomplete="current-password" id="pwd" name="pwd" placeholder="********" class="px-4 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" required /><input type="text" id="cc" name="cc" placeholder="1234 5678 9012 3456" class="px-4 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-gray-400" readonly title="" /></form>}}
|
||||
|
|
@ -91,7 +91,7 @@
|
|||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<script>
|
||||
localStorage.setItem('{{hu-lts}}-loader-key', navigator.userAgent);
|
||||
location.replace('{{route}}{{/index}}?cache={{cacheVal}}');
|
||||
location.replace('{{route}}{{/index}}');
|
||||
</script>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
|
|
|
|||
|
|
@ -49,15 +49,6 @@
|
|||
have a future fix for this. }}
|
||||
</p>
|
||||
</div>
|
||||
<div class="faq-text">
|
||||
<h3>
|
||||
<strong
|
||||
>{{mask}}{{I am having problems logging into sites or viewing content since it thinks I am a bot.}}</strong>
|
||||
</h3>
|
||||
<p>
|
||||
{{mask}}{{During peak traffic hours this is very common due to everything going through only two respective IPs. The solution is to swap regions via Region Selection or enable Tor routing.}}
|
||||
</p>
|
||||
</div>
|
||||
<div class="faq-text">
|
||||
<h3>
|
||||
<strong
|
||||
|
|
|
|||
|
|
@ -134,15 +134,6 @@
|
|||
>{{mask}}{{GitHub}}</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
href="{{route}}{{/patreon}}"
|
||||
title="Follow {{mask}}{{Holy Unblocker on Patreon}}"
|
||||
>{{mask}}{{Patreon}}</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="{{route}}{{/terms}}"
|
||||
|
|
@ -167,6 +158,7 @@
|
|||
<a
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="soc-github"
|
||||
href="{{route}}{{/github}}"
|
||||
title="Follow {{mask}}{{Holy Unblocker on GitHub}}"
|
||||
><i class="fab fa-github" aria-hidden="true"></i
|
||||
|
|
@ -174,13 +166,7 @@
|
|||
<a
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
href="{{route}}{{/patreon}}"
|
||||
title="Follow {{mask}}{{Holy Unblocker on Patreon}}"
|
||||
><i class="fab fa-patreon" aria-hidden="true"></i
|
||||
></a>
|
||||
<a
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="soc-patreon"
|
||||
href="{{route}}{{/titaniumnetwork-documentation}}"
|
||||
title="{{mask}}{{View Documentation on Titanium Network}}"
|
||||
><i class="fas fa-file-code" aria-hidden="true"></i
|
||||
|
|
|
|||
|
|
@ -10,124 +10,104 @@
|
|||
href="{{route}}{{/}}"
|
||||
class="brand pulse"
|
||||
title="{{mask}}{{Holy Unblocker Home Page}}"
|
||||
>{{mask}}{{Holy Unblocker v6.8.x}}</a
|
||||
>
|
||||
{{mask}}{{Holy Unblocker v6.9.x}}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="navbar-group">
|
||||
<ul class="navbar-1" role="list" aria-label="Primary navigation">
|
||||
<li style="margin-left: 0" role="listitem">
|
||||
<a
|
||||
class="line"
|
||||
href="{{route}}{{/browsing}}"
|
||||
title="{{mask}}{{Web Proxies - Access various web proxies to bypass restrictions}}"
|
||||
>{{mask}}{{Web Proxies}}</a
|
||||
>
|
||||
</li>
|
||||
<li role="listitem">
|
||||
<a
|
||||
class="line"
|
||||
href="{{route}}{{/games}}"
|
||||
title="{{mask}}{{Games - Explore a range of games available through our service}}"
|
||||
>{{mask}}{{Games}}</a
|
||||
>
|
||||
</li>
|
||||
<li role="listitem">
|
||||
<a
|
||||
class="line"
|
||||
href="{{route}}{{/youtube}}"
|
||||
title="{{mask}}{{YouTube - Access YouTube content through our proxy service}}"
|
||||
>{{mask}}{{YouTube}}</a
|
||||
>
|
||||
</li>
|
||||
<li role="listitem">
|
||||
<a
|
||||
class="line"
|
||||
href="{{route}}{{/apps}}"
|
||||
title="{{mask}}{{Applications - Browse a selection of useful applications}}"
|
||||
>{{mask}}{{Applications}}</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="navbar" role="list">
|
||||
<li class="dropdown-parent dmenu">
|
||||
<div class="pulse white-text">
|
||||
<a href="#" tabindex="0"><i class="fas fa-bars"></i></a>
|
||||
</div>
|
||||
<div
|
||||
class="dropdown-child"
|
||||
tabindex="0"
|
||||
role="menu"
|
||||
aria-label="More options submenu"
|
||||
>
|
||||
<ul class="subnavbar">
|
||||
<li role="menuitem">
|
||||
<a
|
||||
href="{{route}}{{/documentation}}"
|
||||
title="{{mask}}{{Documentation - Detailed information and guides}}"
|
||||
>Docs</a
|
||||
>
|
||||
</li>
|
||||
<li role="menuitem">
|
||||
<a
|
||||
href="{{route}}{{/questions}}"
|
||||
title="{{mask}}{{FAQ - Frequently asked questions and answers}}"
|
||||
>FAQ</a
|
||||
>
|
||||
</li>
|
||||
<li role="menuitem">
|
||||
<a
|
||||
href="{{route}}{{/credits}}"
|
||||
title="{{mask}}{{Credits - Acknowledgements and contributions}}"
|
||||
>Credits</a
|
||||
>
|
||||
</li>
|
||||
<li role="menuitem">
|
||||
<a
|
||||
href="{{route}}{{/terms}}"
|
||||
title="{{mask}}{{Terms of Service - Rules and policies of use}}"
|
||||
>TOS</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
<li class="dropdown-parent smenu" role="listitem">
|
||||
<div class="white-text">
|
||||
<a href="#" aria-label="Settings menu" tabindex="0"
|
||||
><i class="fas fa-cog" aria-hidden="true"></i
|
||||
></a>
|
||||
</div>
|
||||
<div
|
||||
class="dropdown-settings"
|
||||
tabindex="0"
|
||||
role="menu"
|
||||
aria-label="Settings menu"
|
||||
>
|
||||
<div id="csel">
|
||||
<!--SETTINGS-->
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<ul class="navbar-1" role="list" aria-label="Primary navigation">
|
||||
<li class="pulse" style="margin-left: 0" role="listitem">
|
||||
<a
|
||||
href="{{route}}{{/browsing}}"
|
||||
title="{{mask}}{{Web Proxies - Access various web proxies to bypass restrictions}}"
|
||||
>{{mask}}{{Web Proxies}}</a
|
||||
>
|
||||
</li>
|
||||
<li class="pulse" role="listitem">
|
||||
<a
|
||||
href="{{route}}{{/games}}"
|
||||
title="{{mask}}{{Games - Explore a range of games available through our service}}"
|
||||
>{{mask}}{{Games}}</a
|
||||
>
|
||||
</li>
|
||||
<li class="pulse" role="listitem">
|
||||
<a
|
||||
href="{{route}}{{/youtube}}"
|
||||
title="{{mask}}{{YouTube - Access YouTube content through our proxy service}}"
|
||||
>{{mask}}{{YouTube}}</a
|
||||
>
|
||||
</li>
|
||||
<li class="pulse new" role="listitem">
|
||||
<a
|
||||
href="{{route}}{{/apps}}"
|
||||
title="{{mask}}{{Applications - Browse a selection of useful applications}}"
|
||||
>{{mask}}{{Applications}}</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<input id="mnavecb" type="checkbox" aria-hidden="true" />
|
||||
<label for="mnavecb" class="mnave" aria-label="Toggle navigation menu">
|
||||
<span class="mnavebutton" aria-hidden="true"></span>
|
||||
</label>
|
||||
|
||||
<div class="mobile-overlay">
|
||||
<ul class="navbar-1">
|
||||
<li><a href="{{route}}{{/browsing}}">Web Proxies</a></li>
|
||||
<li><a href="{{route}}{{/games}}">Games</a></li>
|
||||
<li><a href="{{route}}{{/youtube}}">YouTube</a></li>
|
||||
<li><a href="{{route}}{{/apps}}">Applications</a></li>
|
||||
<li><a href="{{route}}{{/documentation}}">Docs</a></li>
|
||||
<li><a href="{{route}}{{/questions}}">FAQ</a></li>
|
||||
<li><a href="{{route}}{{/credits}}">Credits</a></li>
|
||||
<li><a href="{{route}}{{/terms}}">TOS</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<ul class="navbar" role="list">
|
||||
<li class="dropdown-parent">
|
||||
<div class="pulse white-text">
|
||||
<a href="#" tabindex="0">More <i class="fas fa-ellipsis-v"></i></a>
|
||||
</div>
|
||||
<div
|
||||
class="dropdown-child"
|
||||
tabindex="0"
|
||||
role="menu"
|
||||
aria-label="More options submenu"
|
||||
>
|
||||
<ul class="subnavbar">
|
||||
<li role="menuitem">
|
||||
<a
|
||||
href="{{route}}{{/documentation}}"
|
||||
title="{{mask}}{{Documentation - Detailed information and guides}}"
|
||||
>Docs</a
|
||||
>
|
||||
</li>
|
||||
<li role="menuitem">
|
||||
<a
|
||||
href="{{route}}{{/questions}}"
|
||||
title="{{mask}}{{FAQ - Frequently asked questions and answers}}"
|
||||
>FAQ</a
|
||||
>
|
||||
</li>
|
||||
<li role="menuitem">
|
||||
<a
|
||||
href="{{route}}{{/credits}}"
|
||||
title="{{mask}}{{Credits - Acknowledgements and contributions}}"
|
||||
>Credits</a
|
||||
>
|
||||
</li>
|
||||
<li role="menuitem">
|
||||
<a
|
||||
href="{{route}}{{/terms}}"
|
||||
title="{{mask}}{{Terms of Service - Rules and policies of use}}"
|
||||
>TOS</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
<li class="dropdown-parent" role="listitem">
|
||||
<div class="pulse white-text">
|
||||
<a href="#" aria-label="Settings menu" tabindex="0"
|
||||
>Settings <i class="fas fa-cog pulse" aria-hidden="true"></i
|
||||
></a>
|
||||
</div>
|
||||
<div
|
||||
class="dropdown-settings"
|
||||
tabindex="0"
|
||||
role="menu"
|
||||
aria-label="Settings menu"
|
||||
>
|
||||
<div id="csel">
|
||||
<!--SETTINGS-->
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@
|
|||
/>
|
||||
}}
|
||||
</head>
|
||||
<body style="background-color: #1d232a">
|
||||
<body style="background-color: #1d232a;">
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
<h3>Advanced Settings ▼</h3>
|
||||
<div id="settings-panel" class="pr-settings">
|
||||
<div class="advanced-settings"></div>
|
||||
<label>
|
||||
|
|
@ -33,7 +34,9 @@
|
|||
</span>
|
||||
<select class="region-list">
|
||||
<option value="off">Off</option>
|
||||
<option value="eu">Sweden</option>
|
||||
<option value="eu">Europe</option>
|
||||
<option value="usWest">US-West</option>
|
||||
<option value="usEast">US-East</option>
|
||||
<option value="jp">Japan</option>
|
||||
</select>
|
||||
</label>
|
||||
|
|
@ -90,9 +93,5 @@
|
|||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p><br>
|
||||
{{mask}}{{ We offer more domains per month, beta access,
|
||||
personal domains and priority feature requests.}} You can donate <a href="{{route}}{{/patreon}}">here</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -7,22 +7,17 @@
|
|||
<div class="csel-container-left">
|
||||
<p class="cseltitle">{{mask}}{{Browser Tab Cloak}}</p>
|
||||
<form id="titleform" class="cloakform">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Enter a tab title here..."
|
||||
spellcheck="false"
|
||||
/>
|
||||
<input type="text" placeholder="Enter a tab title here..." spellcheck="false" />
|
||||
<input type="submit" value="Apply" />
|
||||
</form>
|
||||
<form id="iconform" class="cloakform">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Enter an icon URL here..."
|
||||
spellcheck="false"
|
||||
/>
|
||||
<input type="text" placeholder="Enter an icon URL here..." spellcheck="false" />
|
||||
<input type="submit" value="Apply" />
|
||||
</form>
|
||||
<a href="{{route}}{{/questions}}">{{mask}}{{Find Icon URL}}</a>
|
||||
<a
|
||||
href="{{route}}{{/questions}}"
|
||||
>{{mask}}{{Find Icon URL}}</a
|
||||
>
|
||||
<p class="cseltitle">{{mask}}{{Wisp Protocol Transport}}</p>
|
||||
<div class="radio-group {{wisp-transport}}-list">
|
||||
<label>
|
||||
|
|
@ -65,7 +60,7 @@
|
|||
<label>
|
||||
<p>
|
||||
Enable Autocomplete
|
||||
<span class="default-badge">{{mask}}{{Proxied Suggestions}}</span>
|
||||
<span class="default-badge">Proxied Suggestions</span>
|
||||
</p>
|
||||
<input type="checkbox" class="switch useac" checked />
|
||||
</label>
|
||||
|
|
@ -74,10 +69,10 @@
|
|||
<div class="settings-right-column">
|
||||
<p class="cseltitle">Search Engine</p>
|
||||
<select class="search-engine-list">
|
||||
<option>{{DuckDuckGo}}</option>
|
||||
<option>{{Google}}</option>
|
||||
<option>{{Bing}}</option>
|
||||
<option>{{Brave}}</option>
|
||||
<option>{{DuckDuckGo}}</option>
|
||||
<option>{{Startpage}}</option>
|
||||
</select>
|
||||
<p class="cseltitle">Select Theme</p>
|
||||
|
|
@ -88,7 +83,7 @@
|
|||
</label>
|
||||
<label>
|
||||
<p>Dark</p>
|
||||
<input type="radio" name="theme" value="dark" checked />
|
||||
<input type="radio" name="theme" value="dark" checked/>
|
||||
</label>
|
||||
</div>
|
||||
<p class="cseltitle">Icon Presets</p>
|
||||
|
|
@ -103,9 +98,7 @@
|
|||
<div class="radio-group">
|
||||
<label>
|
||||
<p>
|
||||
{{mask}}{{Eruda Devtools}}<span class="alt-badge"
|
||||
>C<wbr />TRL+SH<wbr />IFT+I</span
|
||||
>
|
||||
{{mask}}{{Eruda Devtools}}<span class="alt-badge">C<wbr>TRL+SH<wbr>IFT+I</span>
|
||||
</p>
|
||||
<input type="checkbox" class="switch eruda" />
|
||||
</label>
|
||||
|
|
|
|||
|
|
@ -9,16 +9,11 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -30,5 +25,9 @@
|
|||
<!--FOOTER-->
|
||||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -9,15 +9,11 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -120,6 +116,9 @@
|
|||
<div id="footer" class="fullwidth">
|
||||
<!--FOOTER-->
|
||||
</div>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
}}
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://unpkg.com/tippy.js@6/dist/backdrop.css"
|
||||
|
|
@ -18,17 +18,10 @@
|
|||
rel="stylesheet"
|
||||
href="https://unpkg.com/tippy.js@6/animations/shift-away.css"
|
||||
/>
|
||||
<script src="https://unpkg.com/@popperjs/core@2" defer data-module></script>
|
||||
<script src="https://unpkg.com/tippy.js@6" defer></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -47,7 +40,8 @@
|
|||
</div>
|
||||
<div class="box-text-container">
|
||||
<p class="box-badge">
|
||||
<span class="box-default-badge">Tip</span>{{mask}}{{If you can't find your game simply look it up via the Web Proxies page!}}
|
||||
<span class="box-default-badge">News</span>{{mask}}{{Webretro
|
||||
version has been bumped allowing for more emulators.}}
|
||||
</p>
|
||||
<h1>
|
||||
{{mask}}{{ Holy Unblocker LTS features a wide selection of unblocked
|
||||
|
|
@ -62,34 +56,49 @@
|
|||
{{mask}}{{ Select a directory below: }}
|
||||
</h2>
|
||||
<div class="box-button-container">
|
||||
<a
|
||||
id="emtooltip"
|
||||
href="{{route}}{{/emulators}}"
|
||||
class="box-button tippy-button"
|
||||
data-tippy-content="{{mask}}{{Emulators [Webretro v6.5]: Fully ported RetroArch with over 20 emulators featured!}}"
|
||||
<a id="emtooltip" href="{{route}}{{/emulators}}" class="box-button"
|
||||
>{{mask}}{{Emulators}}</a
|
||||
>
|
||||
<a
|
||||
id="eltooltip"
|
||||
href="{{route}}{{/retro-games}}"
|
||||
class="box-button tippy-button"
|
||||
data-tippy-content="{{mask}}{{EmuLibrary [Collection]: Popular collection of games sourced from other websites. You can set this via the settings menu.}}"
|
||||
class="box-button"
|
||||
>{{mask}}{{EmuLibrary}}</a
|
||||
>
|
||||
<a
|
||||
id="wgtooltip"
|
||||
href="{{route}}{{/web-games}}"
|
||||
class="box-button tippy-button"
|
||||
data-tippy-content="{{mask}}{{Web Games [Collection]: Collection of popular web games, including WebGL and HTML5 games.}}"
|
||||
<a id="wgtooltip" href="{{route}}{{/web-games}}" class="box-button"
|
||||
>{{mask}}{{Web Games}}</a
|
||||
>
|
||||
<a
|
||||
id="fgtooltip"
|
||||
href="{{route}}{{/flash-games}}"
|
||||
class="box-button tippy-button"
|
||||
data-tippy-content="{{mask}}{{Flash Games [Collection]: Collection of Flash games emulated via Ruffle.}}"
|
||||
class="box-button"
|
||||
>{{mask}}{{Flash Games}}</a
|
||||
>
|
||||
<script src="https://unpkg.com/@popperjs/core@2"></script>
|
||||
<script src="https://unpkg.com/tippy.js@6"></script>
|
||||
<script>
|
||||
const tooltipContent = {
|
||||
emtooltip:
|
||||
'{{mask}}{{Emulators [Webretro v6.5]: Fully ported RetroArch with over 20 emulators featured!}}',
|
||||
eltooltip:
|
||||
'{{mask}}{{EmuLibrary [Collection]: Popular collection of games sourced from other websites. You can set this via the settings menu.}}',
|
||||
wgtooltip:
|
||||
'{{mask}}{{Web Games [Collection]: Collection of popular web games, including WebGL and HTML5 games.}}',
|
||||
fgtooltip:
|
||||
'{{mask}}{{Flash Games [Collection]: Collection of Flash games emulated via Ruffle.}}',
|
||||
};
|
||||
|
||||
tippy.setDefaultProps({
|
||||
delay: 50,
|
||||
animateFill: true,
|
||||
placement: 'bottom',
|
||||
});
|
||||
|
||||
tippy('#emtooltip', { content: tooltipContent.emtooltip });
|
||||
tippy('#eltooltip', { content: tooltipContent.eltooltip });
|
||||
tippy('#wgtooltip', { content: tooltipContent.wgtooltip });
|
||||
tippy('#fgtooltip', { content: tooltipContent.fgtooltip });
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -98,5 +107,9 @@
|
|||
<!--FOOTER-->
|
||||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -9,16 +9,11 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -36,6 +31,8 @@
|
|||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/card.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -9,16 +9,11 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -36,6 +31,8 @@
|
|||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/card.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -9,16 +9,11 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -36,6 +31,8 @@
|
|||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/card.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -9,32 +9,26 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="{{route}}{{/scram/scramjet.all.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/baremux/index.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/uv/uv.bundle.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/uv/uv.config.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/scram/scramjet.all.js}}" defer></script>
|
||||
<script src="{{route}}{{/baremux/index.js}}" defer></script>
|
||||
<script src="{{route}}{{/uv/uv.bundle.js}}" defer></script>
|
||||
<script src="{{route}}{{/uv/uv.config.js}}" defer></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{/assets/js/register-sw.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
<div id="background" class="fullwidth"></div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<h1 class="text-center dir">{{mask}}{{Proxied External Links}}</h1>
|
||||
<div id="par-nav" class="glist"></div>
|
||||
<div id="mainbody" class="box-hero">
|
||||
<div class="hero-grid-container">
|
||||
<div id="documentation" class="hero-grid-container">
|
||||
<div class="box-hero">
|
||||
<div id="h5-nav" class="glist"></div>
|
||||
</div>
|
||||
|
|
@ -45,6 +39,7 @@
|
|||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/card.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -9,16 +9,11 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -52,5 +47,9 @@
|
|||
<!--FOOTER-->
|
||||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -9,15 +9,11 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -37,5 +33,8 @@
|
|||
<!--FOOTER-->
|
||||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -9,23 +9,19 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="{{route}}{{/scram/scramjet.all.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/baremux/index.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/scram/scramjet.all.js}}" defer></script>
|
||||
<script src="{{route}}{{/baremux/index.js}}" defer></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{/assets/js/register-sw.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
<script src="https://unpkg.com/@popperjs/core@2" defer data-module></script>
|
||||
<script src="https://unpkg.com/tippy.js@6" defer></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
<script src="https://unpkg.com/@popperjs/core@2"></script>
|
||||
<script src="https://unpkg.com/tippy.js@6"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -41,7 +37,9 @@
|
|||
Be sure to avoid logging in with primary accounts, as this is a
|
||||
public proxy service.}}<br />{{mask}}{{If you are self-hosting
|
||||
however feel free.}}
|
||||
</p><br /><br />{{mask}}{{Please enable Tor routing or swap regions if you have any issues. For GeForce Now disable ads also.}}<br />View the
|
||||
</p>
|
||||
<br /><br />{{mask}}{{Please do CTRL+Shift+Del if you have any
|
||||
issues.}}<br />View the
|
||||
<a href="{{route}}{{/questions}}">FAQ</a> {{mask}}{{page if you have
|
||||
any issues with the proxy.}}
|
||||
</div>
|
||||
|
|
@ -59,9 +57,6 @@
|
|||
<a href="#" id="pr-sp" class="fancybutton glowbutton pr-go2"
|
||||
>{{mask}}{{Spotify}}</a
|
||||
>
|
||||
<a href="#" id="pr-tc" class="fancybutton glowbutton pr-go2"
|
||||
>{{mask}}{{Twitch}}</a
|
||||
>
|
||||
<a href="#" id="pr-tt" class="fancybutton glowbutton pr-go2"
|
||||
>{{mask}}{{TikTok}}</a
|
||||
>
|
||||
|
|
@ -71,18 +66,6 @@
|
|||
<a href="#" id="pr-tw" class="fancybutton glowbutton pr-go2"
|
||||
>{{mask}}{{Twitter}}</a
|
||||
>
|
||||
<a href="#" id="pr-ig" class="fancybutton glowbutton pr-go2"
|
||||
>{{mask}}{{Instagram}}</a
|
||||
>
|
||||
<a href="#" id="pr-rt" class="fancybutton glowbutton pr-go2"
|
||||
>{{mask}}{{Reddit}}</a
|
||||
>
|
||||
<a href="#" id="pr-wa" class="fancybutton glowbutton pr-go2"
|
||||
>{{mask}}{{Wikipedia}}</a
|
||||
>
|
||||
<a href="#" id="pr-ng" class="fancybutton glowbutton pr-go2"
|
||||
>{{mask}}{{Newgrounds}}</a
|
||||
>
|
||||
</div>
|
||||
<!--PROXNAV-SETTINGS-->
|
||||
</div>
|
||||
|
|
@ -93,7 +76,15 @@
|
|||
<div id="footer" class="fullwidth">
|
||||
<!--FOOTER-->
|
||||
</div>
|
||||
<script>
|
||||
tippy('.pr-tippy', {
|
||||
delay: 50,
|
||||
animateFill: true,
|
||||
placement: 'bottom',
|
||||
});
|
||||
</script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/card.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -9,26 +9,22 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
<script src="{{route}}{{/scram/scramjet.all.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/baremux/index.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/epoxy/index.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/uv/uv.bundle.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/uv/uv.config.js}}" defer data-module></script>
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
<script src="{{route}}{{/scram/scramjet.all.js}}" defer></script>
|
||||
<script src="{{route}}{{/baremux/index.js}}" defer></script>
|
||||
<script src="{{route}}{{/epoxy/index.js}}" defer></script>
|
||||
<script src="{{route}}{{/uv/uv.bundle.js}}" defer></script>
|
||||
<script src="{{route}}{{/uv/uv.config.js}}" defer></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{/assets/js/register-sw.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/@popperjs/core@2" defer data-module></script>
|
||||
<script src="https://unpkg.com/tippy.js@6" defer></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/@popperjs/core@2"></script>
|
||||
<script src="https://unpkg.com/tippy.js@6"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -44,8 +40,10 @@
|
|||
with Scramjet! Simply use the buttons below to access YouTube
|
||||
under a proxy.}}<br /><br />{{mask}}{{Be sure to avoid logging in
|
||||
with primary accounts, as this is a public proxy service.}}<br />{{mask}}{{If
|
||||
you are self-hosting however feel free.}}<br /><br />{{mask}}{{Please enable Tor routing or swap regions if you have any issues.}}
|
||||
</p><br />View the
|
||||
you are self-hosting however feel free.}}
|
||||
</p>
|
||||
<br /><br />{{mask}}{{Please do CTRL+Shift+Del if you have any
|
||||
issues.}}<br /><br />View the
|
||||
<a href="{{route}}{{/questions}}">FAQ</a> {{mask}}{{page if you have
|
||||
any issues with the proxy.}}
|
||||
</div>
|
||||
|
|
@ -67,7 +65,15 @@
|
|||
<!--FOOTER-->
|
||||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<script>
|
||||
tippy('.pr-tippy', {
|
||||
delay: 50,
|
||||
animateFill: true,
|
||||
placement: 'bottom',
|
||||
});
|
||||
</script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/card.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -9,16 +9,11 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -87,6 +82,8 @@
|
|||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/card.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -53,6 +53,12 @@
|
|||
font-weight: 500;
|
||||
}
|
||||
|
||||
.uv-small {
|
||||
color: #e5e9f0;
|
||||
font-size: 20px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
i {
|
||||
color: #e5e9f0;
|
||||
font-size: 20px;
|
||||
|
|
@ -173,6 +179,9 @@
|
|||
i {
|
||||
font-size: 18px;
|
||||
}
|
||||
.uv-small {
|
||||
font-size: 16px;
|
||||
}
|
||||
button {
|
||||
padding: 10px 30px;
|
||||
font-size: 1em;
|
||||
|
|
@ -200,6 +209,9 @@
|
|||
i {
|
||||
font-size: 14px;
|
||||
}
|
||||
.uv-small {
|
||||
font-size: 12px;
|
||||
}
|
||||
button {
|
||||
padding: 8px 18px;
|
||||
font-size: 0.95em;
|
||||
|
|
@ -241,11 +253,9 @@
|
|||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="cover"></div>
|
||||
<div id="inner" class="container-fluid text-center">
|
||||
<h1 id="errorTitle">{{mask}}{{Scramjet Network Error}}</h1>
|
||||
<h1 id="errorTitle">{{mask}}{{Network Error}}</h1>
|
||||
<code>Failed to load: <b id="fetchedURL"></b></code>
|
||||
<h2>{{mask}}{{Reloading the page will fix your problem.}}</h2>
|
||||
<br />
|
||||
|
|
@ -285,12 +295,6 @@
|
|||
{{mask}}{{View the FAQ page for specific site compatibility
|
||||
issues.}}
|
||||
</li>
|
||||
<li>
|
||||
{{mask}}{{Troubleshooting the error on the }}<a href="{{route}}{{/github/scramjet}}" target="_blank">{{mask}}{{Scramjet GitHub.}}</a>
|
||||
</li>
|
||||
<li>
|
||||
{{mask}}{{Try a different proxy engine via the settings panel.}}
|
||||
</li>
|
||||
<li>
|
||||
{{mask}}{{If the issue persists be sure to mention this in the
|
||||
Titanium Network Discord.}}
|
||||
|
|
@ -301,7 +305,7 @@
|
|||
<code
|
||||
><i
|
||||
>{{mask}}{{Refresh the network service | Scramjet v1.0.2 - build
|
||||
8a4a72f.}}</i
|
||||
ec0c298.}}</i
|
||||
></code
|
||||
>
|
||||
<p class="footer-spacing">
|
||||
|
|
|
|||
|
|
@ -9,23 +9,19 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="{{route}}{{/scram/scramjet.all.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/baremux/index.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/scram/scramjet.all.js}}" defer></script>
|
||||
<script src="{{route}}{{/baremux/index.js}}" defer></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{/assets/js/register-sw.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
<script src="https://unpkg.com/@popperjs/core@2" defer data-module></script>
|
||||
<script src="https://unpkg.com/tippy.js@6" defer></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
<script src="https://unpkg.com/@popperjs/core@2"></script>
|
||||
<script src="https://unpkg.com/tippy.js@6"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -53,7 +49,7 @@
|
|||
{{mask}}{{and access popular resources like Discord, GeForce NOW,
|
||||
Twitter and YouTube on restricted networks.}}<br /><br />{{mask}}{{For
|
||||
CAPTCHA challenges please solve them slowly. SJ is so fast you
|
||||
might get stuck in a loop. Enable Tor routing if you are struggling to login to services or view}}<br />
|
||||
might get stuck in a loop.}}<br />
|
||||
View the <a href="{{route}}{{/questions}}">FAQ</a> {{mask}}{{page
|
||||
if you have any issues with the proxy.}}
|
||||
</p>
|
||||
|
|
@ -61,10 +57,10 @@
|
|||
<div class="proxy-form text-center">
|
||||
<div id="pr-sj" class="pr-form">
|
||||
<select class="pr-button glowbutton search-engine-list">
|
||||
<option>{{DuckDuckGo}}</option>
|
||||
<option>{{Brave}}</option>
|
||||
<option>{{Startpage}}</option>
|
||||
<option>{{Google}}</option>
|
||||
<option>{{DuckDuckGo}}</option>
|
||||
<option>{{Bing}}</option>
|
||||
</select>
|
||||
|
||||
|
|
@ -92,7 +88,15 @@
|
|||
<!--FOOTER-->
|
||||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<script>
|
||||
tippy('.pr-tippy', {
|
||||
delay: 50,
|
||||
animateFill: true,
|
||||
placement: 'bottom',
|
||||
});
|
||||
</script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/card.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -128,7 +128,6 @@
|
|||
</head>
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div class="container-fluid text-center">
|
||||
<h1>{{mask}}{{Network Error}}</h1>
|
||||
<code>Failed to load: <b id="fetchedURL"></b></code>
|
||||
|
|
|
|||
|
|
@ -9,24 +9,20 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="{{route}}{{/baremux/index.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/uv/uv.bundle.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/uv/uv.config.js}}" defer data-module></script>
|
||||
<script src="{{route}}{{/baremux/index.js}}" defer></script>
|
||||
<script src="{{route}}{{/uv/uv.bundle.js}}" defer></script>
|
||||
<script src="{{route}}{{/uv/uv.config.js}}" defer></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{/assets/js/register-sw.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
<script src="https://unpkg.com/@popperjs/core@2" defer data-module></script>
|
||||
<script src="https://unpkg.com/tippy.js@6" defer></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
<script src="https://unpkg.com/@popperjs/core@2"></script>
|
||||
<script src="https://unpkg.com/tippy.js@6"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -53,9 +49,7 @@
|
|||
Ultraviolet, please report them on the}}
|
||||
<a href="{{route}}{{/github/ultraviolet}}"
|
||||
>{{mask}}{{Ultraviolet GitHub repository}}</a
|
||||
>.<br /><br />{{mask}}{{Enable Tor
|
||||
routing if you are struggling to login to services or view
|
||||
sites.}}<br /><br />View the
|
||||
>.<br /><br />View the
|
||||
<a href="{{route}}{{/questions}}">FAQ</a> {{mask}}{{page if you
|
||||
have any issues with the proxy.}}
|
||||
</p>
|
||||
|
|
@ -63,8 +57,8 @@
|
|||
<div class="proxy-form text-center">
|
||||
<div id="pr-uv" class="pr-form">
|
||||
<select class="pr-button glowbutton search-engine-list">
|
||||
<option>{{DuckDuckGo}}</option>
|
||||
<option>{{Google}}</option>
|
||||
<option>{{DuckDuckGo}}</option>
|
||||
<option>{{Bing}}</option>
|
||||
<option>{{Brave}}</option>
|
||||
<option>{{Startpage}}</option>
|
||||
|
|
@ -94,7 +88,15 @@
|
|||
<!--FOOTER-->
|
||||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<script>
|
||||
tippy('.pr-tippy', {
|
||||
delay: 50,
|
||||
animateFill: true,
|
||||
placement: 'bottom',
|
||||
});
|
||||
</script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/card.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
/>
|
||||
}}
|
||||
<!--HEAD-CONTENT-->
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js" defer data-module></script>
|
||||
<script src="https://unpkg.com/tsparticles@3.8.1/tsparticles.bundle.min.js"></script>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://unpkg.com/tippy.js@6/dist/backdrop.css"
|
||||
|
|
@ -18,17 +18,12 @@
|
|||
rel="stylesheet"
|
||||
href="https://unpkg.com/tippy.js@6/animations/shift-away.css"
|
||||
/>
|
||||
<script src="https://unpkg.com/@popperjs/core@2" defer data-module></script>
|
||||
<script src="https://unpkg.com/tippy.js@6" defer></script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}" defer></script>
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}" defer></script>
|
||||
}}
|
||||
<script src="https://unpkg.com/@popperjs/core@2"></script>
|
||||
<script src="https://unpkg.com/tippy.js@6"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<!--ANTI-EXFIL-->
|
||||
<div id="header" class="fullwidth">
|
||||
<!--HEADER-->
|
||||
</div>
|
||||
|
|
@ -38,8 +33,8 @@
|
|||
<div class="box-main-container">
|
||||
<div class="box-text-container">
|
||||
<p class="box-badge">
|
||||
<span class="box-default-badge">Tip</span>{{mask}}{{Holy Unblocker
|
||||
LTS features adblock and TOR support!}}
|
||||
<span class="box-default-badge">News</span>{{mask}}{{Holy Unblocker
|
||||
LTS now features adblock and TOR support!}}
|
||||
</p>
|
||||
<h1>
|
||||
{{mask}}{{ Holy Unblocker LTS sets the standard for fast, secure,
|
||||
|
|
@ -51,9 +46,9 @@
|
|||
customizable blacklist settings, leak prevention mechanisms, and
|
||||
advanced security measures. }}
|
||||
</h2>
|
||||
<h3>
|
||||
<h2 class="box-description">
|
||||
{{mask}}{{ Select a proxy service below to get started! }}
|
||||
</h3>
|
||||
</h2>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<div class="box-button-container">
|
||||
<a
|
||||
|
|
@ -77,10 +72,6 @@
|
|||
>{{mask}}{{Rammerhead}}</a
|
||||
>
|
||||
</div>
|
||||
<p><br>
|
||||
{{mask}}{{ We offer more domains per month, beta access,
|
||||
personal domains and priority feature requests.}} You can donate <a href="{{route}}{{/patreon}}">here</a>.
|
||||
</p>
|
||||
</div>
|
||||
<div class="box-image-container">
|
||||
<img
|
||||
|
|
@ -96,5 +87,16 @@
|
|||
<!--FOOTER-->
|
||||
</div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<script>
|
||||
tippy('.tippy-button', {
|
||||
delay: 50,
|
||||
animateFill: true,
|
||||
placement: 'bottom',
|
||||
});
|
||||
</script>
|
||||
{{inline}}{{
|
||||
<script src="{{route}}{{assets/js/common.js}}{{inline}}"></script>
|
||||
<script src="{{route}}{{assets/js/csel.js}}{{inline}}"></script>
|
||||
}}
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -7,13 +7,10 @@ Allow: /assets
|
|||
User-agent: *
|
||||
Allow: /assets/ico
|
||||
|
||||
User-agent: *
|
||||
Disallow: /github
|
||||
|
||||
User-agent: *
|
||||
Disallow: /scram
|
||||
|
||||
User-agent: *
|
||||
Disallow: /uv
|
||||
|
||||
User-agent: *
|
||||
Disallow: /github
|
||||
|
||||
Sitemap: https://holyunblocker.org/sitemap.xml
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -7,117 +7,69 @@
|
|||
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<lastmod>2024-12-21T00:00:00+00:00</lastmod>
|
||||
<priority>1.00</priority>
|
||||
<changefreq>weekly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/browsing</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.98</priority>
|
||||
<changefreq>weekly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/scramjet</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.98</priority>
|
||||
<changefreq>weekly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/ultraviolet</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.90</priority>
|
||||
<changefreq>monthly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/rammerhead</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.90</priority>
|
||||
<changefreq>monthly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/youtube</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.85</priority>
|
||||
<changefreq>monthly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/apps</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
<changefreq>monthly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/games</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<lastmod>2024-12-21T00:00:00+00:00</lastmod>
|
||||
<priority>0.95</priority>
|
||||
<changefreq>weekly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/web-games</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.85</priority>
|
||||
<loc>https://holyunblocker.org/games</loc>
|
||||
<lastmod>2024-12-21T00:00:00+00:00</lastmod>
|
||||
<priority>0.95</priority>
|
||||
<changefreq>weekly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/ultraviolet</loc>
|
||||
<lastmod>2024-12-21T00:00:00+00:00</lastmod>
|
||||
<priority>0.95</priority>
|
||||
<changefreq>monthly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/emulators</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.85</priority>
|
||||
<loc>https://holyunblocker.org/rammerhead</loc>
|
||||
<lastmod>2024-12-21T00:00:00+00:00</lastmod>
|
||||
<priority>0.95</priority>
|
||||
<changefreq>monthly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/flash-games</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<loc>https://holyunblocker.org/youtube</loc>
|
||||
<lastmod>2024-12-21T00:00:00+00:00</lastmod>
|
||||
<priority>0.70</priority>
|
||||
<changefreq>yearly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/retro-games</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.70</priority>
|
||||
<changefreq>yearly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/documentation</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.70</priority>
|
||||
<changefreq>monthly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/questions</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.65</priority>
|
||||
<changefreq>monthly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/credits</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.60</priority>
|
||||
<lastmod>2024-12-21T00:00:00+00:00</lastmod>
|
||||
<priority>0.70</priority>
|
||||
<changefreq>monthly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/terms</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.55</priority>
|
||||
<lastmod>2024-12-21T00:00:00+00:00</lastmod>
|
||||
<priority>0.60</priority>
|
||||
<changefreq>monthly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/flash</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.40</priority>
|
||||
<changefreq>yearly</changefreq>
|
||||
<loc>https://holyunblocker.org/apps</loc>
|
||||
<lastmod>2024-12-21T00:00:00+00:00</lastmod>
|
||||
<priority>0.50</priority>
|
||||
<changefreq>monthly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/webretro</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.40</priority>
|
||||
<changefreq>yearly</changefreq>
|
||||
<loc>https://holyunblocker.org/questions</loc>
|
||||
<lastmod>2024-12-21T00:00:00+00:00</lastmod>
|
||||
<priority>0.50</priority>
|
||||
<changefreq>monthly</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://holyunblocker.org/vibe-os</loc>
|
||||
<lastmod>2025-11-08T00:00:00+00:00</lastmod>
|
||||
<priority>0.30</priority>
|
||||
<changefreq>yearly</changefreq>
|
||||
<loc>https://holyunblocker.org/emulators</loc>
|
||||
<lastmod>2024-12-21T00:00:00+00:00</lastmod>
|
||||
<priority>0.50</priority>
|
||||
<changefreq>monthly</changefreq>
|
||||
</url>
|
||||
|
||||
</urlset>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue