https://buzzheavier.com/

送信済みURL:
https://buzzheavier.com/
レポート終了日:

リンク · 0件検出

JavaScript変数 · 12件検出

名前規模
onbeforetoggleobject
documentPictureInPictureobject
onscrollendobject
Appfunction
parseXHRErrorfunction
copyTextToClipboardfunction
copyTextToClipboardFallbackfunction
humanReadableSizefunction
htmxobject
Alpineobject

コンソールログメッセージ · 0件検出

HTML

<!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="{&quot;rayId&quot;:&quot;8e540c7fee1a2fa6&quot;,&quot;version&quot;:&quot;2024.10.5&quot;,&quot;serverTiming&quot;:{&quot;name&quot;:{&quot;cfExtPri&quot;:true,&quot;cfL4&quot;:true,&quot;cfSpeedBrain&quot;:true,&quot;cfCacheStatus&quot;:true}},&quot;token&quot;:&quot;c1361d0ed928439489c7829da1f19fac&quot;,&quot;b&quot;:1}" crossorigin="anonymous"></script>


</body></html>