├── app.zip
├── www
├── README.md
├── index.html
├── script.js
└── style.css
├── resources
├── README.md
├── icon.png
└── splash.png
├── README.md
├── LICENSE
└── config.xml
/app.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kourva/Crocsy/HEAD/app.zip
--------------------------------------------------------------------------------
/www/README.md:
--------------------------------------------------------------------------------
1 | App main source
2 | + HTML
3 | + Css
4 | + Javascript
5 |
--------------------------------------------------------------------------------
/resources/README.md:
--------------------------------------------------------------------------------
1 | App resources
2 | + app icon image
3 | + app presplash image
4 |
--------------------------------------------------------------------------------
/resources/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kourva/Crocsy/HEAD/resources/icon.png
--------------------------------------------------------------------------------
/resources/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kourva/Crocsy/HEAD/resources/splash.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Crocsy
4 | Simple proxy app made with HTML, Css, Javascript. Get random free Http/Https proxies
5 |
6 |
7 | # Preview
8 | You can see preview of app [here](https://Kourva.github.io/Crocsy)
9 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Kourva
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/www/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | Crocsy
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Powered by Kourva
28 |
29 |
30 |
31 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 | Crocsy
12 | Simple proxy app made with HTML, Css, Javascript. Get random free Http/Https proxies.
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/www/script.js:
--------------------------------------------------------------------------------
1 | // Github: Kourva
2 |
3 | $(document).ready(async function() {
4 | const response = await fetch("https://api.ipify.org?format=json");
5 | const data = await response.json();
6 | $("#current-ip-area").attr("placeholder", "Your IP: " + data.ip);
7 | });
8 |
9 | async function getProxies() {
10 | const settings = {
11 | async: true,
12 | crossDomain: true,
13 | url: 'https://proxyspider-proxy-spider-proxies-v1.p.rapidapi.com/proxies.example.json',
14 | method: 'GET',
15 | headers: {
16 | 'X-RapidAPI-Key': 'b99fbf92bamsh8f425725f1304e9p119c55jsn98dd1febc9d8',
17 | 'X-RapidAPI-Host': 'proxyspider-proxy-spider-proxies-v1.p.rapidapi.com'
18 | }
19 | };
20 |
21 | // Remove existing cards
22 | const cards = document.querySelectorAll(".card");
23 | if (cards.length > 0) {
24 | for (let i = 0; i < cards.length; i++) {
25 | document.body.removeChild(cards[i]);
26 | }
27 | }
28 |
29 | // Add loader
30 | let loader = document.querySelector(".loader");
31 | if (!loader) {
32 | loader = document.createElement("div");
33 | loader.classList.add("loader");
34 | const span = document.createElement("span");
35 | loader.appendChild(span);
36 | document.body.appendChild(loader);
37 | }
38 |
39 | // Fetch new proxies from the API
40 | $.ajax(settings).done(function(response) {
41 | const proxies = response.data.proxies;
42 |
43 | // Sort proxies by response time
44 | proxies.sort((a, b) => {
45 | if (a.response_time === "fast" && b.response_time === "fast") {
46 | return 0;
47 | } else if (a.response_time === "fast") {
48 | return -1;
49 | } else if (b.response_time === "fast") {
50 | return 1;
51 | } else if (a.response_time === "mediumms" && b.response_time === "mediumms") {
52 | return 0;
53 | } else if (a.response_time === "mediumms") {
54 | return -1;
55 | } else if (b.response_time === "mediumms") {
56 | return 1;
57 | } else {
58 | return a.response_time - b.response_time;
59 | }
60 | });
61 |
62 | for (let i = 0; i < proxies.length; i++) {
63 | const proxy = proxies[i];
64 | const pingTime = proxy.response_time === "fast" ? "fast" : `${proxy.response_time}ms`;
65 | const card = createCard(proxy.ip, proxy.port, proxy.protocols.join('/'), `response time: ${pingTime}`, proxy.country_code);
66 | document.body.appendChild(card);
67 |
68 | // Add copy-to-clipboard functionality to the button on each card
69 | const button = card.querySelector('.card-button');
70 | button.addEventListener("click", function() {
71 | copyToClipboard(`${proxy.ip}:${proxy.port}`);
72 | });
73 | }
74 |
75 | // Remove loader
76 | document.body.removeChild(loader);
77 | });
78 | }
79 |
80 |
81 | function createCard(ip, port, protocol, responseTime, countryCode) {
82 | const card = document.createElement("div");
83 | card.classList.add("card");
84 |
85 | const cardImg = document.createElement("div");
86 | cardImg.classList.add("card-img");
87 |
88 | const button = document.createElement("button");
89 | button.classList.add("card-button");
90 | button.textContent = "Copy";
91 | button.addEventListener("click", function() {
92 | copyToClipboard(`${ip}:${port}`);
93 | });
94 | cardImg.appendChild(button);
95 |
96 | // Add image flag
97 | const imageFlag = document.createElement("div");
98 | imageFlag.classList.add("image-flag");
99 | const img = document.createElement("img");
100 | img.src = `https://flagcdn.com/36x27/${countryCode.toLowerCase()}.png`;
101 | imageFlag.appendChild(img);
102 | cardImg.appendChild(imageFlag);
103 |
104 | card.appendChild(cardImg);
105 |
106 | const textBox = document.createElement("div");
107 | textBox.classList.add("card-textBox");
108 | card.appendChild(textBox);
109 |
110 | const textContent = document.createElement("div");
111 | textContent.classList.add("card-textContent");
112 | textBox.appendChild(textContent);
113 |
114 | const h1 = document.createElement("p");
115 | h1.classList.add("card-h1");
116 | h1.textContent = `${ip}:${port}`;
117 | textContent.appendChild(h1);
118 |
119 | const span = document.createElement("span");
120 | span.classList.add("card-span");
121 | span.textContent = protocol;
122 | textBox.appendChild(span);
123 |
124 | const p = document.createElement("p");
125 | p.classList.add("card-p");
126 | p.textContent = responseTime;
127 |
128 | let response_color = "";
129 | if (responseTime === "response time: fast") {
130 | response_color = "#00ff00";
131 | } else if (responseTime === "response time: mediumms") {
132 | response_color = "#ffff00";
133 | } else {
134 | response_color = "#ff0000";
135 | }
136 | p.style.color = response_color;
137 | textBox.appendChild(p);
138 |
139 | return card;
140 | }
141 |
142 | function copyToClipboard(text) {
143 | const input = document.createElement("input");
144 | input.setAttribute("type", "text");
145 | input.setAttribute("value", text);
146 | document.body.appendChild(input);
147 | input.select();
148 | document.execCommand("copy");
149 | document.body.removeChild(input);
150 | }
--------------------------------------------------------------------------------
/www/style.css:
--------------------------------------------------------------------------------
1 | /* Github: Kourva */
2 | html, body {
3 | width: 100%;
4 | height: 100%;
5 | }
6 |
7 | body {
8 | margin: 0;
9 | background-color: #f39bc3;
10 | padding-top: 80px;
11 | user-select: none;
12 | }
13 |
14 | * {
15 | box-sizing: border-box;
16 | scrollbar-color: #ffffff11
17 | }
18 |
19 | input {
20 | touch-action: manipulation
21 | }
22 |
23 | /* Navigation Bar */
24 | .nav-bar {
25 | position: fixed;
26 | top: 0;
27 | width: 100%;
28 | height: 50px;
29 | padding: 0 30px;
30 | display: flex;
31 | align-items: center;
32 | justify-content: space-between;
33 | background: #f39bc3dd;
34 | backdrop-filter: blur(5px);
35 | backface-visibility: hidden;
36 | transform: translateZ(0px);
37 | z-index: 10;
38 | box-shadow: #f39bc3 0px 30px 15px -15px inset, #f39bc3 0px 18px 36px -15px inset;
39 | }
40 |
41 | .nav-bar h1 {
42 | background-image: linear-gradient(90deg, #880088 0px, #ee00ee 40px, #880088 80px);
43 | -webkit-background-clip: text;
44 | -webkit-text-fill-color: transparent;
45 | font-size: 24px;
46 | }
47 |
48 | .nav-bar2 {
49 | position: fixed;
50 | top: 50px;
51 | width: 100%;
52 | height: 30px;
53 | padding: 0 30px;
54 | margin-bottom: 5px;
55 | display: flex;
56 | align-items: center;
57 | background: #f39bc3dd;
58 | backdrop-filter: blur(5px);
59 | backface-visibility: hidden;
60 | transform: translateZ(0px);
61 | box-shadow: rgba(0, 0, 0, 0.07) 0px 1px 1px, rgba(0, 0, 0, 0.07) 0px 2px 2px, rgba(0, 0, 0, 0.07) 0px 4px 4px, rgba(0, 0, 0, 0.07) 0px 8px 8px, rgba(0, 0, 0, 0.07) 0px 16px 16px;
62 | z-index: 10;
63 | animation: shimmer 4s infinite;
64 | }
65 |
66 | .nav-bar2 p {
67 | color: #212121;
68 | font-size: 16px;
69 | font-family: monospace;
70 | }
71 |
72 | /* Animation Cube */
73 | .cube {
74 | -webkit-transform-style: preserve-3d;
75 | -webkit-animation: spin 6s infinite linear;
76 | position: fixed;
77 | width: 20px;
78 | height: 20px;
79 | top: 28%;
80 | left: 90%;
81 | right: 0
82 | }
83 |
84 | .cube div {
85 | width: 20px;
86 | height: 20px;
87 | line-height: 20px;
88 | text-align: center;
89 | border: 2px solid #aa00aa;
90 | background-color: #29324111;
91 | font-size: 42px;
92 | display: block;
93 | position: absolute;
94 | mix-blend-mode: contrast
95 | }
96 |
97 | .cube div.top {
98 | -webkit-transform: rotateX(90deg);
99 | margin-top: -5px
100 | }
101 |
102 | .cube div.right {
103 | -webkit-transform: rotateY(90deg);
104 | margin-left: 5px
105 | }
106 |
107 | .cube div.bottom {
108 | -webkit-transform: rotateX(-90deg);
109 | margin-top: 5px
110 | }
111 |
112 | .cube div.left {
113 | -webkit-transform: rotateY(-90deg);
114 | margin-left: -5px
115 | }
116 |
117 | .cube div.front {
118 | -webkit-transform: translateZ(5px)
119 | }
120 |
121 | .cube div.back {
122 | -webkit-transform: translateZ(-5px) rotateX(180deg)
123 | }
124 |
125 | .cube div.back span {
126 | transform: rotate(-180deg)
127 | }
128 |
129 | @-webkit-keyframes spin {
130 | 0% {
131 | -webkit-transform: rotateX(-20deg) rotateY(20deg)
132 | }
133 |
134 | 100% {
135 | -webkit-transform: rotateX(-20deg) rotateY(380deg)
136 | }
137 |
138 | }
139 |
140 | .cube:hover {
141 | -webkit-animation: spin 2s infinite linear;
142 | box-shadow: rgba(0, 0, 0, 0.1) 0px 2px 7px 4px
143 | }
144 |
145 | /* Proxy Card */
146 | .card {
147 | position: revert-layer;
148 | width: 90%;
149 | max-width: 90%;
150 | height: 100px;
151 | border-radius: 10px;
152 | margin: auto;
153 | background-color: #231f20;
154 | display: flex;
155 | align-items: center;
156 | justify-content: left;
157 | transition: 0.5s ease-in-out;
158 | background-image: linear-gradient(90deg, #ffffff11 0px, #f39bc322 40px, #ffffff11 80px);
159 | background-size: 300%;
160 | background-position: 100% 0;
161 | animation: shimmer 4s infinite;
162 | box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;
163 | margin-bottom: 10px;
164 | z-index: 20;
165 | }
166 |
167 | .card:hover {
168 | transform: scale(1.05);
169 | position: revert-layer;
170 | }
171 |
172 | .card-button {
173 | position: revert-layer;
174 | width: 90%;
175 | margin: 3px;
176 | padding: 8px 8px;
177 | border: none;
178 | background-color: #313131;
179 | color: #fff;
180 | cursor: pointer;
181 | outline: none;
182 | transition: 1s ease-in-out;
183 | border-top-left-radius: 10px;
184 | }
185 |
186 | .card-button:hover {
187 | position: revert-layer;
188 | transition: .5s ease-in-out;
189 | box-shadow: rgba(50, 50, 93, 0.25) -10px 30px 60px -12px inset, rgba(0, 0, 0, 0.3) -10px 18px 36px -18px inset;
190 | color: #000000;
191 | background-color: #bc7a9f
192 | }
193 |
194 | .image-flag {
195 | display: inline-block;
196 | width: 90%;
197 | padding: 8px;
198 | margin: 3px;
199 | border: none;
200 | color: #fff;
201 | font-size: 16px;
202 | text-align: center;
203 | cursor: pointer;
204 | outline: none;
205 | border-top-left-radius: 10px;
206 | border-bottom-right-radius: 10px;
207 | }
208 |
209 | /* To round the corners of the image */
210 | .image-flag img {
211 | border-top-left-radius: 10px;
212 | border-bottom-right-radius: 10px;
213 | }
214 |
215 | .card-img {
216 | width: 20%;
217 | height: 100%;
218 | margin-left: 0px;
219 | border-top-left-radius: 10px;
220 | border-bottom-left-radius: 10px;
221 | background: #212121;
222 | }
223 |
224 | .card-textBox {
225 | width: calc(100% - 90px);
226 | margin-left: 10px;
227 | color: white;
228 | align-items: center;
229 | justify-content: space-between;
230 | font-family: 'Poppins' sans-serif;
231 | }
232 |
233 | .card-textContent {
234 | display: flex;
235 | align-items: center;
236 | justify-content: space-between;
237 | }
238 |
239 | .card-span {
240 | font-size: 16px;
241 | font-family: monospace;
242 | color: #aaaaaa;
243 | }
244 |
245 | .card-h1 {
246 | font-size: 14px;
247 | font-weight: bold;
248 | font-family: monospace;
249 | }
250 |
251 | .card-p {
252 | font-size: 12px;
253 | font-family: monospace;
254 | color: #ffffff;
255 | }
256 |
257 | @keyframes shimmer {
258 | to {
259 | background-position: -100% 0
260 | }
261 |
262 | }
263 |
264 | /* Input Area */
265 | .current-ip {
266 | position: revert-layer;
267 | display: inline-flex;
268 | width: 90%;
269 | height: 40px;
270 | background-color: #211b1d;
271 | left: 0;
272 | right: 0;
273 | margin: 5%;
274 | border-radius: 10px;
275 | background-image: linear-gradient(90deg, #ffffff11 0px, #ea80fc55 40px, #ffffff11 80px);
276 | background-size: 300%;
277 | background-position: 100% 0;
278 | animation: shimmer 4s infinite;
279 | box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px
280 | }
281 |
282 | .input-field {
283 | width: 350%;
284 | height: 100%;
285 | padding: 10px;
286 | border-top-left-radius: 10px;
287 | border-bottom-left-radius: 10px;
288 | background-color: #00000044;
289 | border: none;
290 | outline: none;
291 | font-family: monospace;
292 | color: #ffffff;
293 | font-weight: bold;
294 | }
295 |
296 | .submit-btn {
297 | position: revert-layer;
298 | right: 0;
299 | left: 0;
300 | width: 100%;
301 | height: 100%;
302 | border-top-right-radius: 10px;
303 | border-bottom-right-radius: 10px;
304 | border: none;
305 | background-color: #ee98bf;
306 | outline: none;
307 | font-family: monospace;
308 | box-shadow: rgba(50, 50, 93, 0.25) -10px 30px 60px -12px inset, rgba(0, 0, 0, 0.3) -10px 18px 36px -18px inset;
309 | transition: 0.3s;
310 | overflow: hidden;
311 | align-items: center;
312 | justify-content: center;
313 | box-sizing: border-box
314 | }
315 |
316 | .submit-btn span {
317 | letter-spacing: .1rem;
318 | transition: 0.3s;
319 | box-sizing: border-box;
320 | position: revert-layer;
321 | background: none
322 | }
323 |
324 | .submit-btn span::before {
325 | box-sizing: border-box;
326 | position: revert-layer;
327 | content: "Search";
328 | background: none
329 | }
330 |
331 | .submit-btn:hover, .submit-btn:focus {
332 | background: #231f20
333 | }
334 |
335 | .submit-btn:hover span, .submit-btn:focus span {
336 | color: #ffffff
337 | }
338 |
339 | .submit-btn:hover span::before, .submit-btn:focus span::before {
340 | animation: chitchat linear both 3s
341 | }
342 |
343 | @keyframes chitchat {
344 | 0% {
345 | content: "Searc#"
346 | }
347 |
348 | 5% {
349 | content: "Sear.#"
350 | }
351 |
352 | 10% {
353 | content: "Se^{.#"
354 | }
355 |
356 | 15% {
357 | content: "-!^{.#"
358 | }
359 |
360 | 20% {
361 | content: "S!^{.#"
362 | }
363 |
364 | 25% {
365 | content: "Se^{.#"
366 | }
367 |
368 | 30% {
369 | content: "Sea{.#"
370 | }
371 |
372 | 35% {
373 | content: "Sear.#"
374 | }
375 |
376 | 40% {
377 | content: "Searh#"
378 | }
379 |
380 | 45% {
381 | content: "Search"
382 | }
383 |
384 | 50% {
385 | content: "?2@%"
386 | }
387 |
388 | 55% {
389 | content: "\;1}]"
390 | }
391 |
392 | 60% {
393 | content: "?{%:%"
394 | }
395 |
396 | 65% {
397 | content: "|{f[4"
398 | }
399 |
400 | 70% {
401 | content: "{4%0%"
402 | }
403 |
404 | 75% {
405 | content: "'1_0<"
406 | }
407 |
408 | 80% {
409 | content: "{0%"
410 | }
411 |
412 | 85% {
413 | content: "]>'"
414 | }
415 |
416 | 90% {
417 | content: "4#$"
418 | }
419 |
420 | 95% {
421 | content: "2@#^@"
422 | }
423 |
424 | 100% {
425 | content: "Search"
426 | }
427 |
428 | }
429 |
430 | .loader {
431 | position: relative;
432 | top: 25%;
433 | width: 150px;
434 | height: 150px;
435 | margin: auto;
436 | background: transparent;
437 | border-radius: 50%;
438 | box-shadow: 25px 25px 75px rgba(0, 0, 0, 0.55);
439 | border: 1px solid #232323;
440 | display: flex;
441 | align-items: center;
442 | justify-content: center;
443 | overflow: hidden;
444 | }
445 |
446 | .loader::before {
447 | content: '';
448 | position: absolute;
449 | inset: 20px;
450 | background: transparent;
451 | border: 1px dashed #212121;
452 | border-radius: 50%;
453 | box-shadow: inset -5px -5px 25px rgba(0, 0, 0, 0.25), inset 5px 5px 35px rgba(0, 0, 0, 0.25);
454 | }
455 |
456 | .loader::after {
457 | content: '';
458 | position: absolute;
459 | width: 50px;
460 | height: 50px;
461 | border-radius: 50%;
462 | border: 1px dashed #212121;
463 | box-shadow: inset -5px -5px 25px rgba(0, 0, 0, 0.25), inset 5px 5px 35px rgba(0, 0, 0, 0.25);
464 | }
465 |
466 | .loader span {
467 | position: absolute;
468 | top: 50%;
469 | left: 50%;
470 | width: 50%;
471 | height: 100%;
472 | background: transparent;
473 | transform-origin: top left;
474 | animation: radar81 2s linear infinite;
475 | border-top: 1px solid #000000;
476 | }
477 |
478 | .loader span::before {
479 | content: '';
480 | position: absolute;
481 | top: 0;
482 | left: 0;
483 | width: 100%;
484 | height: 100%;
485 | background: #212121;
486 | transform-origin: top left;
487 | transform: rotate(-55deg);
488 | filter: blur(30px) drop-shadow(20px 20px 20px seagreen);
489 | }
490 |
491 | @keyframes radar81 {
492 | 0% {
493 | transform: rotate(0deg);
494 | }
495 |
496 | 100% {
497 | transform: rotate(360deg);
498 | }
499 |
500 | }
501 |
--------------------------------------------------------------------------------