taiko-web/public/src/js/main.js
LoveEevee b8e63c650f ImportSongs: Implement Google Drive beta testing
Instances that wish to enable Google Drive support should first enable it to only a small subset of users (100 maximum) to allow the OAuth screen to be verified by Google without hitting the user limit. Minimum level in the config can be set to enable beta testing of this feature and then disabled by setting it to None.

- Add user level assignment screen to the administration panel
- Add privacy policy and links to it in various places
- Add switch accounts link near the Google Drive picker
2020-12-21 16:02:56 +03:00

133 lines
2.9 KiB
JavaScript

addEventListener("error", function(err){
var stack
if("error" in err && err.error){
stack = err.error.stack
}else{
stack = err.message + "\n at " + err.filename + ":" + err.lineno + ":" + err.colno
}
errorMessage(stack)
})
function errorMessage(stack){
localStorage["lastError"] = JSON.stringify({
timestamp: Date.now(),
stack: stack
})
}
function toggleFullscreen(){
if("requestFullscreen" in root){
if(document.fullscreenElement){
document.exitFullscreen()
}else{
root.requestFullscreen()
}
}else if("webkitRequestFullscreen" in root){
if(document.webkitFullscreenElement){
document.webkitExitFullscreen()
}else{
root.webkitRequestFullscreen()
}
}else if("mozRequestFullScreen" in root){
if(document.mozFullScreenElement){
document.mozCancelFullScreen()
}else{
root.mozRequestFullScreen()
}
}
}
function resizeRoot(){
if(lastHeight !== innerHeight){
lastHeight = innerHeight
root.style.height = innerHeight + "px"
}
}
function debug(){
if(debugObj.state === "open"){
debugObj.debug.clean()
return "Debug closed"
}else if(debugObj.state === "minimised"){
debugObj.debug.restore()
return "Debug restored"
}else{
debugObj.debug = new Debug()
return "Debug opened"
}
}
var root = document.documentElement
if(/iPhone|iPad/.test(navigator.userAgent)){
var fullScreenSupported = false
}else{
var fullScreenSupported = "requestFullscreen" in root || "webkitRequestFullscreen" in root || "mozRequestFullScreen" in root
}
var pageEvents = new PageEvents()
var snd = {}
var p2
var disableBlur = false
var cancelTouch = true
var lastHeight
var debugObj = {
state: "closed",
debug: null
}
var perf = {
blur: 0,
allImg: 0,
load: 0
}
var defaultDon = {
body_fill: "#5fb7c1",
face_fill: "#ff5724"
}
var strings
var vectors
var settings
var scoreStorage
var account = {}
var gpicker
pageEvents.add(root, ["touchstart", "touchmove", "touchend"], event => {
if(event.cancelable && cancelTouch && event.target.tagName !== "SELECT"){
event.preventDefault()
}
})
var versionDiv = document.getElementById("version")
var versionLink = document.getElementById("version-link")
versionLink.tabIndex = -1
pageEvents.add(versionDiv, ["click", "touchend"], event => {
if(event.target === versionDiv){
versionLink.click()
pageEvents.send("version-link")
}
})
resizeRoot()
setInterval(resizeRoot, 100)
pageEvents.keyAdd(debugObj, "all", "down", event => {
if((event.keyCode === 186 || event.keyCode === 59) && event.ctrlKey && (event.shiftKey || event.altKey)){
// Semicolon
if(debugObj.state === "open"){
debugObj.debug.minimise()
}else if(debugObj.state === "minimised"){
debugObj.debug.restore()
}else{
try{
debugObj.debug = new Debug()
}catch(e){}
}
}
if(event.keyCode === 82 && debugObj.debug && debugObj.controller){
// R
debugObj.controller.restartSong()
}
})
var loader = new Loader(songId => {
new Titlescreen(songId)
})