taiko-web/public/src/js/main.js

155 lines
11 KiB
JavaScript
Raw Normal View History

2024-04-19 09:17:14 +02:00
addEventListener("load", () => {
2024-04-19 10:33:26 +02:00
const messages = [
"ソースコードは github.com/yuukiwww/taiko-web を見てください。",
"そろそろやめたほうがいいね!",
"《ウェブの航海者たちへの手紙》\n\n高潔なるウェブの航海者諸君へ、\n\n風を感じたことがあるかいウェブの風。それは時に優雅にして、時に荒々しく吹きすさんでいる。さて、今日はそんな風が再び吹き荒れる日だ。ウェブの航海は決して穏やかではない。時には波に呑まれ、時には星に導かれる。今日、私たちはひとつの航海を終える。だが、その終わりは新たな航路の始まりでもある。さあ、私の友よ、今宵はこの物語に耳を傾けよ。\n\nそれは遠い2024年、四月の初め。夜明けの色が空を染める頃、我々は一つの船出を告げる。ウェブの岸辺に立ち、喜びと哀しみを胸に、我々の旅路の終焉を知らせる。\"taikoapp.uk\"や\"yuuk1.tk\"、そしてその他の名高きサイトたちが、この日をもって船を降りるというのだ。\n\nその理由はさまざまだ。法の嵐に晒され、船員の数も減り、品質の維持も難しくなった。未知の海原を渡る船は、時に流れに飲み込まれ、時には頼りなき星を見失う。そして、かつての楽しみも、やがて影となり、心に暗雲を差す。だが、我々はそこに立ち止まることはない。この船が見たもの、得たものを忘れることはない。\n\n2023年、冬の深き日。我々は航海を開始した。多くの出会いがあった。多くの挑戦が待ち受けていた。そして、多くの喜びと悲しみが交錯した。しかし、それが我々の旅路だった。数えきれぬ航海の記憶が、今も私たちの心に残っている。\n\n我々は感謝に満ちている。ウェブの航海者たちよ、我々の旅を共にしてくれてありがとう。波に揉まれ、星に導かれ、互いの手を取り合って歩んだ日々を忘れない。新たな航路が見えるまで、私たちはここで一息つく。そして、次なる冒険への準備を整えるのだ。\n\nさあ、船出の時が来た。ウェブの海をさまよう船が、新たなる冒険へと進む。時には波に飲まれ、時には星に導かれながら、我々の旅は続く。ウェブの航海者たちよ、未知の海原へと旅立とう。新たなる冒険が待ち受けている。\n",
]
2024-04-19 18:08:48 +02:00
document.querySelector("#version-link").textContent = ("taiko-web vRAINBOW-BETA4" + "\n\n" + messages[Math.floor(Math.random()*messages.length)]);
2024-04-19 09:17:14 +02:00
document.querySelector("#version-link").setAttribute("alt", document.querySelector("#version-link").textContent);
});
addEventListener("error", function(err){
2018-10-14 10:04:31 +02:00
var stack
if("error" in err && err.error){
2018-10-14 10:04:31 +02:00
stack = err.error.stack
}else{
stack = err.message + "\n at " + err.filename + ":" + err.lineno + ":" + err.colno
}
2018-12-03 23:23:11 +01:00
errorMessage(stack)
})
function errorMessage(stack){
2018-10-14 10:04:31 +02:00
localStorage["lastError"] = JSON.stringify({
2018-12-13 10:18:52 +01:00
timestamp: Date.now(),
2018-10-14 10:04:31 +02:00
stack: stack
})
2018-12-03 23:23:11 +01:00
}
2018-10-14 10:04:31 +02:00
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()
}
}
}
2018-10-14 10:04:31 +02:00
function resizeRoot(){
2022-02-25 22:05:43 +01:00
if((noResizeRoot ? lastWidth !== innerWidth : true) && lastHeight !== innerHeight){
lastWidth = innerWidth
2018-10-14 10:04:31 +02:00
lastHeight = innerHeight
root.style.height = innerHeight + "px"
}
}
2018-10-14 20:08:05 +02:00
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"
}
}
2018-10-12 20:04:28 +02:00
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
2018-10-09 08:59:36 +02:00
var disableBlur = false
2018-10-14 10:04:31 +02:00
var cancelTouch = true
2022-02-25 22:05:43 +01:00
var lastWidth
2018-10-14 10:04:31 +02:00
var lastHeight
2018-10-14 20:08:05 +02:00
var debugObj = {
state: "closed",
debug: null
}
var perf = {
blur: 0,
allImg: 0,
load: 0
}
var defaultDon = {
body_fill: "#5fb7c1",
face_fill: "#ff5724"
}
var strings
2019-01-29 17:10:56 +01:00
var vectors
var settings
var scoreStorage
2020-03-13 03:34:54 +01:00
var account = {}
var gpicker
var db
var plugins
2022-02-25 22:05:43 +01:00
var noResizeRoot = false
2022-03-22 01:34:13 +01:00
var kanaPairs = [["っきゃ","ッキャ"],["っきゅ","ッキュ"],["っきょ","ッキョ"],["っしゃ","ッシャ"],["っしゅ","ッシュ"],["っしょ","ッショ"],["っちゃ","ッチャ"],["っちゅ","ッチュ"],["っちょ","ッチョ"],["っひゃ","ッヒャ"],["っひゅ","ッヒュ"],["っひょ","ッヒョ"],["っみゃ","ッミャ"],["っみゅ","ッミュ"],["っみょ","ッミョ"],["っりゃ","ッリャ"],["っりゅ","ッリュ"],["っりょ","ッリョ"],["っぎゃ","ッギャ"],["っぎゅ","ッギュ"],["っぎょ","ッギョ"],["っじゃ","ッジャ"],["っじゅ","ッジュ"],["っじょ","ッジョ"],["っびゃ","ッビャ"],["っびゅ","ッビュ"],["っびょ","ッビョ"],["っぴゃ","ッピャ"],["っぴゅ","ッピュ"],["っぴょ","ッピョ"],["っいぇ","ッイェ"],["っわぃ","ッウィ"],["っわぇ","ッウェ"],
["っわぉ","ッウォ"],["っゔぁ","ッヴァ"],["っゔぃ","ッヴィ"],["っゔぇ","ッヴェ"],["っゔぉ","ッヴォ"],["っすぃ","ッスィ"],["っずぃ","ッズィ"],["っしぇ","ッシェ"],["っじぇ","ッジェ"],["っとぃ","ッティ"],["っとぅ","ットゥ"],["っでぅ","ッディ"],["っどぅ","ッドゥ"],["っつぁ","ッツァ"],["っつぃ","ッツィ"],["っつぇ","ッツェ"],["っつぉ","ッツォ"],["っふぁ","ッファ"],["っふぃ","ッフィ"],["っふぇ","ッフェ"],["っふぉ","ッフォ"],["っふゅ","ッフュ"],["っひぇ","ッヒェ"],["きゃ","キャ"],["きゅ","キュ"],["きょ","キョ"],["しゃ","シャ"],["しゅ","シュ"],["しょ","ショ"],["ちゃ","チャ"],["ちゅ","チュ"],["ちょ","チョ"],["にゃ","ニャ"],["にゅ","ニュ"],["にょ","ニョ"],["ひゃ","ヒャ"],
["ひゅ","ヒュ"],["ひょ","ヒョ"],["みゃ","ミャ"],["みゅ","ミュ"],["みょ","ミョ"],["りゃ","リャ"],["りゅ","リュ"],["りょ","リョ"],["ぎゃ","ギャ"],["ぎゅ","ギュ"],["ぎょ","ギョ"],["じゃ","ジャ"],["じゅ","ジュ"],["じょ","ジョ"],["びゃ","ビャ"],["びゅ","ビュ"],["びょ","ビョ"],["ぴゃ","ピャ"],["ぴゅ","ピュ"],["ぴょ","ピョ"],["いぇ","イェ"],["わぃ","ウィ"],["わぇ","ウェ"],["わぉ","ウォ"],["ゔぁ","ヴァ"],["ゔぃ","ヴィ"],["ゔぇ","ヴェ"],["ゔぉ","ヴォ"],["すぃ","スィ"],["ずぃ","ズィ"],["しぇ","シェ"],["じぇ","ジェ"],["とぃ","ティ"],["とぅ","トゥ"],["でぅ","ディ"],["どぅ","ドゥ"],["つぁ","ツァ"],["つぃ","ツィ"],["つぇ","ツェ"],["つぉ","ツォ"],["ふぁ","ファ"],
["ふぃ","フィ"],["ふぇ","フェ"],["ふぉ","フォ"],["ふゅ","フュ"],["ひぇ","ヒェ"],["っか","ッカ"],["っき","ッキ"],["っく","ック"],["っけ","ッケ"],["っこ","ッコ"],["っさ","ッサ"],["っし","ッシ"],["っす","ッス"],["っせ","ッセ"],["っそ","ッソ"],["った","ッタ"],["っち","ッチ"],["っつ","ッツ"],["って","ッテ"],["っと","ット"],["っは","ッハ"],["っひ","ッヒ"],["っふ","ッフ"],["っへ","ッヘ"],["っほ","ッホ"],["っま","ッマ"],["っみ","ッミ"],["っむ","ッム"],["っめ","ッメ"],["っも","ッモ"],["っや","ッヤ"],["っゆ","ッユ"],["っよ","ッヨ"],["っら","ッラ"],["っり","ッリ"],["っる","ッル"],["っれ","ッレ"],["っろ","ッロ"],["っわ","ッワ"],["っゐ","ッヰ"],
["っゑ","ッヱ"],["っを","ッヲ"],["っが","ッガ"],["っぎ","ッギ"],["っぐ","ッグ"],["っげ","ッゲ"],["っご","ッゴ"],["っざ","ッザ"],["っじ","ッジ"],["っず","ッズ"],["っぜ","ッゼ"],["っぞ","ッゾ"],["っだ","ッダ"],["っぢ","ッヂ"],["っづ","ッヅ"],["っで","ッデ"],["っど","ッド"],["っば","ッバ"],["っび","ッビ"],["っぶ","ッブ"],["っべ","ッベ"],["っぼ","ッボ"],["っぱ","ッパ"],["っぴ","ッパ"],["っぷ","ップ"],["っぺ","ッペ"],["っぽ","ッポ"],["っゔ","ッヴ"],["あ","ア"],["い","イ"],["う","ウ"],["え","エ"],["お","オ"],["か","カ"],["き","キ"],["く","ク"],["け","ケ"],["こ","コ"],["さ","サ"],["し","シ"],["す","ス"],["せ","セ"],["そ","ソ"],["た","タ"],
["ち","チ"],["つ","ツ"],["て","テ"],["と","ト"],["な","ナ"],["に","ニ"],["ぬ","ヌ"],["ね","ネ"],["の",""],["は","ハ"],["ひ","ヒ"],["ふ","フ"],["へ","ヘ"],["ほ","ホ"],["ま","マ"],["み","ミ"],["む","ム"],["め","メ"],["も","モ"],["や","ヤ"],["ゆ","ユ"],["よ","ヨ"],["ら","ラ"],["り","リ"],["る","ル"],["れ","レ"],["ろ","ロ"],["わ","ワ"],["ゐ","ヰ"],["ゑ","ヱ"],["を","ヲ"],["ん","ン"],["が","ガ"],["ぎ","ギ"],["ぐ","グ"],["げ","ゲ"],["ご","ゴ"],["ざ","ザ"],["じ","ジ"],["ず","ズ"],["ぜ","ゼ"],["ぞ","ゾ"],["だ","ダ"],["ぢ","ヂ"],["づ","ヅ"],["で","デ"],["ど","ド"],
["ば","バ"],["び","ビ"],["ぶ","ブ"],["べ","ベ"],["ぼ","ボ"],["ぱ","パ"],["ぴ","パ"],["ぷ","プ"],["ぺ","ペ"],["ぽ","ポ"],["ゔ","ヴ"]]
2018-10-14 10:04:31 +02:00
pageEvents.add(root, ["touchstart", "touchmove", "touchend"], event => {
2022-03-16 17:04:51 +01:00
if(event.cancelable && cancelTouch && event.target.tagName !== "SELECT" && (event.target.tagName !== "INPUT" || event.target.type !== "file")){
2018-10-14 10:04:31 +02:00
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")
}
2018-10-14 10:04:31 +02:00
})
resizeRoot()
setInterval(resizeRoot, 100)
pageEvents.keyAdd(debugObj, "all", "down", event => {
if((event.keyCode === 186 || event.keyCode === 59) && event.ctrlKey && (event.shiftKey || event.altKey)){
2018-11-10 20:12:29 +01:00
// Semicolon
if(debugObj.state === "open"){
debugObj.debug.minimise()
}else if(debugObj.state === "minimised"){
debugObj.debug.restore()
}else{
2019-02-20 21:48:21 +01:00
try{
debugObj.debug = new Debug()
}catch(e){}
}
}
if(event.keyCode === 82 && debugObj.debug && debugObj.controller){
2018-11-10 20:12:29 +01:00
// R
debugObj.controller.restartSong()
}
})
2018-10-14 10:04:31 +02:00
var loader = new Loader(songId => {
new Titlescreen(songId)
})
2018-11-27 00:05:02 +01:00