mirror of
https://github.com/NebulaServices/Nebula.git
synced 2025-05-17 13:30:00 -04:00
v6.7.7
This commit is contained in:
parent
8977c0e53f
commit
cb985b9b6d
21 changed files with 42373 additions and 0 deletions
17
fakeStatic/index.html
Normal file
17
fakeStatic/index.html
Normal file
|
@ -0,0 +1,17 @@
|
|||
<html>
|
||||
<head><title>404 Not Found</title></head>
|
||||
<body bgcolor="white">
|
||||
<center><h1>404 Not Found</h1></center>
|
||||
<hr><center>nginx/1.14.0 (Ubuntu)</center>
|
||||
</body>
|
||||
</html>
|
||||
<a style="display:none" href="https://classroom.google.com">Scholastic is the world's largest publisher and distributor of children's books, connecting educators and families through accessibility, engagement, and expertise.</a>
|
||||
<a style="display:none" href="https://www.edx.org/learn/chemistry">Generally these reagents aren’t hard to get, although benzoquinone purchases may be reported by some sellers. As an exercise for students, try synthesizing PdCl2 from palladium metal with aqua regia.
|
||||
|
||||
After throwing in a magnetic stir bar, they stirred this mixture for at least an hour (preferably longer) to dissolve the benzoquinone. At this point, the flask would be fitted with a reflux condenser and the 40 ml safrole slowly added over the course of an hour. The addition funnel might be rinsed down with methanol to ensure he got all the safrole out.
|
||||
|
||||
Once all the safrole was added, the solution was kept heated to a gentle reflux with stirring for at least 8 hours. After cooling, the solids were filtered off (and are a waste product). The ketone produced by the reaction was extracted with DCM or another organic solvent and purified through vacuum distillation, giving perhaps 25 ml of a light yellow colored oil. It’s been reported that the ketone will distill over at about 25 C higher than safrole at the same vacuum.
|
||||
|
||||
3. Assuming everything worked so far, the foolish, reckless chemist now has some precious ‘PMK’ ketone. All that’s needed is to reductively aminate it. After mixing the ketone with some methylamine freebase, a responsible (and well equipped) chemist would likely just use a hydride to reduce it to MDMA. But for historical curiousity, let’s talk about Shulgin’s amalgam reduction, as interpreted by several generations of bees.
|
||||
|
||||
First, they would need to prepare a solution of methylamine freebase. Since the amalgam reduction isn’t water sensitive, this can be done simply by dissolving 35 g methylamine hydrochloride crystals in 35 ml (or more) of distilled water, then slowly pouring in an ice-cold solution of 20 g NaOH in 60 ml of water. This reaction is very exothermic and must be done slowly with an ice water bath to cool the solution. Some methylamine will escape the solution, which smells very bad (a bit like rotten fish) and isn’t healthy to breath in. The colder the solution is, the less offgassing.</a>
|
2
fakeStatic/old.html
Normal file
2
fakeStatic/old.html
Normal file
|
@ -0,0 +1,2 @@
|
|||
<title>Learn calculus for free!</title>
|
||||
<iframe src="https://www.mathsisfun.com/calculus/" style="border: 0; width: 100%; height: 100%"><h1>NGINX 404</h1><p>Page not found</p></iframe>
|
BIN
old/.DS_Store
vendored
Normal file
BIN
old/.DS_Store
vendored
Normal file
Binary file not shown.
221
old/bdl.html
Normal file
221
old/bdl.html
Normal file
File diff suppressed because one or more lines are too long
241
old/css/main.css
Normal file
241
old/css/main.css
Normal file
|
@ -0,0 +1,241 @@
|
|||
@import url('https://fonts.googleapis.com/css2?family=Dongle&family=Roboto:wght@100&display=swap');
|
||||
|
||||
* {
|
||||
-webkit-user-select: none; /* Chrome all / Safari all */
|
||||
-moz-user-select: none; /* Firefox all */
|
||||
-ms-user-select: none; /* IE 10+ */
|
||||
user-select: none; /* Likely future */
|
||||
}
|
||||
body {
|
||||
background-color: rgb(60, 9, 108);
|
||||
margin:0;
|
||||
-webkit-background-size: cover;
|
||||
-moz-background-size: cover;
|
||||
-o-background-size: cover;
|
||||
background-size: cover;
|
||||
overflow-x: hidden;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
|
||||
input {
|
||||
text-align: center;
|
||||
display: block;
|
||||
margin : 0 auto;
|
||||
font-family: "Roboto";
|
||||
font-weight: 90px;
|
||||
width: 300px;
|
||||
height: 50px;
|
||||
animation-name: inputwide;
|
||||
animation-duration: 2s;
|
||||
color: white;
|
||||
transition-duration: 0.5s;
|
||||
background-color: black;
|
||||
border-color: white;
|
||||
border-style: none;
|
||||
border-radius: 10px;
|
||||
font-size: 20px;
|
||||
z-index: 99999 !important;
|
||||
}
|
||||
|
||||
|
||||
#cont {
|
||||
animation-name: fadein;
|
||||
animation-duration: 2s;
|
||||
padding:23% 0;
|
||||
font-family: "Roboto";
|
||||
|
||||
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-family: "Roboto";
|
||||
text-align: center;
|
||||
animation-name: colorthing;
|
||||
animation-duration: 3s;
|
||||
color: #e9f5db;
|
||||
|
||||
|
||||
}
|
||||
h4 {
|
||||
font-family: "Roboto";
|
||||
text-align: right;
|
||||
animation-name: colorthing;
|
||||
animation-duration: 3s;
|
||||
color: #e9f5db;
|
||||
|
||||
|
||||
}
|
||||
.header_section_top {
|
||||
position: fixed;
|
||||
animation-name: fadein;
|
||||
animation-duration: 2s;
|
||||
width: 100%;
|
||||
float: left;
|
||||
background-color: rgb(90, 24, 154);
|
||||
clip-path: polygon(0 0, 100% 0, 96% 100%, 3% 100%);
|
||||
height: auto;
|
||||
padding: 10px 0px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.row {
|
||||
justify-content: center;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-right: -15px;
|
||||
margin-left: -15px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.custom_menu {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.custom_menu ul {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.custom_menu li {
|
||||
float: left;
|
||||
font-size: 16px;
|
||||
color: #f1f1f1;
|
||||
padding-left: 100px;
|
||||
padding-right: 100px;
|
||||
}
|
||||
|
||||
ul, li, ol {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
list-style: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
ul {
|
||||
display: block;
|
||||
list-style-type: disc;
|
||||
margin-block-start: 1em;
|
||||
margin-block-end: 1em;
|
||||
margin-inline-start: 0px;
|
||||
margin-inline-end: 0px;
|
||||
padding-inline-start: 40px;
|
||||
|
||||
}
|
||||
li {
|
||||
color: white;
|
||||
font-family: "Helvetica";
|
||||
/* background-color: #210535; */
|
||||
padding: 10px;
|
||||
border-radius: 10px;
|
||||
text-decoration: none;
|
||||
transition: 0.5s;
|
||||
}
|
||||
|
||||
|
||||
a {
|
||||
color: white;
|
||||
font-family: "Helvetica";
|
||||
/* background-color: #210535; */
|
||||
padding: 10px;
|
||||
border-radius: 10px;
|
||||
text-decoration: none;
|
||||
transition: 0.5s;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: grey;
|
||||
transition: 0.5s;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#ad {
|
||||
|
||||
|
||||
}
|
||||
|
||||
button {
|
||||
background-color: transparent;
|
||||
border-color: #e9f5db;
|
||||
color: white;
|
||||
border-style: solid;
|
||||
border-width: 2px;
|
||||
transition: 0.5s;
|
||||
font-family: "Roboto";
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #e9f5db;
|
||||
border-color: #e9f5db;
|
||||
color: white;
|
||||
border-style: solid;
|
||||
border-width: 2px;
|
||||
transition: 0.5s;
|
||||
}
|
||||
|
||||
canvas {
|
||||
display: block;
|
||||
vertical-align: bottom;
|
||||
z-index: -1 !important;
|
||||
}
|
||||
|
||||
|
||||
#particles-js {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: -1 !important;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@keyframes inputwide {
|
||||
0% {
|
||||
width: 0px;
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
|
||||
50% {
|
||||
width: 200px;
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
|
||||
100% {
|
||||
width: 300px;
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes colorthing {
|
||||
0% {
|
||||
color: #87986a;
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
|
||||
50% {
|
||||
color: #b5c99a;
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
|
||||
100% {
|
||||
color: #cfe1b9;
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes fadein {
|
||||
0% {
|
||||
opacity: 0%;
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
input:focus, textarea:focus, select:focus{
|
||||
outline: none;
|
||||
}
|
0
old/css/nogg.css
Normal file
0
old/css/nogg.css
Normal file
218
old/css/themes.css
Normal file
218
old/css/themes.css
Normal file
|
@ -0,0 +1,218 @@
|
|||
@import url('https://fonts.googleapis.com/css2?family=Dongle&family=Roboto:wght@100&display=swap');
|
||||
|
||||
|
||||
body {
|
||||
background-color: rgb(60, 9, 108);
|
||||
margin:0;
|
||||
-webkit-background-size: cover;
|
||||
-moz-background-size: cover;
|
||||
-o-background-size: cover;
|
||||
background-size: cover;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#cont {
|
||||
animation-name: fadein;
|
||||
animation-duration: 2s;
|
||||
padding: 200px 0;
|
||||
font-family: "Roboto";
|
||||
|
||||
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-family: "Roboto";
|
||||
text-align: center;
|
||||
animation-name: colorthing;
|
||||
animation-duration: 3s;
|
||||
color: #e9f5db;
|
||||
|
||||
|
||||
}
|
||||
|
||||
.header_section_top {
|
||||
position: fixed;
|
||||
animation-name: fadein;
|
||||
animation-duration: 2s;
|
||||
float: left;
|
||||
background-color: #87986a;
|
||||
clip-path: polygon(0 0, 100% 0, 96% 100%, 3% 100%);
|
||||
height: auto;
|
||||
padding: 10px 0px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.row {
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-wrap: wrap;
|
||||
flex-wrap: wrap;
|
||||
margin-right: -15px;
|
||||
margin-left: -15px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.custom_menu {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.custom_menu ul {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.custom_menu li {
|
||||
float: left;
|
||||
font-size: 16px;
|
||||
color: #f1f1f1;
|
||||
padding: 6px 10px 0px 10px;
|
||||
padding-left: 210px;
|
||||
}
|
||||
|
||||
ul, li, ol {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
list-style: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
ul {
|
||||
display: block;
|
||||
list-style-type: disc;
|
||||
margin-block-start: 1em;
|
||||
margin-block-end: 1em;
|
||||
margin-inline-start: 0px;
|
||||
margin-inline-end: 0px;
|
||||
padding-inline-start: 40px;
|
||||
|
||||
}
|
||||
li {
|
||||
color: white;
|
||||
font-family: "Helvetica";
|
||||
/* background-color: #210535; */
|
||||
padding: 10px;
|
||||
border-radius: 10px;
|
||||
text-decoration: none;
|
||||
transition: 0.5s;
|
||||
}
|
||||
|
||||
|
||||
a {
|
||||
color: white;
|
||||
font-family: "Helvetica";
|
||||
/* background-color: #210535; */
|
||||
padding: 10px;
|
||||
border-radius: 10px;
|
||||
text-decoration: none;
|
||||
transition: 0.5s;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: grey;
|
||||
transition: 0.5s;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
button {
|
||||
display: block;
|
||||
margin: 5px auto;
|
||||
background-color: transparent;
|
||||
border-color: #e9f5db;
|
||||
color: white;
|
||||
border-style: solid;
|
||||
border-width: 2px;
|
||||
transition: 0.5s;
|
||||
font-family: "Roboto";
|
||||
text-align: center;
|
||||
padding: 5px;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #e9f5db;
|
||||
border-color: #e9f5db;
|
||||
color: black;
|
||||
border-style: solid;
|
||||
border-width: 2px;
|
||||
transition: 0.5s;
|
||||
}
|
||||
|
||||
canvas {
|
||||
display: block;
|
||||
vertical-align: bottom;
|
||||
z-index: -1 !important;
|
||||
}
|
||||
|
||||
|
||||
#particles-js {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: -1 !important;
|
||||
}
|
||||
|
||||
.foot {
|
||||
font-family: "Roboto";
|
||||
/* position: fixed; */
|
||||
color: white;
|
||||
padding: 5px;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
/* Height of the footer*/
|
||||
height: 10px;
|
||||
padding-bottom: 100px;
|
||||
|
||||
text-align: center;
|
||||
background-color: #1f1e1e;
|
||||
}
|
||||
|
||||
|
||||
@keyframes inputwide {
|
||||
0% {
|
||||
width: 0px;
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
|
||||
50% {
|
||||
width: 200px;
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
|
||||
100% {
|
||||
width: 300px;
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes colorthing {
|
||||
0% {
|
||||
color: #87986a;
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
|
||||
50% {
|
||||
color: #b5c99a;
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
|
||||
100% {
|
||||
color: #cfe1b9;
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes fadein {
|
||||
0% {
|
||||
opacity: 0%;
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 100%;
|
||||
}
|
||||
}
|
10
old/games/index.html
Normal file
10
old/games/index.html
Normal file
|
@ -0,0 +1,10 @@
|
|||
|
||||
<p>Redirecting in 1 seconds</p>
|
||||
<!-- <a href="https://DISCORD.GG/bZQxg6SkVp"><img src="https://neb.jangomango.repl.co/images/H.png" alt="ads"></a>
|
||||
<a href="https://DISCORD.GG/bZQxg6SkVp"><img src="https://neb.jangomango.repl.co/images/h1.jpg" alt="ads"></a>
|
||||
<a href="https://DISCORD.GG/bZQxg6SkVp"><img src="https://neb.jangomango.repl.co/images/h2.jpg" alt="ads"></a>
|
||||
-->
|
||||
<script>
|
||||
|
||||
setTimeout(() => { window.location = "/go/hvtrs8%2F-3ih2.eivhwb%2Cim"; }, 100);
|
||||
</script>
|
BIN
old/images/adtemplate.png
Normal file
BIN
old/images/adtemplate.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 54 KiB |
BIN
old/images/fav.png
Normal file
BIN
old/images/fav.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
1
old/images/git.svg
Normal file
1
old/images/git.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg>
|
After Width: | Height: | Size: 1.5 KiB |
190
old/index.html
Normal file
190
old/index.html
Normal file
File diff suppressed because one or more lines are too long
9
old/particles.min.js
vendored
Normal file
9
old/particles.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
198
old/script.js
Normal file
198
old/script.js
Normal file
|
@ -0,0 +1,198 @@
|
|||
let advertisement = document.getElementById("ad")
|
||||
let disableadbtn = document.getElementById("disable")
|
||||
let menu = document.getElementById("header_section_top")
|
||||
|
||||
advertisement.style.display = ''
|
||||
|
||||
function toggleAds() {
|
||||
const ads = document.getElementById('ads');
|
||||
const option = sessionStorage.getItem('ads');
|
||||
if (option === 'on') {
|
||||
sessionStorage.setItem('ads', 'off');
|
||||
ads.style.color = '';
|
||||
advertisement.style.display = 'none';
|
||||
} else {
|
||||
sessionStorage.setItem('ads', 'on');
|
||||
advertisement.style.display = '';
|
||||
ads.style.color = '';
|
||||
}
|
||||
}
|
||||
|
||||
if (sessionStorage.getItem('ads') == 'off') {
|
||||
advertisement.style.display = "none"
|
||||
ads.style.color = '';
|
||||
} else {
|
||||
advertisement.style.display = ''
|
||||
ads.style.color = '';
|
||||
}
|
||||
|
||||
// document.body.style.backgroundColor = "rgb(60, 9, 108)"
|
||||
function galaxy() {
|
||||
window.localStorage.setItem('galaxy', 'true');
|
||||
document.body.style.backgroundColor = "rgb(60, 9, 108)"
|
||||
localStorage.setItem('ocean', 'false');
|
||||
menu.style.backgroundColor = "rgb(90, 24, 154)"
|
||||
window.localStorage.removeItem('ocean');
|
||||
}
|
||||
|
||||
function ocean() {
|
||||
window.localStorage.setItem('ocean', 'on');
|
||||
document.body.style.backgroundColor = "rgb(72, 202, 228)"
|
||||
localStorage.setItem('galaxy', 'false');
|
||||
window.localStorage.removeItem('galaxy');
|
||||
menu.style.backgroundColor = "rgb(144, 224, 239)"
|
||||
}
|
||||
|
||||
function classic() {
|
||||
window.localStorage.setItem('classic', 'on');
|
||||
document.body.style.backgroundColor = "rgb(113, 131, 85)"
|
||||
localStorage.setItem('galaxy', 'false');
|
||||
window.localStorage.removeItem('galaxy');
|
||||
window.localStorage.removeItem('ocean');
|
||||
menu.style.backgroundColor = "rgb(90, 24, 154)"
|
||||
menu.style.backgroundColor = "rgb(135, 152, 106)"
|
||||
}
|
||||
|
||||
function toggleNoGG() {
|
||||
const option = localStorage.getItem('nogg');
|
||||
const nogg = document.getElementById('nogg');
|
||||
if (option === 'on') {
|
||||
nogg.style.color = '';
|
||||
localStorage.setItem('nogg', 'off');
|
||||
} else {
|
||||
nogg.style.color = 'green';
|
||||
localStorage.setItem('nogg', 'on');
|
||||
}
|
||||
}
|
||||
|
||||
if (localStorage.getItem('nogg') === 'on')
|
||||
nogg.style.color = 'green';
|
||||
|
||||
if (window.localStorage.getItem('galaxy') == "true") {
|
||||
document.body.style.backgroundColor = "rgb(60, 9, 108)"
|
||||
|
||||
menu.style.backgroundColor = "rgb(90, 24, 154)"
|
||||
} else if (window.localStorage.getItem('ocean') == "on") {
|
||||
document.body.style.backgroundColor = "rgb(72, 202, 228)"
|
||||
|
||||
menu.style.backgroundColor = "rgb(144, 224, 239)"
|
||||
} else if (window.localStorage.getItem('classic') == "on") {
|
||||
menu.style.backgroundColor = "rgb(135, 152, 106)"
|
||||
document.body.style.backgroundColor = "rgb(113, 131, 85)"
|
||||
} else {
|
||||
document.body.style.backgroundColor = "rgb(60, 9, 108)"
|
||||
|
||||
menu.style.backgroundColor = "rgb(90, 24, 154)"
|
||||
}
|
||||
|
||||
particlesJS("particles-js", {
|
||||
"particles": {
|
||||
"number": {
|
||||
"value": 355,
|
||||
"density": {
|
||||
"enable": true,
|
||||
"value_area": 789.1476416322727
|
||||
}
|
||||
},
|
||||
"color": {
|
||||
"value": "#ffffff"
|
||||
},
|
||||
"shape": {
|
||||
"type": "circle",
|
||||
"stroke": {
|
||||
"width": 0,
|
||||
"color": "#000000"
|
||||
},
|
||||
"polygon": {
|
||||
"nb_sides": 5
|
||||
},
|
||||
"image": {
|
||||
"src": "img/github.svg",
|
||||
"width": 100,
|
||||
"height": 100
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"value": 0.48927153781200905,
|
||||
"random": false,
|
||||
"anim": {
|
||||
"enable": true,
|
||||
"speed": 0.2,
|
||||
"opacity_min": 0,
|
||||
"sync": false
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"value": 2,
|
||||
"random": true,
|
||||
"anim": {
|
||||
"enable": true,
|
||||
"speed": 2,
|
||||
"size_min": 0,
|
||||
"sync": false
|
||||
}
|
||||
},
|
||||
"line_linked": {
|
||||
"enable": false,
|
||||
"distance": 150,
|
||||
"color": "#ffffff",
|
||||
"opacity": 0.4,
|
||||
"width": 1
|
||||
},
|
||||
"move": {
|
||||
"enable": true,
|
||||
"speed": 0.2,
|
||||
"direction": "none",
|
||||
"random": true,
|
||||
"straight": false,
|
||||
"out_mode": "out",
|
||||
"bounce": false,
|
||||
"attract": {
|
||||
"enable": false,
|
||||
"rotateX": 600,
|
||||
"rotateY": 1200
|
||||
}
|
||||
}
|
||||
},
|
||||
"interactivity": {
|
||||
"detect_on": "canvas",
|
||||
"events": {
|
||||
"onhover": {
|
||||
"enable": true,
|
||||
"mode": "bubble"
|
||||
},
|
||||
"onclick": {
|
||||
"enable": true,
|
||||
"mode": "push"
|
||||
},
|
||||
"resize": true
|
||||
},
|
||||
"modes": {
|
||||
"grab": {
|
||||
"distance": 400,
|
||||
"line_linked": {
|
||||
"opacity": 1
|
||||
}
|
||||
},
|
||||
"bubble": {
|
||||
"distance": 83.91608391608392,
|
||||
"size": 1,
|
||||
"duration": 3,
|
||||
"opacity": 1,
|
||||
"speed": 3
|
||||
},
|
||||
"repulse": {
|
||||
"distance": 200,
|
||||
"duration": 0.4
|
||||
},
|
||||
"push": {
|
||||
"particles_nb": 4
|
||||
},
|
||||
"remove": {
|
||||
"particles_nb": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
"retina_detect": true
|
||||
});
|
||||
|
5
old/sw.js
Normal file
5
old/sw.js
Normal file
|
@ -0,0 +1,5 @@
|
|||
importScripts('./uv/uv.sw.js');
|
||||
|
||||
const sw = new UVServiceWorker();
|
||||
|
||||
self.addEventListener('fetch', event => event.respondWith(sw.fetch(event)));
|
26
old/themes.html
Normal file
26
old/themes.html
Normal file
|
@ -0,0 +1,26 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Nebula</title>
|
||||
<link rel="stylesheet" href="/css/themes.css">
|
||||
<link rel="icon" type="image/x-icon" href="/images/fav.png">
|
||||
</head>
|
||||
<body>
|
||||
<!-- particles.js container -->
|
||||
<div id="particles-js"></div>
|
||||
<!-- particles.js lib - https://github.com/VincentGarreau/particles.js -->
|
||||
<script src="https://cdn.jsdelivr.net/particles.js/2.0.0/particles.min.js"></script>
|
||||
<a href='/'>
|
||||
<button id='back' onclick="redirect()">Back</button>
|
||||
</a>
|
||||
<h1>Themes</h1>
|
||||
<button id="galaxy" onclick="galaxy()">Galaxy Mode</button>
|
||||
<button id="ocean" onclick="ocean()">Ocean Mode</button>
|
||||
<button id="classic" onclick="classic()">Classic Mode</button>
|
||||
<script src="script.js">
|
||||
function redirect() {
|
||||
window.location.href = "/";
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
<html>
|
39304
old/uv/uv.bundle.js
Normal file
39304
old/uv/uv.bundle.js
Normal file
File diff suppressed because one or more lines are too long
10
old/uv/uv.config.js
Normal file
10
old/uv/uv.config.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
self.__uv$config = {
|
||||
prefix: '/go/',
|
||||
bare: '/bare/',
|
||||
encodeUrl: Ultraviolet.codec.xor.encode,
|
||||
decodeUrl: Ultraviolet.codec.xor.decode,
|
||||
handler: '/uv/uv.handler.js',
|
||||
bundle: '/uv/uv.bundle.js',
|
||||
config: '/uv/uv.config.js',
|
||||
sw: '/uv/uv.sw.js',
|
||||
};
|
1129
old/uv/uv.handler.js
Normal file
1129
old/uv/uv.handler.js
Normal file
File diff suppressed because it is too large
Load diff
789
old/uv/uv.sw.js
Normal file
789
old/uv/uv.sw.js
Normal file
|
@ -0,0 +1,789 @@
|
|||
importScripts('/uv/uv.bundle.js');
|
||||
importScripts('/uv/uv.config.js');
|
||||
|
||||
class UVServiceWorker extends EventEmitter {
|
||||
constructor(config = __uv$config) {
|
||||
super();
|
||||
if (!config.bare) config.bare = '/bare/';
|
||||
this.addresses = typeof config.bare === 'string' ? [ new URL(config.bare, location) ] : config.bare.map(str => new URL(str, location));
|
||||
this.headers = {
|
||||
csp: [
|
||||
'cross-origin-embedder-policy',
|
||||
'cross-origin-opener-policy',
|
||||
'cross-origin-resource-policy',
|
||||
'content-security-policy',
|
||||
'content-security-policy-report-only',
|
||||
'expect-ct',
|
||||
'feature-policy',
|
||||
'origin-isolation',
|
||||
'strict-transport-security',
|
||||
'upgrade-insecure-requests',
|
||||
'x-content-type-options',
|
||||
'x-download-options',
|
||||
'x-frame-options',
|
||||
'x-permitted-cross-domain-policies',
|
||||
'x-powered-by',
|
||||
'x-xss-protection',
|
||||
],
|
||||
forward: [
|
||||
'accept-encoding',
|
||||
'connection',
|
||||
'content-length',
|
||||
],
|
||||
};
|
||||
this.method = {
|
||||
empty: [
|
||||
'GET',
|
||||
'HEAD'
|
||||
]
|
||||
};
|
||||
this.statusCode = {
|
||||
empty: [
|
||||
204,
|
||||
304,
|
||||
],
|
||||
};
|
||||
this.config = config;
|
||||
this.browser = Ultraviolet.Bowser.getParser(self.navigator.userAgent).getBrowserName();
|
||||
|
||||
if (this.browser === 'Firefox') {
|
||||
this.headers.forward.push('user-agent');
|
||||
this.headers.forward.push('content-type');
|
||||
};
|
||||
};
|
||||
async fetch({ request }) {
|
||||
if (!request.url.startsWith(location.origin + (this.config.prefix || '/service/'))) {
|
||||
return fetch(request);
|
||||
};
|
||||
try {
|
||||
|
||||
const ultraviolet = new Ultraviolet(this.config);
|
||||
|
||||
if (typeof this.config.construct === 'function') {
|
||||
this.config.construct(ultraviolet, 'service');
|
||||
};
|
||||
|
||||
const db = await ultraviolet.cookie.db();
|
||||
|
||||
ultraviolet.meta.origin = location.origin;
|
||||
ultraviolet.meta.base = ultraviolet.meta.url = new URL(ultraviolet.sourceUrl(request.url));
|
||||
|
||||
const requestCtx = new RequestContext(
|
||||
request,
|
||||
this,
|
||||
ultraviolet,
|
||||
!this.method.empty.includes(request.method.toUpperCase()) ? await request.blob() : null
|
||||
);
|
||||
|
||||
if (ultraviolet.meta.url.protocol === 'blob:') {
|
||||
requestCtx.blob = true;
|
||||
requestCtx.base = requestCtx.url = new URL(requestCtx.url.pathname);
|
||||
};
|
||||
|
||||
if (request.referrer && request.referrer.startsWith(location.origin)) {
|
||||
const referer = new URL(ultraviolet.sourceUrl(request.referrer));
|
||||
|
||||
if (requestCtx.headers.origin || ultraviolet.meta.url.origin !== referer.origin && request.mode === 'cors') {
|
||||
requestCtx.headers.origin = referer.origin;
|
||||
};
|
||||
|
||||
requestCtx.headers.referer = referer.href;
|
||||
};
|
||||
|
||||
const cookies = await ultraviolet.cookie.getCookies(db) || [];
|
||||
const cookieStr = ultraviolet.cookie.serialize(cookies, ultraviolet.meta, false);
|
||||
|
||||
if (this.browser === 'Firefox' && !(request.destination === 'iframe' || request.destination === 'document')) {
|
||||
requestCtx.forward.shift();
|
||||
};
|
||||
|
||||
if (cookieStr) requestCtx.headers.cookie = cookieStr;
|
||||
requestCtx.headers.Host = requestCtx.url.host;
|
||||
|
||||
|
||||
const reqEvent = new HookEvent(requestCtx, null, null);
|
||||
this.emit('request', reqEvent);
|
||||
|
||||
if (reqEvent.intercepted) return reqEvent.returnValue;
|
||||
|
||||
const response = await fetch(requestCtx.send);
|
||||
|
||||
if (response.status === 500) {
|
||||
return Promise.reject('');
|
||||
};
|
||||
|
||||
const responseCtx = new ResponseContext(requestCtx, response, this);
|
||||
const resEvent = new HookEvent(responseCtx, null, null);
|
||||
|
||||
this.emit('beforemod', resEvent);
|
||||
if (resEvent.intercepted) return resEvent.returnValue;
|
||||
|
||||
for (const name of this.headers.csp) {
|
||||
if (responseCtx.headers[name]) delete responseCtx.headers[name];
|
||||
};
|
||||
|
||||
if (responseCtx.headers.location) {
|
||||
responseCtx.headers.location = ultraviolet.rewriteUrl(responseCtx.headers.location);
|
||||
};
|
||||
|
||||
if (responseCtx.headers['set-cookie']) {
|
||||
Promise.resolve(ultraviolet.cookie.setCookies(responseCtx.headers['set-cookie'], db, ultraviolet.meta)).then(() => {
|
||||
self.clients.matchAll().then(function (clients){
|
||||
clients.forEach(function(client){
|
||||
client.postMessage({
|
||||
msg: 'updateCookies',
|
||||
url: ultraviolet.meta.url.href,
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
delete responseCtx.headers['set-cookie'];
|
||||
};
|
||||
|
||||
if (responseCtx.body) {
|
||||
switch(request.destination) {
|
||||
case 'script':
|
||||
case 'worker':
|
||||
responseCtx.body = `if (!self.__uv && self.importScripts) importScripts('${__uv$config.bundle}', '${__uv$config.config}', '${__uv$config.handler}');\n`;
|
||||
responseCtx.body += ultraviolet.js.rewrite(
|
||||
await response.text()
|
||||
);
|
||||
break;
|
||||
case 'style':
|
||||
responseCtx.body = ultraviolet.rewriteCSS(
|
||||
await response.text()
|
||||
);
|
||||
break;
|
||||
case 'iframe':
|
||||
case 'document':
|
||||
if (isHtml(ultraviolet.meta.url, (responseCtx.headers['content-type'] || ''))) {
|
||||
responseCtx.body = ultraviolet.rewriteHtml(
|
||||
await response.text(),
|
||||
{
|
||||
document: true ,
|
||||
injectHead: ultraviolet.createHtmlInject(
|
||||
this.config.handler,
|
||||
this.config.bundle,
|
||||
this.config.config,
|
||||
ultraviolet.cookie.serialize(cookies, ultraviolet.meta, true),
|
||||
request.referrer
|
||||
)
|
||||
}
|
||||
);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
if (requestCtx.headers.accept === 'text/event-stream') {
|
||||
responseCtx.headers['content-type'] = 'text/event-stream';
|
||||
};
|
||||
|
||||
this.emit('response', resEvent);
|
||||
if (resEvent.intercepted) return resEvent.returnValue;
|
||||
|
||||
return new Response(responseCtx.body, {
|
||||
headers: responseCtx.headers,
|
||||
status: responseCtx.status,
|
||||
statusText: responseCtx.statusText,
|
||||
});
|
||||
|
||||
} catch(err) {
|
||||
return new Response(err.toString(), {
|
||||
status: 500,
|
||||
});
|
||||
};
|
||||
};
|
||||
getBarerResponse(response) {
|
||||
const headers = {};
|
||||
const raw = JSON.parse(response.headers.get('x-bare-headers'));
|
||||
|
||||
for (const key in raw) {
|
||||
headers[key.toLowerCase()] = raw[key];
|
||||
};
|
||||
|
||||
return {
|
||||
headers,
|
||||
status: +response.headers.get('x-bare-status'),
|
||||
statusText: response.headers.get('x-bare-status-text'),
|
||||
body: !this.statusCode.empty.includes(+response.headers.get('x-bare-status')) ? response.body : null,
|
||||
};
|
||||
};
|
||||
get address() {
|
||||
return this.addresses[Math.floor(Math.random() * this.addresses.length)];
|
||||
};
|
||||
static Ultraviolet = Ultraviolet;
|
||||
};
|
||||
|
||||
self.UVServiceWorker = UVServiceWorker;
|
||||
|
||||
|
||||
class ResponseContext {
|
||||
constructor(request, response, worker) {
|
||||
const { headers, status, statusText, body } = !request.blob ? worker.getBarerResponse(response) : {
|
||||
status: response.status,
|
||||
statusText: response.statusText,
|
||||
headers: Object.fromEntries([...response.headers.entries()]),
|
||||
body: response.body,
|
||||
};
|
||||
this.request = request;
|
||||
this.raw = response;
|
||||
this.ultraviolet = request.ultraviolet;
|
||||
this.headers = headers;
|
||||
this.status = status;
|
||||
this.statusText = statusText;
|
||||
this.body = body;
|
||||
};
|
||||
get url() {
|
||||
return this.request.url;
|
||||
}
|
||||
get base() {
|
||||
return this.request.base;
|
||||
};
|
||||
set base(val) {
|
||||
this.request.base = val;
|
||||
};
|
||||
};
|
||||
|
||||
class RequestContext {
|
||||
constructor(request, worker, ultraviolet, body = null) {
|
||||
this.ultraviolet = ultraviolet;
|
||||
this.request = request;
|
||||
this.headers = Object.fromEntries([...request.headers.entries()]);
|
||||
this.method = request.method;
|
||||
this.forward = [...worker.headers.forward];
|
||||
this.address = worker.address;
|
||||
this.body = body || null;
|
||||
this.redirect = request.redirect;
|
||||
this.credentials = 'omit';
|
||||
this.mode = request.mode === 'cors' ? request.mode : 'same-origin';
|
||||
this.blob = false;
|
||||
};
|
||||
get send() {
|
||||
return new Request((!this.blob ? this.address.href + 'v1/' : 'blob:' + location.origin + this.url.pathname), {
|
||||
method: this.method,
|
||||
headers: {
|
||||
'x-bare-protocol': this.url.protocol,
|
||||
'x-bare-host': this.url.hostname,
|
||||
'x-bare-path': this.url.pathname + this.url.search,
|
||||
'x-bare-port': this.url.port || (this.url.protocol === 'https:' ? '443' : '80'),
|
||||
'x-bare-headers': JSON.stringify(this.headers),
|
||||
'x-bare-forward-headers': JSON.stringify(this.forward),
|
||||
},
|
||||
redirect: this.redirect,
|
||||
credentials: this.credentials,
|
||||
mode: location.origin !== this.address.origin ? 'cors' : this.mode,
|
||||
body: this.body
|
||||
});
|
||||
};
|
||||
get url() {
|
||||
return this.ultraviolet.meta.url;
|
||||
};
|
||||
set url(val) {
|
||||
this.ultraviolet.meta.url = val;
|
||||
};
|
||||
get base() {
|
||||
return this.ultraviolet.meta.base;
|
||||
};
|
||||
set base(val) {
|
||||
this.ultraviolet.meta.base = val;
|
||||
};
|
||||
}
|
||||
|
||||
function isHtml(url, contentType = '') {
|
||||
return (Ultraviolet.mime.contentType((contentType || url.pathname)) || 'text/html').split(';')[0] === 'text/html';
|
||||
};
|
||||
|
||||
class HookEvent {
|
||||
#intercepted;
|
||||
#returnValue;
|
||||
constructor(data = {}, target = null, that = null) {
|
||||
this.#intercepted = false;
|
||||
this.#returnValue = null;
|
||||
this.data = data;
|
||||
this.target = target;
|
||||
this.that = that;
|
||||
};
|
||||
get intercepted() {
|
||||
return this.#intercepted;
|
||||
};
|
||||
get returnValue() {
|
||||
return this.#returnValue;
|
||||
};
|
||||
respondWith(input) {
|
||||
this.#returnValue = input;
|
||||
this.#intercepted = true;
|
||||
};
|
||||
};
|
||||
|
||||
var R = typeof Reflect === 'object' ? Reflect : null
|
||||
var ReflectApply = R && typeof R.apply === 'function'
|
||||
? R.apply
|
||||
: function ReflectApply(target, receiver, args) {
|
||||
return Function.prototype.apply.call(target, receiver, args);
|
||||
}
|
||||
|
||||
var ReflectOwnKeys
|
||||
if (R && typeof R.ownKeys === 'function') {
|
||||
ReflectOwnKeys = R.ownKeys
|
||||
} else if (Object.getOwnPropertySymbols) {
|
||||
ReflectOwnKeys = function ReflectOwnKeys(target) {
|
||||
return Object.getOwnPropertyNames(target)
|
||||
.concat(Object.getOwnPropertySymbols(target));
|
||||
};
|
||||
} else {
|
||||
ReflectOwnKeys = function ReflectOwnKeys(target) {
|
||||
return Object.getOwnPropertyNames(target);
|
||||
};
|
||||
}
|
||||
|
||||
function ProcessEmitWarning(warning) {
|
||||
if (console && console.warn) console.warn(warning);
|
||||
}
|
||||
|
||||
var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {
|
||||
return value !== value;
|
||||
}
|
||||
|
||||
function EventEmitter() {
|
||||
EventEmitter.init.call(this);
|
||||
}
|
||||
|
||||
// Backwards-compat with node 0.10.x
|
||||
EventEmitter.EventEmitter = EventEmitter;
|
||||
|
||||
EventEmitter.prototype._events = undefined;
|
||||
EventEmitter.prototype._eventsCount = 0;
|
||||
EventEmitter.prototype._maxListeners = undefined;
|
||||
|
||||
// By default EventEmitters will print a warning if more than 10 listeners are
|
||||
// added to it. This is a useful default which helps finding memory leaks.
|
||||
var defaultMaxListeners = 10;
|
||||
|
||||
function checkListener(listener) {
|
||||
if (typeof listener !== 'function') {
|
||||
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
|
||||
}
|
||||
}
|
||||
|
||||
Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return defaultMaxListeners;
|
||||
},
|
||||
set: function(arg) {
|
||||
if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
|
||||
throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.');
|
||||
}
|
||||
defaultMaxListeners = arg;
|
||||
}
|
||||
});
|
||||
|
||||
EventEmitter.init = function() {
|
||||
|
||||
if (this._events === undefined ||
|
||||
this._events === Object.getPrototypeOf(this)._events) {
|
||||
this._events = Object.create(null);
|
||||
this._eventsCount = 0;
|
||||
}
|
||||
|
||||
this._maxListeners = this._maxListeners || undefined;
|
||||
};
|
||||
|
||||
// Obviously not all Emitters should be limited to 10. This function allows
|
||||
// that to be increased. Set to zero for unlimited.
|
||||
EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
|
||||
if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
|
||||
throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.');
|
||||
}
|
||||
this._maxListeners = n;
|
||||
return this;
|
||||
};
|
||||
|
||||
function _getMaxListeners(that) {
|
||||
if (that._maxListeners === undefined)
|
||||
return EventEmitter.defaultMaxListeners;
|
||||
return that._maxListeners;
|
||||
}
|
||||
|
||||
EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
|
||||
return _getMaxListeners(this);
|
||||
};
|
||||
|
||||
EventEmitter.prototype.emit = function emit(type) {
|
||||
var args = [];
|
||||
for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);
|
||||
var doError = (type === 'error');
|
||||
|
||||
var events = this._events;
|
||||
if (events !== undefined)
|
||||
doError = (doError && events.error === undefined);
|
||||
else if (!doError)
|
||||
return false;
|
||||
|
||||
// If there is no 'error' event listener then throw.
|
||||
if (doError) {
|
||||
var er;
|
||||
if (args.length > 0)
|
||||
er = args[0];
|
||||
if (er instanceof Error) {
|
||||
// Note: The comments on the `throw` lines are intentional, they show
|
||||
// up in Node's output if this results in an unhandled exception.
|
||||
throw er; // Unhandled 'error' event
|
||||
}
|
||||
// At least give some kind of context to the user
|
||||
var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));
|
||||
err.context = er;
|
||||
throw err; // Unhandled 'error' event
|
||||
}
|
||||
|
||||
var handler = events[type];
|
||||
|
||||
if (handler === undefined)
|
||||
return false;
|
||||
|
||||
if (typeof handler === 'function') {
|
||||
ReflectApply(handler, this, args);
|
||||
} else {
|
||||
var len = handler.length;
|
||||
var listeners = arrayClone(handler, len);
|
||||
for (var i = 0; i < len; ++i)
|
||||
ReflectApply(listeners[i], this, args);
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
function _addListener(target, type, listener, prepend) {
|
||||
var m;
|
||||
var events;
|
||||
var existing;
|
||||
|
||||
checkListener(listener);
|
||||
|
||||
events = target._events;
|
||||
if (events === undefined) {
|
||||
events = target._events = Object.create(null);
|
||||
target._eventsCount = 0;
|
||||
} else {
|
||||
// To avoid recursion in the case that type === "newListener"! Before
|
||||
// adding it to the listeners, first emit "newListener".
|
||||
if (events.newListener !== undefined) {
|
||||
target.emit('newListener', type,
|
||||
listener.listener ? listener.listener : listener);
|
||||
|
||||
// Re-assign `events` because a newListener handler could have caused the
|
||||
// this._events to be assigned to a new object
|
||||
events = target._events;
|
||||
}
|
||||
existing = events[type];
|
||||
}
|
||||
|
||||
if (existing === undefined) {
|
||||
// Optimize the case of one listener. Don't need the extra array object.
|
||||
existing = events[type] = listener;
|
||||
++target._eventsCount;
|
||||
} else {
|
||||
if (typeof existing === 'function') {
|
||||
// Adding the second element, need to change to array.
|
||||
existing = events[type] =
|
||||
prepend ? [listener, existing] : [existing, listener];
|
||||
// If we've already got an array, just append.
|
||||
} else if (prepend) {
|
||||
existing.unshift(listener);
|
||||
} else {
|
||||
existing.push(listener);
|
||||
}
|
||||
|
||||
// Check for listener leak
|
||||
m = _getMaxListeners(target);
|
||||
if (m > 0 && existing.length > m && !existing.warned) {
|
||||
existing.warned = true;
|
||||
// No error code for this since it is a Warning
|
||||
// eslint-disable-next-line no-restricted-syntax
|
||||
var w = new Error('Possible EventEmitter memory leak detected. ' +
|
||||
existing.length + ' ' + String(type) + ' listeners ' +
|
||||
'added. Use emitter.setMaxListeners() to ' +
|
||||
'increase limit');
|
||||
w.name = 'MaxListenersExceededWarning';
|
||||
w.emitter = target;
|
||||
w.type = type;
|
||||
w.count = existing.length;
|
||||
ProcessEmitWarning(w);
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
EventEmitter.prototype.addListener = function addListener(type, listener) {
|
||||
return _addListener(this, type, listener, false);
|
||||
};
|
||||
|
||||
EventEmitter.prototype.on = EventEmitter.prototype.addListener;
|
||||
|
||||
EventEmitter.prototype.prependListener =
|
||||
function prependListener(type, listener) {
|
||||
return _addListener(this, type, listener, true);
|
||||
};
|
||||
|
||||
function onceWrapper() {
|
||||
if (!this.fired) {
|
||||
this.target.removeListener(this.type, this.wrapFn);
|
||||
this.fired = true;
|
||||
if (arguments.length === 0)
|
||||
return this.listener.call(this.target);
|
||||
return this.listener.apply(this.target, arguments);
|
||||
}
|
||||
}
|
||||
|
||||
function _onceWrap(target, type, listener) {
|
||||
var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };
|
||||
var wrapped = onceWrapper.bind(state);
|
||||
wrapped.listener = listener;
|
||||
state.wrapFn = wrapped;
|
||||
return wrapped;
|
||||
}
|
||||
|
||||
EventEmitter.prototype.once = function once(type, listener) {
|
||||
checkListener(listener);
|
||||
this.on(type, _onceWrap(this, type, listener));
|
||||
return this;
|
||||
};
|
||||
|
||||
EventEmitter.prototype.prependOnceListener =
|
||||
function prependOnceListener(type, listener) {
|
||||
checkListener(listener);
|
||||
this.prependListener(type, _onceWrap(this, type, listener));
|
||||
return this;
|
||||
};
|
||||
|
||||
// Emits a 'removeListener' event if and only if the listener was removed.
|
||||
EventEmitter.prototype.removeListener =
|
||||
function removeListener(type, listener) {
|
||||
var list, events, position, i, originalListener;
|
||||
|
||||
checkListener(listener);
|
||||
|
||||
events = this._events;
|
||||
if (events === undefined)
|
||||
return this;
|
||||
|
||||
list = events[type];
|
||||
if (list === undefined)
|
||||
return this;
|
||||
|
||||
if (list === listener || list.listener === listener) {
|
||||
if (--this._eventsCount === 0)
|
||||
this._events = Object.create(null);
|
||||
else {
|
||||
delete events[type];
|
||||
if (events.removeListener)
|
||||
this.emit('removeListener', type, list.listener || listener);
|
||||
}
|
||||
} else if (typeof list !== 'function') {
|
||||
position = -1;
|
||||
|
||||
for (i = list.length - 1; i >= 0; i--) {
|
||||
if (list[i] === listener || list[i].listener === listener) {
|
||||
originalListener = list[i].listener;
|
||||
position = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (position < 0)
|
||||
return this;
|
||||
|
||||
if (position === 0)
|
||||
list.shift();
|
||||
else {
|
||||
spliceOne(list, position);
|
||||
}
|
||||
|
||||
if (list.length === 1)
|
||||
events[type] = list[0];
|
||||
|
||||
if (events.removeListener !== undefined)
|
||||
this.emit('removeListener', type, originalListener || listener);
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
|
||||
|
||||
EventEmitter.prototype.removeAllListeners =
|
||||
function removeAllListeners(type) {
|
||||
var listeners, events, i;
|
||||
|
||||
events = this._events;
|
||||
if (events === undefined)
|
||||
return this;
|
||||
|
||||
// not listening for removeListener, no need to emit
|
||||
if (events.removeListener === undefined) {
|
||||
if (arguments.length === 0) {
|
||||
this._events = Object.create(null);
|
||||
this._eventsCount = 0;
|
||||
} else if (events[type] !== undefined) {
|
||||
if (--this._eventsCount === 0)
|
||||
this._events = Object.create(null);
|
||||
else
|
||||
delete events[type];
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
// emit removeListener for all listeners on all events
|
||||
if (arguments.length === 0) {
|
||||
var keys = Object.keys(events);
|
||||
var key;
|
||||
for (i = 0; i < keys.length; ++i) {
|
||||
key = keys[i];
|
||||
if (key === 'removeListener') continue;
|
||||
this.removeAllListeners(key);
|
||||
}
|
||||
this.removeAllListeners('removeListener');
|
||||
this._events = Object.create(null);
|
||||
this._eventsCount = 0;
|
||||
return this;
|
||||
}
|
||||
|
||||
listeners = events[type];
|
||||
|
||||
if (typeof listeners === 'function') {
|
||||
this.removeListener(type, listeners);
|
||||
} else if (listeners !== undefined) {
|
||||
// LIFO order
|
||||
for (i = listeners.length - 1; i >= 0; i--) {
|
||||
this.removeListener(type, listeners[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
function _listeners(target, type, unwrap) {
|
||||
var events = target._events;
|
||||
|
||||
if (events === undefined)
|
||||
return [];
|
||||
|
||||
var evlistener = events[type];
|
||||
if (evlistener === undefined)
|
||||
return [];
|
||||
|
||||
if (typeof evlistener === 'function')
|
||||
return unwrap ? [evlistener.listener || evlistener] : [evlistener];
|
||||
|
||||
return unwrap ?
|
||||
unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
|
||||
}
|
||||
|
||||
EventEmitter.prototype.listeners = function listeners(type) {
|
||||
return _listeners(this, type, true);
|
||||
};
|
||||
|
||||
EventEmitter.prototype.rawListeners = function rawListeners(type) {
|
||||
return _listeners(this, type, false);
|
||||
};
|
||||
|
||||
EventEmitter.listenerCount = function(emitter, type) {
|
||||
if (typeof emitter.listenerCount === 'function') {
|
||||
return emitter.listenerCount(type);
|
||||
} else {
|
||||
return listenerCount.call(emitter, type);
|
||||
}
|
||||
};
|
||||
|
||||
EventEmitter.prototype.listenerCount = listenerCount;
|
||||
function listenerCount(type) {
|
||||
var events = this._events;
|
||||
|
||||
if (events !== undefined) {
|
||||
var evlistener = events[type];
|
||||
|
||||
if (typeof evlistener === 'function') {
|
||||
return 1;
|
||||
} else if (evlistener !== undefined) {
|
||||
return evlistener.length;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
EventEmitter.prototype.eventNames = function eventNames() {
|
||||
return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
|
||||
};
|
||||
|
||||
function arrayClone(arr, n) {
|
||||
var copy = new Array(n);
|
||||
for (var i = 0; i < n; ++i)
|
||||
copy[i] = arr[i];
|
||||
return copy;
|
||||
}
|
||||
|
||||
function spliceOne(list, index) {
|
||||
for (; index + 1 < list.length; index++)
|
||||
list[index] = list[index + 1];
|
||||
list.pop();
|
||||
}
|
||||
|
||||
function unwrapListeners(arr) {
|
||||
var ret = new Array(arr.length);
|
||||
for (var i = 0; i < ret.length; ++i) {
|
||||
ret[i] = arr[i].listener || arr[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
function once(emitter, name) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
function errorListener(err) {
|
||||
emitter.removeListener(name, resolver);
|
||||
reject(err);
|
||||
}
|
||||
|
||||
function resolver() {
|
||||
if (typeof emitter.removeListener === 'function') {
|
||||
emitter.removeListener('error', errorListener);
|
||||
}
|
||||
resolve([].slice.call(arguments));
|
||||
};
|
||||
|
||||
eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });
|
||||
if (name !== 'error') {
|
||||
addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
|
||||
if (typeof emitter.on === 'function') {
|
||||
eventTargetAgnosticAddListener(emitter, 'error', handler, flags);
|
||||
}
|
||||
}
|
||||
|
||||
function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
|
||||
if (typeof emitter.on === 'function') {
|
||||
if (flags.once) {
|
||||
emitter.once(name, listener);
|
||||
} else {
|
||||
emitter.on(name, listener);
|
||||
}
|
||||
} else if (typeof emitter.addEventListener === 'function') {
|
||||
// EventTarget does not have `error` event semantics like Node
|
||||
// EventEmitters, we do not listen for `error` events here.
|
||||
emitter.addEventListener(name, function wrapListener(arg) {
|
||||
// IE does not have builtin `{ once: true }` support so we
|
||||
// have to do it manually.
|
||||
if (flags.once) {
|
||||
emitter.removeEventListener(name, wrapListener);
|
||||
}
|
||||
listener(arg);
|
||||
});
|
||||
} else {
|
||||
throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
|
||||
}
|
||||
}
|
3
start
Normal file
3
start
Normal file
|
@ -0,0 +1,3 @@
|
|||
#/bin/bash
|
||||
|
||||
nohup proxychains node app.js &
|
Loading…
Add table
Add a link
Reference in a new issue