Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
titaniumnetwork-dev
GitHub Repository: titaniumnetwork-dev/Ludicrous
Path: blob/main/pages/index.tsx
1223 views
1
import type { NextPage } from 'next'
2
import Head from 'next/head'
3
import { IoAppsOutline, IoSettingsOutline, IoGameControllerOutline, IoSearch, IoGlobe } from "react-icons/io5";
4
import { FaGithub, FaEyeSlash, FaEye } from "react-icons/fa";
5
import styles from '../styles/Home.module.css'
6
import { useRouter } from 'next/router';
7
import { useEffect, useState } from 'react';
8
import { renderToString } from 'react-dom/server'
9
10
const g: any = global || {};
11
12
const Close: Function = () => {
13
if (global.window) {
14
if (global.window.opener) global.window.close();
15
global.window.history.go(-(global.window.history.length-1));
16
global.window.location.replace('https://www.google.com/webhp')
17
}
18
}
19
20
const stealthOn: any = () => {
21
const eyeOpen: any = document.getElementById('eye-open');
22
const eyeClosed: any = document.getElementById('eye-closed');
23
24
eyeClosed.style.display = 'block';
25
eyeOpen.style.display = 'none';
26
27
localStorage.setItem('__lud$method', 'stealth')
28
}
29
30
const stealthOff: any = () => {
31
const eyeOpen: any = document.getElementById('eye-open');
32
const eyeClosed: any = document.getElementById('eye-closed');
33
34
eyeOpen.style.display = 'block';
35
eyeClosed.style.display = 'none';
36
37
localStorage.setItem('__lud$method', 'normal')
38
}
39
40
const Home: NextPage = ({ particles }: any) => {
41
var Router = useRouter();
42
var win: any = global.window||{};
43
44
const [ location, setLocation ] = useState<any>(win.location || {href: ''});
45
46
useEffect(() => {
47
Router.prefetch('/options');
48
Router.prefetch('/apps');
49
Router.prefetch('/');
50
51
document.getElementById(styles.form)!.addEventListener('submit', (e) => {
52
e.preventDefault();
53
e.stopImmediatePropagation();
54
55
var data = `?${Object.entries(Object.fromEntries(new FormData(e.target as HTMLFormElement).entries())).map((entry: any) => entry.join('=')).join('&')}`;
56
57
Router.push('/route'+data);
58
});
59
60
window.addEventListener('mousedown', (e) => {
61
var container: any = document.getElementById('omnibox-container');
62
63
if (!container) return;
64
65
if (e.target !== document.getElementById(styles["main-input"]) && e.target !== container && !container.contains(e.target)) {
66
container.style.display = "none";
67
}
68
69
if (e.target === document.getElementById(styles["main-input"])) {
70
container.style.display = "block";
71
}
72
});
73
74
document.getElementById('omnibox-container')!.querySelectorAll('.'+styles['omnibox-entry']).forEach((entry: any) => {
75
entry.addEventListener('click', () => {
76
(document.getElementById(styles["main-input"]) as HTMLInputElement)!.value = entry.querySelector('span')!.innerHTML;
77
(document.getElementById(styles["main-input"])!.parentNode as HTMLFormElement)!.requestSubmit();
78
});
79
});
80
81
(document.getElementById(styles['main-page-init'])||document.body).style.opacity = '1';
82
83
var inputEl: any = document.getElementById(styles["main-input"]);
84
inputEl.oninput = omniBox;
85
86
if (localStorage.getItem('__lud$method')=='normal') {
87
const eyeOpen: any = document.getElementById('eye-open');
88
const eyeClosed: any = document.getElementById('eye-closed');
89
90
eyeOpen.style.display = 'block';
91
eyeClosed.style.display = 'none';
92
}
93
});
94
95
const Apps: any = () => {
96
if (global.window) {
97
(document.getElementById(styles['main-page-init'])||document.body).style.opacity = '0';
98
99
setTimeout(function() {
100
win.particles = particles;
101
Router.replace('/apps/')
102
}, 150);
103
}
104
}
105
106
const Games: any = () => {
107
if (global.window) {
108
(document.getElementById(styles['main-page-init'])||document.body).style.opacity = '0';
109
110
setTimeout(function() {
111
win.particles = particles;
112
Router.replace('/games/')
113
}, 150);
114
}
115
}
116
117
const Settings: any = () => {
118
if (global.window) {
119
(document.getElementById(styles['main-page-init'])||document.body).style.opacity = '0';
120
121
setTimeout(function() {
122
win.particles = particles;
123
Router.replace('/options/')
124
}, 150);
125
}
126
}
127
128
const omniBox: any = async (e: any) => {
129
if (e.keyCode === 13)
130
return (document.getElementById(styles.form) as HTMLFormElement)!.requestSubmit();
131
132
var val: any = document.getElementById(styles["main-input"]);
133
var value = val.value + '';
134
var container: any = document.getElementById('omnibox-container');
135
136
if (value === '' && !value) {
137
container.innerHTML = [
138
{
139
phrase: 'https://discord.com'
140
},
141
{
142
phrase: 'https://www.youtube.com'
143
},
144
{
145
phrase: 'https://reddit.com'
146
},
147
{
148
phrase: 'https://twitter.com'
149
},
150
{
151
phrase: 'https://play.geforcenow.com/mall'
152
}
153
].map((entry: any) => {
154
return `<div class="${styles['omnibox-entry']}">${renderToString(entry.phrase.match(/^http(s?):/) ? <IoGlobe style={{verticalAlign: '-2px'}} /> : <IoSearch style={{verticalAlign: '-2px'}} />)} <span>${entry.phrase}</span></div>`;
155
}).join('');
156
157
container.querySelectorAll('.'+styles['omnibox-entry']).forEach((entry: any) => {
158
entry.addEventListener('click', () => {
159
val.value = entry.querySelector('span')!.innerHTML;
160
val.parentNode.requestSubmit();
161
});
162
});
163
164
container.style.display = "block";
165
166
return false;
167
}
168
169
var req = await fetch('/api/bare/v2/', {
170
method: 'GET',
171
headers: {
172
'x-bare-host': 'duckduckgo.com',
173
'x-bare-headers': JSON.stringify({Host: 'duckduckgo.com'}),
174
'x-bare-path': '/ac/?q='+encodeURIComponent(value),
175
'x-bare-port': '443',
176
'x-bare-protocol': 'https:',
177
}
178
});
179
180
if (value === val.value) {
181
var list = await req.json();
182
183
container.innerHTML = list.map((entry: any) => {
184
return `<div class="${styles['omnibox-entry']}">${renderToString(entry.phrase.match(/^http(s?):/) ? <IoGlobe style={{verticalAlign: '-2px'}} /> : <IoSearch style={{verticalAlign: '-2px'}} />)} <span>${entry.phrase}</span></div>`;
185
}).join('');
186
187
container.querySelectorAll('.'+styles['omnibox-entry']).forEach((entry: any) => {
188
entry.addEventListener('click', () => {
189
val.value = entry.querySelector('span')!.innerHTML;
190
val.parentNode.requestSubmit();
191
});
192
});
193
194
container.style.display = "block";
195
}
196
}
197
198
return (
199
<div className={styles.main}>
200
<Head>
201
<meta name="description" content="Ludicrous | A School Site" />
202
<meta name="theme-color" content="#2467a5" />
203
<meta charSet='utf-8' />
204
<meta httpEquiv='X-UA-Compatible' content='IE=edge' />
205
<meta name='viewport' content='minimum-scale=1, initial-scale=1, width=device-width, shrink-to-fit=no, viewport-fit=cover, maximum-scale=6'/>
206
<title>Ludicrous</title>
207
<link rel='manifest' href='/manifest.json' />
208
<link href='/icons/favicon-16x16.png' rel='icon' type='image/png' sizes='16x16' />
209
<link href='/icons/favicon-32x32.png' rel='icon' type='image/png' sizes='32x32' />
210
<link rel='apple-touch-icon' href='/icons/apple-icon.png'></link>
211
</Head>
212
213
<main className={styles.main}>
214
215
<div id={styles['main-page-content']}>
216
217
<div onClick={Apps} className={styles["main-page-apps-init"]} id="apps-init"><IoAppsOutline /></div>
218
<div onClick={Games} className={styles["main-page-games-init"]} id="games-init"><IoGameControllerOutline /></div>
219
<div className={styles["main-page-about-init"]} id="ab-cloak" onClick={Settings}><IoSettingsOutline /></div>
220
221
<div id={styles["main-page-init"]}>
222
<h1 className={styles["main-title"]}><span>Ludicrous</span> <FaGithub style={{"cursor": "pointer"}} onClick={(e) => {window.open('https://github.com/TitaniumNetwork-Dev/Ludicrous');}} /></h1>
223
<h2 className={styles["main-desc"]}>Surf the Unblo​cked Web</h2>
224
<form method="GET" id={styles.form} action="/route">
225
<input name="query" id={styles["main-input"]} onKeyDown={(event: any) => event.key == "Enter" ? (event.target as any)?.parentNode!.requestSubmit() : null} placeholder="Enter URL or Search Query" autoComplete="off" />
226
<input title="hidden" placeholder="hidden" style={{position: "absolute", left: "-1000000000000px"}} value={location.href} name="origin" readOnly />
227
<div id="omnibox-container" style={{display: "none"}} className={styles['omnibox-container']}>
228
{
229
[
230
{
231
phrase: 'https://discord.com'
232
},
233
{
234
phrase: 'https://www.youtube.com'
235
},
236
{
237
phrase: 'https://reddit.com'
238
},
239
{
240
phrase: 'https://twitter.com'
241
},
242
{
243
phrase: 'https://play.geforcenow.com/mall'
244
}
245
].map((entry: any) => {
246
return <div key={entry.phrase} className={styles['omnibox-entry']}>{ entry.phrase.match(/^http(s?):/) ? <IoGlobe style={{verticalAlign: '-2px'}} /> : <IoSearch style={{verticalAlign: '-2px'}} /> } <span>{ entry.phrase }</span></div>;
247
})
248
}
249
</div>
250
<div id="eye-closed" className={styles["main-page-stealth-switch"]} onClick={stealthOff} title="stealth mode is on"><FaEyeSlash /></div>
251
<div id="eye-open" style={{display:'none'}} className={styles["main-page-stealth-switch"]} onClick={stealthOn} title="stealth mode is off"><FaEye /></div>
252
</form>
253
</div>
254
</div>
255
</main>
256
</div>
257
);
258
};
259
260
261
export default Home
262
263