- ID de l'analyse :
- c6e3b79a-f9d1-4a75-9521-2dcb61d747a0Terminée
- URL soumise :
- https://buzzheavier.com/
- Fin du rapport :
Liens : 0 trouvé(s)
Liens sortants identifiés à partir de la page
Variables JavaScript : 12 trouvée(s)
Les variables JavaScript globales chargées dans l'objet fenêtre d'une page sont des variables déclarées en dehors des fonctions et accessibles depuis n'importe quel endroit du code au sein du champ d'application actuel
Nom | Type |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
App | function |
parseXHRError | function |
copyTextToClipboard | function |
copyTextToClipboardFallback | function |
humanReadableSize | function |
htmx | object |
Alpine | object |
Messages de journal de console : 0 trouvé(s)
Messages consignés dans la console web
HTML
Le corps HTML de la page en données brutes
<!DOCTYPE html><html lang="en"><head>
<meta charset="UTF-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>buzzheavier</title>
<meta name="title" content="buzzheavier">
<meta name="description" content="Motherfucking file hosting website">
<meta name="application-name" content="buzzheavier.com">
<link rel="shortcut icon" href="/static/favicon.ico">
<script src="/static/bundle.js?v=7d6c1340b60e01023feecbb5cc3c40432da6099b-dirty" defer=""></script>
<link rel="stylesheet" href="/static/whysostylish.css?v=7d6c1340b60e01023feecbb5cc3c40432da6099b-dirty">
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" defer=""></script>
<style> .htmx-indicator{opacity:0} .htmx-request .htmx-indicator{opacity:1; transition: opacity 200ms ease-in;} .htmx-request.htmx-indicator{opacity:1; transition: opacity 200ms ease-in;} </style></head>
<body class="min-h-screen p-1.5" x-data="App()">
<div>
<p class="text-center text-4xl font-bold mt-1 mb-0">BUZZHEAVIER</p>
<p class="text-center mt-0">Simple fast anonymous file sharing for everyone.</p>
</div>
<ul id="menu" class="text-center p-0 mb-7">
<li>Index</li>
<li><a href="/announcement" class="text-danger">Announcement</a></li>
<li><a href="/speedtest">Speedtest</a></li>
<li><a href="/help">Help</a></li>
<li><a href="/privacy">Privacy</a></li>
<li><a href="/terms">Terms</a></li>
<li><a href="/contact">Contact</a></li>
<li><a href="/login">Login</a></li>
</ul>
<div class="mx-auto max-w-[60rem]" hx-ext="response-targets">
<div>
<p>buzzheavier is a simple, fast and privacy-oriented file hosting provider.</p>
<label for="file-input"><input type="file" id="file-input" multiple=""></label>
<button id="upload-button" @click="upload($event)">Upload</button>
<button @click="abort" :disabled="queued.filter(t => t.status === 'inprogress').length === 0" disabled="disabled">Cancel</button>
<button @click="copyLinks" :disabled="completed.length === 0" x-text="copyLinksButtonText" disabled="disabled">Copy links</button>
<ul>
<template x-for="task in queued">
<li x-show="task.status !== 'completed'">
<div class="flex-col flex">
<span x-text="task.file.name" class="mt-2"></span>
<div class="progress">
<div class="progress-bar" :style="'width: ' + task.stats.progress + '%;'" :class="{'progress-bar-danger': task.error}"></div>
</div>
<div class="flex justify-between">
<span x-text="task.statsText" :class="{'text-danger': task.error}"></span>
<button x-show="task.status === 'inprogress'" @click="task.abort()">Cancel</button>
</div>
</div>
</li>
</template>
<template x-for="task in completed">
<li>
<a :href="task.link" x-text="`${task.file.name} - ${humanReadableSize(task.file.size)}`" target="_blank"></a>
</li>
</template>
</ul>
<p>Files uploaded from here won't be saved to your account.</p>
<p>Our main features include</p>
<ul>
<li>It's fast.</li>
<li>No bloatware.</li>
<li>Size doesn't matter (file's).</li>
<li>No download speed caps.</li>
<li>Files will be kept forever as long as it was downloaded within the last 30 days.</li>
<li>Online previews for media files.</li>
<li>Doesn't track you - no logs who download who upload.</li>
</ul>
<div>
<p>
<span>Account - </span> <a href="/login">Login</a> / <a href="/login">Signup</a>
</p>
</div>
<p>We emphasize Privacy, Net Neutrality and Free Software.</p>
<p class="text-right">
<i>Malo periculosam libertatem quam quietum servitium.</i>
</p>
</div>
<script>
function App() {
return {
queued: [],
completed: [],
running: 0,
concurrency: 5,
copyLinksButtonText: "Copy links",
upload() {
const fi = document.getElementById("file-input")
const files = Array.from(fi.files)
if (!files || files.length === 0) return;
const findOne = files.filter(f => f.name.length > 200)
if (findOne.length) this.error = "file name must not exceed more than 200 characters"
else {
for (const file of files) {
const mp = new MultipartUpload(file, null, false)
this.queued.push(Alpine.reactive(mp))
this.process()
}
}
fi.value = null
},
process() {
this.queued.forEach((task) => {
if (task.status === "queued" && this.running < this.concurrency) {
this.running += 1;
task.start().finally(() => {
if (task.status === "completed") {
this.completed.push(task)
}
this.running -= 1;
this.process();
})
}
});
this.queued = this.queued.filter(task => task !== undefined);
},
abort() {
this.queued.forEach((task) => {
if (task.status !== "aborted" || task.status !== "completed") {
task.abort()
}
});
},
copyLinks() {
const links = []
this.completed.forEach(task => {
links.push(task.link)
})
copyTextToClipboard(links.join('\n'))
this.copyLinksButtonText = "Links copied";
setTimeout(() => {
this.copyLinksButtonText = "Copy links";
}, 500);
},
init() {
window.addEventListener('beforeunload', (e) => {
const foundOne = this.queued.findIndex(task => task.status !== "completed")
if (foundOne !== -1) {
e.preventDefault();
e.returnValue = 'You have an ongoing upload. Are you sure you want to leave?';
return 'You have an ongoing upload. Are you sure you want to leave?';
}
});
}
};
}
</script>
</div>
<div class="text-center text-danger mt-9">
<div id="flash-message"></div>
</div>
<script>
if (!this.App) this.App = () => ({});
const flashMessage = document.getElementById("flash-message")
document.body.addEventListener("htmx:responseError", function (e) {
flashMessage.innerHTML = e.detail.xhr.response;
flashMessage.style.display = "block";
});
document.body.addEventListener("htmx:sendError", function (event) {
flashMessage.innerText = event.detail.error.statusText;
flashMessage.style.display = "block";
});
document.body.addEventListener("htmx:beforeRequest", function (event) {
flashMessage.style.display = "none";
});
document.addEventListener('click', function (event) {
if (event.target.tagName === 'BUTTON' && event.target.textContent === 'Copy Link') {
event.target.textContent = 'Link Copied';
setTimeout(function () {
event.target.textContent = 'Copy Link';
}, 500);
}
});
</script>
<script defer="" src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon="{"rayId":"8e540c7fee1a2fa6","version":"2024.10.5","serverTiming":{"name":{"cfExtPri":true,"cfL4":true,"cfSpeedBrain":true,"cfCacheStatus":true}},"token":"c1361d0ed928439489c7829da1f19fac","b":1}" crossorigin="anonymous"></script>
</body></html>