v5 update from OlyB released (major changes)
- New UI - Backend changes - Optimizations and more
1
.gitignore
vendored
|
@ -4,4 +4,3 @@ node_modules
|
|||
.gitattributes
|
||||
.well-known
|
||||
package-lock.json
|
||||
/views/archive/gfiles/rarch/roms
|
34
.gitmodules
vendored
|
@ -1,3 +1,31 @@
|
|||
[submodule "views/archive"]
|
||||
path = views/archive
|
||||
url = https://github.com/QuiteAFancyEmerald/HU-Archive
|
||||
[submodule "views/archive/g/house"]
|
||||
path = views/archive/g/house
|
||||
url = https://github.com/razh/game-off-2013
|
||||
|
||||
[submodule "views/archive/g/househorror"]
|
||||
path = views/archive/g/househorror
|
||||
url = https://github.com/arturkot/the-house-game
|
||||
|
||||
[submodule "views/archive/g/pond"]
|
||||
path = views/archive/g/pond
|
||||
url = https://github.com/Zolmeister/pond
|
||||
|
||||
[submodule "views/archive/g/particle-clicker"]
|
||||
path = views/archive/g/particle-clicker
|
||||
url = https://github.com/particle-clicker/particle-clicker
|
||||
|
||||
[submodule "views/archive/g/nsshaft"]
|
||||
path = views/archive/g/nsshaft
|
||||
url = https://github.com/iPel/NS-SHAFT
|
||||
|
||||
[submodule "views/archive/g/adarkroom"]
|
||||
path = views/archive/g/adarkroom
|
||||
url = https://github.com/doublespeakgames/adarkroom
|
||||
|
||||
[submodule "views/archive/g/trimps"]
|
||||
path = views/archive/g/trimps
|
||||
url = https://github.com/Trimps/Trimps.github.io
|
||||
|
||||
[submodule "views/archive/g/zork1"]
|
||||
path = views/archive/g/zork1
|
||||
url = https://github.com/jessicalevine/Adventure.js
|
2
.replit
Normal file
|
@ -0,0 +1,2 @@
|
|||
language = "nodejs"
|
||||
run = "node --max_old_space_size=2560 ./backend.js"
|
366
README.md
|
@ -1,15 +1,13 @@
|
|||
<img align="left" width="70px" src="https://raw.githubusercontent.com/QuiteAFancyEmerald/HolyUnblockerPublic/master/views/assets/img/icon.png"></img>
|
||||
<img align="left" width="70px" src="https://raw.githubusercontent.com/titaniumnetwork-dev/Holy-Unblocker/master/views/assets/img/icon.png"></img>
|
||||
# Holy Unblocker
|
||||
|
||||
#### Titanium Network is sponsored by:
|
||||
|
||||
<img src="https://raw.githubusercontent.com/QuiteAFancyEmerald/HolyUnblockerPublic/fa858c0e429d73324bffc045bd2a3217064fb1e5/views/assets/img/nodeclusters.png?raw" width="500px"><a href="https://nodeclusters.com"></a></img>
|
||||
|
||||
Holy Unblocker, an official flagship Titanium Network site, can bypass web filters regardless of whether it is an extension or network-based. Being a secure web proxy service, it supports numerous sites while being updated frequently and concentrating on detail with design, mechanics, and features.
|
||||
|
||||
Works with a large number of sites, including YouTube, Discord, and more!
|
||||
|
||||
Read below for information if the official site is blocked or for obtaining more links.
|
||||
Also has a good amount of locally hosted games featured on the site.
|
||||
|
||||
**Read below for information if the official site is blocked or for obtaining more links.**
|
||||
|
||||
#### Supports
|
||||
- Youtube.com
|
||||
|
@ -17,266 +15,264 @@ Read below for information if the official site is blocked or for obtaining more
|
|||
- Google.com
|
||||
- Reddit.com
|
||||
- Bing.com
|
||||
- And more!
|
||||
- And more sites!
|
||||
|
||||
#### Features:
|
||||
- Tab customization using the Options menu for improved stealth
|
||||
- Considerable variety with the open selection of proxy types
|
||||
- Game library with moderately decent titles like A Dark Room
|
||||
- Game library with moderately decent titles
|
||||
- Has frequent support articles for issues relating to the various proxy instances
|
||||
|
||||
Be sure to join Titanium Network's Discord for more official site links: https://discord.gg/unblock
|
||||
Note: EmuLibrary is not featured in the public version.
|
||||
|
||||
Do %proxy hu for more Holy Unblocker links on the Titanium Network Discord server.
|
||||
Official Site: <a href="https://holyubofficial.net">https://holyubofficial.net</a>
|
||||
|
||||
**Official Site:** https://www.holyubofficial.net
|
||||
**Be sure to join Titanium Network's Discord for more official site links:** <a href="https://discord.gg/unblock">https://discord.gg/unblock</a>
|
||||
|
||||
**Site Documentation:** Documentation
|
||||
Simply do `%proxy hu` in `#proxy-commands` for more Holy Unblocker links on the TN Discord server.
|
||||
|
||||
<img src="https://raw.githubusercontent.com/QuiteAFancyEmerald/HolyUnblockerPublic/master/views/assets/img/hbpreview.png?raw"></img>
|
||||
<img src="https://raw.githubusercontent.com/titaniumnetwork-dev/Holy-Unblocker/master/views/assets/img/preview/hu-v5.0.0-preview.png"></img>
|
||||
|
||||
<a href="https://heroku.com/deploy?template=https://github.com/QuiteAFancyEmerald/HolyUnblockerPublic" title="Deploy to Heroku"><img alt="Deploy to Heroku" src="https://raw.githubusercontent.com/QuiteAFancyEmerald/HolyUnblockerPublic/master/views/assets/img/heroku.svg?raw" width="140" height="30"><img></a>
|
||||
|
||||
<a href="https://azuredeploy.net/" title="Deploy to Azure"><img alt="Deploy to Azure" src="https://raw.githubusercontent.com/QuiteAFancyEmerald/HolyUnblockerPublic/master/views/assets/img/azure.svg?raw" width="140" height="30"><img></a>
|
||||
|
||||
<a href="https://repl.it/github/QuiteAFancyEmerald/HolyUnblockerPublic" title="Run on Repl.it"><img alt="Run on Repl.it" src="https://raw.githubusercontent.com/QuiteAFancyEmerald/HolyUnblockerPublic/master/views/assets/img/replit.svg?raw" width="140" height="30"><img></a>
|
||||
|
||||
<a href="https://glitch.com/edit/#!/import/github/QuiteAFancyEmerald/HolyUnblockerPublic" title="Remix on Glitch"><img alt="Remix on glitch" src="https://raw.githubusercontent.com/QuiteAFancyEmerald/HolyUnblockerPublic/master/views/assets/img/glitch.svg?raw" width="140" height="30"><img></a>
|
||||
### Deploy Holy Unblocker
|
||||
|
||||
[](https://heroku.com/deploy/?template=https://github.com/titaniumnetwork-dev/Holy-Unblocker)
|
||||
[](https://replit.com/github/titaniumnetwork-dev/Holy-Unblocker)
|
||||
[](https://glitch.com/edit/#!/import/github/titaniumnetwork-dev/Holy-Unblocker)
|
||||
[](https://deploy.azure.com/?repository=https://github.com/titaniumnetwork-dev/Holy-Unblocker)
|
||||
[](https://cloud.ibm.com/devops/setup/deploy?repository=https://github.com/titaniumnetwork-dev/Holy-Unblocker)
|
||||
[](https://console.aws.amazon.com/amplify/home#/deploy?repo=https://github.com/titaniumnetwork-dev/Holy-Unblocker)
|
||||
[](https://deploy.cloud.run/?git_repo=https://github.com/titaniumnetwork-dev/Holy-Unblocker)
|
||||
|
||||
## Table of contents:
|
||||
|
||||
- [Setup](#how-to-install)
|
||||
- [Structure](#structure)
|
||||
- [Structure Information](#structure)
|
||||
- [Static Files](#details-of-views)
|
||||
- [Proxy Scripts](#scripts-located-in-expr)
|
||||
- [Future Additions](#future-additions)
|
||||
- [Beginner's Explanation](#vauge-explanation-for-beginners-with-external-proxies-and-hosting)
|
||||
- [Hosting Providers](#list-of-some-good-hosting-options)
|
||||
- [Heroku Setup](#heroku-steps)
|
||||
- [Domain Setup](#freenomdomain-steps)
|
||||
- [Cloudflare Setup](#cloudflare-steps)
|
||||
- [Workspace Configurations](#workspace-configurations)
|
||||
- [Detailed FAQ](#detailed-faq)
|
||||
- [More Information](#more-information)
|
||||
- [Setup](#how-to-setup)
|
||||
- [Structure](#structure)
|
||||
- [Structure Information](#structure-information)
|
||||
- [Static Files](#details-of-views)
|
||||
- [Scripts](#scripts-located-in-viewsassetsjs)
|
||||
- [Future Additions](#future-additions)
|
||||
- [Beginner's Explanation](#vauge-explanation-for-beginners-with-external-proxies-and-hosting)
|
||||
- [Hosting Providers](#list-of-some-good-hosting-options)
|
||||
- [Heroku Setup](#heroku-steps)
|
||||
- [Domain Setup](#freenomdomain-steps)
|
||||
- [Cloudflare Setup](#cloudflare-steps)
|
||||
- [Workspace Configurations](#workspace-configurations)
|
||||
- [Detailed FAQ](#detailed-faq)
|
||||
- [More Information](#more-information)
|
||||
|
||||
## How to Setup
|
||||
|
||||
Either use the button above to deploy to Heroku or do the below:
|
||||
```
|
||||
$ git clone https://github.com/titaniumnetwork-dev/Holy-Unblocker.git
|
||||
$ cd HolyUnblockerPublic
|
||||
$ npm install
|
||||
```
|
||||
Afterward, run:
|
||||
```
|
||||
$ npm start
|
||||
```
|
||||
For more detailed documentation on workspace setup, please view <a href="https://holyubofficial.net/?faq">this</a>.
|
||||
|
||||
The default place for the proxy when it started is `http://localhost:8080`, but it can be changed if needed in config.json
|
||||
```
|
||||
git clone https://github.com/titaniumnetwork-dev/Holy-Unblocker.git
|
||||
|
||||
cd Holy-Unblocker
|
||||
|
||||
npm install
|
||||
|
||||
npm start
|
||||
```
|
||||
|
||||
The default place for the proxy when its started is `http://localhost:8080` but you can change it if needed in config.json
|
||||
|
||||
This website is hosted locally with Corrosion built-in. More more information go to the Corrosion repository below.
|
||||
|
||||
This website has been hosted locally with Corrosion, a powerful web proxy made by Titanium Network. For more information, head over to the Corrosion repository below.
|
||||
|
||||
## Structure
|
||||
- `index.html` : The official homepage of the site.
|
||||
- `404.html` : The 404 page.
|
||||
- `error.html` : Other misc errors that are not 404.
|
||||
- `info.html` : Documentation (This page!)
|
||||
- `faq.html` : Frequently asked questions page.
|
||||
- `status.html` : Has 3 backup Holy Unblocker links.
|
||||
- `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 Corrosion, Womginx, and PyDodgeB.
|
||||
- `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 [webretro](https://github.com/BinBashBanana/webretro)</a>.
|
||||
- `flash.html` : Games page for flash games, credits given to @BinBashBanana and Titanium Network for its assets.
|
||||
- `corrosion.html` : Official page for Corrosion.
|
||||
- `womginx.html` : Womginx Proxy page. Script links to a subdomain for Womginx, a highly fast proxy with reCaptcha and discord support.
|
||||
- `pmprox.html` : SysYa Proxy page. Script links to a subdomain for SysYa, a flexible secondary proxy.
|
||||
- `pydodge.html` : Via Unblocker page. Links to a subdomain with PyDodge or Via.
|
||||
- `youtube.html` : An proxied version of Youtube running off of the locally hosted Corrosion Proxy.
|
||||
- `discordhub.html` : Hub for the Discord proxy (Currently Womginx only).
|
||||
- `index.html`: The homepage of the site.
|
||||
- `404.html`: The 404 page.
|
||||
- `error.html`: Other errors that are not 404.
|
||||
- `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, Corrosion, Womginx, and Palladium.
|
||||
- `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.
|
||||
- `corrosion.html`: Corrosion Proxy page which features Corrosion hosted locally but can be configured to redirect to an external instance.
|
||||
- `womginx.html`: Womginx Proxy page. Script links to a subdomain for Womginx, a highly fast proxy with reCaptcha and discord support.
|
||||
- `palladium.html`: Palladium Proxy page.
|
||||
- `youtube.html`: An proxied version of Youtube running off of the locally hosted Corrosion.
|
||||
- `discord.html`: Hub for the Discord proxy.
|
||||
- `reddit.html`: Hub for the Reddit proxy.
|
||||
|
||||
### Structure Information
|
||||
- `/views/` : The physical site base of Holy Unblocker goes here where static assets are served.
|
||||
- `/src/` : For future implementation of obfuscation and keyword removing features.
|
||||
- `/views/`: The physical site base of Holy Unblocker goes here where static assets are served.
|
||||
- `/src/`: For future implementation of obfuscation and keyword removing features.
|
||||
|
||||
#### Details of `/views/`
|
||||
- `/pages/` is used for important pages for the site.
|
||||
- `/expr/` is used for important proxy scripts.
|
||||
- `/archive/` is used for game related assets and pages.
|
||||
- `/assets/` is used for various assets for CSS, JS and Bootstrap.
|
||||
- `/vibeOS/` is used for vibeOS, an in-browser OS enviroment.
|
||||
- `/archive/` is used for game pages and vibeOS.
|
||||
- `/pages/` is used for the HTML for the site.
|
||||
- `/assets/` is used for various assets for CSS, JS, and images.
|
||||
|
||||
#### Scripts located in `/expr`
|
||||
#### Scripts located in `/views/assets/js/`
|
||||
- `common.js` is used on all of the pages for common useful functions.
|
||||
- `surf.js` is used for proxy navigation; both stealth mode and classic mode.
|
||||
- `h5-nav.js`, `emu-nav.js`, `flash-nav.js` are used for navigation on the games pages.
|
||||
- `prset.js` is used on the proxy pages for proxy form functionality.
|
||||
- `header.js` inserts the header into every page using javascript.
|
||||
- `csel.js` manages the settings menu on the header.
|
||||
- `footer.js` inserts the footer into every page using javascript.
|
||||
- `gnav/*.js` are used for navigation on the games pages.
|
||||
|
||||
## Future Additions
|
||||
- Prevent large layout shifts and improve CLS.
|
||||
- Expansive game library
|
||||
- Various parity changes.
|
||||
|
||||
## An explanation for Beginners With External Proxies and Hosting
|
||||
## Vauge Explanation for Beginners With External Proxies and Hosting
|
||||
You will first want to host your proxies locally or externally.
|
||||
|
||||
**Proxies that you will need for a complete setup for Holy Unblocker:**
|
||||
#### List of some good hosting options:
|
||||
- <a href="https://dedipath.com">Dedipath</a> (Paid and Dedicated)
|
||||
- <a href="https://heroku.com">Heroku</a> (Free)
|
||||
- <a href="https://nodeclusters.com">NodeClusters</a> (Paid)
|
||||
- <a href="https://glitch.com">Glitch</a> (Free)
|
||||
- <a href="https://repl.it">Repl.it</a> (Free)
|
||||
- <a href="https://azure.microsoft.com">Azure</a> (Free and Paid)
|
||||
|
||||
Womginx - https://github.com/binary-person/womginx
|
||||
Out of the list of hosting providers Heroku and NodeClusters rank first as a preference. You may also self-host.
|
||||
|
||||
Via Unblocker/PyDodge -https://github.com/BinBashBanana/PyDodge
|
||||
After you have selected a decent VPS, use Cloudflare for the DNS records for both the site and the subdomains for the proxies.
|
||||
|
||||
Corrosion - https://github.com/titaniumnetwork-dev/Corrosion
|
||||
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>
|
||||
|
||||
The source used for Via Unblocker on the official sites is not public.
|
||||
- `@` and `www.deepsoil.ml` are being used for the local Corrosion proxy.
|
||||
- `p.deepsoil.ml` is being used for Palladium.
|
||||
- `a.deepsoil.ml` is being used for womginx.
|
||||
- `cdn.deepsoil.ml` is being used for a private Corrosion host on the official sites.
|
||||
|
||||
**List of some good hosting options:**
|
||||
As stated previously, Holy Unblocker is hosted locally with Corrosion.
|
||||
|
||||
- Dedipath (Paid and Dedicated)
|
||||
- Heroku (Free)
|
||||
- NodeClusters (Paid)
|
||||
- Glitch (Free)
|
||||
- Repl.it (Free)
|
||||
- Azure (Free and Paid)
|
||||
#### Heroku Steps
|
||||
So you chose to use Heroku to host. I personally favor it as a free choice.
|
||||
|
||||
Out of the list of hosting providers Heroku and Dedipath rank first as a preference.
|
||||
- First obtain a card; (Prepaid, Debit, and Credit Cards work). You need this to add custom domains to your Heroku instance.
|
||||
|
||||
You may also self-host. Currently, at this time, Dedipath is used to host the official Holy Unblocker sites.
|
||||
Make sure you connect your Heroku app to your GitHub and enable automatic deploys. Will make things easier. :)
|
||||
|
||||
After you have selected a decent VPS, use Cloudflare for DNS records for both the site and the subdomains for the proxies.
|
||||
The image below is an example of DNS records involving Heroku. Self-hosting will require A records, preferably.
|
||||
#### Freenom/Domain Steps
|
||||
For beginners, Freenom is a good provider for obtaining domains for free. However the catch is that you can only use properly "Freenom" domains for free being .cf, .ml, .gq, ga and .tk. However these can be blocked rather easily.
|
||||
|
||||
<img src="https://cdn.discordapp.com/attachments/681203088862085168/820048397662158858/unknown.png" width="500"></img>
|
||||
- Get some Freenom domains then add them to your Heroku instance (Personal > [App Name] > Settings > Domains)
|
||||
Add a domain for both `www.youdomainhere.cf` and `yourdomainhere.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.
|
||||
|
||||
**The configuration being used on the official sites currently are the below:**
|
||||
#### Cloudflare Steps
|
||||
- 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.
|
||||
|
||||
- `a.example.com` is used for Womginx.
|
||||
- `c.example.com` is used for SysYA Proxy, Via Unblocker, and the Chatbox.
|
||||
- `cdn.example.com` is used for a private, updated Corrosion instance.
|
||||
### Heroku Steps
|
||||
So use Heroku to host. I favor it as a free choice.
|
||||
Make sure they are CNAME although A records also work and try to follow this structure:
|
||||
|
||||
- First, obtain a card; (Prepaid, Debit, and Credit Cards work). It would be best if you had this to add custom domains to your Heroku instance.
|
||||
- Make sure you connect your Heroku app to your GitHub and enable automatic deploys. It will make things easier. :)
|
||||
**Type | Name | Target**
|
||||
|
||||
### Freenom/Domain Steps
|
||||
For beginners, Freenom is a good provider for obtaining domains for free. However, the catch is that you can only use properly "Freenom" domains for free, being .cf, .ml, .gq, ga, and .tk. However, these can be blocked relatively easily.
|
||||
`CNAME | @ | your-main-heroku-target-here.herokudns.com`
|
||||
`CNAME | www | your-main-heroku-target-here.herokudns.com`
|
||||
|
||||
- Get some Freenom domains, then add them to your Heroku instance (Personal > [App Name] > Settings > Domains).
|
||||
- Add a domain for both www.youdomainhere.cf and yourdomainhere.cf with .cf being interchangeable with other Freedom domain names.
|
||||
**Below are if you want external proxies also with your site:**
|
||||
|
||||
If you prefer to obtain premium domains (TLDs), then use Porkbun, which offers domains for excellent prices. A .net domain typically costs around $10. On Porkbun for the first year, it costs $3, so it is a deal.
|
||||
`CNAME | p | your-palladium-instance-here.herokudns.com`
|
||||
`CNAME | a | your-womginx-instance-here.herokudns.com`
|
||||
`CNAME | pd | your-pydodgeb-instance-here.herokudns.com`
|
||||
|
||||
### Cloudflare Steps
|
||||
Use Cloudflare (make an account), add your site (Freenom Domain or Domain), and then add your various DNS targets to Cloudflare. Make sure you add Cloudflare's Nameservers which will be specified more when you are adding your site.
|
||||
Make sure HTTPS is forced and have SSL set to Flexible for Heroku. Otherwise you can have SSL set to Full.
|
||||
|
||||
Lastly, for targets, make sure they are either a CNAME, AAAA, or A records and try to follow this structure:
|
||||
#### Workspace Configurations
|
||||
Preferably if you have your own device use Visual Studio Code. Pretty much the best option you can get but obviously this is an opinion. Also make sure you have <a href="https://nodejs.org/">Node.JS</a> installed on your machine.
|
||||
|
||||
Type | Name | Target
|
||||
Not going to go too in depth with this part but first fork this repository. The clone it locally through a Terminal of some sort depending on what OS you are on. Make sure you navigate to the folder you want to set this up in.
|
||||
|
||||
`CNAME | @ | yourherokudnstargethere.herokudns.com` or `CNAME | @ | example.com`
|
||||
|
||||
`CNAME | www | yourherokutargethere.herokudns.com` or `CNAME | www | example.com`
|
||||
|
||||
Below are if you want external proxies also with your site:
|
||||
|
||||
`CNAME | a | yourwomginxinstance.herokudns.com` or `CNAME | a | example.com`
|
||||
`CNAME | c | yoursysyaproxyinstancehere.herokudns.com` or `CNAME | c | example.com`
|
||||
|
||||
(You get the idea.)
|
||||
|
||||
Make sure HTTPS is forced and have SSL set to Flexible for Heroku. Otherwise, you may have SSL set to Full. Use LetsEncrypt for SSL certificates or Cloudflare.
|
||||
|
||||
## Workspace Configurations
|
||||
Preferably use Visual Studio Code for an IDE. Pretty much the best option you can get, but obviously, this is an opinion. Also, make sure you have Node.JS installed on your machine.
|
||||
|
||||
Not going to go too in-depth with this part but first, fork or clone this repository. Clone it locally through a terminal of some sort, depending on what OS you are on.
|
||||
|
||||
Make sure you navigate to the folder you want to set this up in.
|
||||
```
|
||||
$ git clone https://github.com/QuiteAFancyEmerald/HolyUnblockerPublic.git
|
||||
$ cd HolyUnblockerPublic
|
||||
$ npm install
|
||||
git clone https://github.com/titaniumnetwork-dev/Holy-Unblocker.git
|
||||
|
||||
cd Holy-Unblocker
|
||||
|
||||
npm install
|
||||
```
|
||||
Setup pm2 (Optional - Node.js Process Manager)
|
||||
|
||||
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:
|
||||
|
||||
```
|
||||
$ npm install pm2@latest -g
|
||||
$ pm2 start app.js
|
||||
node_modules
|
||||
```
|
||||
Useful pm2 Flags
|
||||
```
|
||||
# Specify an app name
|
||||
--name <app_name>
|
||||
|
||||
# Watch and Restart app when files change
|
||||
--watch
|
||||
Now you have your following workspace environment setup. To deploy the following workspace you just created you will need to look up depending on your hosting provider.
|
||||
|
||||
# Set memory threshold for app reload
|
||||
--max-memory-restart <200MB>
|
||||
```
|
||||
For more information, view the official pm2 documentation here.
|
||||
For an online IDE that you can use on your school computer and/or chromebook use GitPod. Basically the equivalent of Visual Studio Code but with in-browser support.
|
||||
- Make an account: `https://gitpod.io/`
|
||||
- Fork this repo and enter in this URL to setup your workspace: `https://gitpod.io#https://github.com/YourNameHere/Holy-Unblocker/`
|
||||
|
||||
#### Workspace Setup (continued)
|
||||
Now add the folder you cloned in VSC. Then run npm install. It is recommended that if you are releasing this publically on GitHub that you add a .gitignore in your root directory with the following exclusions:
|
||||
|
||||
`node_modules`
|
||||
|
||||
Now you have your following workspace environment setup. To deploy the following workspace you just created, you will need to lookup depending on your hosting provider.
|
||||
|
||||
- For an online IDE that you can use on your school computer or Chromebook, use GitPod. The equivalent of Visual Studio Code but with in-browser support.
|
||||
- Make an account: https://gitpod.io/.
|
||||
- Fork this repo and enter in this URL to set up your workspace: `https://gitpod.io#https://github.com/YourNameHere/HolyUnblockerPublic/`
|
||||
|
||||
Use the same steps above by running npm install in your repository and adding a .gitignore in your root directory specifying to exclude `node_modules`.
|
||||
Use the same steps above by running `npm install` in your repository and adding a `.gitignore` in your root directory specifying to exclude `node_modules`.
|
||||
|
||||
## Detailed FAQ
|
||||
A detailed FAQ with common issues and solutions can be found here or on any official HU site on the FAQ page.
|
||||
A detailed FAQ with common issues and solutions can be found <a href="https://holyubofficial.net/?faq">here</a> or on any official HU site on the FAQ page.
|
||||
|
||||
**Why are YouTube videos not working?**
|
||||
|
||||
If you have persistent issues even after doing the steps above, the instance is down temporarily, especially if large groups of people are also having the issue. The latest release of Corrosion does have support for YouTube. You may want to try doing a Hard Reload (Ctrl+Shift+R)
|
||||
<details>
|
||||
<summary>Quick FAQ</summary>
|
||||
|
||||
**Why is the site I am on not working correctly or having CAPTCHA errors?**
|
||||
|
||||
Captcha has limited support on Womginx. However, support is not available on some of the older proxies, sadly. Therefore some sites may not work with any of the sites. Read below for issues with links on sites.
|
||||
Captcha support is currently not available on all of the current proxies sadly. Therefore some sites may not work with any of the sites. Read below for issues with links on sites.
|
||||
|
||||
**When using YouTube on any of the proxy sites, why does the page not load entirely, or the video just white?**
|
||||
**Why are some page links not working or leading to 404 pages?**
|
||||
|
||||
This is an issue with the latest release of Alloy proxy but it may also occur with other proxies.
|
||||
|
||||
In this case manually entering the URL of the page you would like to view can solve this or try navigating using the home button. (Reddit, Twitter) The next release of Alloy may fix this also.
|
||||
|
||||
**When using YouTube on any of the proxy sites, why does the page not load fully or the video is just white?**
|
||||
|
||||
There are two methods for fixing this:
|
||||
- Reloading the page usually when the error above happens should load the video.
|
||||
- Alternatively, right-clicking the page and doing Reload Frame if you are using some form of Stealth Mode may work.
|
||||
|
||||
**On the official sites, I am getting 502 errors. What do I do?**
|
||||
- Reloading the page normally when the error above happens should load the video.
|
||||
- Or right-clicking the page and doing Reload Frame if you are using some form of Stealth Mode.
|
||||
|
||||
The proxy may be down, being worked on, or is under high load.
|
||||
When this happens, you may either switch sites to fix the error or wait a bit. Sometimes clearing your cache can help by doing Ctrl+Shift+R or reloading the page usually. (Hard Reload, which purges cache.)
|
||||
**When using Discord under Alloy or SysYa, why does the page stay gray/white or the QR code not load?**
|
||||
|
||||
Once again do the same steps above:
|
||||
- Reloading the page normally when the error above happens should load the video
|
||||
- Or right-clicking the page and doing Reload Frame if you are using some form of Stealth Mode.
|
||||
|
||||
Make sure you are also doing the steps correctly. Simply view link above for extended Discord proxy information/steps.
|
||||
|
||||
**I am getting 502 errors. What do I do?**
|
||||
|
||||
When this happens you may either switch sites to fix the error or wait a bit. Sometimes clearing your cache can help.
|
||||
|
||||
If you still have any questions feel free to ask them in the discord linked here.
|
||||
|
||||
</details>
|
||||
|
||||
## More Information
|
||||
This project is maintained by Quite A Fancy Emerald with massive help from BinBashBanana (OlyB) and is an official flagship Titanium Network proxy site.
|
||||
|
||||
- https://titaniumnetwork.org/
|
||||
- https://github.com/titaniumnetwork-dev/
|
||||
- <a href="https://github.com/titaniumnetwork-dev/">https://github.com/titaniumnetwork-dev/</a>
|
||||
- <a href="https://titaniumnetwork.org/">https://titaniumnetwork.org/</a>
|
||||
|
||||
View the official website for more details or credits.
|
||||
View the official website for more detail and credits.
|
||||
|
||||
### Proxy Sources:
|
||||
This project currently uses Corrosion, Womginx, and PyDodgeB, linked below.
|
||||
This project currently uses Corrosion, Womginx, and Palladium, linked below.
|
||||
|
||||
- https://github.com/titaniumnetwork-dev/Corrosion (Corrosion)
|
||||
- https://github.com/binary-person/womginx (Womginx)
|
||||
- https://github.com/BinBashBanana/PyDodge (PyDodge)**
|
||||
- https://github.com/BlaNKtext/web-osu (webosu or owu!)
|
||||
- <a href="https://github.com/titaniumnetwork-dev/Corrosion">Corrosion</a>
|
||||
- <a href="https://github.com/binary-person/womginx">Womginx</a>
|
||||
- <a href="https://github.com/LudicrousDevelopment/Palladium">Palladium</a>
|
||||
- <a href="https://github.com/BinBashBanana/PyDodge">PyDodge</a>
|
||||
|
||||
### Other:
|
||||
|
||||
- <a href="https://github.com/vibedivide/vibeOS">vibeOS</a>
|
||||
- <a href="https://github.com/BinBashBanana/webretro">webretro</a>
|
||||
- <a href="https://ruffle.rs/">Ruffle</a>
|
||||
- <a href="https://github.com/BlaNKtext/webosu">webosu</a>
|
||||
|
||||
### Notable Mentions:
|
||||
- https://dedipath.com (Hosting Provider)
|
||||
|
||||
### Footnotes:
|
||||
- The official Holy Unblocker sites use a private, modified version of Via and goes under the name PyDodge for any modified version.
|
||||
- Node Unblocker is no longer used on any of the official Titanium Network flagship sites.
|
||||
- <a href="https://soyoustart.com/">SoYouStart / OVH</a> (Hosting Provider)
|
||||
|
||||
Thanks :D
|
||||
|
|
2
app.json
|
@ -2,6 +2,6 @@
|
|||
"name": "Holy Unblocker",
|
||||
"description": "Holy Unblocker is a secure web proxy service supporting numerous sites while concentrating on detail with design, mechanics, and features. Bypass web filters regardless of whether it is an extension or network-based.",
|
||||
"repository": "https://github.com/titaniumnetwork-dev/Holy-Unblocker",
|
||||
"logo": "https://github.com/titaniumnetwork-dev/Holy-Unblocker/blob/master/views/assets/img/i.png?raw=true",
|
||||
"logo": "https://raw.githubusercontent.com/titaniumnetwork-dev/Holy-Unblocker/master/views/assets/img/icon.png",
|
||||
"keywords": ["holyunblocker", "womginx", "corrosion", "titaniumnetwork", "node", "proxy", "unblocker", "webproxy", "games"]
|
||||
}
|
102
backend.js
|
@ -1,6 +1,6 @@
|
|||
/* -----------------------------------------------
|
||||
* Authors: QuiteAFancyEmerald, BinBashBanana (OlyB), YÖCTDÖNALD'S and the lime
|
||||
* Additional help from Divide and SexyDuceDuce >:D test aaaa
|
||||
* Additional help from Divide and SexyDuceDuce >:D
|
||||
* ----------------------------------------------- */
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
@ -12,7 +12,7 @@ const config = require('./config.json');
|
|||
const insert = require('./randomization.json');
|
||||
const app = express();
|
||||
const port = process.env.PORT || config.port;
|
||||
const server = config.ssl ? https.createServer({ key: fs.readFileSync('./ssl/ssl.key'), cert: fs.readFileSync('./ssl/ssl.cert') }, app) : http.createServer(app);
|
||||
const server = http.createServer(app);
|
||||
|
||||
btoa = (str) => {
|
||||
return new Buffer.from(str).toString('base64');
|
||||
|
@ -22,80 +22,83 @@ atob = (str) => {
|
|||
return new Buffer.from(str, 'base64').toString('utf-8');
|
||||
}
|
||||
|
||||
const text404 = fs.readFileSync(path.normalize(__dirname + '/views/404.html'), 'utf8'),
|
||||
pages = {
|
||||
'index': 'index.html',
|
||||
/* Main */
|
||||
'in': 'info.html',
|
||||
'faq': 'faq.html',
|
||||
'j': 'hidden.html',
|
||||
's': 'pages/frame.html',
|
||||
'z': 'pages/surf.html',
|
||||
'c': 'pages/nav/credits.html',
|
||||
'x': 'pages/nav/bookmarklets.html',
|
||||
'i': 'pages/nav/icons.html',
|
||||
't': 'pages/nav/terms.html',
|
||||
/* Games */
|
||||
'g': 'pages/nav/gtools.html',
|
||||
'h': 'pages/nav/games5.html',
|
||||
'el': 'pages/nav/emulators.html',
|
||||
'f': 'pages/nav/flash.html',
|
||||
'm': 'pages/nav/emulibrary.html',
|
||||
/* Proxies */
|
||||
'q': 'pages/proxnav/corrosion.html',
|
||||
'w': 'pages/proxnav/womginx.html',
|
||||
'y': 'pages/proxnav/youtube.html',
|
||||
'd': 'pages/proxnav/discordhub.html',
|
||||
/* Ruffle and Webretro */
|
||||
'fg': 'archive/gfiles/flash/index.html',
|
||||
'eg': 'archive/gfiles/rarch/index.html'
|
||||
};
|
||||
const text404 = fs.readFileSync(path.normalize(__dirname + '/views/404.html'), 'utf8');
|
||||
const pages = {
|
||||
'index': 'index.html',
|
||||
/* Main */
|
||||
'in': 'docs.html',
|
||||
'faq': 'faq.html',
|
||||
'j': 'hidden.html',
|
||||
's': 'pages/frame.html',
|
||||
'z': 'pages/surf.html',
|
||||
'c': 'pages/nav/credits.html',
|
||||
'x': 'pages/nav/bookmarklets.html',
|
||||
'i': 'pages/nav/icons.html',
|
||||
't': 'pages/nav/terms.html',
|
||||
/* Games */
|
||||
'g': 'pages/nav/gtools.html',
|
||||
'h': 'pages/nav/games5.html',
|
||||
'el': 'pages/nav/emulators.html',
|
||||
'f': 'pages/nav/flash.html',
|
||||
'm': 'pages/nav/emulibrary.html',
|
||||
/* Proxies */
|
||||
'q': 'pages/proxnav/corrosion.html',
|
||||
'w': 'pages/proxnav/womginx.html',
|
||||
/* Proxy Presets */
|
||||
'y': 'pages/proxnav/preset/youtube.html',
|
||||
'd': 'pages/proxnav/preset/discord.html',
|
||||
'r': 'pages/proxnav/preset/reddit.html',
|
||||
/* Misc */
|
||||
'fg': 'archive/gfiles/flash/index.html',
|
||||
'eg': 'archive/gfiles/rarch/index.html',
|
||||
'vos': 'archive/vibeOS/index.html'
|
||||
};
|
||||
|
||||
const cookingInserts = insert.content;
|
||||
const vegetables = insert.keywords;
|
||||
const charRandom = insert.chars;
|
||||
const cacheBustList = {
|
||||
// "styles.css": "styles-1642900360.min.css",
|
||||
"common.js": "common-1643838852.js",
|
||||
"links.js": "links-1642900360.js"
|
||||
};
|
||||
|
||||
function randomListItem(lis) {
|
||||
return lis[Math.floor(Math.random() * lis.length)];
|
||||
}
|
||||
|
||||
function redditFix(str) {
|
||||
return str.replace(/Ch­a­tbo­x/g, 'Re­dd­it');
|
||||
}
|
||||
|
||||
function insertCharset(str) {
|
||||
return str.replace(/­|​|<wbr>/g, function() { return randomListItem(charRandom); });
|
||||
return str.replace(/­|​|­|<wbr>/g, function() { return randomListItem(charRandom); }); // this needs to be inside a function, so that not every string is the same
|
||||
}
|
||||
|
||||
function insertCooking(str) {
|
||||
return str.replace(/<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->/g, function() { return '<span style="display: none;" data-fact="' + randomListItem(vegetables) + '" data-type="' + randomListItem(vegetables) + '">' + randomListItem(cookingInserts) + '</span>'; });
|
||||
return str.replace(/<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->/g, function() { return '<span style="display: none;" data-fact="' + randomListItem(vegetables) + '" data-type="' + randomListItem(vegetables) + '">' + randomListItem(cookingInserts) + '</span>'; }); // this needs to be inside a function, so that not every string is the same
|
||||
}
|
||||
|
||||
function splashPublic(str) {
|
||||
return str.replace(/<!-- ######## -->/g, function() { return '<p class="text-center">Jo­in the <a id="tnlink" target="_blank">T­N Dis­co­rd</a> for more pr­iva️te site lin­ks. Note that this is the public version of HU which is not official. Things may not work or are unsecure.</p>'; }); // this needs to be inside a function, so that not every string is the same
|
||||
}
|
||||
|
||||
function cacheBusting(str) {
|
||||
return str.replace(/styles.min.css/g, 'styles-1636936688.min.css');
|
||||
}
|
||||
|
||||
function cacheBusting2(str) {
|
||||
return str.replace(/common.js/g, 'common-1628457888.js');
|
||||
}
|
||||
|
||||
function cacheBusting3(str) {
|
||||
return str.replace(/surf.js/g, 'surf-1628130462.js');
|
||||
for (var item of Object.entries(cacheBustList)) {
|
||||
str = str.replace(new RegExp(item[0], "g"), item[1]);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
function insertAll(str) {
|
||||
return insertCharset(insertCooking(redditFix(cacheBusting(cacheBusting2(cacheBusting3(str))))));
|
||||
return insertCharset(insertCooking(splashPublic(cacheBusting(str))));
|
||||
}
|
||||
|
||||
function tryReadFile(file) {
|
||||
return fs.existsSync(file) ? fs.readFileSync(file, 'utf8') : text404;
|
||||
}
|
||||
|
||||
let blacklist;
|
||||
|
||||
const fetch = (...args) =>
|
||||
import ('node-fetch').then(({ default: fetch }) => fetch(...args));
|
||||
|
||||
let blacklist;
|
||||
|
||||
fetch("https://blocklistproject.github.io/Lists/alt-version/everything-nl.txt").then(response => response.text()).then(data => {
|
||||
blacklist = data.split("\n") && config.blacklist;
|
||||
});
|
||||
|
@ -103,7 +106,6 @@ fetch("https://blocklistproject.github.io/Lists/alt-version/everything-nl.txt").
|
|||
const proxy = new corrosion({
|
||||
title: config.title,
|
||||
prefix: config.prefix || '/search/',
|
||||
forceHttps: true,
|
||||
codec: config.codec || 'xor',
|
||||
ws: config.ws,
|
||||
requestMiddleware: [
|
||||
|
@ -120,7 +122,7 @@ app.get('/', async(req, res) => res.send(insertAll(tryReadFile(path.normalize(__
|
|||
app.use(express.static(path.normalize(__dirname + '/views')));
|
||||
app.use((req, res) => {
|
||||
if (req.url.startsWith(proxy.prefix)) return proxy.request(req, res);
|
||||
res.status(404, res.send(insertAll(text404)))
|
||||
res.status(404).send(insertAll(text404));
|
||||
});
|
||||
|
||||
server.listen(port);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"title": "Untitled Document",
|
||||
"title": "HU OSS",
|
||||
"port": "8080",
|
||||
"ssl": false,
|
||||
"ws": true,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
module.exports = {
|
||||
apps: [{
|
||||
name: 'HolyUB',
|
||||
name: 'HolyUnblockerPublic',
|
||||
script: './backend.js',
|
||||
env: {
|
||||
PORT: 8080,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "holyub",
|
||||
"version": "4.8.0",
|
||||
"version": "5.0.0",
|
||||
"repository": "https://github.com/QuiteAFancyEmerald/Holy-Unblocker",
|
||||
"description": "Holy Unblocker is a secure web proxy service with support for many sites.",
|
||||
"main": "backend.js",
|
||||
|
@ -18,7 +18,10 @@
|
|||
"corrosion": "^1.0.0",
|
||||
"express": "^4.17.1",
|
||||
"mime-types": "^2.1.27",
|
||||
"ws": "^7.5.3",
|
||||
"node-fetch": "^3.1.0"
|
||||
"node-fetch": "^3.2.0",
|
||||
"ws": "^7.5.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12.20.0"
|
||||
}
|
||||
}
|
|
@ -1,16 +1,35 @@
|
|||
{
|
||||
"chars": [
|
||||
"­", "​"
|
||||
"", "⁤", "‌", "️", "⁦", "", "", "", "‌", "", "⁢", "⁡", "‭", "️"
|
||||
],
|
||||
"keywords": [
|
||||
"RandomTerm1", "RandomTerm2", "RandomTerm3", "RandomTerm4", "RandomTerm5", "RandomTerm6"
|
||||
"Thanksgiving", "Science", "Reading", "Physics", "Academic", "Algebra", "Geometry", "Onion", "Asparagus", "Rhubarb", "Celery", "Lettuce", "Spinach", "Kale", "Cabbage", "Arugula", "Broccoli", "Artichoke", "Cauliflower", "Tomato", "Avocado", "Pepper", "Squash", "Pumpkin", "Zucchini"
|
||||
],
|
||||
"content": [
|
||||
"RandomTermRandomTermRandomTermRandomTermRandomTermRandomTermRandomTermRandomTermRandomTermRandomTermRandomTermRandomTerm",
|
||||
"RandomTerm2RandomTerm2RandomTerm2RandomTerm2RandomTerm2RandomTerm2RandomTerm2RandomTerm2RandomTerm2RandomTerm2RandomTerm2RandomTerm2RandomTerm2RandomTerm2RandomTerm2",
|
||||
"RandomTerm3RandomTerm3RandomTerm3RandomTerm3RandomTerm3RandomTerm3RandomTerm3RandomTerm3RandomTerm3RandomTerm3RandomTerm3RandomTerm3RandomTerm3",
|
||||
"RandomTerm4RandomTerm4RandomTerm4RandomTerm4RandomTerm4RandomTerm4RandomTerm4RandomTerm4RandomTerm4RandomTerm4RandomTerm4RandomTerm4RandomTerm4RandomTerm4",
|
||||
"RandomTerm5RandomTerm5RandomTerm5RandomTerm5RandomTerm5RandomTerm5RandomTerm5RandomTerm5RandomTerm5RandomTerm5RandomTerm5RandomTerm5RandomTerm5RandomTerm5RandomTerm5",
|
||||
"RandomTerm6RandomTerm6RandomTerm6RandomTerm6RandomTerm6RandomTerm6RandomTerm6RandomTerm6RandomTerm6RandomTerm6RandomTerm6RandomTerm6RandomTerm6RandomTerm6RandomTerm6RandomTerm6"
|
||||
"Cooking is something that most people are doing or try to do. Some do it as a profession, some do it for fun, and some do it because they have to do it. People are going to cooking, because some food is raw that people cannot eat it, because it is not tasty.",
|
||||
"Olive Garden opened in 1982 specializing in Italian based food. They have pasta, breadsticks, and soup. Zuppa Toscana is a soup that is one of their most popular soups. Its spicy kick, and creamy tasting is the best part about it. This recipe is very easy to make, but is the best at Olive Garden.",
|
||||
"Homemade chicken avocados lime soup, doesn’t that sound Delicious! This simple, yet filling dish can serve a family of six. The preparation time takes roughly fifteen minutes and cook time is approximately twenty minutes.",
|
||||
"Let’s discuss their Food Quality. They're very well known for their wide mixture of pizzas from pepperoni, pepperoni and sausage, Colby classic, and bourbon street.",
|
||||
"The dinner menu I will be preparing to celebrate a special occasion will include: a nice juicy steak, fresh corn on the cob, hash brown with bacon casserole, and for the dessert peanut butter pie.",
|
||||
"Enter the spice aisle and grab one bottle of onion powder and one of... hamburger seasoning. Also, go to the vegetable area and pick up one regular onion. Then, walk back to the meat section and pick up a package of ground meat. Go to the bread aisle and grab a pack of the original Hawaiian sub-rolls and a pan that the rolls will fit into. Everybody knows that cheese is what tops off a good cheeseburger slider, so go pick up a pack of the favorite type of.",
|
||||
"Entertaining for Thanksgiving can be very rewarding, and very exhausting. Over the years I have found that planning and preparing for the big day is essential. I love to cook. I enjoy preparing a wonderful Thanksgiving meal for my loved ones. Peel tomatoes with ease! Cut an X in the top, and then simmer in a pot of hot water for 15 to 30 seconds. Cool down and the skin will fall right off.",
|
||||
"To create an egg wash, whisk together a large egg with one tablespoon of water until smooth. Use as a glue to seal pastries, then brush on top for a glossy appearance.",
|
||||
"Embrace salt. Don’t be afraid to use salt; it pulls the flavors out of your dishes. Cook with kosher salt and season with sea salt.",
|
||||
"For a great hard boiled egg every time, bring your pot to a boil and then turn off the heat. Let your eggs sit in the heated pot for 12 minutes and then transfer to cold water.",
|
||||
"From the beginning of times people have relied and survived on past educators. There are many people that contribute to a individual's education. Starting off as a young child most of the information retrieved comes from home through parents, and loved ones.",
|
||||
"Education is the process of acquiring knowledge. True education comes in many different forms. Granted it is important to study the basic academic courses including reading, writing, arithmetic, science, and social studies which all will help set a strong foundation for the student.",
|
||||
"Education is a transforming journey of an individual. It is a journey that accompanies achievements, struggles, success, failures, importance, and efforts. Education begins at home, with parents, and continue the lifelong journey till death. It is through education, an individual’s quality life gets determined.",
|
||||
"A Formal Education teaches an individual to learn academic skills, and this Education begins at the elementary level and continues until college. The process follows a set of rules and regulations for the completion of a formal degree.",
|
||||
"Informal Type: Informal Education uses no specific tools to understand learning. A person attains Informal Education though reading books, learning bicycle, playing chess, etc. Informal Education holds equal importance in life. Non-Formal Type: Non-Formal Education uses awareness programs such as adult literacy and basic education programs to promote Education. It has no time table, syllabus, and age limit and can be adjustable.",
|
||||
"The parent function of the quadratic family is f(x) = x 2 . A transformation of the graph of the parent function is represented by the function g(x) = a(x − h) 2+ k, where a ≠ 0. Match each quadratic function with its graph. Explain your reasoning. Then use a graphing calculator to verify that your answer is correct.",
|
||||
"A quadratic function is a function that can be written in the form f(x) = a(x − h) 2+ k, where a ≠ 0. The U-shaped graph of a quadratic function is called a parabola. In Section 1.1, you graphed quadratic functions using tables of values. You can also graph quadratic functions by applying transformations to the graph of the parent function f(x) = x 2 .",
|
||||
"In Example 2b, notice that g(x) = 4x 2+ 1. So, you can also describe the graph of g as a vertical stretch by a factor of 4 followed by a translation 1 unit up of the graph of f. So, the graph of g is a reflection in the x-axis and a vertical shrink by a factor of 1 — 2 of the graph of f. Notice that the function is of the form g(x) = (ax) 2 + k, where a = 2 and k = 1.",
|
||||
"Linear equations in one variable have huge number of applications and are used in calculation of various types of problems. Some of the most common and prevalent applications of Linear equations in one variable are: 1) They are used in solving problems involving relationships between real numbers. 2) They are used in geometry for problems involving calculation of perimeter or sides. 3) They are very commonly used in problems involving Money and Percents. 4) They are used extensively in time, distance and speed problems.",
|
||||
"Formula / General method to solve Linear Equations: 1) Clear Fractions: It involves multiplying both sides of the equation by Least Common Denominator. 2) Simplifying each side separately: This step uses distributive property to clear parentheses and combine like terms. 3) Isolating variable terms on one side 4) Substituting the proposed solution into the original equation. This formula is a generic and can be used to solve all the linear equations in one variable. Linear Inequalities: A linear inequality involves a linear expression in two variables by using any of the relational symbols such as <, >, <= or >= (IcoachMath, n.d.).",
|
||||
"What is Science? When it comes to the word ‘science’ most of the people have some kind of knowledge about science or when they think of it there is some kind of image related to it, a theory, scientific words or scientific research (Beyond Conservation, n.d.). Many different sorts of ideas float into an individual’s mind. Every individual has a different perception about science and how he/she perceives it. It illustrates that each person can identify science in some form. It indicates that the...",
|
||||
"We discover scientific knowledge in various natural science fields such as biology or chemistry. A common misconception about the natural sciences is that both the knowledge they reveal to us and the scientific method used in discovering this are purely analytical. This means that these sciences are rigid in facts and do not contain any subjectivity or creativity. However, the scientific method is not a rigid system of pursuing measurable facts. It contains fallacies and biases. In testing hypotheses...",
|
||||
"It more than seconds or minutes or even hours? Since the definition of time is duration and duration is just the passage of time, so the curiosity to know exactly what time is entranced my interest in Physics.",
|
||||
"The book “Physics of the Impossible” was written by Japanese American theoretical physicist Michio Kaku. Kaku generally writes books about physics or physics related topics. Among his three New Work Times best seller, Physics of Impossible is one in which Kaku utilizes discourse of theoretical advancements to acquaint themes of basic material science with the reader. In this book, Kaku represents physics in various ways so that the reader understands the significance of physics and implement in his/her...",
|
||||
"A Century of Physics By the end of the nineteenth century after more than two thousand years of intellectual struggle that began with the Greek philosophers, physical scientists had reason to believe that they were beginning to understand the universe. Their theories of matter and energy, of electricity and magnetism, of heat and sound and light were confirmed in laboratories throughout the world with increasing precision. Experimentation was the method and mathematics the language of a..."
|
||||
]
|
||||
}
|
22
ssl/ssl.cert
|
@ -1,22 +0,0 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIDqzCCApOgAwIBAgIJAJnCkScWtmL0MA0GCSqGSIb3DQEBCwUAMGwxCzAJBgNV
|
||||
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMRgwFgYDVQQKDA9UaXRhbml1bU5l
|
||||
dHdvcmsxDjAMBgNVBAsMBWdhbWVyMR4wHAYDVQQDDBUqLnRpdGFuaXVtbmV0d29y
|
||||
ay5vcmcwHhcNMjAwNjEzMTg0OTU2WhcNMjEwNjEzMTg0OTU2WjBsMQswCQYDVQQG
|
||||
EwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEYMBYGA1UECgwPVGl0YW5pdW1OZXR3
|
||||
b3JrMQ4wDAYDVQQLDAVnYW1lcjEeMBwGA1UEAwwVKi50aXRhbml1bW5ldHdvcmsu
|
||||
b3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwPL69+RE6r8RrFh4
|
||||
njzC8ZRnLB+yNtuGw14C0dvNb5JwgdLl5g9/wK/s0V5NGlqwxlQlxQ/gUSuYEcUR
|
||||
6MYjcnaUmZZe/gaKVV0fkfkuigOWhLnI5AQxx7rhkzx1ujuyJ9D2pkDtZpSvv0yn
|
||||
2yrvWhJMtjuxGYip8jaLuRpbXoafvR7nrlDaNcE/GwIjnCCxsRnY2bGbxYK840mN
|
||||
fuMfF2nz+fXKPuQ/9PT48e3wOo9vM5s7yKhiHYwrogqzGN4cH4sSr1FE8C7flFyT
|
||||
Yw101u7fUaopfeGCo9Pg6IrfzyzE5Qb7OlqlVk2IkvXx7pPqVc6lZCJEhOX/qF9o
|
||||
n3mFqwIDAQABo1AwTjAdBgNVHQ4EFgQUC561ob2kGtFQ4az6y64b98+Fy+IwHwYD
|
||||
VR0jBBgwFoAUC561ob2kGtFQ4az6y64b98+Fy+IwDAYDVR0TBAUwAwEB/zANBgkq
|
||||
hkiG9w0BAQsFAAOCAQEAotvUsSLSzFyxQz329tEPyH6Tmi19FQoA5ZbLg6EqeTI9
|
||||
08qOByDGkSYJi0npaIlPO1I557NxRzdO0PxK3ybol6lnzuSlqCJP5nb1dr0z2Eax
|
||||
wgKht9P+ap/yozU5ye05ah2nkpcaeDPnwnnWFmfsnYNfgu62EshOS+5FETWEKVUb
|
||||
LXQhGInOdJq8KZvhoLZWJoUhyAqxBfW4oVvaqs+Ff96A2NNKrvbiAVYX30rVa+x0
|
||||
KIl0/DoVvDx2Q6TiL396cAXdKUW7edRQcSsGFcxwIrU5lePm0V05aN+oCoEBvXBG
|
||||
ArPN+a5kpGjJwfcpcBVf9cJ6IsvptGS9de3eTHoTyw==
|
||||
-----END CERTIFICATE-----
|
28
ssl/ssl.key
|
@ -1,28 +0,0 @@
|
|||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDA8vr35ETqvxGs
|
||||
WHiePMLxlGcsH7I224bDXgLR281vknCB0uXmD3/Ar+zRXk0aWrDGVCXFD+BRK5gR
|
||||
xRHoxiNydpSZll7+BopVXR+R+S6KA5aEucjkBDHHuuGTPHW6O7In0PamQO1mlK+/
|
||||
TKfbKu9aEky2O7EZiKnyNou5Gltehp+9HueuUNo1wT8bAiOcILGxGdjZsZvFgrzj
|
||||
SY1+4x8XafP59co+5D/09Pjx7fA6j28zmzvIqGIdjCuiCrMY3hwfixKvUUTwLt+U
|
||||
XJNjDXTW7t9Rqil94YKj0+Doit/PLMTlBvs6WqVWTYiS9fHuk+pVzqVkIkSE5f+o
|
||||
X2ifeYWrAgMBAAECggEAbihK8Ev6rKr5RBQeiPjXs2SuoppV/MvIXLHHmliLKS/J
|
||||
29S0PGyM202VPtM/4dP1KMXR6nft8WmaIEsKtoKoqijZHfajtRO21pWb+JLy5wi1
|
||||
XoFTGBrs8MLZFl5mODTsuZ6rsq9O2kn5LJZvHsmcbSgVc9UQfytvG0HY840ArS3g
|
||||
kSDtUFb1xRui6wtCBKzHVvCT+FXhSBbwkHalmbqP6BefhJ3lW2VonkOcHDrdXPfW
|
||||
CEN18IJ2v8QYgXqZP6VUlAweNXLJ33ZOl+jXGdygcOG24MFqdw0VtP0XFGk0jnSS
|
||||
W6dX67BZKeZ71EKaTy02jw5LpQNXA70ismPJHQ2uQQKBgQDuROawnBIW1fC3xOle
|
||||
m+JmP0eMe0eIQycxRsMXsXhYAA0wV3qYZSLZrNK2eRhmSNt+ODSmZ2Vt11dwOv5u
|
||||
bo8WONrRlM097SmitS2S+8o7ASem2VKQzyRE72Y9517Q+aNBdLRVtjrRNSw/hfSu
|
||||
ayLuG36+yukSH7wq7mfoUX34ZwKBgQDPTrgyyw8n5XhZT/qTTRnQJ2GTvPxDzNoJ
|
||||
IAGhGJGFAb6wgLoSpGx6BC122vuRxcTjkjAiMDci5N2zNW+YZVni+F0KTVvNFfU2
|
||||
pOTJUg3luRTygCra6O02PxwpbP/9KCBAKq/kYw/eBW+gxhPwP3ZrbAirvBjgBh0I
|
||||
kIrFijNOHQKBgGUUAbFGZD4fwCCVflLOWnr5uUaVPcFGi6fR1w2EEgNy8iVh1vYz
|
||||
YVdqg3E5aepqWgLvoRY+or64LbXEsQ70A+tvbxSdxXvR0mnd5lmGS0JAuSuE4gvg
|
||||
dAhybrMwJf8NB/7KnX4G8mix3/WKxEQB2y2bqGcT+U/g+phTzuy1NXVdAoGBAIrl
|
||||
jVjK4J60iswcYCEteWwT1rbr2oF60WNnxG+xTF63apJLzWAMNnoSLnwCAKgMv/xR
|
||||
yFo/v9FrUnduCBUtYupFyeDLMATa/27bUEbq6VDPjw9jfFMr2TONWUsQMvvlVKZp
|
||||
c2wsS0dQkRhBXr6LZsZWngCiiHAg6HcCkVgFXpapAoGBAJ/8oLGt0Ar+0MTl+gyk
|
||||
xSqgHnsc5jgqhix3nIoI5oEAbfibdGmRD1S3rtWD9YsnPxMIl+6E5bOAHrmd+Zr8
|
||||
O7EP+CLvbz4JXidaaa85h9ThXSG5xk1A1UTtSFrp+KolLE1Vvmjjd+R844XsM2wZ
|
||||
OAHbihzk0iPPphjEWR4lU4Av
|
||||
-----END PRIVATE KEY-----
|
44
views/401.html
Normal file
|
@ -0,0 +1,44 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<script>
|
||||
(function() {
|
||||
var a = document.createElement("base");
|
||||
a.href = location.protocol + "//" + location.hostname.replace(/^[^.]*\./, "");
|
||||
document.head.appendChild(a);
|
||||
})();
|
||||
</script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||
<title>H­o­ly Un­blo­ck­er | Error</title>
|
||||
<meta name="description" content="Ho­ly Unbl­o­c­ker is a se­c­ure we­b pr­ox­y se­rvi­ce with sup­po­rt for many sit­es. By­pa­ss fi­l­ter­s and fr­ee­ly enj­oy a saf­er pr­iva­te b­rowsi­ng expe­ri­ence or u­nblo­ck webs­ites on de­vices such as Chr­omebo­oks and at plac­es li­ke sch­o­ol or wor­k with­out do­wnload­ing anythi­ng."
|
||||
/>
|
||||
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#434c5e">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="assets/img/icon.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
|
||||
<link rel="stylesheet" href="assets/css/styles.css">
|
||||
<script defer="defer" src="https://cdn.jsdelivr.net/npm/tsparticles@1.39.2/tsparticles.min.js" integrity="sha256-FCz5ToEA27payrGYaVGRidiIA+68Z31TBXFzcIT1/gU=" crossorigin="anonymous"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<div id="particles-js" class="fullwidth"></div>
|
||||
<div id="mainbody" class="fullwidth">
|
||||
<div class="box-error text-center">
|
||||
<h1>401 Error | Authorization Required</h1>
|
||||
<p>Please access this page from the official site or view the <a href="/?faq" class="bluelink">FAQ page</a> for help.</p>
|
||||
<br>
|
||||
<p>This mainly serves as bot protection. Navigating to this page through the official site will resolve this or try doing Ctrl+Shift+R.</p>
|
||||
<p>The site may have been updated recently and changes have not been made universal yet due to cache.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer" class="fullwidth"></div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<script src="assets/js/csel.js"></script>
|
||||
<script src="assets/js/footer.js"></script>
|
||||
<script defer="defer" src="assets/js/particlesjs/particles.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -1,71 +1,36 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang=zxx>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<base href="/">
|
||||
<meta charset=UTF-8>
|
||||
<meta name=viewport content="width=device-width,initial-scale=1.0,shrink-to-fit=no">
|
||||
<title>H​oly Unb​loc​ke​r | 404</title>
|
||||
<meta name=description content="Get past internet cen​sorsh​ip today! Enjoy safer, private internet access bypa​ssi​ng filters such as Securly or iboss. Supports Di​sc​or​d and more! :D">
|
||||
<base href="/">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||
<title>H­o­ly Un­blo­ck­er | 404</title>
|
||||
<meta name="description" content="Ho­ly Unbl­o­c­ker is a se­c­ure we­b pr­ox­y se­rvi­ce with sup­po­rt for many sit­es. By­pa­ss fi­l­ter­s and fr­ee­ly enj­oy a saf­er pr­iva­te b­rowsi­ng expe­ri­ence or u­nblo­ck webs­ites on de­vices such as Chr­omebo­oks and at plac­es li­ke sch­o­ol or wor­k with­out do­wnload­ing anythi­ng."
|
||||
/>
|
||||
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#434c5e">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="assets/img/icon.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://unpkg.com">
|
||||
<link rel="dns-prefetch" href="https://unpkg.com">
|
||||
<link rel="preconnect" href="https://arc.io">
|
||||
<link rel="dns-prefetch" href="https://arc.io">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Montserrat+Alternates">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Titillium+Web:400,600,700">
|
||||
<link rel="stylesheet" href="assets/css/styles.min.css">
|
||||
<script type="module" src="https://unpkg.com/ionicons@5.1.2/dist/ionicons/ionicons.esm.js"></script>
|
||||
<script nomodule="" src="https://unpkg.com/ionicons@5.1.2/dist/ionicons/ionicons.js"></script>
|
||||
<script src="assets/js/header.js"></script>
|
||||
<link rel="stylesheet" href="assets/css/styles.css">
|
||||
<script defer="defer" src="https://cdn.jsdelivr.net/npm/tsparticles@1.39.2/tsparticles.min.js" integrity="sha256-FCz5ToEA27payrGYaVGRidiIA+68Z31TBXFzcIT1/gU=" crossorigin="anonymous"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<div class="text-center" style="margin:15%">
|
||||
<h1>404 Error</h1>
|
||||
<p>The requested file was not found on this server!</p>
|
||||
<p>View the <a href=/?faq>FAQ page</a> for help?</p>
|
||||
</div>
|
||||
<div class="footer-dark ft-bg" style="margin-top:5%">
|
||||
<footer>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6 item text">
|
||||
<h3><a href="/">Ho<wbr>ly Unb<wbr>loc<wbr>ker</a></h3>
|
||||
<p>Made by Stud<wbr>ents, For Stu<wbr>dents. </p>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-3 item">
|
||||
<h3>Services</h3>
|
||||
<ul>
|
||||
<li><a id="allink">Al<wbr>loy</a></li>
|
||||
<li><a id="plink">PM P<wbr>ro<wbr>xy</a></li>
|
||||
<li><a id="nclink">No<wbr>deClu<wbr>sters</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-3 item">
|
||||
<h3>About</h3>
|
||||
<ul>
|
||||
<li><a id="hblink">G<wbr>itHub</a></li>
|
||||
<li><a href="/?t">Privacy and Terms of Service</a></li>
|
||||
<li><a href="/?c">Credits</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- GitHub -->
|
||||
<div class="col item social center ft-g">
|
||||
<a id="hblink2">
|
||||
<ion-icon name="logo-github"></ion-icon>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Updated CC Date-->
|
||||
<p class="copyright">Holy U<wbr>nblo<wbr>cke<wbr>r © 2021</p>
|
||||
</div>
|
||||
</footer>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<div id="particles-js" class="fullwidth"></div>
|
||||
<div id="mainbody" class="fullwidth">
|
||||
<div class="box-error text-center">
|
||||
<h1>404 Error</h1>
|
||||
<p>The requested file was not found on this server!</p>
|
||||
<p>View the <a href="/?faq" class="bluelink">FAQ page</a> for help?</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer" class="fullwidth"></div>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<script src="assets/js/csel.js"></script>
|
||||
<script src="assets/js/footer.js"></script>
|
||||
<script defer="defer" src="assets/js/particlesjs/particles.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
1
views/assets/bootstrap/css/bootstrap.min.css
vendored
7134
views/assets/bootstrap/js/bootstrap.bundle.js
vendored
766
views/assets/bootstrap/js/bootstrap.min.js
vendored
|
@ -1,766 +0,0 @@
|
|||
/*!
|
||||
* Bootstrap v4.4.1 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
! function(e, t) { "object" == typeof exports && "undefined" != typeof module ? t(exports, require("jquery")) : "function" == typeof define && define.amd ? define(["exports", "jquery"], t) : t((e = e || self).bootstrap = {}, e.jQuery) }(this, function(e, p) { "use strict";
|
||||
|
||||
function i(e, t) { for (var n = 0; n < t.length; n++) { var i = t[n];
|
||||
i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(e, i.key, i) } }
|
||||
|
||||
function s(e, t, n) { return t && i(e.prototype, t), n && i(e, n), e }
|
||||
|
||||
function t(t, e) { var n = Object.keys(t); if (Object.getOwnPropertySymbols) { var i = Object.getOwnPropertySymbols(t);
|
||||
e && (i = i.filter(function(e) { return Object.getOwnPropertyDescriptor(t, e).enumerable })), n.push.apply(n, i) } return n }
|
||||
|
||||
function l(o) { for (var e = 1; e < arguments.length; e++) { var r = null != arguments[e] ? arguments[e] : {};
|
||||
e % 2 ? t(Object(r), !0).forEach(function(e) { var t, n, i;
|
||||
t = o, i = r[n = e], n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(o, Object.getOwnPropertyDescriptors(r)) : t(Object(r)).forEach(function(e) { Object.defineProperty(o, e, Object.getOwnPropertyDescriptor(r, e)) }) } return o }
|
||||
p = p && p.hasOwnProperty("default") ? p.default : p; var n = "transitionend";
|
||||
|
||||
function o(e) { var t = this,
|
||||
n = !1; return p(this).one(m.TRANSITION_END, function() { n = !0 }), setTimeout(function() { n || m.triggerTransitionEnd(t) }, e), this } var m = { TRANSITION_END: "bsTransitionEnd", getUID: function(e) { for (; e += ~~(1e6 * Math.random()), document.getElementById(e);); return e }, getSelectorFromElement: function(e) { var t = e.getAttribute("data-target"); if (!t || "#" === t) { var n = e.getAttribute("href");
|
||||
t = n && "#" !== n ? n.trim() : "" } try { return document.querySelector(t) ? t : null } catch (e) { return null } }, getTransitionDurationFromElement: function(e) { if (!e) return 0; var t = p(e).css("transition-duration"),
|
||||
n = p(e).css("transition-delay"),
|
||||
i = parseFloat(t),
|
||||
o = parseFloat(n); return i || o ? (t = t.split(",")[0], n = n.split(",")[0], 1e3 * (parseFloat(t) + parseFloat(n))) : 0 }, reflow: function(e) { return e.offsetHeight }, triggerTransitionEnd: function(e) { p(e).trigger(n) }, supportsTransitionEnd: function() { return Boolean(n) }, isElement: function(e) { return (e[0] || e).nodeType }, typeCheckConfig: function(e, t, n) { for (var i in n)
|
||||
if (Object.prototype.hasOwnProperty.call(n, i)) { var o = n[i],
|
||||
r = t[i],
|
||||
s = r && m.isElement(r) ? "element" : (a = r, {}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase()); if (!new RegExp(o).test(s)) throw new Error(e.toUpperCase() + ': Option "' + i + '" provided type "' + s + '" but expected type "' + o + '".') }
|
||||
var a }, findShadowRoot: function(e) { if (!document.documentElement.attachShadow) return null; if ("function" != typeof e.getRootNode) return e instanceof ShadowRoot ? e : e.parentNode ? m.findShadowRoot(e.parentNode) : null; var t = e.getRootNode(); return t instanceof ShadowRoot ? t : null }, jQueryDetection: function() { if ("undefined" == typeof p) throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript."); var e = p.fn.jquery.split(" ")[0].split("."); if (e[0] < 2 && e[1] < 9 || 1 === e[0] && 9 === e[1] && e[2] < 1 || 4 <= e[0]) throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0") } };
|
||||
m.jQueryDetection(), p.fn.emulateTransitionEnd = o, p.event.special[m.TRANSITION_END] = { bindType: n, delegateType: n, handle: function(e) { if (p(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) } }; var r = "alert",
|
||||
a = "bs.alert",
|
||||
c = "." + a,
|
||||
h = p.fn[r],
|
||||
u = { CLOSE: "close" + c, CLOSED: "closed" + c, CLICK_DATA_API: "click" + c + ".data-api" },
|
||||
f = "alert",
|
||||
d = "fade",
|
||||
g = "show",
|
||||
_ = function() {
|
||||
function i(e) { this._element = e } var e = i.prototype; return e.close = function(e) { var t = this._element;
|
||||
e && (t = this._getRootElement(e)), this._triggerCloseEvent(t).isDefaultPrevented() || this._removeElement(t) }, e.dispose = function() { p.removeData(this._element, a), this._element = null }, e._getRootElement = function(e) { var t = m.getSelectorFromElement(e),
|
||||
n = !1; return t && (n = document.querySelector(t)), n = n || p(e).closest("." + f)[0] }, e._triggerCloseEvent = function(e) { var t = p.Event(u.CLOSE); return p(e).trigger(t), t }, e._removeElement = function(t) { var n = this; if (p(t).removeClass(g), p(t).hasClass(d)) { var e = m.getTransitionDurationFromElement(t);
|
||||
p(t).one(m.TRANSITION_END, function(e) { return n._destroyElement(t, e) }).emulateTransitionEnd(e) } else this._destroyElement(t) }, e._destroyElement = function(e) { p(e).detach().trigger(u.CLOSED).remove() }, i._jQueryInterface = function(n) { return this.each(function() { var e = p(this),
|
||||
t = e.data(a);
|
||||
t || (t = new i(this), e.data(a, t)), "close" === n && t[n](this) }) }, i._handleDismiss = function(t) { return function(e) { e && e.preventDefault(), t.close(this) } }, s(i, null, [{ key: "VERSION", get: function() { return "4.4.1" } }]), i }();
|
||||
p(document).on(u.CLICK_DATA_API, '[data-dismiss="alert"]', _._handleDismiss(new _)), p.fn[r] = _._jQueryInterface, p.fn[r].Constructor = _, p.fn[r].noConflict = function() { return p.fn[r] = h, _._jQueryInterface }; var v = "button",
|
||||
y = "bs.button",
|
||||
E = "." + y,
|
||||
b = ".data-api",
|
||||
w = p.fn[v],
|
||||
T = "active",
|
||||
C = "btn",
|
||||
S = "focus",
|
||||
D = '[data-toggle^="button"]',
|
||||
I = '[data-toggle="buttons"]',
|
||||
A = '[data-toggle="button"]',
|
||||
O = '[data-toggle="buttons"] .btn',
|
||||
N = 'input:not([type="hidden"])',
|
||||
k = ".active",
|
||||
L = ".btn",
|
||||
P = { CLICK_DATA_API: "click" + E + b, FOCUS_BLUR_DATA_API: "focus" + E + b + " blur" + E + b, LOAD_DATA_API: "load" + E + b },
|
||||
x = function() {
|
||||
function n(e) { this._element = e } var e = n.prototype; return e.toggle = function() { var e = !0,
|
||||
t = !0,
|
||||
n = p(this._element).closest(I)[0]; if (n) { var i = this._element.querySelector(N); if (i) { if ("radio" === i.type)
|
||||
if (i.checked && this._element.classList.contains(T)) e = !1;
|
||||
else { var o = n.querySelector(k);
|
||||
o && p(o).removeClass(T) }
|
||||
else "checkbox" === i.type ? "LABEL" === this._element.tagName && i.checked === this._element.classList.contains(T) && (e = !1) : e = !1;
|
||||
e && (i.checked = !this._element.classList.contains(T), p(i).trigger("change")), i.focus(), t = !1 } }
|
||||
this._element.hasAttribute("disabled") || this._element.classList.contains("disabled") || (t && this._element.setAttribute("aria-pressed", !this._element.classList.contains(T)), e && p(this._element).toggleClass(T)) }, e.dispose = function() { p.removeData(this._element, y), this._element = null }, n._jQueryInterface = function(t) { return this.each(function() { var e = p(this).data(y);
|
||||
e || (e = new n(this), p(this).data(y, e)), "toggle" === t && e[t]() }) }, s(n, null, [{ key: "VERSION", get: function() { return "4.4.1" } }]), n }();
|
||||
p(document).on(P.CLICK_DATA_API, D, function(e) { var t = e.target; if (p(t).hasClass(C) || (t = p(t).closest(L)[0]), !t || t.hasAttribute("disabled") || t.classList.contains("disabled")) e.preventDefault();
|
||||
else { var n = t.querySelector(N); if (n && (n.hasAttribute("disabled") || n.classList.contains("disabled"))) return void e.preventDefault();
|
||||
x._jQueryInterface.call(p(t), "toggle") } }).on(P.FOCUS_BLUR_DATA_API, D, function(e) { var t = p(e.target).closest(L)[0];
|
||||
p(t).toggleClass(S, /^focus(in)?$/.test(e.type)) }), p(window).on(P.LOAD_DATA_API, function() { for (var e = [].slice.call(document.querySelectorAll(O)), t = 0, n = e.length; t < n; t++) { var i = e[t],
|
||||
o = i.querySelector(N);
|
||||
o.checked || o.hasAttribute("checked") ? i.classList.add(T) : i.classList.remove(T) } for (var r = 0, s = (e = [].slice.call(document.querySelectorAll(A))).length; r < s; r++) { var a = e[r]; "true" === a.getAttribute("aria-pressed") ? a.classList.add(T) : a.classList.remove(T) } }), p.fn[v] = x._jQueryInterface, p.fn[v].Constructor = x, p.fn[v].noConflict = function() { return p.fn[v] = w, x._jQueryInterface }; var j = "carousel",
|
||||
H = "bs.carousel",
|
||||
R = "." + H,
|
||||
F = ".data-api",
|
||||
M = p.fn[j],
|
||||
W = { interval: 5e3, keyboard: !0, slide: !1, pause: "hover", wrap: !0, touch: !0 },
|
||||
U = { interval: "(number|boolean)", keyboard: "boolean", slide: "(boolean|string)", pause: "(string|boolean)", wrap: "boolean", touch: "boolean" },
|
||||
B = "next",
|
||||
q = "prev",
|
||||
K = "left",
|
||||
Q = "right",
|
||||
V = { SLIDE: "slide" + R, SLID: "slid" + R, KEYDOWN: "keydown" + R, MOUSEENTER: "mouseenter" + R, MOUSELEAVE: "mouseleave" + R, TOUCHSTART: "touchstart" + R, TOUCHMOVE: "touchmove" + R, TOUCHEND: "touchend" + R, POINTERDOWN: "pointerdown" + R, POINTERUP: "pointerup" + R, DRAG_START: "dragstart" + R, LOAD_DATA_API: "load" + R + F, CLICK_DATA_API: "click" + R + F },
|
||||
Y = "carousel",
|
||||
z = "active",
|
||||
X = "slide",
|
||||
G = "carousel-item-right",
|
||||
$ = "carousel-item-left",
|
||||
J = "carousel-item-next",
|
||||
Z = "carousel-item-prev",
|
||||
ee = "pointer-event",
|
||||
te = ".active",
|
||||
ne = ".active.carousel-item",
|
||||
ie = ".carousel-item",
|
||||
oe = ".carousel-item img",
|
||||
re = ".carousel-item-next, .carousel-item-prev",
|
||||
se = ".carousel-indicators",
|
||||
ae = "[data-slide], [data-slide-to]",
|
||||
le = '[data-ride="carousel"]',
|
||||
ce = { TOUCH: "touch", PEN: "pen" },
|
||||
he = function() {
|
||||
function r(e, t) { this._items = null, this._interval = null, this._activeElement = null, this._isPaused = !1, this._isSliding = !1, this.touchTimeout = null, this.touchStartX = 0, this.touchDeltaX = 0, this._config = this._getConfig(t), this._element = e, this._indicatorsElement = this._element.querySelector(se), this._touchSupported = "ontouchstart" in document.documentElement || 0 < navigator.maxTouchPoints, this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent), this._addEventListeners() } var e = r.prototype; return e.next = function() { this._isSliding || this._slide(B) }, e.nextWhenVisible = function() {!document.hidden && p(this._element).is(":visible") && "hidden" !== p(this._element).css("visibility") && this.next() }, e.prev = function() { this._isSliding || this._slide(q) }, e.pause = function(e) { e || (this._isPaused = !0), this._element.querySelector(re) && (m.triggerTransitionEnd(this._element), this.cycle(!0)), clearInterval(this._interval), this._interval = null }, e.cycle = function(e) { e || (this._isPaused = !1), this._interval && (clearInterval(this._interval), this._interval = null), this._config.interval && !this._isPaused && (this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval)) }, e.to = function(e) { var t = this;
|
||||
this._activeElement = this._element.querySelector(ne); var n = this._getItemIndex(this._activeElement); if (!(e > this._items.length - 1 || e < 0))
|
||||
if (this._isSliding) p(this._element).one(V.SLID, function() { return t.to(e) });
|
||||
else { if (n === e) return this.pause(), void this.cycle(); var i = n < e ? B : q;
|
||||
this._slide(i, this._items[e]) } }, e.dispose = function() { p(this._element).off(R), p.removeData(this._element, H), this._items = null, this._config = null, this._element = null, this._interval = null, this._isPaused = null, this._isSliding = null, this._activeElement = null, this._indicatorsElement = null }, e._getConfig = function(e) { return e = l({}, W, {}, e), m.typeCheckConfig(j, e, U), e }, e._handleSwipe = function() { var e = Math.abs(this.touchDeltaX); if (!(e <= 40)) { var t = e / this.touchDeltaX;
|
||||
(this.touchDeltaX = 0) < t && this.prev(), t < 0 && this.next() } }, e._addEventListeners = function() { var t = this;
|
||||
this._config.keyboard && p(this._element).on(V.KEYDOWN, function(e) { return t._keydown(e) }), "hover" === this._config.pause && p(this._element).on(V.MOUSEENTER, function(e) { return t.pause(e) }).on(V.MOUSELEAVE, function(e) { return t.cycle(e) }), this._config.touch && this._addTouchEventListeners() }, e._addTouchEventListeners = function() { var t = this; if (this._touchSupported) { var n = function(e) { t._pointerEvent && ce[e.originalEvent.pointerType.toUpperCase()] ? t.touchStartX = e.originalEvent.clientX : t._pointerEvent || (t.touchStartX = e.originalEvent.touches[0].clientX) },
|
||||
i = function(e) { t._pointerEvent && ce[e.originalEvent.pointerType.toUpperCase()] && (t.touchDeltaX = e.originalEvent.clientX - t.touchStartX), t._handleSwipe(), "hover" === t._config.pause && (t.pause(), t.touchTimeout && clearTimeout(t.touchTimeout), t.touchTimeout = setTimeout(function(e) { return t.cycle(e) }, 500 + t._config.interval)) };
|
||||
p(this._element.querySelectorAll(oe)).on(V.DRAG_START, function(e) { return e.preventDefault() }), this._pointerEvent ? (p(this._element).on(V.POINTERDOWN, function(e) { return n(e) }), p(this._element).on(V.POINTERUP, function(e) { return i(e) }), this._element.classList.add(ee)) : (p(this._element).on(V.TOUCHSTART, function(e) { return n(e) }), p(this._element).on(V.TOUCHMOVE, function(e) { return function(e) { e.originalEvent.touches && 1 < e.originalEvent.touches.length ? t.touchDeltaX = 0 : t.touchDeltaX = e.originalEvent.touches[0].clientX - t.touchStartX }(e) }), p(this._element).on(V.TOUCHEND, function(e) { return i(e) })) } }, e._keydown = function(e) { if (!/input|textarea/i.test(e.target.tagName)) switch (e.which) {
|
||||
case 37:
|
||||
e.preventDefault(), this.prev(); break;
|
||||
case 39:
|
||||
e.preventDefault(), this.next() } }, e._getItemIndex = function(e) { return this._items = e && e.parentNode ? [].slice.call(e.parentNode.querySelectorAll(ie)) : [], this._items.indexOf(e) }, e._getItemByDirection = function(e, t) { var n = e === B,
|
||||
i = e === q,
|
||||
o = this._getItemIndex(t),
|
||||
r = this._items.length - 1; if ((i && 0 === o || n && o === r) && !this._config.wrap) return t; var s = (o + (e === q ? -1 : 1)) % this._items.length; return -1 == s ? this._items[this._items.length - 1] : this._items[s] }, e._triggerSlideEvent = function(e, t) { var n = this._getItemIndex(e),
|
||||
i = this._getItemIndex(this._element.querySelector(ne)),
|
||||
o = p.Event(V.SLIDE, { relatedTarget: e, direction: t, from: i, to: n }); return p(this._element).trigger(o), o }, e._setActiveIndicatorElement = function(e) { if (this._indicatorsElement) { var t = [].slice.call(this._indicatorsElement.querySelectorAll(te));
|
||||
p(t).removeClass(z); var n = this._indicatorsElement.children[this._getItemIndex(e)];
|
||||
n && p(n).addClass(z) } }, e._slide = function(e, t) { var n, i, o, r = this,
|
||||
s = this._element.querySelector(ne),
|
||||
a = this._getItemIndex(s),
|
||||
l = t || s && this._getItemByDirection(e, s),
|
||||
c = this._getItemIndex(l),
|
||||
h = Boolean(this._interval); if (o = e === B ? (n = $, i = J, K) : (n = G, i = Z, Q), l && p(l).hasClass(z)) this._isSliding = !1;
|
||||
else if (!this._triggerSlideEvent(l, o).isDefaultPrevented() && s && l) { this._isSliding = !0, h && this.pause(), this._setActiveIndicatorElement(l); var u = p.Event(V.SLID, { relatedTarget: l, direction: o, from: a, to: c }); if (p(this._element).hasClass(X)) { p(l).addClass(i), m.reflow(l), p(s).addClass(n), p(l).addClass(n); var f = parseInt(l.getAttribute("data-interval"), 10);
|
||||
f ? (this._config.defaultInterval = this._config.defaultInterval || this._config.interval, this._config.interval = f) : this._config.interval = this._config.defaultInterval || this._config.interval; var d = m.getTransitionDurationFromElement(s);
|
||||
p(s).one(m.TRANSITION_END, function() { p(l).removeClass(n + " " + i).addClass(z), p(s).removeClass(z + " " + i + " " + n), r._isSliding = !1, setTimeout(function() { return p(r._element).trigger(u) }, 0) }).emulateTransitionEnd(d) } else p(s).removeClass(z), p(l).addClass(z), this._isSliding = !1, p(this._element).trigger(u);
|
||||
h && this.cycle() } }, r._jQueryInterface = function(i) { return this.each(function() { var e = p(this).data(H),
|
||||
t = l({}, W, {}, p(this).data()); "object" == typeof i && (t = l({}, t, {}, i)); var n = "string" == typeof i ? i : t.slide; if (e || (e = new r(this, t), p(this).data(H, e)), "number" == typeof i) e.to(i);
|
||||
else if ("string" == typeof n) { if ("undefined" == typeof e[n]) throw new TypeError('No method named "' + n + '"');
|
||||
e[n]() } else t.interval && t.ride && (e.pause(), e.cycle()) }) }, r._dataApiClickHandler = function(e) { var t = m.getSelectorFromElement(this); if (t) { var n = p(t)[0]; if (n && p(n).hasClass(Y)) { var i = l({}, p(n).data(), {}, p(this).data()),
|
||||
o = this.getAttribute("data-slide-to");
|
||||
o && (i.interval = !1), r._jQueryInterface.call(p(n), i), o && p(n).data(H).to(o), e.preventDefault() } } }, s(r, null, [{ key: "VERSION", get: function() { return "4.4.1" } }, { key: "Default", get: function() { return W } }]), r }();
|
||||
p(document).on(V.CLICK_DATA_API, ae, he._dataApiClickHandler), p(window).on(V.LOAD_DATA_API, function() { for (var e = [].slice.call(document.querySelectorAll(le)), t = 0, n = e.length; t < n; t++) { var i = p(e[t]);
|
||||
he._jQueryInterface.call(i, i.data()) } }), p.fn[j] = he._jQueryInterface, p.fn[j].Constructor = he, p.fn[j].noConflict = function() { return p.fn[j] = M, he._jQueryInterface }; var ue = "collapse",
|
||||
fe = "bs.collapse",
|
||||
de = "." + fe,
|
||||
pe = p.fn[ue],
|
||||
me = { toggle: !0, parent: "" },
|
||||
ge = { toggle: "boolean", parent: "(string|element)" },
|
||||
_e = { SHOW: "show" + de, SHOWN: "shown" + de, HIDE: "hide" + de, HIDDEN: "hidden" + de, CLICK_DATA_API: "click" + de + ".data-api" },
|
||||
ve = "show",
|
||||
ye = "collapse",
|
||||
Ee = "collapsing",
|
||||
be = "collapsed",
|
||||
we = "width",
|
||||
Te = "height",
|
||||
Ce = ".show, .collapsing",
|
||||
Se = '[data-toggle="collapse"]',
|
||||
De = function() {
|
||||
function a(t, e) { this._isTransitioning = !1, this._element = t, this._config = this._getConfig(e), this._triggerArray = [].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#' + t.id + '"],[data-toggle="collapse"][data-target="#' + t.id + '"]')); for (var n = [].slice.call(document.querySelectorAll(Se)), i = 0, o = n.length; i < o; i++) { var r = n[i],
|
||||
s = m.getSelectorFromElement(r),
|
||||
a = [].slice.call(document.querySelectorAll(s)).filter(function(e) { return e === t });
|
||||
null !== s && 0 < a.length && (this._selector = s, this._triggerArray.push(r)) }
|
||||
this._parent = this._config.parent ? this._getParent() : null, this._config.parent || this._addAriaAndCollapsedClass(this._element, this._triggerArray), this._config.toggle && this.toggle() } var e = a.prototype; return e.toggle = function() { p(this._element).hasClass(ve) ? this.hide() : this.show() }, e.show = function() { var e, t, n = this; if (!this._isTransitioning && !p(this._element).hasClass(ve) && (this._parent && 0 === (e = [].slice.call(this._parent.querySelectorAll(Ce)).filter(function(e) { return "string" == typeof n._config.parent ? e.getAttribute("data-parent") === n._config.parent : e.classList.contains(ye) })).length && (e = null), !(e && (t = p(e).not(this._selector).data(fe)) && t._isTransitioning))) { var i = p.Event(_e.SHOW); if (p(this._element).trigger(i), !i.isDefaultPrevented()) { e && (a._jQueryInterface.call(p(e).not(this._selector), "hide"), t || p(e).data(fe, null)); var o = this._getDimension();
|
||||
p(this._element).removeClass(ye).addClass(Ee), this._element.style[o] = 0, this._triggerArray.length && p(this._triggerArray).removeClass(be).attr("aria-expanded", !0), this.setTransitioning(!0); var r = "scroll" + (o[0].toUpperCase() + o.slice(1)),
|
||||
s = m.getTransitionDurationFromElement(this._element);
|
||||
p(this._element).one(m.TRANSITION_END, function() { p(n._element).removeClass(Ee).addClass(ye).addClass(ve), n._element.style[o] = "", n.setTransitioning(!1), p(n._element).trigger(_e.SHOWN) }).emulateTransitionEnd(s), this._element.style[o] = this._element[r] + "px" } } }, e.hide = function() { var e = this; if (!this._isTransitioning && p(this._element).hasClass(ve)) { var t = p.Event(_e.HIDE); if (p(this._element).trigger(t), !t.isDefaultPrevented()) { var n = this._getDimension();
|
||||
this._element.style[n] = this._element.getBoundingClientRect()[n] + "px", m.reflow(this._element), p(this._element).addClass(Ee).removeClass(ye).removeClass(ve); var i = this._triggerArray.length; if (0 < i)
|
||||
for (var o = 0; o < i; o++) { var r = this._triggerArray[o],
|
||||
s = m.getSelectorFromElement(r); if (null !== s) p([].slice.call(document.querySelectorAll(s))).hasClass(ve) || p(r).addClass(be).attr("aria-expanded", !1) }
|
||||
this.setTransitioning(!0);
|
||||
this._element.style[n] = ""; var a = m.getTransitionDurationFromElement(this._element);
|
||||
p(this._element).one(m.TRANSITION_END, function() { e.setTransitioning(!1), p(e._element).removeClass(Ee).addClass(ye).trigger(_e.HIDDEN) }).emulateTransitionEnd(a) } } }, e.setTransitioning = function(e) { this._isTransitioning = e }, e.dispose = function() { p.removeData(this._element, fe), this._config = null, this._parent = null, this._element = null, this._triggerArray = null, this._isTransitioning = null }, e._getConfig = function(e) { return (e = l({}, me, {}, e)).toggle = Boolean(e.toggle), m.typeCheckConfig(ue, e, ge), e }, e._getDimension = function() { return p(this._element).hasClass(we) ? we : Te }, e._getParent = function() { var e, n = this;
|
||||
m.isElement(this._config.parent) ? (e = this._config.parent, "undefined" != typeof this._config.parent.jquery && (e = this._config.parent[0])) : e = document.querySelector(this._config.parent); var t = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]',
|
||||
i = [].slice.call(e.querySelectorAll(t)); return p(i).each(function(e, t) { n._addAriaAndCollapsedClass(a._getTargetFromElement(t), [t]) }), e }, e._addAriaAndCollapsedClass = function(e, t) { var n = p(e).hasClass(ve);
|
||||
t.length && p(t).toggleClass(be, !n).attr("aria-expanded", n) }, a._getTargetFromElement = function(e) { var t = m.getSelectorFromElement(e); return t ? document.querySelector(t) : null }, a._jQueryInterface = function(i) { return this.each(function() { var e = p(this),
|
||||
t = e.data(fe),
|
||||
n = l({}, me, {}, e.data(), {}, "object" == typeof i && i ? i : {}); if (!t && n.toggle && /show|hide/.test(i) && (n.toggle = !1), t || (t = new a(this, n), e.data(fe, t)), "string" == typeof i) { if ("undefined" == typeof t[i]) throw new TypeError('No method named "' + i + '"');
|
||||
t[i]() } }) }, s(a, null, [{ key: "VERSION", get: function() { return "4.4.1" } }, { key: "Default", get: function() { return me } }]), a }();
|
||||
p(document).on(_e.CLICK_DATA_API, Se, function(e) { "A" === e.currentTarget.tagName && e.preventDefault(); var n = p(this),
|
||||
t = m.getSelectorFromElement(this),
|
||||
i = [].slice.call(document.querySelectorAll(t));
|
||||
p(i).each(function() { var e = p(this),
|
||||
t = e.data(fe) ? "toggle" : n.data();
|
||||
De._jQueryInterface.call(e, t) }) }), p.fn[ue] = De._jQueryInterface, p.fn[ue].Constructor = De, p.fn[ue].noConflict = function() { return p.fn[ue] = pe, De._jQueryInterface }; var Ie = "undefined" != typeof window && "undefined" != typeof document && "undefined" != typeof navigator,
|
||||
Ae = function() { for (var e = ["Edge", "Trident", "Firefox"], t = 0; t < e.length; t += 1)
|
||||
if (Ie && 0 <= navigator.userAgent.indexOf(e[t])) return 1;
|
||||
return 0 }(); var Oe = Ie && window.Promise ? function(e) { var t = !1; return function() { t || (t = !0, window.Promise.resolve().then(function() { t = !1, e() })) } } : function(e) { var t = !1; return function() { t || (t = !0, setTimeout(function() { t = !1, e() }, Ae)) } };
|
||||
|
||||
function Ne(e) { return e && "[object Function]" === {}.toString.call(e) }
|
||||
|
||||
function ke(e, t) { if (1 !== e.nodeType) return []; var n = e.ownerDocument.defaultView.getComputedStyle(e, null); return t ? n[t] : n }
|
||||
|
||||
function Le(e) { return "HTML" === e.nodeName ? e : e.parentNode || e.host }
|
||||
|
||||
function Pe(e) { if (!e) return document.body; switch (e.nodeName) {
|
||||
case "HTML":
|
||||
case "BODY":
|
||||
return e.ownerDocument.body;
|
||||
case "#document":
|
||||
return e.body } var t = ke(e),
|
||||
n = t.overflow,
|
||||
i = t.overflowX,
|
||||
o = t.overflowY; return /(auto|scroll|overlay)/.test(n + o + i) ? e : Pe(Le(e)) }
|
||||
|
||||
function xe(e) { return e && e.referenceNode ? e.referenceNode : e } var je = Ie && !(!window.MSInputMethodContext || !document.documentMode),
|
||||
He = Ie && /MSIE 10/.test(navigator.userAgent);
|
||||
|
||||
function Re(e) { return 11 === e ? je : 10 === e ? He : je || He }
|
||||
|
||||
function Fe(e) { if (!e) return document.documentElement; for (var t = Re(10) ? document.body : null, n = e.offsetParent || null; n === t && e.nextElementSibling;) n = (e = e.nextElementSibling).offsetParent; var i = n && n.nodeName; return i && "BODY" !== i && "HTML" !== i ? -1 !== ["TH", "TD", "TABLE"].indexOf(n.nodeName) && "static" === ke(n, "position") ? Fe(n) : n : e ? e.ownerDocument.documentElement : document.documentElement }
|
||||
|
||||
function Me(e) { return null !== e.parentNode ? Me(e.parentNode) : e }
|
||||
|
||||
function We(e, t) { if (!(e && e.nodeType && t && t.nodeType)) return document.documentElement; var n = e.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_FOLLOWING,
|
||||
i = n ? e : t,
|
||||
o = n ? t : e,
|
||||
r = document.createRange();
|
||||
r.setStart(i, 0), r.setEnd(o, 0); var s = r.commonAncestorContainer; if (e !== s && t !== s || i.contains(o)) return function(e) { var t = e.nodeName; return "BODY" !== t && ("HTML" === t || Fe(e.firstElementChild) === e) }(s) ? s : Fe(s); var a = Me(e); return a.host ? We(a.host, t) : We(e, Me(t).host) }
|
||||
|
||||
function Ue(e, t) { var n = "top" === (1 < arguments.length && void 0 !== t ? t : "top") ? "scrollTop" : "scrollLeft",
|
||||
i = e.nodeName; if ("BODY" !== i && "HTML" !== i) return e[n]; var o = e.ownerDocument.documentElement; return (e.ownerDocument.scrollingElement || o)[n] }
|
||||
|
||||
function Be(e, t) { var n = "x" === t ? "Left" : "Top",
|
||||
i = "Left" == n ? "Right" : "Bottom"; return parseFloat(e["border" + n + "Width"], 10) + parseFloat(e["border" + i + "Width"], 10) }
|
||||
|
||||
function qe(e, t, n, i) { return Math.max(t["offset" + e], t["scroll" + e], n["client" + e], n["offset" + e], n["scroll" + e], Re(10) ? parseInt(n["offset" + e]) + parseInt(i["margin" + ("Height" === e ? "Top" : "Left")]) + parseInt(i["margin" + ("Height" === e ? "Bottom" : "Right")]) : 0) }
|
||||
|
||||
function Ke(e) { var t = e.body,
|
||||
n = e.documentElement,
|
||||
i = Re(10) && getComputedStyle(n); return { height: qe("Height", t, n, i), width: qe("Width", t, n, i) } } var Qe = function(e, t, n) { return t && Ve(e.prototype, t), n && Ve(e, n), e };
|
||||
|
||||
function Ve(e, t) { for (var n = 0; n < t.length; n++) { var i = t[n];
|
||||
i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(e, i.key, i) } }
|
||||
|
||||
function Ye(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } var ze = Object.assign || function(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var i in n) Object.prototype.hasOwnProperty.call(n, i) && (e[i] = n[i]) } return e };
|
||||
|
||||
function Xe(e) { return ze({}, e, { right: e.left + e.width, bottom: e.top + e.height }) }
|
||||
|
||||
function Ge(e) { var t = {}; try { if (Re(10)) { t = e.getBoundingClientRect(); var n = Ue(e, "top"),
|
||||
i = Ue(e, "left");
|
||||
t.top += n, t.left += i, t.bottom += n, t.right += i } else t = e.getBoundingClientRect() } catch (e) {} var o = { left: t.left, top: t.top, width: t.right - t.left, height: t.bottom - t.top },
|
||||
r = "HTML" === e.nodeName ? Ke(e.ownerDocument) : {},
|
||||
s = r.width || e.clientWidth || o.width,
|
||||
a = r.height || e.clientHeight || o.height,
|
||||
l = e.offsetWidth - s,
|
||||
c = e.offsetHeight - a; if (l || c) { var h = ke(e);
|
||||
l -= Be(h, "x"), c -= Be(h, "y"), o.width -= l, o.height -= c } return Xe(o) }
|
||||
|
||||
function $e(e, t, n) { var i = 2 < arguments.length && void 0 !== n && n,
|
||||
o = Re(10),
|
||||
r = "HTML" === t.nodeName,
|
||||
s = Ge(e),
|
||||
a = Ge(t),
|
||||
l = Pe(e),
|
||||
c = ke(t),
|
||||
h = parseFloat(c.borderTopWidth, 10),
|
||||
u = parseFloat(c.borderLeftWidth, 10);
|
||||
i && r && (a.top = Math.max(a.top, 0), a.left = Math.max(a.left, 0)); var f = Xe({ top: s.top - a.top - h, left: s.left - a.left - u, width: s.width, height: s.height }); if (f.marginTop = 0, f.marginLeft = 0, !o && r) { var d = parseFloat(c.marginTop, 10),
|
||||
p = parseFloat(c.marginLeft, 10);
|
||||
f.top -= h - d, f.bottom -= h - d, f.left -= u - p, f.right -= u - p, f.marginTop = d, f.marginLeft = p } return (o && !i ? t.contains(l) : t === l && "BODY" !== l.nodeName) && (f = function(e, t, n) { var i = 2 < arguments.length && void 0 !== n && n,
|
||||
o = Ue(t, "top"),
|
||||
r = Ue(t, "left"),
|
||||
s = i ? -1 : 1; return e.top += o * s, e.bottom += o * s, e.left += r * s, e.right += r * s, e }(f, t)), f }
|
||||
|
||||
function Je(e) { if (!e || !e.parentElement || Re()) return document.documentElement; for (var t = e.parentElement; t && "none" === ke(t, "transform");) t = t.parentElement; return t || document.documentElement }
|
||||
|
||||
function Ze(e, t, n, i, o) { var r = 4 < arguments.length && void 0 !== o && o,
|
||||
s = { top: 0, left: 0 },
|
||||
a = r ? Je(e) : We(e, xe(t)); if ("viewport" === i) s = function(e, t) { var n = 1 < arguments.length && void 0 !== t && t,
|
||||
i = e.ownerDocument.documentElement,
|
||||
o = $e(e, i),
|
||||
r = Math.max(i.clientWidth, window.innerWidth || 0),
|
||||
s = Math.max(i.clientHeight, window.innerHeight || 0),
|
||||
a = n ? 0 : Ue(i),
|
||||
l = n ? 0 : Ue(i, "left"); return Xe({ top: a - o.top + o.marginTop, left: l - o.left + o.marginLeft, width: r, height: s }) }(a, r);
|
||||
else { var l = void 0; "scrollParent" === i ? "BODY" === (l = Pe(Le(t))).nodeName && (l = e.ownerDocument.documentElement) : l = "window" === i ? e.ownerDocument.documentElement : i; var c = $e(l, a, r); if ("HTML" !== l.nodeName || function e(t) { var n = t.nodeName; if ("BODY" === n || "HTML" === n) return !1; if ("fixed" === ke(t, "position")) return !0; var i = Le(t); return !!i && e(i) }(a)) s = c;
|
||||
else { var h = Ke(e.ownerDocument),
|
||||
u = h.height,
|
||||
f = h.width;
|
||||
s.top += c.top - c.marginTop, s.bottom = u + c.top, s.left += c.left - c.marginLeft, s.right = f + c.left } } var d = "number" == typeof(n = n || 0); return s.left += d ? n : n.left || 0, s.top += d ? n : n.top || 0, s.right -= d ? n : n.right || 0, s.bottom -= d ? n : n.bottom || 0, s }
|
||||
|
||||
function et(e, t, i, n, o, r) { var s = 5 < arguments.length && void 0 !== r ? r : 0; if (-1 === e.indexOf("auto")) return e; var a = Ze(i, n, s, o),
|
||||
l = { top: { width: a.width, height: t.top - a.top }, right: { width: a.right - t.right, height: a.height }, bottom: { width: a.width, height: a.bottom - t.bottom }, left: { width: t.left - a.left, height: a.height } },
|
||||
c = Object.keys(l).map(function(e) { return ze({ key: e }, l[e], { area: function(e) { return e.width * e.height }(l[e]) }) }).sort(function(e, t) { return t.area - e.area }),
|
||||
h = c.filter(function(e) { var t = e.width,
|
||||
n = e.height; return t >= i.clientWidth && n >= i.clientHeight }),
|
||||
u = 0 < h.length ? h[0].key : c[0].key,
|
||||
f = e.split("-")[1]; return u + (f ? "-" + f : "") }
|
||||
|
||||
function tt(e, t, n, i) { var o = 3 < arguments.length && void 0 !== i ? i : null; return $e(n, o ? Je(t) : We(t, xe(n)), o) }
|
||||
|
||||
function nt(e) { var t = e.ownerDocument.defaultView.getComputedStyle(e),
|
||||
n = parseFloat(t.marginTop || 0) + parseFloat(t.marginBottom || 0),
|
||||
i = parseFloat(t.marginLeft || 0) + parseFloat(t.marginRight || 0); return { width: e.offsetWidth + i, height: e.offsetHeight + n } }
|
||||
|
||||
function it(e) { var t = { left: "right", right: "left", bottom: "top", top: "bottom" }; return e.replace(/left|right|bottom|top/g, function(e) { return t[e] }) }
|
||||
|
||||
function ot(e, t, n) { n = n.split("-")[0]; var i = nt(e),
|
||||
o = { width: i.width, height: i.height },
|
||||
r = -1 !== ["right", "left"].indexOf(n),
|
||||
s = r ? "top" : "left",
|
||||
a = r ? "left" : "top",
|
||||
l = r ? "height" : "width",
|
||||
c = r ? "width" : "height"; return o[s] = t[s] + t[l] / 2 - i[l] / 2, o[a] = n === a ? t[a] - i[c] : t[it(a)], o }
|
||||
|
||||
function rt(e, t) { return Array.prototype.find ? e.find(t) : e.filter(t)[0] }
|
||||
|
||||
function st(e, n, t) { return (void 0 === t ? e : e.slice(0, function(e, t, n) { if (Array.prototype.findIndex) return e.findIndex(function(e) { return e[t] === n }); var i = rt(e, function(e) { return e[t] === n }); return e.indexOf(i) }(e, "name", t))).forEach(function(e) { e.function && console.warn("`modifier.function` is deprecated, use `modifier.fn`!"); var t = e.function || e.fn;
|
||||
e.enabled && Ne(t) && (n.offsets.popper = Xe(n.offsets.popper), n.offsets.reference = Xe(n.offsets.reference), n = t(n, e)) }), n }
|
||||
|
||||
function at(e, n) { return e.some(function(e) { var t = e.name; return e.enabled && t === n }) }
|
||||
|
||||
function lt(e) { for (var t = [!1, "ms", "Webkit", "Moz", "O"], n = e.charAt(0).toUpperCase() + e.slice(1), i = 0; i < t.length; i++) { var o = t[i],
|
||||
r = o ? "" + o + n : e; if ("undefined" != typeof document.body.style[r]) return r } return null }
|
||||
|
||||
function ct(e) { var t = e.ownerDocument; return t ? t.defaultView : window }
|
||||
|
||||
function ht(e, t, n, i) { n.updateBound = i, ct(e).addEventListener("resize", n.updateBound, { passive: !0 }); var o = Pe(e); return function e(t, n, i, o) { var r = "BODY" === t.nodeName,
|
||||
s = r ? t.ownerDocument.defaultView : t;
|
||||
s.addEventListener(n, i, { passive: !0 }), r || e(Pe(s.parentNode), n, i, o), o.push(s) }(o, "scroll", n.updateBound, n.scrollParents), n.scrollElement = o, n.eventsEnabled = !0, n }
|
||||
|
||||
function ut() { this.state.eventsEnabled && (cancelAnimationFrame(this.scheduleUpdate), this.state = function(e, t) { return ct(e).removeEventListener("resize", t.updateBound), t.scrollParents.forEach(function(e) { e.removeEventListener("scroll", t.updateBound) }), t.updateBound = null, t.scrollParents = [], t.scrollElement = null, t.eventsEnabled = !1, t }(this.reference, this.state)) }
|
||||
|
||||
function ft(e) { return "" !== e && !isNaN(parseFloat(e)) && isFinite(e) }
|
||||
|
||||
function dt(n, i) { Object.keys(i).forEach(function(e) { var t = ""; - 1 !== ["width", "height", "top", "right", "bottom", "left"].indexOf(e) && ft(i[e]) && (t = "px"), n.style[e] = i[e] + t }) }
|
||||
|
||||
function pt(e, t) {
|
||||
function n(e) { return e } var i = e.offsets,
|
||||
o = i.popper,
|
||||
r = i.reference,
|
||||
s = Math.round,
|
||||
a = Math.floor,
|
||||
l = s(r.width),
|
||||
c = s(o.width),
|
||||
h = -1 !== ["left", "right"].indexOf(e.placement),
|
||||
u = -1 !== e.placement.indexOf("-"),
|
||||
f = t ? h || u || l % 2 == c % 2 ? s : a : n,
|
||||
d = t ? s : n; return { left: f(l % 2 == 1 && c % 2 == 1 && !u && t ? o.left - 1 : o.left), top: d(o.top), bottom: d(o.bottom), right: f(o.right) } } var mt = Ie && /Firefox/i.test(navigator.userAgent);
|
||||
|
||||
function gt(e, t, n) { var i = rt(e, function(e) { return e.name === t }),
|
||||
o = !!i && e.some(function(e) { return e.name === n && e.enabled && e.order < i.order }); if (!o) { var r = "`" + t + "`",
|
||||
s = "`" + n + "`";
|
||||
console.warn(s + " modifier is required by " + r + " modifier in order to work, be sure to include it before " + r + "!") } return o } var _t = ["auto-start", "auto", "auto-end", "top-start", "top", "top-end", "right-start", "right", "right-end", "bottom-end", "bottom", "bottom-start", "left-end", "left", "left-start"],
|
||||
vt = _t.slice(3);
|
||||
|
||||
function yt(e, t) { var n = 1 < arguments.length && void 0 !== t && t,
|
||||
i = vt.indexOf(e),
|
||||
o = vt.slice(i + 1).concat(vt.slice(0, i)); return n ? o.reverse() : o } var Et = "flip",
|
||||
bt = "clockwise",
|
||||
wt = "counterclockwise";
|
||||
|
||||
function Tt(e, o, r, t) { var s = [0, 0],
|
||||
a = -1 !== ["right", "left"].indexOf(t),
|
||||
n = e.split(/(\+|\-)/).map(function(e) { return e.trim() }),
|
||||
i = n.indexOf(rt(n, function(e) { return -1 !== e.search(/,|\s/) }));
|
||||
n[i] && -1 === n[i].indexOf(",") && console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead."); var l = /\s*,\s*|\s+/,
|
||||
c = -1 !== i ? [n.slice(0, i).concat([n[i].split(l)[0]]), [n[i].split(l)[1]].concat(n.slice(i + 1))] : [n]; return (c = c.map(function(e, t) { var n = (1 === t ? !a : a) ? "height" : "width",
|
||||
i = !1; return e.reduce(function(e, t) { return "" === e[e.length - 1] && -1 !== ["+", "-"].indexOf(t) ? (e[e.length - 1] = t, i = !0, e) : i ? (e[e.length - 1] += t, i = !1, e) : e.concat(t) }, []).map(function(e) { return function(e, t, n, i) { var o = e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),
|
||||
r = +o[1],
|
||||
s = o[2]; if (!r) return e; if (0 !== s.indexOf("%")) return "vh" !== s && "vw" !== s ? r : ("vh" === s ? Math.max(document.documentElement.clientHeight, window.innerHeight || 0) : Math.max(document.documentElement.clientWidth, window.innerWidth || 0)) / 100 * r; var a = void 0; switch (s) {
|
||||
case "%p":
|
||||
a = n; break;
|
||||
case "%":
|
||||
case "%r":
|
||||
default:
|
||||
a = i } return Xe(a)[t] / 100 * r }(e, n, o, r) }) })).forEach(function(n, i) { n.forEach(function(e, t) { ft(e) && (s[i] += e * ("-" === n[t - 1] ? -1 : 1)) }) }), s } var Ct = { placement: "bottom", positionFixed: !1, eventsEnabled: !0, removeOnDestroy: !1, onCreate: function() {}, onUpdate: function() {}, modifiers: { shift: { order: 100, enabled: !0, fn: function(e) { var t = e.placement,
|
||||
n = t.split("-")[0],
|
||||
i = t.split("-")[1]; if (i) { var o = e.offsets,
|
||||
r = o.reference,
|
||||
s = o.popper,
|
||||
a = -1 !== ["bottom", "top"].indexOf(n),
|
||||
l = a ? "left" : "top",
|
||||
c = a ? "width" : "height",
|
||||
h = { start: Ye({}, l, r[l]), end: Ye({}, l, r[l] + r[c] - s[c]) };
|
||||
e.offsets.popper = ze({}, s, h[i]) } return e } }, offset: { order: 200, enabled: !0, fn: function(e, t) { var n = t.offset,
|
||||
i = e.placement,
|
||||
o = e.offsets,
|
||||
r = o.popper,
|
||||
s = o.reference,
|
||||
a = i.split("-")[0],
|
||||
l = void 0; return l = ft(+n) ? [+n, 0] : Tt(n, r, s, a), "left" === a ? (r.top += l[0], r.left -= l[1]) : "right" === a ? (r.top += l[0], r.left += l[1]) : "top" === a ? (r.left += l[0], r.top -= l[1]) : "bottom" === a && (r.left += l[0], r.top += l[1]), e.popper = r, e }, offset: 0 }, preventOverflow: { order: 300, enabled: !0, fn: function(e, i) { var t = i.boundariesElement || Fe(e.instance.popper);
|
||||
e.instance.reference === t && (t = Fe(t)); var n = lt("transform"),
|
||||
o = e.instance.popper.style,
|
||||
r = o.top,
|
||||
s = o.left,
|
||||
a = o[n];
|
||||
o.top = "", o.left = "", o[n] = ""; var l = Ze(e.instance.popper, e.instance.reference, i.padding, t, e.positionFixed);
|
||||
o.top = r, o.left = s, o[n] = a, i.boundaries = l; var c = i.priority,
|
||||
h = e.offsets.popper,
|
||||
u = { primary: function(e) { var t = h[e]; return h[e] < l[e] && !i.escapeWithReference && (t = Math.max(h[e], l[e])), Ye({}, e, t) }, secondary: function(e) { var t = "right" === e ? "left" : "top",
|
||||
n = h[t]; return h[e] > l[e] && !i.escapeWithReference && (n = Math.min(h[t], l[e] - ("right" === e ? h.width : h.height))), Ye({}, t, n) } }; return c.forEach(function(e) { var t = -1 !== ["left", "top"].indexOf(e) ? "primary" : "secondary";
|
||||
h = ze({}, h, u[t](e)) }), e.offsets.popper = h, e }, priority: ["left", "right", "top", "bottom"], padding: 5, boundariesElement: "scrollParent" }, keepTogether: { order: 400, enabled: !0, fn: function(e) { var t = e.offsets,
|
||||
n = t.popper,
|
||||
i = t.reference,
|
||||
o = e.placement.split("-")[0],
|
||||
r = Math.floor,
|
||||
s = -1 !== ["top", "bottom"].indexOf(o),
|
||||
a = s ? "right" : "bottom",
|
||||
l = s ? "left" : "top",
|
||||
c = s ? "width" : "height"; return n[a] < r(i[l]) && (e.offsets.popper[l] = r(i[l]) - n[c]), n[l] > r(i[a]) && (e.offsets.popper[l] = r(i[a])), e } }, arrow: { order: 500, enabled: !0, fn: function(e, t) { var n; if (!gt(e.instance.modifiers, "arrow", "keepTogether")) return e; var i = t.element; if ("string" == typeof i) { if (!(i = e.instance.popper.querySelector(i))) return e } else if (!e.instance.popper.contains(i)) return console.warn("WARNING: `arrow.element` must be child of its popper element!"), e; var o = e.placement.split("-")[0],
|
||||
r = e.offsets,
|
||||
s = r.popper,
|
||||
a = r.reference,
|
||||
l = -1 !== ["left", "right"].indexOf(o),
|
||||
c = l ? "height" : "width",
|
||||
h = l ? "Top" : "Left",
|
||||
u = h.toLowerCase(),
|
||||
f = l ? "left" : "top",
|
||||
d = l ? "bottom" : "right",
|
||||
p = nt(i)[c];
|
||||
a[d] - p < s[u] && (e.offsets.popper[u] -= s[u] - (a[d] - p)), a[u] + p > s[d] && (e.offsets.popper[u] += a[u] + p - s[d]), e.offsets.popper = Xe(e.offsets.popper); var m = a[u] + a[c] / 2 - p / 2,
|
||||
g = ke(e.instance.popper),
|
||||
_ = parseFloat(g["margin" + h], 10),
|
||||
v = parseFloat(g["border" + h + "Width"], 10),
|
||||
y = m - e.offsets.popper[u] - _ - v; return y = Math.max(Math.min(s[c] - p, y), 0), e.arrowElement = i, e.offsets.arrow = (Ye(n = {}, u, Math.round(y)), Ye(n, f, ""), n), e }, element: "[x-arrow]" }, flip: { order: 600, enabled: !0, fn: function(m, g) { if (at(m.instance.modifiers, "inner")) return m; if (m.flipped && m.placement === m.originalPlacement) return m; var _ = Ze(m.instance.popper, m.instance.reference, g.padding, g.boundariesElement, m.positionFixed),
|
||||
v = m.placement.split("-")[0],
|
||||
y = it(v),
|
||||
E = m.placement.split("-")[1] || "",
|
||||
b = []; switch (g.behavior) {
|
||||
case Et:
|
||||
b = [v, y]; break;
|
||||
case bt:
|
||||
b = yt(v); break;
|
||||
case wt:
|
||||
b = yt(v, !0); break;
|
||||
default:
|
||||
b = g.behavior } return b.forEach(function(e, t) { if (v !== e || b.length === t + 1) return m;
|
||||
v = m.placement.split("-")[0], y = it(v); var n = m.offsets.popper,
|
||||
i = m.offsets.reference,
|
||||
o = Math.floor,
|
||||
r = "left" === v && o(n.right) > o(i.left) || "right" === v && o(n.left) < o(i.right) || "top" === v && o(n.bottom) > o(i.top) || "bottom" === v && o(n.top) < o(i.bottom),
|
||||
s = o(n.left) < o(_.left),
|
||||
a = o(n.right) > o(_.right),
|
||||
l = o(n.top) < o(_.top),
|
||||
c = o(n.bottom) > o(_.bottom),
|
||||
h = "left" === v && s || "right" === v && a || "top" === v && l || "bottom" === v && c,
|
||||
u = -1 !== ["top", "bottom"].indexOf(v),
|
||||
f = !!g.flipVariations && (u && "start" === E && s || u && "end" === E && a || !u && "start" === E && l || !u && "end" === E && c),
|
||||
d = !!g.flipVariationsByContent && (u && "start" === E && a || u && "end" === E && s || !u && "start" === E && c || !u && "end" === E && l),
|
||||
p = f || d;
|
||||
(r || h || p) && (m.flipped = !0, (r || h) && (v = b[t + 1]), p && (E = function(e) { return "end" === e ? "start" : "start" === e ? "end" : e }(E)), m.placement = v + (E ? "-" + E : ""), m.offsets.popper = ze({}, m.offsets.popper, ot(m.instance.popper, m.offsets.reference, m.placement)), m = st(m.instance.modifiers, m, "flip")) }), m }, behavior: "flip", padding: 5, boundariesElement: "viewport", flipVariations: !1, flipVariationsByContent: !1 }, inner: { order: 700, enabled: !1, fn: function(e) { var t = e.placement,
|
||||
n = t.split("-")[0],
|
||||
i = e.offsets,
|
||||
o = i.popper,
|
||||
r = i.reference,
|
||||
s = -1 !== ["left", "right"].indexOf(n),
|
||||
a = -1 === ["top", "left"].indexOf(n); return o[s ? "left" : "top"] = r[n] - (a ? o[s ? "width" : "height"] : 0), e.placement = it(t), e.offsets.popper = Xe(o), e } }, hide: { order: 800, enabled: !0, fn: function(e) { if (!gt(e.instance.modifiers, "hide", "preventOverflow")) return e; var t = e.offsets.reference,
|
||||
n = rt(e.instance.modifiers, function(e) { return "preventOverflow" === e.name }).boundaries; if (t.bottom < n.top || t.left > n.right || t.top > n.bottom || t.right < n.left) { if (!0 === e.hide) return e;
|
||||
e.hide = !0, e.attributes["x-out-of-boundaries"] = "" } else { if (!1 === e.hide) return e;
|
||||
e.hide = !1, e.attributes["x-out-of-boundaries"] = !1 } return e } }, computeStyle: { order: 850, enabled: !0, fn: function(e, t) { var n = t.x,
|
||||
i = t.y,
|
||||
o = e.offsets.popper,
|
||||
r = rt(e.instance.modifiers, function(e) { return "applyStyle" === e.name }).gpuAcceleration;
|
||||
void 0 !== r && console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!"); var s = void 0 !== r ? r : t.gpuAcceleration,
|
||||
a = Fe(e.instance.popper),
|
||||
l = Ge(a),
|
||||
c = { position: o.position },
|
||||
h = pt(e, window.devicePixelRatio < 2 || !mt),
|
||||
u = "bottom" === n ? "top" : "bottom",
|
||||
f = "right" === i ? "left" : "right",
|
||||
d = lt("transform"),
|
||||
p = void 0,
|
||||
m = void 0; if (m = "bottom" == u ? "HTML" === a.nodeName ? -a.clientHeight + h.bottom : -l.height + h.bottom : h.top, p = "right" == f ? "HTML" === a.nodeName ? -a.clientWidth + h.right : -l.width + h.right : h.left, s && d) c[d] = "translate3d(" + p + "px, " + m + "px, 0)", c[u] = 0, c[f] = 0, c.willChange = "transform";
|
||||
else { var g = "bottom" == u ? -1 : 1,
|
||||
_ = "right" == f ? -1 : 1;
|
||||
c[u] = m * g, c[f] = p * _, c.willChange = u + ", " + f } var v = { "x-placement": e.placement }; return e.attributes = ze({}, v, e.attributes), e.styles = ze({}, c, e.styles), e.arrowStyles = ze({}, e.offsets.arrow, e.arrowStyles), e }, gpuAcceleration: !0, x: "bottom", y: "right" }, applyStyle: { order: 900, enabled: !0, fn: function(e) { return dt(e.instance.popper, e.styles),
|
||||
function(t, n) { Object.keys(n).forEach(function(e) {!1 !== n[e] ? t.setAttribute(e, n[e]) : t.removeAttribute(e) }) }(e.instance.popper, e.attributes), e.arrowElement && Object.keys(e.arrowStyles).length && dt(e.arrowElement, e.arrowStyles), e }, onLoad: function(e, t, n, i, o) { var r = tt(o, t, e, n.positionFixed),
|
||||
s = et(n.placement, r, t, e, n.modifiers.flip.boundariesElement, n.modifiers.flip.padding); return t.setAttribute("x-placement", s), dt(t, { position: n.positionFixed ? "fixed" : "absolute" }), n }, gpuAcceleration: void 0 } } },
|
||||
St = (Qe(Dt, [{ key: "update", value: function() { return function() { if (!this.state.isDestroyed) { var e = { instance: this, styles: {}, arrowStyles: {}, attributes: {}, flipped: !1, offsets: {} };
|
||||
e.offsets.reference = tt(this.state, this.popper, this.reference, this.options.positionFixed), e.placement = et(this.options.placement, e.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding), e.originalPlacement = e.placement, e.positionFixed = this.options.positionFixed, e.offsets.popper = ot(this.popper, e.offsets.reference, e.placement), e.offsets.popper.position = this.options.positionFixed ? "fixed" : "absolute", e = st(this.modifiers, e), this.state.isCreated ? this.options.onUpdate(e) : (this.state.isCreated = !0, this.options.onCreate(e)) } }.call(this) } }, { key: "destroy", value: function() { return function() { return this.state.isDestroyed = !0, at(this.modifiers, "applyStyle") && (this.popper.removeAttribute("x-placement"), this.popper.style.position = "", this.popper.style.top = "", this.popper.style.left = "", this.popper.style.right = "", this.popper.style.bottom = "", this.popper.style.willChange = "", this.popper.style[lt("transform")] = ""), this.disableEventListeners(), this.options.removeOnDestroy && this.popper.parentNode.removeChild(this.popper), this }.call(this) } }, { key: "enableEventListeners", value: function() { return function() { this.state.eventsEnabled || (this.state = ht(this.reference, this.options, this.state, this.scheduleUpdate)) }.call(this) } }, { key: "disableEventListeners", value: function() { return ut.call(this) } }]), Dt);
|
||||
|
||||
function Dt(e, t) { var n = this,
|
||||
i = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : {};! function(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") }(this, Dt), this.scheduleUpdate = function() { return requestAnimationFrame(n.update) }, this.update = Oe(this.update.bind(this)), this.options = ze({}, Dt.Defaults, i), this.state = { isDestroyed: !1, isCreated: !1, scrollParents: [] }, this.reference = e && e.jquery ? e[0] : e, this.popper = t && t.jquery ? t[0] : t, this.options.modifiers = {}, Object.keys(ze({}, Dt.Defaults.modifiers, i.modifiers)).forEach(function(e) { n.options.modifiers[e] = ze({}, Dt.Defaults.modifiers[e] || {}, i.modifiers ? i.modifiers[e] : {}) }), this.modifiers = Object.keys(this.options.modifiers).map(function(e) { return ze({ name: e }, n.options.modifiers[e]) }).sort(function(e, t) { return e.order - t.order }), this.modifiers.forEach(function(e) { e.enabled && Ne(e.onLoad) && e.onLoad(n.reference, n.popper, n.options, e, n.state) }), this.update(); var o = this.options.eventsEnabled;
|
||||
o && this.enableEventListeners(), this.state.eventsEnabled = o }
|
||||
St.Utils = ("undefined" != typeof window ? window : global).PopperUtils, St.placements = _t, St.Defaults = Ct; var It = "dropdown",
|
||||
At = "bs.dropdown",
|
||||
Ot = "." + At,
|
||||
Nt = ".data-api",
|
||||
kt = p.fn[It],
|
||||
Lt = new RegExp("38|40|27"),
|
||||
Pt = { HIDE: "hide" + Ot, HIDDEN: "hidden" + Ot, SHOW: "show" + Ot, SHOWN: "shown" + Ot, CLICK: "click" + Ot, CLICK_DATA_API: "click" + Ot + Nt, KEYDOWN_DATA_API: "keydown" + Ot + Nt, KEYUP_DATA_API: "keyup" + Ot + Nt },
|
||||
xt = "disabled",
|
||||
jt = "show",
|
||||
Ht = "dropup",
|
||||
Rt = "dropright",
|
||||
Ft = "dropleft",
|
||||
Mt = "dropdown-menu-right",
|
||||
Wt = "position-static",
|
||||
Ut = '[data-toggle="dropdown"]',
|
||||
Bt = ".dropdown form",
|
||||
qt = ".dropdown-menu",
|
||||
Kt = ".navbar-nav",
|
||||
Qt = ".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",
|
||||
Vt = "top-start",
|
||||
Yt = "top-end",
|
||||
zt = "bottom-start",
|
||||
Xt = "bottom-end",
|
||||
Gt = "right-start",
|
||||
$t = "left-start",
|
||||
Jt = { offset: 0, flip: !0, boundary: "scrollParent", reference: "toggle", display: "dynamic", popperConfig: null },
|
||||
Zt = { offset: "(number|string|function)", flip: "boolean", boundary: "(string|element)", reference: "(string|element)", display: "string", popperConfig: "(null|object)" },
|
||||
en = function() {
|
||||
function c(e, t) { this._element = e, this._popper = null, this._config = this._getConfig(t), this._menu = this._getMenuElement(), this._inNavbar = this._detectNavbar(), this._addEventListeners() } var e = c.prototype; return e.toggle = function() { if (!this._element.disabled && !p(this._element).hasClass(xt)) { var e = p(this._menu).hasClass(jt);
|
||||
c._clearMenus(), e || this.show(!0) } }, e.show = function(e) { if (void 0 === e && (e = !1), !(this._element.disabled || p(this._element).hasClass(xt) || p(this._menu).hasClass(jt))) { var t = { relatedTarget: this._element },
|
||||
n = p.Event(Pt.SHOW, t),
|
||||
i = c._getParentFromElement(this._element); if (p(i).trigger(n), !n.isDefaultPrevented()) { if (!this._inNavbar && e) { if ("undefined" == typeof St) throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)"); var o = this._element; "parent" === this._config.reference ? o = i : m.isElement(this._config.reference) && (o = this._config.reference, "undefined" != typeof this._config.reference.jquery && (o = this._config.reference[0])), "scrollParent" !== this._config.boundary && p(i).addClass(Wt), this._popper = new St(o, this._menu, this._getPopperConfig()) } "ontouchstart" in document.documentElement && 0 === p(i).closest(Kt).length && p(document.body).children().on("mouseover", null, p.noop), this._element.focus(), this._element.setAttribute("aria-expanded", !0), p(this._menu).toggleClass(jt), p(i).toggleClass(jt).trigger(p.Event(Pt.SHOWN, t)) } } }, e.hide = function() { if (!this._element.disabled && !p(this._element).hasClass(xt) && p(this._menu).hasClass(jt)) { var e = { relatedTarget: this._element },
|
||||
t = p.Event(Pt.HIDE, e),
|
||||
n = c._getParentFromElement(this._element);
|
||||
p(n).trigger(t), t.isDefaultPrevented() || (this._popper && this._popper.destroy(), p(this._menu).toggleClass(jt), p(n).toggleClass(jt).trigger(p.Event(Pt.HIDDEN, e))) } }, e.dispose = function() { p.removeData(this._element, At), p(this._element).off(Ot), this._element = null, (this._menu = null) !== this._popper && (this._popper.destroy(), this._popper = null) }, e.update = function() { this._inNavbar = this._detectNavbar(), null !== this._popper && this._popper.scheduleUpdate() }, e._addEventListeners = function() { var t = this;
|
||||
p(this._element).on(Pt.CLICK, function(e) { e.preventDefault(), e.stopPropagation(), t.toggle() }) }, e._getConfig = function(e) { return e = l({}, this.constructor.Default, {}, p(this._element).data(), {}, e), m.typeCheckConfig(It, e, this.constructor.DefaultType), e }, e._getMenuElement = function() { if (!this._menu) { var e = c._getParentFromElement(this._element);
|
||||
e && (this._menu = e.querySelector(qt)) } return this._menu }, e._getPlacement = function() { var e = p(this._element.parentNode),
|
||||
t = zt; return e.hasClass(Ht) ? (t = Vt, p(this._menu).hasClass(Mt) && (t = Yt)) : e.hasClass(Rt) ? t = Gt : e.hasClass(Ft) ? t = $t : p(this._menu).hasClass(Mt) && (t = Xt), t }, e._detectNavbar = function() { return 0 < p(this._element).closest(".navbar").length }, e._getOffset = function() { var t = this,
|
||||
e = {}; return "function" == typeof this._config.offset ? e.fn = function(e) { return e.offsets = l({}, e.offsets, {}, t._config.offset(e.offsets, t._element) || {}), e } : e.offset = this._config.offset, e }, e._getPopperConfig = function() { var e = { placement: this._getPlacement(), modifiers: { offset: this._getOffset(), flip: { enabled: this._config.flip }, preventOverflow: { boundariesElement: this._config.boundary } } }; return "static" === this._config.display && (e.modifiers.applyStyle = { enabled: !1 }), l({}, e, {}, this._config.popperConfig) }, c._jQueryInterface = function(t) { return this.each(function() { var e = p(this).data(At); if (e || (e = new c(this, "object" == typeof t ? t : null), p(this).data(At, e)), "string" == typeof t) { if ("undefined" == typeof e[t]) throw new TypeError('No method named "' + t + '"');
|
||||
e[t]() } }) }, c._clearMenus = function(e) { if (!e || 3 !== e.which && ("keyup" !== e.type || 9 === e.which))
|
||||
for (var t = [].slice.call(document.querySelectorAll(Ut)), n = 0, i = t.length; n < i; n++) { var o = c._getParentFromElement(t[n]),
|
||||
r = p(t[n]).data(At),
|
||||
s = { relatedTarget: t[n] }; if (e && "click" === e.type && (s.clickEvent = e), r) { var a = r._menu; if (p(o).hasClass(jt) && !(e && ("click" === e.type && /input|textarea/i.test(e.target.tagName) || "keyup" === e.type && 9 === e.which) && p.contains(o, e.target))) { var l = p.Event(Pt.HIDE, s);
|
||||
p(o).trigger(l), l.isDefaultPrevented() || ("ontouchstart" in document.documentElement && p(document.body).children().off("mouseover", null, p.noop), t[n].setAttribute("aria-expanded", "false"), r._popper && r._popper.destroy(), p(a).removeClass(jt), p(o).removeClass(jt).trigger(p.Event(Pt.HIDDEN, s))) } } } }, c._getParentFromElement = function(e) { var t, n = m.getSelectorFromElement(e); return n && (t = document.querySelector(n)), t || e.parentNode }, c._dataApiKeydownHandler = function(e) { if ((/input|textarea/i.test(e.target.tagName) ? !(32 === e.which || 27 !== e.which && (40 !== e.which && 38 !== e.which || p(e.target).closest(qt).length)) : Lt.test(e.which)) && (e.preventDefault(), e.stopPropagation(), !this.disabled && !p(this).hasClass(xt))) { var t = c._getParentFromElement(this),
|
||||
n = p(t).hasClass(jt); if (n || 27 !== e.which)
|
||||
if (n && (!n || 27 !== e.which && 32 !== e.which)) { var i = [].slice.call(t.querySelectorAll(Qt)).filter(function(e) { return p(e).is(":visible") }); if (0 !== i.length) { var o = i.indexOf(e.target);
|
||||
38 === e.which && 0 < o && o--, 40 === e.which && o < i.length - 1 && o++, o < 0 && (o = 0), i[o].focus() } } else { if (27 === e.which) { var r = t.querySelector(Ut);
|
||||
p(r).trigger("focus") }
|
||||
p(this).trigger("click") } } }, s(c, null, [{ key: "VERSION", get: function() { return "4.4.1" } }, { key: "Default", get: function() { return Jt } }, { key: "DefaultType", get: function() { return Zt } }]), c }();
|
||||
p(document).on(Pt.KEYDOWN_DATA_API, Ut, en._dataApiKeydownHandler).on(Pt.KEYDOWN_DATA_API, qt, en._dataApiKeydownHandler).on(Pt.CLICK_DATA_API + " " + Pt.KEYUP_DATA_API, en._clearMenus).on(Pt.CLICK_DATA_API, Ut, function(e) { e.preventDefault(), e.stopPropagation(), en._jQueryInterface.call(p(this), "toggle") }).on(Pt.CLICK_DATA_API, Bt, function(e) { e.stopPropagation() }), p.fn[It] = en._jQueryInterface, p.fn[It].Constructor = en, p.fn[It].noConflict = function() { return p.fn[It] = kt, en._jQueryInterface }; var tn = "modal",
|
||||
nn = "bs.modal",
|
||||
on = "." + nn,
|
||||
rn = p.fn[tn],
|
||||
sn = { backdrop: !0, keyboard: !0, focus: !0, show: !0 },
|
||||
an = { backdrop: "(boolean|string)", keyboard: "boolean", focus: "boolean", show: "boolean" },
|
||||
ln = { HIDE: "hide" + on, HIDE_PREVENTED: "hidePrevented" + on, HIDDEN: "hidden" + on, SHOW: "show" + on, SHOWN: "shown" + on, FOCUSIN: "focusin" + on, RESIZE: "resize" + on, CLICK_DISMISS: "click.dismiss" + on, KEYDOWN_DISMISS: "keydown.dismiss" + on, MOUSEUP_DISMISS: "mouseup.dismiss" + on, MOUSEDOWN_DISMISS: "mousedown.dismiss" + on, CLICK_DATA_API: "click" + on + ".data-api" },
|
||||
cn = "modal-dialog-scrollable",
|
||||
hn = "modal-scrollbar-measure",
|
||||
un = "modal-backdrop",
|
||||
fn = "modal-open",
|
||||
dn = "fade",
|
||||
pn = "show",
|
||||
mn = "modal-static",
|
||||
gn = ".modal-dialog",
|
||||
_n = ".modal-body",
|
||||
vn = '[data-toggle="modal"]',
|
||||
yn = '[data-dismiss="modal"]',
|
||||
En = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",
|
||||
bn = ".sticky-top",
|
||||
wn = function() {
|
||||
function o(e, t) { this._config = this._getConfig(t), this._element = e, this._dialog = e.querySelector(gn), this._backdrop = null, this._isShown = !1, this._isBodyOverflowing = !1, this._ignoreBackdropClick = !1, this._isTransitioning = !1, this._scrollbarWidth = 0 } var e = o.prototype; return e.toggle = function(e) { return this._isShown ? this.hide() : this.show(e) }, e.show = function(e) { var t = this; if (!this._isShown && !this._isTransitioning) { p(this._element).hasClass(dn) && (this._isTransitioning = !0); var n = p.Event(ln.SHOW, { relatedTarget: e });
|
||||
p(this._element).trigger(n), this._isShown || n.isDefaultPrevented() || (this._isShown = !0, this._checkScrollbar(), this._setScrollbar(), this._adjustDialog(), this._setEscapeEvent(), this._setResizeEvent(), p(this._element).on(ln.CLICK_DISMISS, yn, function(e) { return t.hide(e) }), p(this._dialog).on(ln.MOUSEDOWN_DISMISS, function() { p(t._element).one(ln.MOUSEUP_DISMISS, function(e) { p(e.target).is(t._element) && (t._ignoreBackdropClick = !0) }) }), this._showBackdrop(function() { return t._showElement(e) })) } }, e.hide = function(e) { var t = this; if (e && e.preventDefault(), this._isShown && !this._isTransitioning) { var n = p.Event(ln.HIDE); if (p(this._element).trigger(n), this._isShown && !n.isDefaultPrevented()) { this._isShown = !1; var i = p(this._element).hasClass(dn); if (i && (this._isTransitioning = !0), this._setEscapeEvent(), this._setResizeEvent(), p(document).off(ln.FOCUSIN), p(this._element).removeClass(pn), p(this._element).off(ln.CLICK_DISMISS), p(this._dialog).off(ln.MOUSEDOWN_DISMISS), i) { var o = m.getTransitionDurationFromElement(this._element);
|
||||
p(this._element).one(m.TRANSITION_END, function(e) { return t._hideModal(e) }).emulateTransitionEnd(o) } else this._hideModal() } } }, e.dispose = function() {
|
||||
[window, this._element, this._dialog].forEach(function(e) { return p(e).off(on) }), p(document).off(ln.FOCUSIN), p.removeData(this._element, nn), this._config = null, this._element = null, this._dialog = null, this._backdrop = null, this._isShown = null, this._isBodyOverflowing = null, this._ignoreBackdropClick = null, this._isTransitioning = null, this._scrollbarWidth = null }, e.handleUpdate = function() { this._adjustDialog() }, e._getConfig = function(e) { return e = l({}, sn, {}, e), m.typeCheckConfig(tn, e, an), e }, e._triggerBackdropTransition = function() { var e = this; if ("static" === this._config.backdrop) { var t = p.Event(ln.HIDE_PREVENTED); if (p(this._element).trigger(t), t.defaultPrevented) return;
|
||||
this._element.classList.add(mn); var n = m.getTransitionDurationFromElement(this._element);
|
||||
p(this._element).one(m.TRANSITION_END, function() { e._element.classList.remove(mn) }).emulateTransitionEnd(n), this._element.focus() } else this.hide() }, e._showElement = function(e) { var t = this,
|
||||
n = p(this._element).hasClass(dn),
|
||||
i = this._dialog ? this._dialog.querySelector(_n) : null;
|
||||
this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE || document.body.appendChild(this._element), this._element.style.display = "block", this._element.removeAttribute("aria-hidden"), this._element.setAttribute("aria-modal", !0), p(this._dialog).hasClass(cn) && i ? i.scrollTop = 0 : this._element.scrollTop = 0, n && m.reflow(this._element), p(this._element).addClass(pn), this._config.focus && this._enforceFocus();
|
||||
|
||||
function o() { t._config.focus && t._element.focus(), t._isTransitioning = !1, p(t._element).trigger(r) } var r = p.Event(ln.SHOWN, { relatedTarget: e }); if (n) { var s = m.getTransitionDurationFromElement(this._dialog);
|
||||
p(this._dialog).one(m.TRANSITION_END, o).emulateTransitionEnd(s) } else o() }, e._enforceFocus = function() { var t = this;
|
||||
p(document).off(ln.FOCUSIN).on(ln.FOCUSIN, function(e) { document !== e.target && t._element !== e.target && 0 === p(t._element).has(e.target).length && t._element.focus() }) }, e._setEscapeEvent = function() { var t = this;
|
||||
this._isShown && this._config.keyboard ? p(this._element).on(ln.KEYDOWN_DISMISS, function(e) { 27 === e.which && t._triggerBackdropTransition() }) : this._isShown || p(this._element).off(ln.KEYDOWN_DISMISS) }, e._setResizeEvent = function() { var t = this;
|
||||
this._isShown ? p(window).on(ln.RESIZE, function(e) { return t.handleUpdate(e) }) : p(window).off(ln.RESIZE) }, e._hideModal = function() { var e = this;
|
||||
this._element.style.display = "none", this._element.setAttribute("aria-hidden", !0), this._element.removeAttribute("aria-modal"), this._isTransitioning = !1, this._showBackdrop(function() { p(document.body).removeClass(fn), e._resetAdjustments(), e._resetScrollbar(), p(e._element).trigger(ln.HIDDEN) }) }, e._removeBackdrop = function() { this._backdrop && (p(this._backdrop).remove(), this._backdrop = null) }, e._showBackdrop = function(e) { var t = this,
|
||||
n = p(this._element).hasClass(dn) ? dn : ""; if (this._isShown && this._config.backdrop) { if (this._backdrop = document.createElement("div"), this._backdrop.className = un, n && this._backdrop.classList.add(n), p(this._backdrop).appendTo(document.body), p(this._element).on(ln.CLICK_DISMISS, function(e) { t._ignoreBackdropClick ? t._ignoreBackdropClick = !1 : e.target === e.currentTarget && t._triggerBackdropTransition() }), n && m.reflow(this._backdrop), p(this._backdrop).addClass(pn), !e) return; if (!n) return void e(); var i = m.getTransitionDurationFromElement(this._backdrop);
|
||||
p(this._backdrop).one(m.TRANSITION_END, e).emulateTransitionEnd(i) } else if (!this._isShown && this._backdrop) { p(this._backdrop).removeClass(pn); var o = function() { t._removeBackdrop(), e && e() }; if (p(this._element).hasClass(dn)) { var r = m.getTransitionDurationFromElement(this._backdrop);
|
||||
p(this._backdrop).one(m.TRANSITION_END, o).emulateTransitionEnd(r) } else o() } else e && e() }, e._adjustDialog = function() { var e = this._element.scrollHeight > document.documentElement.clientHeight;!this._isBodyOverflowing && e && (this._element.style.paddingLeft = this._scrollbarWidth + "px"), this._isBodyOverflowing && !e && (this._element.style.paddingRight = this._scrollbarWidth + "px") }, e._resetAdjustments = function() { this._element.style.paddingLeft = "", this._element.style.paddingRight = "" }, e._checkScrollbar = function() { var e = document.body.getBoundingClientRect();
|
||||
this._isBodyOverflowing = e.left + e.right < window.innerWidth, this._scrollbarWidth = this._getScrollbarWidth() }, e._setScrollbar = function() { var o = this; if (this._isBodyOverflowing) { var e = [].slice.call(document.querySelectorAll(En)),
|
||||
t = [].slice.call(document.querySelectorAll(bn));
|
||||
p(e).each(function(e, t) { var n = t.style.paddingRight,
|
||||
i = p(t).css("padding-right");
|
||||
p(t).data("padding-right", n).css("padding-right", parseFloat(i) + o._scrollbarWidth + "px") }), p(t).each(function(e, t) { var n = t.style.marginRight,
|
||||
i = p(t).css("margin-right");
|
||||
p(t).data("margin-right", n).css("margin-right", parseFloat(i) - o._scrollbarWidth + "px") }); var n = document.body.style.paddingRight,
|
||||
i = p(document.body).css("padding-right");
|
||||
p(document.body).data("padding-right", n).css("padding-right", parseFloat(i) + this._scrollbarWidth + "px") }
|
||||
p(document.body).addClass(fn) }, e._resetScrollbar = function() { var e = [].slice.call(document.querySelectorAll(En));
|
||||
p(e).each(function(e, t) { var n = p(t).data("padding-right");
|
||||
p(t).removeData("padding-right"), t.style.paddingRight = n || "" }); var t = [].slice.call(document.querySelectorAll("" + bn));
|
||||
p(t).each(function(e, t) { var n = p(t).data("margin-right"); "undefined" != typeof n && p(t).css("margin-right", n).removeData("margin-right") }); var n = p(document.body).data("padding-right");
|
||||
p(document.body).removeData("padding-right"), document.body.style.paddingRight = n || "" }, e._getScrollbarWidth = function() { var e = document.createElement("div");
|
||||
e.className = hn, document.body.appendChild(e); var t = e.getBoundingClientRect().width - e.clientWidth; return document.body.removeChild(e), t }, o._jQueryInterface = function(n, i) { return this.each(function() { var e = p(this).data(nn),
|
||||
t = l({}, sn, {}, p(this).data(), {}, "object" == typeof n && n ? n : {}); if (e || (e = new o(this, t), p(this).data(nn, e)), "string" == typeof n) { if ("undefined" == typeof e[n]) throw new TypeError('No method named "' + n + '"');
|
||||
e[n](i) } else t.show && e.show(i) }) }, s(o, null, [{ key: "VERSION", get: function() { return "4.4.1" } }, { key: "Default", get: function() { return sn } }]), o }();
|
||||
p(document).on(ln.CLICK_DATA_API, vn, function(e) { var t, n = this,
|
||||
i = m.getSelectorFromElement(this);
|
||||
i && (t = document.querySelector(i)); var o = p(t).data(nn) ? "toggle" : l({}, p(t).data(), {}, p(this).data()); "A" !== this.tagName && "AREA" !== this.tagName || e.preventDefault(); var r = p(t).one(ln.SHOW, function(e) { e.isDefaultPrevented() || r.one(ln.HIDDEN, function() { p(n).is(":visible") && n.focus() }) });
|
||||
wn._jQueryInterface.call(p(t), o, this) }), p.fn[tn] = wn._jQueryInterface, p.fn[tn].Constructor = wn, p.fn[tn].noConflict = function() { return p.fn[tn] = rn, wn._jQueryInterface }; var Tn = ["background", "cite", "href", "itemtype", "longdesc", "poster", "src", "xlink:href"],
|
||||
Cn = { "*": ["class", "dir", "id", "lang", "role", /^aria-[\w-]*$/i], a: ["target", "href", "title", "rel"], area: [], b: [], br: [], col: [], code: [], div: [], em: [], hr: [], h1: [], h2: [], h3: [], h4: [], h5: [], h6: [], i: [], img: ["src", "alt", "title", "width", "height"], li: [], ol: [], p: [], pre: [], s: [], small: [], span: [], sub: [], sup: [], strong: [], u: [], ul: [] },
|
||||
Sn = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,
|
||||
Dn = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
|
||||
|
||||
function In(e, r, t) { if (0 === e.length) return e; if (t && "function" == typeof t) return t(e); for (var n = (new window.DOMParser).parseFromString(e, "text/html"), s = Object.keys(r), a = [].slice.call(n.body.querySelectorAll("*")), i = function(e) { var t = a[e],
|
||||
n = t.nodeName.toLowerCase(); if (-1 === s.indexOf(t.nodeName.toLowerCase())) return t.parentNode.removeChild(t), "continue"; var i = [].slice.call(t.attributes),
|
||||
o = [].concat(r["*"] || [], r[n] || []);
|
||||
i.forEach(function(e) {! function(e, t) { var n = e.nodeName.toLowerCase(); if (-1 !== t.indexOf(n)) return -1 === Tn.indexOf(n) || Boolean(e.nodeValue.match(Sn) || e.nodeValue.match(Dn)); for (var i = t.filter(function(e) { return e instanceof RegExp }), o = 0, r = i.length; o < r; o++)
|
||||
if (n.match(i[o])) return !0;
|
||||
return !1 }(e, o) && t.removeAttribute(e.nodeName) }) }, o = 0, l = a.length; o < l; o++) i(o); return n.body.innerHTML } var An = "tooltip",
|
||||
On = "bs.tooltip",
|
||||
Nn = "." + On,
|
||||
kn = p.fn[An],
|
||||
Ln = "bs-tooltip",
|
||||
Pn = new RegExp("(^|\\s)" + Ln + "\\S+", "g"),
|
||||
xn = ["sanitize", "whiteList", "sanitizeFn"],
|
||||
jn = { animation: "boolean", template: "string", title: "(string|element|function)", trigger: "string", delay: "(number|object)", html: "boolean", selector: "(string|boolean)", placement: "(string|function)", offset: "(number|string|function)", container: "(string|element|boolean)", fallbackPlacement: "(string|array)", boundary: "(string|element)", sanitize: "boolean", sanitizeFn: "(null|function)", whiteList: "object", popperConfig: "(null|object)" },
|
||||
Hn = { AUTO: "auto", TOP: "top", RIGHT: "right", BOTTOM: "bottom", LEFT: "left" },
|
||||
Rn = { animation: !0, template: '<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>', trigger: "hover focus", title: "", delay: 0, html: !1, selector: !1, placement: "top", offset: 0, container: !1, fallbackPlacement: "flip", boundary: "scrollParent", sanitize: !0, sanitizeFn: null, whiteList: Cn, popperConfig: null },
|
||||
Fn = "show",
|
||||
Mn = "out",
|
||||
Wn = { HIDE: "hide" + Nn, HIDDEN: "hidden" + Nn, SHOW: "show" + Nn, SHOWN: "shown" + Nn, INSERTED: "inserted" + Nn, CLICK: "click" + Nn, FOCUSIN: "focusin" + Nn, FOCUSOUT: "focusout" + Nn, MOUSEENTER: "mouseenter" + Nn, MOUSELEAVE: "mouseleave" + Nn },
|
||||
Un = "fade",
|
||||
Bn = "show",
|
||||
qn = ".tooltip-inner",
|
||||
Kn = ".arrow",
|
||||
Qn = "hover",
|
||||
Vn = "focus",
|
||||
Yn = "click",
|
||||
zn = "manual",
|
||||
Xn = function() {
|
||||
function i(e, t) { if ("undefined" == typeof St) throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");
|
||||
this._isEnabled = !0, this._timeout = 0, this._hoverState = "", this._activeTrigger = {}, this._popper = null, this.element = e, this.config = this._getConfig(t), this.tip = null, this._setListeners() } var e = i.prototype; return e.enable = function() { this._isEnabled = !0 }, e.disable = function() { this._isEnabled = !1 }, e.toggleEnabled = function() { this._isEnabled = !this._isEnabled }, e.toggle = function(e) { if (this._isEnabled)
|
||||
if (e) { var t = this.constructor.DATA_KEY,
|
||||
n = p(e.currentTarget).data(t);
|
||||
n || (n = new this.constructor(e.currentTarget, this._getDelegateConfig()), p(e.currentTarget).data(t, n)), n._activeTrigger.click = !n._activeTrigger.click, n._isWithActiveTrigger() ? n._enter(null, n) : n._leave(null, n) } else { if (p(this.getTipElement()).hasClass(Bn)) return void this._leave(null, this);
|
||||
this._enter(null, this) } }, e.dispose = function() { clearTimeout(this._timeout), p.removeData(this.element, this.constructor.DATA_KEY), p(this.element).off(this.constructor.EVENT_KEY), p(this.element).closest(".modal").off("hide.bs.modal", this._hideModalHandler), this.tip && p(this.tip).remove(), this._isEnabled = null, this._timeout = null, this._hoverState = null, this._activeTrigger = null, this._popper && this._popper.destroy(), this._popper = null, this.element = null, this.config = null, this.tip = null }, e.show = function() { var t = this; if ("none" === p(this.element).css("display")) throw new Error("Please use show on visible elements"); var e = p.Event(this.constructor.Event.SHOW); if (this.isWithContent() && this._isEnabled) { p(this.element).trigger(e); var n = m.findShadowRoot(this.element),
|
||||
i = p.contains(null !== n ? n : this.element.ownerDocument.documentElement, this.element); if (e.isDefaultPrevented() || !i) return; var o = this.getTipElement(),
|
||||
r = m.getUID(this.constructor.NAME);
|
||||
o.setAttribute("id", r), this.element.setAttribute("aria-describedby", r), this.setContent(), this.config.animation && p(o).addClass(Un); var s = "function" == typeof this.config.placement ? this.config.placement.call(this, o, this.element) : this.config.placement,
|
||||
a = this._getAttachment(s);
|
||||
this.addAttachmentClass(a); var l = this._getContainer();
|
||||
p(o).data(this.constructor.DATA_KEY, this), p.contains(this.element.ownerDocument.documentElement, this.tip) || p(o).appendTo(l), p(this.element).trigger(this.constructor.Event.INSERTED), this._popper = new St(this.element, o, this._getPopperConfig(a)), p(o).addClass(Bn), "ontouchstart" in document.documentElement && p(document.body).children().on("mouseover", null, p.noop); var c = function() { t.config.animation && t._fixTransition(); var e = t._hoverState;
|
||||
t._hoverState = null, p(t.element).trigger(t.constructor.Event.SHOWN), e === Mn && t._leave(null, t) }; if (p(this.tip).hasClass(Un)) { var h = m.getTransitionDurationFromElement(this.tip);
|
||||
p(this.tip).one(m.TRANSITION_END, c).emulateTransitionEnd(h) } else c() } }, e.hide = function(e) {
|
||||
function t() { n._hoverState !== Fn && i.parentNode && i.parentNode.removeChild(i), n._cleanTipClass(), n.element.removeAttribute("aria-describedby"), p(n.element).trigger(n.constructor.Event.HIDDEN), null !== n._popper && n._popper.destroy(), e && e() } var n = this,
|
||||
i = this.getTipElement(),
|
||||
o = p.Event(this.constructor.Event.HIDE); if (p(this.element).trigger(o), !o.isDefaultPrevented()) { if (p(i).removeClass(Bn), "ontouchstart" in document.documentElement && p(document.body).children().off("mouseover", null, p.noop), this._activeTrigger[Yn] = !1, this._activeTrigger[Vn] = !1, this._activeTrigger[Qn] = !1, p(this.tip).hasClass(Un)) { var r = m.getTransitionDurationFromElement(i);
|
||||
p(i).one(m.TRANSITION_END, t).emulateTransitionEnd(r) } else t();
|
||||
this._hoverState = "" } }, e.update = function() { null !== this._popper && this._popper.scheduleUpdate() }, e.isWithContent = function() { return Boolean(this.getTitle()) }, e.addAttachmentClass = function(e) { p(this.getTipElement()).addClass(Ln + "-" + e) }, e.getTipElement = function() { return this.tip = this.tip || p(this.config.template)[0], this.tip }, e.setContent = function() { var e = this.getTipElement();
|
||||
this.setElementContent(p(e.querySelectorAll(qn)), this.getTitle()), p(e).removeClass(Un + " " + Bn) }, e.setElementContent = function(e, t) { "object" != typeof t || !t.nodeType && !t.jquery ? this.config.html ? (this.config.sanitize && (t = In(t, this.config.whiteList, this.config.sanitizeFn)), e.html(t)) : e.text(t) : this.config.html ? p(t).parent().is(e) || e.empty().append(t) : e.text(p(t).text()) }, e.getTitle = function() { var e = this.element.getAttribute("data-original-title"); return e = e || ("function" == typeof this.config.title ? this.config.title.call(this.element) : this.config.title) }, e._getPopperConfig = function(e) { var t = this; return l({}, { placement: e, modifiers: { offset: this._getOffset(), flip: { behavior: this.config.fallbackPlacement }, arrow: { element: Kn }, preventOverflow: { boundariesElement: this.config.boundary } }, onCreate: function(e) { e.originalPlacement !== e.placement && t._handlePopperPlacementChange(e) }, onUpdate: function(e) { return t._handlePopperPlacementChange(e) } }, {}, this.config.popperConfig) }, e._getOffset = function() { var t = this,
|
||||
e = {}; return "function" == typeof this.config.offset ? e.fn = function(e) { return e.offsets = l({}, e.offsets, {}, t.config.offset(e.offsets, t.element) || {}), e } : e.offset = this.config.offset, e }, e._getContainer = function() { return !1 === this.config.container ? document.body : m.isElement(this.config.container) ? p(this.config.container) : p(document).find(this.config.container) }, e._getAttachment = function(e) { return Hn[e.toUpperCase()] }, e._setListeners = function() { var i = this;
|
||||
this.config.trigger.split(" ").forEach(function(e) { if ("click" === e) p(i.element).on(i.constructor.Event.CLICK, i.config.selector, function(e) { return i.toggle(e) });
|
||||
else if (e !== zn) { var t = e === Qn ? i.constructor.Event.MOUSEENTER : i.constructor.Event.FOCUSIN,
|
||||
n = e === Qn ? i.constructor.Event.MOUSELEAVE : i.constructor.Event.FOCUSOUT;
|
||||
p(i.element).on(t, i.config.selector, function(e) { return i._enter(e) }).on(n, i.config.selector, function(e) { return i._leave(e) }) } }), this._hideModalHandler = function() { i.element && i.hide() }, p(this.element).closest(".modal").on("hide.bs.modal", this._hideModalHandler), this.config.selector ? this.config = l({}, this.config, { trigger: "manual", selector: "" }) : this._fixTitle() }, e._fixTitle = function() { var e = typeof this.element.getAttribute("data-original-title");!this.element.getAttribute("title") && "string" == e || (this.element.setAttribute("data-original-title", this.element.getAttribute("title") || ""), this.element.setAttribute("title", "")) }, e._enter = function(e, t) { var n = this.constructor.DATA_KEY;
|
||||
(t = t || p(e.currentTarget).data(n)) || (t = new this.constructor(e.currentTarget, this._getDelegateConfig()), p(e.currentTarget).data(n, t)), e && (t._activeTrigger["focusin" === e.type ? Vn : Qn] = !0), p(t.getTipElement()).hasClass(Bn) || t._hoverState === Fn ? t._hoverState = Fn : (clearTimeout(t._timeout), t._hoverState = Fn, t.config.delay && t.config.delay.show ? t._timeout = setTimeout(function() { t._hoverState === Fn && t.show() }, t.config.delay.show) : t.show()) }, e._leave = function(e, t) { var n = this.constructor.DATA_KEY;
|
||||
(t = t || p(e.currentTarget).data(n)) || (t = new this.constructor(e.currentTarget, this._getDelegateConfig()), p(e.currentTarget).data(n, t)), e && (t._activeTrigger["focusout" === e.type ? Vn : Qn] = !1), t._isWithActiveTrigger() || (clearTimeout(t._timeout), t._hoverState = Mn, t.config.delay && t.config.delay.hide ? t._timeout = setTimeout(function() { t._hoverState === Mn && t.hide() }, t.config.delay.hide) : t.hide()) }, e._isWithActiveTrigger = function() { for (var e in this._activeTrigger)
|
||||
if (this._activeTrigger[e]) return !0;
|
||||
return !1 }, e._getConfig = function(e) { var t = p(this.element).data(); return Object.keys(t).forEach(function(e) {-1 !== xn.indexOf(e) && delete t[e] }), "number" == typeof(e = l({}, this.constructor.Default, {}, t, {}, "object" == typeof e && e ? e : {})).delay && (e.delay = { show: e.delay, hide: e.delay }), "number" == typeof e.title && (e.title = e.title.toString()), "number" == typeof e.content && (e.content = e.content.toString()), m.typeCheckConfig(An, e, this.constructor.DefaultType), e.sanitize && (e.template = In(e.template, e.whiteList, e.sanitizeFn)), e }, e._getDelegateConfig = function() { var e = {}; if (this.config)
|
||||
for (var t in this.config) this.constructor.Default[t] !== this.config[t] && (e[t] = this.config[t]); return e }, e._cleanTipClass = function() { var e = p(this.getTipElement()),
|
||||
t = e.attr("class").match(Pn);
|
||||
null !== t && t.length && e.removeClass(t.join("")) }, e._handlePopperPlacementChange = function(e) { var t = e.instance;
|
||||
this.tip = t.popper, this._cleanTipClass(), this.addAttachmentClass(this._getAttachment(e.placement)) }, e._fixTransition = function() { var e = this.getTipElement(),
|
||||
t = this.config.animation;
|
||||
null === e.getAttribute("x-placement") && (p(e).removeClass(Un), this.config.animation = !1, this.hide(), this.show(), this.config.animation = t) }, i._jQueryInterface = function(n) { return this.each(function() { var e = p(this).data(On),
|
||||
t = "object" == typeof n && n; if ((e || !/dispose|hide/.test(n)) && (e || (e = new i(this, t), p(this).data(On, e)), "string" == typeof n)) { if ("undefined" == typeof e[n]) throw new TypeError('No method named "' + n + '"');
|
||||
e[n]() } }) }, s(i, null, [{ key: "VERSION", get: function() { return "4.4.1" } }, { key: "Default", get: function() { return Rn } }, { key: "NAME", get: function() { return An } }, { key: "DATA_KEY", get: function() { return On } }, { key: "Event", get: function() { return Wn } }, { key: "EVENT_KEY", get: function() { return Nn } }, { key: "DefaultType", get: function() { return jn } }]), i }();
|
||||
p.fn[An] = Xn._jQueryInterface, p.fn[An].Constructor = Xn, p.fn[An].noConflict = function() { return p.fn[An] = kn, Xn._jQueryInterface }; var Gn = "popover",
|
||||
$n = "bs.popover",
|
||||
Jn = "." + $n,
|
||||
Zn = p.fn[Gn],
|
||||
ei = "bs-popover",
|
||||
ti = new RegExp("(^|\\s)" + ei + "\\S+", "g"),
|
||||
ni = l({}, Xn.Default, { placement: "right", trigger: "click", content: "", template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>' }),
|
||||
ii = l({}, Xn.DefaultType, { content: "(string|element|function)" }),
|
||||
oi = "fade",
|
||||
ri = "show",
|
||||
si = ".popover-header",
|
||||
ai = ".popover-body",
|
||||
li = { HIDE: "hide" + Jn, HIDDEN: "hidden" + Jn, SHOW: "show" + Jn, SHOWN: "shown" + Jn, INSERTED: "inserted" + Jn, CLICK: "click" + Jn, FOCUSIN: "focusin" + Jn, FOCUSOUT: "focusout" + Jn, MOUSEENTER: "mouseenter" + Jn, MOUSELEAVE: "mouseleave" + Jn },
|
||||
ci = function(e) {
|
||||
function i() { return e.apply(this, arguments) || this }! function(e, t) { e.prototype = Object.create(t.prototype), (e.prototype.constructor = e).__proto__ = t }(i, e); var t = i.prototype; return t.isWithContent = function() { return this.getTitle() || this._getContent() }, t.addAttachmentClass = function(e) { p(this.getTipElement()).addClass(ei + "-" + e) }, t.getTipElement = function() { return this.tip = this.tip || p(this.config.template)[0], this.tip }, t.setContent = function() { var e = p(this.getTipElement());
|
||||
this.setElementContent(e.find(si), this.getTitle()); var t = this._getContent(); "function" == typeof t && (t = t.call(this.element)), this.setElementContent(e.find(ai), t), e.removeClass(oi + " " + ri) }, t._getContent = function() { return this.element.getAttribute("data-content") || this.config.content }, t._cleanTipClass = function() { var e = p(this.getTipElement()),
|
||||
t = e.attr("class").match(ti);
|
||||
null !== t && 0 < t.length && e.removeClass(t.join("")) }, i._jQueryInterface = function(n) { return this.each(function() { var e = p(this).data($n),
|
||||
t = "object" == typeof n ? n : null; if ((e || !/dispose|hide/.test(n)) && (e || (e = new i(this, t), p(this).data($n, e)), "string" == typeof n)) { if ("undefined" == typeof e[n]) throw new TypeError('No method named "' + n + '"');
|
||||
e[n]() } }) }, s(i, null, [{ key: "VERSION", get: function() { return "4.4.1" } }, { key: "Default", get: function() { return ni } }, { key: "NAME", get: function() { return Gn } }, { key: "DATA_KEY", get: function() { return $n } }, { key: "Event", get: function() { return li } }, { key: "EVENT_KEY", get: function() { return Jn } }, { key: "DefaultType", get: function() { return ii } }]), i }(Xn);
|
||||
p.fn[Gn] = ci._jQueryInterface, p.fn[Gn].Constructor = ci, p.fn[Gn].noConflict = function() { return p.fn[Gn] = Zn, ci._jQueryInterface }; var hi = "scrollspy",
|
||||
ui = "bs.scrollspy",
|
||||
fi = "." + ui,
|
||||
di = p.fn[hi],
|
||||
pi = { offset: 10, method: "auto", target: "" },
|
||||
mi = { offset: "number", method: "string", target: "(string|element)" },
|
||||
gi = { ACTIVATE: "activate" + fi, SCROLL: "scroll" + fi, LOAD_DATA_API: "load" + fi + ".data-api" },
|
||||
_i = "dropdown-item",
|
||||
vi = "active",
|
||||
yi = '[data-spy="scroll"]',
|
||||
Ei = ".nav, .list-group",
|
||||
bi = ".nav-link",
|
||||
wi = ".nav-item",
|
||||
Ti = ".list-group-item",
|
||||
Ci = ".dropdown",
|
||||
Si = ".dropdown-item",
|
||||
Di = ".dropdown-toggle",
|
||||
Ii = "offset",
|
||||
Ai = "position",
|
||||
Oi = function() {
|
||||
function n(e, t) { var n = this;
|
||||
this._element = e, this._scrollElement = "BODY" === e.tagName ? window : e, this._config = this._getConfig(t), this._selector = this._config.target + " " + bi + "," + this._config.target + " " + Ti + "," + this._config.target + " " + Si, this._offsets = [], this._targets = [], this._activeTarget = null, this._scrollHeight = 0, p(this._scrollElement).on(gi.SCROLL, function(e) { return n._process(e) }), this.refresh(), this._process() } var e = n.prototype; return e.refresh = function() { var t = this,
|
||||
e = this._scrollElement === this._scrollElement.window ? Ii : Ai,
|
||||
o = "auto" === this._config.method ? e : this._config.method,
|
||||
r = o === Ai ? this._getScrollTop() : 0;
|
||||
this._offsets = [], this._targets = [], this._scrollHeight = this._getScrollHeight(), [].slice.call(document.querySelectorAll(this._selector)).map(function(e) { var t, n = m.getSelectorFromElement(e); if (n && (t = document.querySelector(n)), t) { var i = t.getBoundingClientRect(); if (i.width || i.height) return [p(t)[o]().top + r, n] } return null }).filter(function(e) { return e }).sort(function(e, t) { return e[0] - t[0] }).forEach(function(e) { t._offsets.push(e[0]), t._targets.push(e[1]) }) }, e.dispose = function() { p.removeData(this._element, ui), p(this._scrollElement).off(fi), this._element = null, this._scrollElement = null, this._config = null, this._selector = null, this._offsets = null, this._targets = null, this._activeTarget = null, this._scrollHeight = null }, e._getConfig = function(e) { if ("string" != typeof(e = l({}, pi, {}, "object" == typeof e && e ? e : {})).target) { var t = p(e.target).attr("id");
|
||||
t || (t = m.getUID(hi), p(e.target).attr("id", t)), e.target = "#" + t } return m.typeCheckConfig(hi, e, mi), e }, e._getScrollTop = function() { return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop }, e._getScrollHeight = function() { return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight) }, e._getOffsetHeight = function() { return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height }, e._process = function() { var e = this._getScrollTop() + this._config.offset,
|
||||
t = this._getScrollHeight(),
|
||||
n = this._config.offset + t - this._getOffsetHeight(); if (this._scrollHeight !== t && this.refresh(), n <= e) { var i = this._targets[this._targets.length - 1];
|
||||
this._activeTarget !== i && this._activate(i) } else { if (this._activeTarget && e < this._offsets[0] && 0 < this._offsets[0]) return this._activeTarget = null, void this._clear(); for (var o = this._offsets.length; o--;) { this._activeTarget !== this._targets[o] && e >= this._offsets[o] && ("undefined" == typeof this._offsets[o + 1] || e < this._offsets[o + 1]) && this._activate(this._targets[o]) } } }, e._activate = function(t) { this._activeTarget = t, this._clear(); var e = this._selector.split(",").map(function(e) { return e + '[data-target="' + t + '"],' + e + '[href="' + t + '"]' }),
|
||||
n = p([].slice.call(document.querySelectorAll(e.join(","))));
|
||||
n.hasClass(_i) ? (n.closest(Ci).find(Di).addClass(vi), n.addClass(vi)) : (n.addClass(vi), n.parents(Ei).prev(bi + ", " + Ti).addClass(vi), n.parents(Ei).prev(wi).children(bi).addClass(vi)), p(this._scrollElement).trigger(gi.ACTIVATE, { relatedTarget: t }) }, e._clear = function() {
|
||||
[].slice.call(document.querySelectorAll(this._selector)).filter(function(e) { return e.classList.contains(vi) }).forEach(function(e) { return e.classList.remove(vi) }) }, n._jQueryInterface = function(t) { return this.each(function() { var e = p(this).data(ui); if (e || (e = new n(this, "object" == typeof t && t), p(this).data(ui, e)), "string" == typeof t) { if ("undefined" == typeof e[t]) throw new TypeError('No method named "' + t + '"');
|
||||
e[t]() } }) }, s(n, null, [{ key: "VERSION", get: function() { return "4.4.1" } }, { key: "Default", get: function() { return pi } }]), n }();
|
||||
p(window).on(gi.LOAD_DATA_API, function() { for (var e = [].slice.call(document.querySelectorAll(yi)), t = e.length; t--;) { var n = p(e[t]);
|
||||
Oi._jQueryInterface.call(n, n.data()) } }), p.fn[hi] = Oi._jQueryInterface, p.fn[hi].Constructor = Oi, p.fn[hi].noConflict = function() { return p.fn[hi] = di, Oi._jQueryInterface }; var Ni = "bs.tab",
|
||||
ki = "." + Ni,
|
||||
Li = p.fn.tab,
|
||||
Pi = { HIDE: "hide" + ki, HIDDEN: "hidden" + ki, SHOW: "show" + ki, SHOWN: "shown" + ki, CLICK_DATA_API: "click" + ki + ".data-api" },
|
||||
xi = "dropdown-menu",
|
||||
ji = "active",
|
||||
Hi = "disabled",
|
||||
Ri = "fade",
|
||||
Fi = "show",
|
||||
Mi = ".dropdown",
|
||||
Wi = ".nav, .list-group",
|
||||
Ui = ".active",
|
||||
Bi = "> li > .active",
|
||||
qi = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
|
||||
Ki = ".dropdown-toggle",
|
||||
Qi = "> .dropdown-menu .active",
|
||||
Vi = function() {
|
||||
function i(e) { this._element = e } var e = i.prototype; return e.show = function() { var n = this; if (!(this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && p(this._element).hasClass(ji) || p(this._element).hasClass(Hi))) { var e, i, t = p(this._element).closest(Wi)[0],
|
||||
o = m.getSelectorFromElement(this._element); if (t) { var r = "UL" === t.nodeName || "OL" === t.nodeName ? Bi : Ui;
|
||||
i = (i = p.makeArray(p(t).find(r)))[i.length - 1] } var s = p.Event(Pi.HIDE, { relatedTarget: this._element }),
|
||||
a = p.Event(Pi.SHOW, { relatedTarget: i }); if (i && p(i).trigger(s), p(this._element).trigger(a), !a.isDefaultPrevented() && !s.isDefaultPrevented()) { o && (e = document.querySelector(o)), this._activate(this._element, t); var l = function() { var e = p.Event(Pi.HIDDEN, { relatedTarget: n._element }),
|
||||
t = p.Event(Pi.SHOWN, { relatedTarget: i });
|
||||
p(i).trigger(e), p(n._element).trigger(t) };
|
||||
e ? this._activate(e, e.parentNode, l) : l() } } }, e.dispose = function() { p.removeData(this._element, Ni), this._element = null }, e._activate = function(e, t, n) {
|
||||
function i() { return o._transitionComplete(e, r, n) } var o = this,
|
||||
r = (!t || "UL" !== t.nodeName && "OL" !== t.nodeName ? p(t).children(Ui) : p(t).find(Bi))[0],
|
||||
s = n && r && p(r).hasClass(Ri); if (r && s) { var a = m.getTransitionDurationFromElement(r);
|
||||
p(r).removeClass(Fi).one(m.TRANSITION_END, i).emulateTransitionEnd(a) } else i() }, e._transitionComplete = function(e, t, n) { if (t) { p(t).removeClass(ji); var i = p(t.parentNode).find(Qi)[0];
|
||||
i && p(i).removeClass(ji), "tab" === t.getAttribute("role") && t.setAttribute("aria-selected", !1) } if (p(e).addClass(ji), "tab" === e.getAttribute("role") && e.setAttribute("aria-selected", !0), m.reflow(e), e.classList.contains(Ri) && e.classList.add(Fi), e.parentNode && p(e.parentNode).hasClass(xi)) { var o = p(e).closest(Mi)[0]; if (o) { var r = [].slice.call(o.querySelectorAll(Ki));
|
||||
p(r).addClass(ji) }
|
||||
e.setAttribute("aria-expanded", !0) }
|
||||
n && n() }, i._jQueryInterface = function(n) { return this.each(function() { var e = p(this),
|
||||
t = e.data(Ni); if (t || (t = new i(this), e.data(Ni, t)), "string" == typeof n) { if ("undefined" == typeof t[n]) throw new TypeError('No method named "' + n + '"');
|
||||
t[n]() } }) }, s(i, null, [{ key: "VERSION", get: function() { return "4.4.1" } }]), i }();
|
||||
p(document).on(Pi.CLICK_DATA_API, qi, function(e) { e.preventDefault(), Vi._jQueryInterface.call(p(this), "show") }), p.fn.tab = Vi._jQueryInterface, p.fn.tab.Constructor = Vi, p.fn.tab.noConflict = function() { return p.fn.tab = Li, Vi._jQueryInterface }; var Yi = "toast",
|
||||
zi = "bs.toast",
|
||||
Xi = "." + zi,
|
||||
Gi = p.fn[Yi],
|
||||
$i = { CLICK_DISMISS: "click.dismiss" + Xi, HIDE: "hide" + Xi, HIDDEN: "hidden" + Xi, SHOW: "show" + Xi, SHOWN: "shown" + Xi },
|
||||
Ji = "fade",
|
||||
Zi = "hide",
|
||||
eo = "show",
|
||||
to = "showing",
|
||||
no = { animation: "boolean", autohide: "boolean", delay: "number" },
|
||||
io = { animation: !0, autohide: !0, delay: 500 },
|
||||
oo = '[data-dismiss="toast"]',
|
||||
ro = function() {
|
||||
function i(e, t) { this._element = e, this._config = this._getConfig(t), this._timeout = null, this._setListeners() } var e = i.prototype; return e.show = function() { var e = this,
|
||||
t = p.Event($i.SHOW); if (p(this._element).trigger(t), !t.isDefaultPrevented()) { this._config.animation && this._element.classList.add(Ji); var n = function() { e._element.classList.remove(to), e._element.classList.add(eo), p(e._element).trigger($i.SHOWN), e._config.autohide && (e._timeout = setTimeout(function() { e.hide() }, e._config.delay)) }; if (this._element.classList.remove(Zi), m.reflow(this._element), this._element.classList.add(to), this._config.animation) { var i = m.getTransitionDurationFromElement(this._element);
|
||||
p(this._element).one(m.TRANSITION_END, n).emulateTransitionEnd(i) } else n() } }, e.hide = function() { if (this._element.classList.contains(eo)) { var e = p.Event($i.HIDE);
|
||||
p(this._element).trigger(e), e.isDefaultPrevented() || this._close() } }, e.dispose = function() { clearTimeout(this._timeout), this._timeout = null, this._element.classList.contains(eo) && this._element.classList.remove(eo), p(this._element).off($i.CLICK_DISMISS), p.removeData(this._element, zi), this._element = null, this._config = null }, e._getConfig = function(e) { return e = l({}, io, {}, p(this._element).data(), {}, "object" == typeof e && e ? e : {}), m.typeCheckConfig(Yi, e, this.constructor.DefaultType), e }, e._setListeners = function() { var e = this;
|
||||
p(this._element).on($i.CLICK_DISMISS, oo, function() { return e.hide() }) }, e._close = function() {
|
||||
function e() { t._element.classList.add(Zi), p(t._element).trigger($i.HIDDEN) } var t = this; if (this._element.classList.remove(eo), this._config.animation) { var n = m.getTransitionDurationFromElement(this._element);
|
||||
p(this._element).one(m.TRANSITION_END, e).emulateTransitionEnd(n) } else e() }, i._jQueryInterface = function(n) { return this.each(function() { var e = p(this),
|
||||
t = e.data(zi); if (t || (t = new i(this, "object" == typeof n && n), e.data(zi, t)), "string" == typeof n) { if ("undefined" == typeof t[n]) throw new TypeError('No method named "' + n + '"');
|
||||
t[n](this) } }) }, s(i, null, [{ key: "VERSION", get: function() { return "4.4.1" } }, { key: "DefaultType", get: function() { return no } }, { key: "Default", get: function() { return io } }]), i }();
|
||||
p.fn[Yi] = ro._jQueryInterface, p.fn[Yi].Constructor = ro, p.fn[Yi].noConflict = function() { return p.fn[Yi] = Gi, ro._jQueryInterface }, e.Alert = _, e.Button = x, e.Carousel = he, e.Collapse = De, e.Dropdown = en, e.Modal = wn, e.Popover = ci, e.Scrollspy = Oi, e.Tab = Vi, e.Toast = ro, e.Tooltip = Xn, e.Util = m, Object.defineProperty(e, "__esModule", { value: !0 }) });
|
||||
//# sourceMappingURL=bootstrap.bundle.min.js.map
|
1
views/assets/css/styles-1636936688.min.css
vendored
1
views/assets/css/styles.min.css
vendored
31
views/assets/fonts/ionicons.min.css
vendored
|
@ -1,31 +0,0 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/*!
|
||||
Ionicons, v2.0.0
|
||||
Created by Ben Sperry for the Ionic Framework, http://ionicons.com/
|
||||
https://twitter.com/benjsperry https://twitter.com/ionicframework
|
||||
MIT License: https://github.com/driftyco/ionicons
|
||||
|
||||
Android-style icons originally built by Google’s
|
||||
Material Design Icons: https://github.com/google/material-design-icons
|
||||
used under CC BY http://creativecommons.org/licenses/by/4.0/
|
||||
Modified icons to fit ionicon’s grid from original.
|
||||
*/
|
||||
|
||||
@font-face {
|
||||
font-family: "Ionicons";
|
||||
src: url("../fonts/ionicons.eot?v=2.0.0");
|
||||
src: url("../fonts/ionicons.eot?v=2.0.0#iefix") format("embedded-opentype"), url("../fonts/ionicons.ttf?v=2.0.0") format("truetype"), url("../fonts/ionicons.woff?v=2.0.0") format("woff"), url("../fonts/ionicons.svg?v=2.0.0#Ionicons") format("svg");
|
||||
font-weight: normal;
|
||||
font-style: normal
|
||||
}
|
||||
|
||||
.ion-social-github:before,
|
||||
.ion-social-github-outline:before,
|
||||
.ion-social-github:before {
|
||||
content: "\f233"
|
||||
}
|
||||
|
||||
.ion-social-github-outline:before {
|
||||
content: "\f232"
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<!--
|
||||
2014-12-4: Created.
|
||||
-->
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>
|
||||
Created by FontForge 20120731 at Thu Dec 4 09:51:48 2014
|
||||
By Adam Bradley
|
||||
Created by Adam Bradley with FontForge 2.0 (http://fontforge.sf.net)
|
||||
</metadata>
|
||||
<defs>
|
||||
<font id="Ionicons" horiz-adv-x="448" >
|
||||
<font-face
|
||||
font-family="Ionicons"
|
||||
font-weight="500"
|
||||
font-stretch="normal"
|
||||
units-per-em="512"
|
||||
panose-1="2 0 6 3 0 0 0 0 0 0"
|
||||
ascent="448"
|
||||
descent="-64"
|
||||
bbox="-0.54049 -64 512.487 448"
|
||||
underline-thickness="25.6"
|
||||
underline-position="-51.2"
|
||||
unicode-range="U+F100-F4F7"
|
||||
/>
|
||||
<missing-glyph />
|
||||
|
||||
<glyph glyph-name="ion-social-github-outline" unicode=""
|
||||
d="M224 416c124 0 224 -103 224 -230c0 -101 -64 -188 -153 -218h-4c-8 0 -12 7 -12 12c0 8 1 31 1 62c0 21 -8 36 -16 43c50 6 103 25 103 113c0 25 -9 46 -23 62c2 6 10 29 -2 61h-5c-8 0 -27 -3 -57 -24c-18 5 -37 8 -56 8s-38 -3 -56 -8c-30 21 -49 24 -57 24h-5
|
||||
c-12 -32 -4 -55 -2 -61c-14 -16 -23 -37 -23 -62c0 -88 52 -107 102 -113c-6 -6 -12 -16 -14 -31c-6 -3 -16 -6 -26 -6c-13 0 -28 5 -39 25c0 0 -13 22 -35 24v0c-2 0 -21 0 -1 -14c0 0 15 -8 25 -34c0 0 10 -33 53 -33c7 0 14 0 22 2v-39c0 -5 -3 -11 -11 -11h-4
|
||||
c-89 30 -153 116 -153 218c0 127 100 230 224 230zM146 -0c-15 0 -28 4 -38 9c14 -10 28 -17 44 -23v6v8h-6zM157 73c-16 4 -35 10 -52 24c6 -6 11 -11 13 -16c7 -12 14 -17 25 -17c4 0 9 1 12 2c1 2 1 5 2 7zM347 14c17 13 32 28 45 46c26 37 40 80 40 126
|
||||
c0 29 -5 58 -16 84c-10 25 -26 48 -45 68s-41 34 -66 45c-26 11 -53 17 -81 17s-55 -6 -81 -17c-25 -11 -47 -25 -66 -45s-35 -42 -45 -68c-11 -26 -16 -55 -16 -84c0 -46 14 -89 40 -126c10 -14 22 -27 35 -38c-7 8 -11 16 -13 22c-7 18 -15 24 -17 25h-2v1
|
||||
c-5 3 -20 13 -15 28c3 9 12 15 25 15h1v0v0c13 -1 24 -6 32 -13c-21 19 -37 48 -37 98c0 24 7 47 21 66c-3 13 -6 34 5 62l3 8l7 2c2 0 5 1 10 1c12 0 31 -3 60 -22c17 4 35 6 53 6v0v0c18 0 36 -2 53 -6c29 19 48 22 60 22c5 0 8 -1 10 -1l7 -2l3 -7c11 -27 8 -50 5 -63
|
||||
c14 -19 21 -41 21 -66c0 -92 -55 -117 -92 -125c3 -8 5 -18 5 -30v-51v-6c18 7 35 16 51 28z" />
|
||||
<glyph glyph-name="ion-social-github" unicode=""
|
||||
d="M224 416c124 0 224 -103 224 -230c0 -101 -64 -188 -153 -218h-4c-8 0 -12 7 -12 12c0 8 1 31 1 62c0 21 -8 36 -16 43c50 6 103 25 103 113c0 25 -9 46 -23 62c2 6 10 29 -2 61h-5c-8 0 -27 -3 -57 -24c-18 5 -37 8 -56 8s-38 -3 -56 -8c-30 21 -49 24 -57 24h-5
|
||||
c-12 -32 -4 -55 -2 -61c-14 -16 -23 -37 -23 -62c0 -88 52 -107 102 -113c-6 -6 -12 -16 -14 -31c-6 -3 -16 -6 -26 -6c-13 0 -28 5 -39 25c0 0 -13 22 -35 24v0c-2 0 -21 0 -1 -14c0 0 15 -8 25 -34c0 0 10 -33 53 -33c7 0 14 0 22 2v-39c0 -5 -3 -11 -11 -11h-4
|
||||
c-89 30 -153 116 -153 218c0 127 100 230 224 230z" />
|
||||
<glyph glyph-name="ion-social-google-outline" unicode="" horiz-adv-x="256"
|
||||
d="M191 366c12 -10 37 -30 37 -68c0 -37 -21 -55 -43 -72c-7 -7 -15 -13 -15 -24s8 -17 14 -22l18 -14c23 -19 43 -36 43 -71c0 -47 -47 -95 -135 -95c-74 0 -110 35 -110 72c0 18 10 44 40 62c32 19 75 21 98 23c-7 9 -16 18 -16 34c0 9 2 14 5 20c-6 0 -11 -1 -16 -1
|
||||
c-54 0 -85 40 -85 79c0 23 11 48 33 67c29 24 63 28 91 28h106l-33 -18h-32zM155 142c-4 1 -7 1 -12 1s-32 -1 -54 -8c-11 -4 -44 -16 -44 -52s36 -62 91 -62c49 0 75 24 75 55c0 26 -17 39 -56 66zM170 238c12 12 13 28 13 37c0 36 -22 92 -65 92c-13 0 -28 -6 -36 -16
|
||||
c-9 -11 -11 -25 -11 -38c0 -34 20 -89 64 -89c13 0 27 6 35 14z" />
|
||||
</font>
|
||||
</defs></svg>
|
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 14 KiB |
BIN
views/assets/img/dnssetup.png
Normal file
After Width: | Height: | Size: 116 KiB |
BIN
views/assets/img/emu/gb.png
Normal file
After Width: | Height: | Size: 749 B |
BIN
views/assets/img/emu/gba.png
Normal file
After Width: | Height: | Size: 885 B |
BIN
views/assets/img/emu/gbc.png
Normal file
After Width: | Height: | Size: 748 B |
BIN
views/assets/img/emu/genesis.png
Normal file
After Width: | Height: | Size: 948 B |
BIN
views/assets/img/emu/nes.png
Normal file
After Width: | Height: | Size: 859 B |
BIN
views/assets/img/emu/nintendo64.png
Normal file
After Width: | Height: | Size: 836 B |
BIN
views/assets/img/emu/nintendods.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
views/assets/img/emu/snes.png
Normal file
After Width: | Height: | Size: 809 B |
1
views/assets/img/emu/vibeos.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 -64 512 512" xmlns="http://www.w3.org/2000/svg"><path fill="#FFFFFF" d="m 448 416 h -384 q -27 -1 -45 -19 t -19 -45 v -320 q 1 -27 19 -45 t 45 -19 h 384 q 27 1 45 19 t 19 45 v 320 q -1 27 -19 45 t -45 19 v 0 z m 16 -384 q -1 -15 -16 -16 h -384 q -15 1 -16 16 v 320 q 1 15 16 16 h 384 q 15 -1 16 -16 v -320 v 0 z m -224 160 q 0 10 -8 18 l -96 88 q -17 13 -34 -2 q -13 -17 2 -34 l 77 -70 l -77 -70 q -15 -17 -2 -34 q 8 -8 18 -8 q 9 0 16 6 l 96 88 q 8 7 8 18 v 0 z m 152 128 h -144 q -22 -2 -24 -24 q 2 -22 24 -24 h 144 q 22 2 24 24 q -2 22 -24 24 v 0 z" /></svg>
|
After Width: | Height: | Size: 576 B |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
BIN
views/assets/img/emulib/linksawakeningdx.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
BIN
views/assets/img/emulib/metroidfusion.png
Normal file
After Width: | Height: | Size: 9.7 KiB |
BIN
views/assets/img/emulib/metroidzeromission.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
views/assets/img/emulib/mortalkombat.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
views/assets/img/emulib/mortalkombat2.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
views/assets/img/emulib/mortalkombat3.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
views/assets/img/emulib/oracleofages.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
views/assets/img/emulib/oracleofseasons.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB |
BIN
views/assets/img/emulib/sonic.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
views/assets/img/emulib/sonic2.png
Normal file
After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 5 KiB After Width: | Height: | Size: 5 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
BIN
views/assets/img/emulib/supermariolanddx-labelonly-nobars.png
Normal file
After Width: | Height: | Size: 349 KiB |
BIN
views/assets/img/emulib/supermariolanddx-labelonly.png
Normal file
After Width: | Height: | Size: 437 KiB |
BIN
views/assets/img/emulib/supermariolanddx.png
Normal file
After Width: | Height: | Size: 814 KiB |
Before Width: | Height: | Size: 9 KiB After Width: | Height: | Size: 9 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 3 KiB After Width: | Height: | Size: 3 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |