https://erogemusicquiz.com/

Submitted URL:
https://erogemusicquiz.com/
Report Finished:

The outgoing links identified from the page

LinkText
https://discord.com/invite/jKFGavUdffDiscord
https://github.com/mertvn/EMQSource code
https://github.com/mertvn/EMQ/commit/#

JavaScript Variables · 30 found

Global JavaScript variables loaded on the window object of a page, are variables declared outside of functions and accessible from anywhere in the code within the current scope

NameType
onbeforetoggleobject
documentPictureInPictureobject
onscrollendobject
Chartfunction
uidEventnumber
bootstrapobject
Blazorobject
DotNetobject
addQuizPageEventListenersfunction
removeQuizPageEventListenersfunction

Console log messages · 4 found

Messages logged to the web console

TypeCategoryLog
logother
URL
https://erogemusicquiz.com/
Text
themeSwitcher was not found
logother
URL
https://erogemusicquiz.com/
Text
themeSwitcher was not found
logother
URL
https://erogemusicquiz.com/
Text
themeSwitcher was found
verbosedom
URL
https://erogemusicquiz.com/
Text
[DOM] Input elements should have autocomplete attributes (suggested: "current-password"): (More info: https://goo.gl/9p2vKq) %o

HTML

The raw HTML body of the page

<!DOCTYPE html><html lang="en" data-bs-theme="light" style="--blazor-load-percentage: 100%; --blazor-load-percentage-text: &quot;100%&quot;;"><head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <meta name="description" content="Eroge Music Quiz">

    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Expires" content="0">

    
    <base href="/">

    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
    <link rel="manifest" href="/site.webmanifest">

    <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet">
    <link href="css/bootstrap-icons/bootstrap-icons.min.css" rel="stylesheet">
    <link href="css/font-awesome-5.15.4/css/all.css" rel="stylesheet">

    <link href="css/app.css" rel="stylesheet">
    <link href="EMQ.Client.styles.css" rel="stylesheet">

    <link href="_content/Blazorise/blazorise.css" rel="stylesheet">
    <link href="_content/Blazorise.Bootstrap5/blazorise.bootstrap5.css" rel="stylesheet">
<!--!--><!--!--><!--!--><title>EMQ</title><!--!--><!--!--><!--!--></head>

<body>
<div id="app"><!--!--><!--!--><!--!--><!--!--><!--!--><!--!--><!--!-->

<div class="page" b-0e082mtxss=""><!--!--><div class="nav-item px-3 dropdown" style="padding: 2px; margin: 5px 12px 5px 5px;position: fixed; top: 0; right: 0; text-align: center;" b-0e082mtxss=""><button class="btn btn-link nav-link py-2 px-0 px-lg-2 dropdown-toggle d-flex align-items-center" id="bd-theme" type="button" aria-expanded="false" data-bs-toggle="dropdown" data-bs-display="static" aria-label="Theme (light)" b-0e082mtxss=""><span class="ms-2" id="bd-theme-text" b-0e082mtxss="">Theme</span></button>
        <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="bd-theme-text" b-0e082mtxss=""><li b-0e082mtxss=""><button type="button" class="dropdown-item d-flex align-items-center active" data-bs-theme-value="light" aria-pressed="true" b-0e082mtxss="">
                    Light
                </button></li>
            <li b-0e082mtxss=""><button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="dark" aria-pressed="false" b-0e082mtxss="">
                    Dark
                </button></li>
            <li b-0e082mtxss=""><button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="auto" aria-pressed="false" b-0e082mtxss="">
                    Auto
                </button></li></ul></div><div class="sidebar" style="z-index: 30" b-0e082mtxss=""><!--!--><div class="top-row ps-3 navbar navbar-dark" b-3jgasyvhbj=""><div class="container-fluid" b-3jgasyvhbj=""><!--!--><a class="navbar-brand" href="" b-3jgasyvhbj="">EMQ</a>
        <button type="button" title="Navigation menu" class="navbar-toggler" b-3jgasyvhbj=""><!--!--><span class="navbar-toggler-icon" b-3jgasyvhbj=""></span></button></div></div><!--!-->

<div class="collapse" b-3jgasyvhbj=""><nav class="flex-column" b-3jgasyvhbj=""><div class="nav-item px-3" b-3jgasyvhbj=""><!--!--><a href="" class="nav-link active" aria-current="page"><!--!--><span class="oi oi-home" aria-hidden="true" b-3jgasyvhbj=""></span> Home
            </a></div><!--!-->
        <div class="nav-item px-3" b-3jgasyvhbj=""><!--!--><a href="HotelPage" class="nav-link"><!--!--><span class="oi oi-list-rich" aria-hidden="true" b-3jgasyvhbj=""></span> Hotel
            </a></div><!--!-->
        <div class="nav-item px-3" b-3jgasyvhbj=""><!--!--><a href="LibraryPage" class="nav-link"><!--!--><span class="oi oi-list" aria-hidden="true" b-3jgasyvhbj=""></span> Library
            </a></div><!--!-->
        <div class="nav-item px-3" b-3jgasyvhbj=""><!--!--><a href="ErodlePage" class="nav-link"><!--!--><span class="oi oi-grid-three-up" aria-hidden="true" b-3jgasyvhbj=""></span> Erodle
            </a></div></nav><!--!-->

    <div style="color: white; cursor: pointer;" b-3jgasyvhbj=""><ul b-3jgasyvhbj=""><li b-3jgasyvhbj="">Rooms: 0</li><!--!-->
            <li b-3jgasyvhbj="">Sessions: 0/0</li></ul></div><!--!-->
    <div style="position: absolute; bottom: 5px; left: 5px;" b-3jgasyvhbj=""><!--!--><a href="https://discord.com/invite/jKFGavUdff" b-3jgasyvhbj="">Discord</a>
        <br b-3jgasyvhbj="">
        <!--!--><a href="https://github.com/mertvn/EMQ" b-3jgasyvhbj="">Source code</a>
        <br b-3jgasyvhbj=""><a href="https://github.com/mertvn/EMQ/commit/" target="_blank" b-3jgasyvhbj="">#</a><!--!-->
        <br b-3jgasyvhbj=""></div></div></div><!--!--><!--!--><!--!--><!--!--><div id="0HN7A7ADNSD3H" class="modal fade" style="--modal-animation-duration: 150ms;;z-index: 4000" role="dialog" _bl_2=""><!--!--><!--!--><div class="focus-trap" tabindex="-1" _bl_5=""><div tabindex="0" _bl_6=""></div><!--!-->
        <div tabindex="0" _bl_7=""></div><!--!-->
        <!--!--><!--!--><div class="modal-dialog modal-xl modal-dialog-centered modal-dialog-scrollable" role="document"><div class="modal-content modal-xl"><!--!--><!--!--><div class="focus-trap" tabindex="-1" _bl_10=""><div tabindex="0" _bl_11=""></div><!--!-->
        <div tabindex="0" _bl_12=""></div><!--!-->
        <!--!--><div class="modal-header"><!--!--><!--!--><h4 class="modal-title" _bl_15="">Preferences</h4></div><!--!-->
        <!--!--><div class="modal-body"><!--!--><span> You must be logged in to change your preferences.</span></div><!--!-->
        <!--!--><div class="modal-footer"><button type="button" class="btn btn-secondary"><!--!-->
                Close
            </button><!--!-->
            <button type="button" class="btn btn-primary" disabled=""><!--!-->
                Save preferences
            </button></div><!--!-->
        <div tabindex="0" _bl_13=""></div><!--!-->
        <div tabindex="0" _bl_14=""></div></div></div></div><!--!-->
        <div tabindex="0" _bl_8=""></div><!--!-->
        <div tabindex="0" _bl_9=""></div></div></div><!--!-->
    <button type="button" id="buttonPreferences" class="btn btn-primary" style="padding: 2px; margin: 5px; position: fixed; bottom: 0; right: 0; text-align: center; height: 40px;" b-0e082mtxss=""><!--!--><span style="padding: 5px" b-0e082mtxss="">Preferences</span></button><!--!-->

    <main b-0e082mtxss=""><article class="content px-4" b-0e082mtxss=""><!--!--><h1 tabindex="-1">Eroge Music Quiz</h1><!--!-->

<div><!--!--><p>Welcome to EMQ, please login in order to play.</p>
        <div><!--!--><form><!--!--><!--!--><!--!-->
                <!--!--><!--!-->

                <!--!--><input id="UsernameOrEmail" type="text" style="margin: 5px" class="valid" _bl_3=""><!--!-->
                <!--!--><label for="UsernameOrEmail">Username or email</label>
                <br>

                <!--!--><input id="Password" type="password" style="margin: 5px" class="valid" _bl_4=""><!--!-->
                <!--!--><label for="Password">Password</label>
                <br>

                <input style="margin-top: 5px" type="submit" class="btn btn-primary" value="Login"><!--!-->
                <input style="margin-top: 5px; margin-left: 5px;" type="button" class="btn btn-primary" value="Play as Guest"></form></div><div><ul></ul></div><a id="register" class="link-primary" style="cursor: pointer">Register new account</a><!--!-->
        <br>
        <a id="forgottenPassword" class="link-primary" style="cursor: pointer">Reset forgotten password</a></div></article></main></div><!--!-->
        <!--!--></div>

<div id="blazor-error-ui">
    An unhandled error has occurred.
    <a href="" class="reload">Reload</a>
    <a class="dismiss">🗙</a>
</div>

<script src="js/chart.min.js"></script>
<script src="js/bootstrap/bootstrap.bundle.min.js"></script>
<script src="_framework/blazor.webassembly.js"></script>

<!--https://getbootstrap.com/docs/5.3/customize/color-modes/#javascript-->
<script>
    /*!
     * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/)
     * Copyright 2011-2023 The Bootstrap Authors
     * Licensed under the Creative Commons Attribution 3.0 Unported License.
     */

    (async function ThemeStuff() {
        'use strict'

        const getStoredTheme = () => localStorage.getItem('theme')
        const setStoredTheme = theme => localStorage.setItem('theme', theme)

        const getPreferredTheme = () => {
            const storedTheme = getStoredTheme()
            if (storedTheme) {
                return storedTheme
            }

            return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
        }

        const setTheme = theme => {
            // console.log("setTheme " + theme)
            if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
                document.documentElement.setAttribute('data-bs-theme', 'dark')
            } else {
                document.documentElement.setAttribute('data-bs-theme', theme)
            }
        }

        setTheme(getPreferredTheme())

        const showActiveTheme = async (theme, focus = false) => {
            // console.log("showActiveTheme " + theme)
            let themeSwitcher;
            while (true) {
                themeSwitcher = document.querySelector('#bd-theme')
                if (!themeSwitcher) {
                    console.log("themeSwitcher was not found")
                    await new Promise(r => setTimeout(r, 2000));
                } else {
                    console.log("themeSwitcher was found")
                    break;
                }
            }

            // const isCustomTheme = theme === 'wuffles'; // convert to array includes check when necessary
            // if (isCustomTheme){
            //     const link = document.createElement('link');
            //     link.id = 'customTheme';
            //     link.rel = 'stylesheet';
            //     link.href = `css/${theme}.css`;
            //     document.head.appendChild(link);
            // }
            // else {
            //     const customTheme = document.head.querySelector('link#customTheme');
            //     if (customTheme){
            //         document.head.removeChild(customTheme)
            //     }
            // }

            const themeSwitcherText = document.querySelector('#bd-theme-text')
            // const activeThemeIcon = document.querySelector('.theme-icon-active use')
            const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`)
            // const svgOfActiveBtn = btnToActive.querySelector('svg use').getAttribute('href')

            document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
                element.classList.remove('active')
                element.setAttribute('aria-pressed', 'false')
            })

            btnToActive.classList.add('active')
            btnToActive.setAttribute('aria-pressed', 'true')
            // activeThemeIcon.setAttribute('href', svgOfActiveBtn)
            const themeSwitcherLabel = `${themeSwitcherText.textContent} (${btnToActive.dataset.bsThemeValue})`
            themeSwitcher.setAttribute('aria-label', themeSwitcherLabel)

            if (focus) {
                themeSwitcher.focus()
            }
        }

        window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
            const storedTheme = getStoredTheme()
            if (storedTheme !== 'light' && storedTheme !== 'dark') {
                setTheme(getPreferredTheme())
            }
        })

        window.addEventListener('DOMContentLoaded', async () => {
            // console.log("DOMContentLoaded fired")
            await showActiveTheme(getPreferredTheme())

            document.querySelectorAll('[data-bs-theme-value]')
                .forEach(toggle => {
                    // console.log("found toggle")
                    toggle.addEventListener('click', async () => {
                        // console.log("clicked")
                        const theme = toggle.getAttribute('data-bs-theme-value')
                        setStoredTheme(theme)
                        setTheme(theme)
                        await showActiveTheme(theme, true)
                    })
                })
        })
    })();

    const beforeUnloadEvent = function (event) {
        event.preventDefault();
    };

    function addQuizPageEventListeners() {
        addBeforeUnload();

        // necessary to prevent autofill popup on chromium, but only because we auto-focus after each song it seems
        let inputs = document.querySelectorAll('input[placeholder^="Enter "]');
        for (const input of inputs) {
            if (input) {
                // console.log(input)
                input.autocomplete = "off";
            }
        }
    }

    function removeQuizPageEventListeners() {
        removeBeforeUnload();
    }

    function addBeforeUnload() {
        addEventListener('beforeunload', beforeUnloadEvent);
    }

    function removeBeforeUnload() {
        removeEventListener('beforeunload', beforeUnloadEvent);
    }

    function scrollToEnd(element) {
        if (element) {
            element.scrollTop = element.scrollHeight;
        }
    }

    function changeLocation(input) {
        window.location.href = input;
    }

    async function setVideoVolume(id, volume) {
        try {
            const video = document.getElementById(id);
            if (video) {
                video.volume = volume;
                // console.log("set video volume to " + volume)
            }
        } catch (err) {
            console.log(err)
        }
    }

    async function reloadVideo(id, startTime) {
        // console.log("here")
        try {
            const video = document.getElementById(id);
            if (video) {
                // console.log(video)
                console.log("seeking to startTime " + startTime)
                video.currentTime = startTime;
            }
        } catch (err) {
            console.log(err)
        }
    }

    async function getVideoPlaying(id) {
        try {
            const video = document.getElementById(id);
            if (video) {
                return !!(video.currentTime > 0 && !video.paused && !video.ended && video.readyState > 2);
            }
            return false;
        } catch (err) {
            console.log(err)
            return false;
        }
    }

    async function playVideo(id) {
        try {
            const video = document.getElementById(id);
            if (video) {
                video.play();
            }
        } catch (err) {
            console.log(err)
        }
    }

    async function resetVideo(id, startTime) {
        // console.log("here")
        try {
            const video = document.getElementById(id);
            if (video) {
                console.log(video);
                // return;

                // idk just do everything and hope it works
                // console.log("reset " + id)
                const parent = video.parentNode;
                parent.removeChild(video);
                parent.appendChild(video);
                console.log(video)
                video.load();
                video.currentTime = startTime;
                video.pause();
                video.play();
            }
        } catch (err) {
            console.log(err)
        }
    }

    async function getVideoBuffered(id) {
        try {
            const video = document.getElementById(id);
            if (video) {
                const ret = [];
                for (let index = 0; index < video.buffered.length; index++) {
                    const start = Math.round(video.buffered.start(index));
                    const end = Math.round(video.buffered.end(index));
                    ret[index] = {
                        index,
                        start,
                        end,
                    }
                }

                // console.log(JSON.stringify(ret))
                return ret;
            }
        } catch (err) {
            console.log(err)
        }
    }

    async function setVideoMuted(id, muted) {
        try {
            // console.log(`setVideoMuted ${id} ${muted}`)
            const video = document.getElementById(id);
            if (video !== null) {
                video.muted = muted;
            }
        } catch (err) {
            console.log(err)
        }
    }

    function downloadFile(filename, contentType, content) {
        const file = new File([content], filename, {type: contentType});
        const exportUrl = URL.createObjectURL(file);

        const a = document.createElement("a");
        document.body.appendChild(a);
        a.href = exportUrl;
        a.download = filename;
        a.target = "_self";
        a.click();

        URL.revokeObjectURL(exportUrl);
    }

    function getActiveElementName() {
        let ret = "";
        if (document !== null && document.activeElement !== null) {
            if (document.activeElement.id !== null) {
                ret = document.activeElement.id;
            } else if (document.activeElement.className !== null) {
                ret = document.activeElement.className;
            }
        }
        return ret;
    }

    function scrollElementIntoView(elementId, smooth) {
        const element = document.getElementById(elementId);
        if (element) {
            let top;
            if (element.offsetTop < element.parentElement.scrollTop || element.clientHeight > element.parentElement.clientHeight) {
                top = element.offsetTop;
            } else if (element.offsetTop + element.offsetHeight > element.parentElement.scrollTop + element.parentElement.clientHeight) {
                top = element.offsetTop + element.offsetHeight - element.parentElement.clientHeight;
            }

            const scrollableParent = getScrollableParent(element);
            if (scrollableParent) {
                const behavior = smooth ? "smooth" : "instant";
                scrollableParent.scrollTo({top: top, behavior: behavior});
            }
        }
    }

    function getScrollableParent(el) {
        // noinspection StatementWithEmptyBodyJS
        while ((el = el.parentElement) && window.getComputedStyle(el).overflowY.indexOf('scroll') === -1) ;
        return el;
    }

</script>




</body></html>