- Scan ID:
- fd590785-a2a7-43bc-a363-68159d503ce6Finished
- Submitted URL:
- https://erogemusicquiz.com/
- Report Finished:
Links · 3 found
The outgoing links identified from the page
Link | Text |
---|---|
https://discord.com/invite/jKFGavUdff | Discord |
https://github.com/mertvn/EMQ | Source 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
Name | Type |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
Chart | function |
uidEvent | number |
bootstrap | object |
Blazor | object |
DotNet | object |
addQuizPageEventListeners | function |
removeQuizPageEventListeners | function |
Console log messages · 4 found
Messages logged to the web console
Type | Category | Log |
---|---|---|
log | other |
|
log | other |
|
log | other |
|
verbose | dom |
|
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: "100%";"><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>