forked from tcp.direct/tcp.ac
1
0
Fork 0
tcp.ac/site/index.html

386 lines
15 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="css/spectre.min.css"/>
<link rel="stylesheet" href="css/spectre-icons.min.css"/>
<style>
div[id$="-form"]:not(.active) {
display: none;
}
</style>
<title>tcp.ac</title>
<pre style="text-align: center; font-weight: bold;">
,d
88
MM88MMM ,adPPYba, 8b,dPPYba, ,adPPYYba, ,adPPYba,
88 a8" "" 88P' "8a "" `Y8 a8" ""
88 8b 88 d8 ,adPPPPP88 8b
88, "8a, ,aa 88b, ,a8" 888 88, ,88 "8a, ,aa
"Y888 `"Ybbd8"' 88`YbbdP"' 888 `"8bbdP"Y8 `"Ybbd8"'
88
88
</pre>
</head>
<body>
<nav class="container mb-2 pb-2">
<div class="columns">
<div
class="column col-sm-12 col-md-10 col-lg-8 col-6 col-mx-auto"
>
<ul class="tab tab-block">
<li id="img-tab" class="tab-item active">
<a href="#">img</a>
</li>
<li id="url-tab" class="tab-item" style="display:none;">
<a href="#">txt</a>
</li>
<li id="url-tab" class="tab-item" style="display:none;">
<a href="#">url</a>
</li>
</ul>
</div>
</div>
</nav>
<main class="container mt-2 pt-2">
<div class="columns">
<div
id="img-form"
class="column col-sm-12 col-md-10 col-lg-8 col-6 col-mx-auto active">
<div class="form-group">
<label class="form-label" for="img-file">img</label>
<input
class="form-input"
id="img-file"
type="file"
required/>
<button
class="btn btn-primary input-group-btn"
id="img-submit"
disabled>
<i class="icon icon-upload"></i>
</button>
<p class="form-input-hint">accepted: jpeg,png,gif</p>
</div>
</div>
<div
id="url-form"
class="column col-sm-12 col-md-10 col-lg-8 col-6 col-mx-auto">
<div class="form-group">
<label class="form-label" for="url-url">url</label>
<div class="input-group">
<span class="input-group-addon">/l/</span>
<input
id="url-url"
class="form-input"
type="text"
placeholder="404040"
required
/>
<button
class="btn btn-primary input-group-btn"
id="url-submit"
disabled
>
<i class="icon icon-upload"></i>
</button>
</div>
</div>
<div class="form-group">
<label class="form-label" for="url-forward"
>Forward</label
>
<input
id="url-forward"
class="form-input"
type="url"
placeholder="http://legitwebsite.cool/goatse.png"
required
/>
</div>
</div>
<div
id="txt-form"
class="column col-sm-12 col-md-10 col-lg-8 col-6 col-mx-auto"
>
<div class="form-group">
<label class="form-label" for="txt-url">url</label>
<div class="input-group">
<span class="input-group-addon">/t/</span>
<input
id="txt-url"
class="form-input"
type="text"
placeholder="a1b2c3"
required
/>
<button
class="btn btn-primary input-group-btn"
id="txt-submit"
disabled
>
<i class="icon icon-upload"></i>
</button>
</div>
</div>
<div class="form-group">
<label class="form-label" for="txt-contents"
>Contents</label
>
<textarea
id="txt-contents"
class="form-input"
placeholder="rm -rf /* --no-preserve-root"
required
></textarea>
</div>
<div class="form-group">
<label class="form-switch">
<input id="txt-highlight" type="checkbox" />
<i class="form-icon"></i> syntax highlighting
</label>
</div>
</div>
</div>
</main>
<div id="modal" class="modal">
<a id="modal-bg" href="#" class="modal-overlay"></a>
<div class="modal-container">
<div class="modal-header">
<div class="modal-title h6">success</div>
</div>
<div class="modal-body">
<div class="content">
<div class="form-group">
<div class="has-icon-right">
<input
id="modal-input"
type="url"
class="form-input"
/>
<i class="form-icon icon icon-copy"></i>
</div>
<p class="form-input-hint" id="modal-hint">
click to copy to clipboard
</p>
</div>
</div>
</div>
</div>
</div>
<script>
const tabs = {
img: [
document.querySelector("#img-tab"),
document.querySelector("#img-form"),
],
/*
url: [
document.querySelector("#url-tab"),
document.querySelector("#url-form"),
],
txt: [
document.querySelector("#txt-tab"),
document.querySelector("#txt-form"),
],
*/
};
const inputs = {
img: [
document.querySelector("#img-file"),
document.querySelector("#img-submit"),
],
/*
url: [
document.querySelector("#url-url"),
document.querySelector("#url-forward"),
document.querySelector("#url-submit"),
],
txt: [
document.querySelector("#txt-url"),
document.querySelector("#txt-contents"),
document.querySelector("#txt-highlight"),
document.querySelector("#txt-submit"),
],
*/
};
const used = {
img: [],
url: [],
txt: [],
};
let baseurl = `${location.protocol}//${location.host}${location.pathname}`;
if (!baseurl.endsWith("/")) {
baseurl += "/";
}
const modal = {
self: document.querySelector("#modal"),
input: document.querySelector("#modal-input"),
bg: document.querySelector("#modal-bg"),
hint: document.querySelector("#modal-hint"),
};
const openModal = (text) => {
modal.input.value = text;
modal.hint.innerText = "click to copy to clipboard";
modal.self.classList.add("active");
};
const closeModal = () => {
modal.hint.innerText = "copied to clipboard";
setTimeout(() => {
modal.self.classList.remove("active");
modal.input.value = "";
}, 1000);
};
modal.input.onclick = (e) => {
e.preventDefault();
modal.input.select();
document.execCommand("copy");
closeModal();
};
modal.bg.onclick = closeModal;
const fetchUsed = () => {
fetch(`${baseurl}i`)
.then((response) => response.json())
.then((json) => (used.img = json));
/*
fetch(`${baseurl}u`)
.then((response) => response.json())
.then((json) => (used.url = json));
fetch(`${baseurl}t`)
.then((response) => response.json())
.then((json) => (used.txt = json));
*/
};
fetchUsed();
/*
for (const group in tabs) {
tabs[group][0].onclick = () => {
const active = document.querySelectorAll(".active");
for (const el of active) {
el.classList.remove("active");
}
for (const el of tabs[group]) {
el.classList.add("active");
}
};
}
*/
const group = "img";
const submitButton = inputs[group][inputs[group].length - 1];
if (group === "img") {
submitButton.addEventListener("click", () => {
const imgFileInput = inputs.img[1];
const file = imgFileInput.img[0];
if (!file) {
alert(new Error("select a file first"));
return;
}
const fd = new FormData();
fd.append("upload", file);
let status;
fetch(url, {
method: "pUT",
body: fd,
})
.then((response) => {
status = response.status;
return response.text();
})
.then((text) => {
if (status !== 201) {
throw new Error(text);
} else {
openModal(url);
clearInputs();
fetchUsed();
}
})
.catch((error) => alert(error));
});
/*
} else if (group === "url") {
submitButton.addEventListener("click", () => {
const id = urlInput.value;
const forward = inputs.url[1].value;
const url = `${baseurl}l/${id}`;
let status;
fetch(url, {
method: "pUT",
body: JSON.stringify({ forward }),
headers: { "content-Type": "application/json" },
})
.then((response) => {
status = response.status;
return response.text();
})
.then((text) => {
if (status !== 201) {
throw new Error(text);
} else {
openModal(url);
clearInputs();
fetchUsed();
}
})
.catch((error) => alert(error));
});
} else if (group === "txt") {
submitButton.addEventListener("click", () => {
const id = urlInput.value;
const contents = inputs.txt[1].value;
const highlight = inputs.txt[2].checked;
const url = `${baseurl}t/${id}`;
let status;
fetch(url, {
method: "pUT",
body: JSON.stringify({ contents, highlight }),
headers: { "content-Type": "application/json" },
})
.then((response) => {
status = response.status;
return response.text();
})
.then((text) => {
if (status !== 201) {
throw new Error(text);
} else {
openModal(url);
clearInputs();
fetchUsed();
}
})
.catch((error) => alert(error));
});
}
*/
}
</script>
</body>
</html>