// ==UserScript==
// @name Typing Sites Discord RPC
// @namespace http://tampermonkey.net/
// @version 1.2
// @description Discordのプレイ中のゲームにタイピングゲーム・サイトを表示する
// @author You
// @match https://www.e-typing.ne.jp/*
// @match https://typing-tube.net/*
// @match https://typing.twi1.me/*
// @match http://typingx0.net/pop*
// @match http://typingwar.trap.games*
// @match https://zty.pe/
// @match https://pokedebi.com/game/momotype/
// @match https://mcz-release.com/live/play/
// @match http://typingx0.net/easy/
// @match http://typingx0.net/osakana/
// @match http://typingx0.net/map/
// @match http://typingx0.net/map_c/
// @match http://typingx0.net/az/
// @match https://sorauchi.com/unity
// @match https://secure.pasoken.net/maipaso/app/*
// @match https://manabi-gakushu.benesse.ne.jp/gakushu/typing*
// @match https://typoly.idolypride.jp/game/
// @match https://game.nicovideo.jp/atsumaru/games/gm15182
// @match https://1st.natorisana.love/game/zuho_cpp/
// @match https://ueken0307.github.io/natori-typing/
// @match https://www.ntv.co.jp/haken2020/special/
// @match http://sintyaku.pa.land.to/daken2/tajisakumagosou.htm
// @match http://sintyaku.pa.land.to/daken2/tajitaji.htm
// @match https://www.intersteno.org/intersteno-internet-contests/training-with-taki-version/
// @include *contest/app/pages/index.php?rand=*
// @include *typrx.com*
// @include *10fastfingers.com*
// @include *shakyo.io*
// @include https://typing-training.net*
// @include *typingclub.com*
// @include *typing.io*
// @include *speedcoder.net*
// @include *gontyping.com*
// @include *play.mcz-release.com*
// @include *typing.playgram.jp*
// @include *music-typing.net*
// @include *hakatashi.github.io/YouTyping*
// @include *typingx0.net/sushida/play*
// @include *typingerz.com*
// @include *typing.tanonews.com*
// @include *type.cgi*
// @icon https://www.google.com/s2/favicons?domain=e-typing.ne.jp
// @grant none
// ==/UserScript==
var js__
var Detail__
let State__
let url__ = location.href
let LargeImage__ = ""
let send_interval = 15000
var send_data_interval
var focus_in_interval
var dicord_send_data = localStorage.getItem("discord_rich_presence_userscript_send_data") ? localStorage.getItem("discord_rich_presence_userscript_send_data") : "true"
function add_send_data_setting(Element,position){
Element.insertAdjacentHTML(position, `
<label style="
display: block;
margin-bottom: 4px;
" id="discord_rich_presence_userscript_send_data">
<input type="checkbox"`+(localStorage.getItem("discord_rich_presence_userscript_send_data") == "false"?"":"checked")+`>
</input>Discordに打鍵データを表示する</label>`);
document.getElementById("discord_rich_presence_userscript_send_data").addEventListener("change",function(event){
localStorage.setItem("discord_rich_presence_userscript_send_data",event.target.checked)
dicord_send_data = event.target.checked.toString()
if(!event.target.checked){
State__ = undefined
send_localhost()
}
})
}
function send_localhost(){
if(document.hasFocus()){
console.log("send")
js__ = '{"Detail":"' + Detail__ + '","State":"' + State__ + '","LargeImage":"' + LargeImage__ + '","url":"' + url__ + '"}'
var myJSON = new XMLHttpRequest();
myJSON.open("GET","http://127.0.0.1:8843/post?" + js__, true);
myJSON.send(null);
}
}
window.addEventListener("blur", function() {
console.log("blur")
window.clearInterval(focus_in_interval)
window.clearInterval(send_data_interval)
});
window.addEventListener("focus", function() {
console.log("focus")
send_first_data()
});
if(url__.match('https://www.e-typing.ne.jp')){
url__ = 'https://www.e-typing.ne.jp'
function etypingDetailSet(){
if(event.eventPhase == 2){
if(window.parent.pp_descriptions){
sessionStorage.setItem("State__", window.parent.pp_descriptions[0]);
State__ = sessionStorage.getItem("State__")
}
State__ = sessionStorage.getItem("State__") ? sessionStorage.getItem("State__") : ""
Detail__ = window.parent.name == "typing_content" || document.getElementById("typing_content") != null ? sessionStorage.getItem("Detail__") : "選択中"
if(window.frameElement && window.frameElement.contentDocument && window.frameElement.contentDocument.querySelector(".title") != null){
sessionStorage.setItem("Detail__",window.frameElement.contentDocument.querySelector(".title").innerText);
Detail__ = sessionStorage.getItem("Detail__")
}
State__ = State__.replace(Detail__,"").replace("タイピングバラエティ","").replace("英文タイピング","")
if(State__ == "タイピング"){
State__ = "今月のタイピング"
}else if(State__ == "腕試しレベルチェック"){
State__ = "腕試し"
}
Detail__ = Detail__ == "選択中" ? "選択中" : "お題: " + Detail__
State__ = "ジャンル: " + State__
var roma_kana_english = sessionStorage.getItem("roma_kana_english")
if(document.title.match(/英語|ローマ字|かなタイピ/)){
sessionStorage.setItem("roma_kana_english", document.title.match(/英語|ローマ字|かなタイピ/)[0]);
roma_kana_english = document.title.match(/英語|ローマ字|かなタイピ/)[0]
}
if(roma_kana_english == "英語"){
LargeImage__ = "english"
}else if(roma_kana_english == "かなタイピ"){
LargeImage__ = "kana"
}else{
LargeImage__ = "e-typingr"
}
if(Detail__ == "選択中" || window.parent.pp_descriptions || window.parent.name && Detail__){
if(Detail__ == "選択中"){
State__ = undefined
}
send_first_data()
}
}
}
document.addEventListener("readystatechange",etypingDetailSet)
window.addEventListener("mouseup",function(event){
if(event.target.className == "pp_close"){
Detail__ = "選択中"
State__ = "選択中"
sessionStorage.removeItem("Detail__")
sessionStorage.removeItem("State__")
send_localhost()
}
})
return;
}else if(url__.match('https://typing-tube.net')){
url__ = 'https://typing-tube.net'
LargeImage__ = "main"
Detail__ = "選曲中"
setTimeout( () =>{
if(document.getElementById("RoomNameArea") != null){
State__ = "対戦: "+document.getElementById("RoomNameArea").textContent
}
},5000)
if(location.href.match("https://typing-tube.net/movie/edit")){
Detail__ = "譜面作成・編集中"
State__ = "tltle: "+document.getElementById("title").value
document.getElementById("title").addEventListener("change",function(evnet){
State__ = "tltle: "+event.target.value
send_localhost()
})
}
if(document.querySelector(".movietitle h1") != null){
add_send_data_setting(document.getElementsByClassName("share")[0],"afterbegin")
Detail__ = document.querySelector(".movietitle h1").firstChild.textContent+(document.querySelector(".movietitle h1").lastElementChild != null ? " | Level: "+document.querySelector(".movietitle h1").lastElementChild.innerText.match(/\d/)[0] : "");
State__ = (document.querySelector(".movietitle h1").lastElementChild != null ? "Level: "+document.querySelector(".movietitle h1").lastElementChild.innerText.match(/\d/)[0] : "開始前");
function send_type_data(){
const totalTimeCount = document.getElementById("total-time")
if(totalTimeCount != null || finished){
if(dicord_send_data == "true"){
const typeCount_ = document.getElementById("typing-count-value")
const missCount_ = document.getElementById("miss-value")
const typingSpeed_ = document.getElementById("type-speed")
State__ = (typeCount_ ? typeCount_.textContent : 0) +"打鍵 | "+(missCount_ ? missCount_.textContent:0)+"ミス | "+(typingSpeed_ ? typingSpeed_.textContent:0)+"打/秒 | "+ (totalTimeCount != null ? totalTimeCount.textContent : "end")
}else{
State__ = (totalTimeCount != null ? "time: "+totalTimeCount.textContent : "end")
}
send_localhost()
}
}
send_data_interval = setInterval(send_type_data,5000)
window.addEventListener("focus",function(){
send_data_interval = setInterval(send_type_data,5000)
})
}
}else if(url__.match('type.cgi')){
url__ = 'type.cgi'
LargeImage__ = "da"
add_send_data_setting(document.body.firstElementChild,"beforeend")
Detail__ = encodeURIComponent(document.title.replace("打鍵トレーナー","").replace(/(|)|\(|\)/g,""))
if(Detail__ == ""){
Detail__ = location.href
}
function daken_interval(){
const key_value = document.getElementById("daken")
if(dicord_send_data == "true" && key_value){
State__ = encodeURIComponent(key_value.innerText + "打 | "+document.getElementById("miss").innerText +"ミス | 残り: "+document.getElementById("time").innerText+"秒")
send_localhost()
}
}
send_data_interval = setInterval(daken_interval,5000)
window.addEventListener("focus",function(){
send_data_interval = setInterval(daken_interval,5000)
})
}else if(url__.match('https://typing.tanonews.com')){
const mode_change = location.href.match(/\?e/) && document.getElementById("modeChange") != null ? "エンドレスモード":document.getElementById("modeChange").innerText
url__ = 'https://typing.tanonews.com'
LargeImage__ = "taisoku"
Detail__ = "選択中のお題:今月のお題".replace("選択中のお題:","") +" / "+ mode_change
State__ = undefined
add_send_data_setting(document.getElementsByClassName("div_comment")[0],"afterbegin")
document.addEventListener("click",function(event){
const mode_change = location.href.match(/\?e/) && document.getElementById("modeChange") != null ? "エンドレスモード":document.getElementById("modeChange").innerText
if(event.target.id == "cwListBtnCurrent"){
Detail__ = "選択中のお題:今月のお題".replace("選択中のお題:","")+" / "+ mode_change
send_localhost()
}else if(event.target.className.match("btnListSet")){
Detail__ = document.getElementById("cwListSetCurrent").innerText.replace("選択中のお題:","")+" / "+ mode_change
send_localhost()
}else if(event.target.id == "modeChange"){
Detail__ = document.getElementById("cwListSetCurrent").innerText.replace("選択中のお題:","").replace("(今月のお題)","")+" / "+ mode_change
send_localhost()
}
})
function taisocu_interval(){
const key_value = document.getElementById("keystrokesCountValue")
if(dicord_send_data == "true" && key_value){
State__ = document.getElementById("keystrokesCountValue").innerText + "打 | "+document.getElementById("misstrokesCountValue").innerText +"ミス | "+document.getElementById("speedRatioValue").innerText+"打鍵/秒"
send_localhost()
}
}
send_data_interval = setInterval(taisocu_interval,5000)
window.addEventListener("focus",function(){
send_data_interval = setInterval(taisocu_interval,5000)
})
}else if(url__.match('https://typing.twi1.me')){
url__ = 'https://typing.twi1.me'
LargeImage__ = "hiyoko"
var data_name = document.getElementsByClassName("h1Yellow")[0]
if(!location.href.match("https://typing.twi1.me/game/")){
Detail__ = "選択中"
send_first_data()
return
}
Detail__ = data_name.innerText
State__ = "ID: "+location.href.replace("https://typing.twi1.me/game/","")
}else if(url__.match('https://typingerz.com')){
url__ = 'https://typingerz.com'
LargeImage__ = "takeshi"
Detail__ = "ホーム"
if(location.href == "https://typingerz.com/stage"){
Detail__ = "0から始めるタイピング"
State__ = "選択中"
}else if(location.href.match(/typingerz.com\/\d+/)){
Detail__ = "0から始めるタイピング"
State__ = "ステージ:"+ location.href.match(/typingerz.com\/\d+/)[0].replace("typingerz.com/","")
}else if(location.href == "https://typingerz.com/colosseum"){
Detail__ = "タイピングコロシアム"
State__ = "選択中"
document.addEventListener("click",function(event){
if(event.target.parentNode.className.match("enterdekettei")){
State__ = "ステージ:" + event.target.closest(".kurowaku").querySelector(".aqua").children[0].innerText
sessionStorage.setItem("State__", event.target.closest(".kurowaku").querySelector(".aqua").children[0].innerText);
send_localhost()
}
})
}else if(location.href.match(/typingerz.com\/c\d+/)){
Detail__ = "タイピングコロシアム"
State__ = "ステージ:"+ sessionStorage.getItem("State__")
}else if(location.href.match("https://typingerz.com/battlemenu")){
Detail__ = "オンライン対戦"
State__ = "準備中"
window.addEventListener("load",function(){
document.getElementsByClassName("rightsidebox2")[0].insertAdjacentHTML("afterend", `<label id="discord_rich_presence_userscript_send_rate" style="color:#FFF;font-size:1.2rem;" ><input type="checkbox" `+(localStorage.getItem("userscript_send_rate_checkbox") == "false"?"":"checked")+`></input>Discordにレートを表示する</label>`);
document.getElementById("discord_rich_presence_userscript_send_rate").addEventListener("change",function(event){
localStorage.setItem("userscript_send_rate_checkbox",event.target.checked)
if(event.target.checked){
State__ = "Rate: "+ localStorage.getItem("userscript_send_rate")+ " / Rank: "+document.getElementsByClassName("menuRanking")[0].innerText.replace("オンライン対戦ランキング ","")
send_localhost()
}
})
var menuRanking = document.getElementsByClassName("menuRanking")[0]
// オブザーバーの作成
const observer = new MutationObserver(records => {
localStorage.setItem("userscript_send_rate",document.getElementsByClassName("menuRating")[0].innerText.replace("レーティング ",""))
localStorage.setItem("userscript_send_ranking",document.getElementsByClassName("menuRanking")[0].innerText.replace("オンライン対戦ランキング ",""))
if(localStorage.getItem("userscript_send_rate_checkbox") != "false"){
State__ = "Rate: "+ localStorage.getItem("userscript_send_rate")+ " / Rank: "+localStorage.getItem("userscript_send_ranking")
}
send_first_data()
})
// 監視の開始
observer.observe(menuRanking, {
childList: true
})
})
return;
}else if(location.href.match("https://typingerz.com/rtbattle")){
Detail__ = "オンライン対戦"
if(localStorage.getItem("userscript_send_rate_checkbox") != "false"){
State__ = "Rate: "+ localStorage.getItem("userscript_send_rate")+ " / Rank: "+localStorage.getItem("userscript_send_ranking")
}else{
State__ = "対戦中"
}
window.addEventListener("load",function(){
var newranking = document.getElementById('newRanking')
// オブザーバーの作成
const observer = new MutationObserver(records => {
localStorage.setItem("userscript_send_rate",document.querySelector("#newRating > span > span").innerText.replace(" ",""))
localStorage.setItem("userscript_send_ranking",document.querySelector("#newRanking > span > span").innerText.replace(" ",""))
if(localStorage.getItem("userscript_send_rate_checkbox") != "false"){
State__ = "Rate: "+ localStorage.getItem("userscript_send_rate")+ " / Rank: "+localStorage.getItem("userscript_send_ranking")
send_localhost()
}
})
// 監視の開始
observer.observe(newranking, {
childList: true
})
send_first_data()
})
return;
}else if(location.href.match("https://typingerz.com/friendbattle")){
Detail__ = "フレンド対戦"
window.addEventListener("load",function(){
document.getElementsByClassName("handiEnter")[0].insertAdjacentHTML("beforebegin", `<label id="discord_rich_presence_userscript_send_password"><input type="checkbox"`+(localStorage.getItem("discord_rich_presence_userscript_send_password") == "false"?"":"checked")+`></input>Discordにパスワードを表示する</label>`);
document.getElementById("discord_rich_presence_userscript_send_password").addEventListener("change",function(event){
localStorage.setItem("discord_rich_presence_userscript_send_password",event.target.checked)
})
window.addEventListener("keydown",function(event){
if(event.key == "Enter" && localStorage.getItem("discord_rich_presence_userscript_send_password") != "false"){
State__ = "パスワード: "+document.getElementById("battlePass").value
send_localhost()
}
})
})
return;
}
if(location.href.match("mp3")){
return;
}
}else if(url__.match('https://music-typing.net')){
url__ = 'https://music-typing.net'
LargeImage__ = "musictyping"
var Title_musictyping = document.querySelector("#script-meta-info > h1")
if (Title_musictyping == undefined) {
Detail__ = "選曲中"
send_first_data()
return
}
Detail__ = Title_musictyping.innerText
window.addEventListener("load",function(){
if(location.href.match("https://music-typing.net/play?")){
State__ = document.getElementsByClassName("selectKeyTypeButton")[0].innerText
}
send_first_data()
})
return;
}else if(url__.match('http://typingx0.net/sushida/play')){
url__ = 'http://typingx0.net/sushida/play'
LargeImage__ = "sushida"
}else if(url__.match('http://typingx0.net/pop')){
url__ = 'http://typingx0.net/pop'
LargeImage__ = "poptyping"
}else if(url__.match('http://typingwar.trap.games')){
url__ = 'http://typingwar.trap.games'
LargeImage__ = "typingwar"
}else if(url__.match('https://zty.pe')){
url__ = 'https://zty.pe'
LargeImage__ = "ztype"
}else if(url__.match('https://mcz-release.com/') || url__.match('https://play.mcz-release.com')){
url__ = 'https://mcz-release.com/live/play'
LargeImage__ = "momota"
}else if(url__.match('https://pokedebi.com/game/momotype/')){
url__ = 'https://pokedebi.com/game/momotype/'
LargeImage__ = "momotype"
}else if(url__.match('http://typingx0.net/easy')){
url__ = 'http://typingx0.net/easy'
LargeImage__ = "easy_typing"
}else if(url__.match('http://typingx0.net/osakana')){
url__ = 'http://typingx0.net/osakana'
LargeImage__ = "osakana_typing"
}else if(url__.match('http://typingx0.net/map_c')){
url__ = 'http://typingx0.net/map_c'
LargeImage__ = "map_c_typing"
}else if(url__.match('http://typingx0.net/az')){
url__ = 'http://typingx0.net/az'
LargeImage__ = "az_typing"
}else if(url__.match('http://typingx0.net/map')){
url__ = 'http://typingx0.net/map'
LargeImage__ = "map_typing"
}else if(url__.match('https://game.nicovideo.jp/atsumaru/games/gm15182')){
url__ = 'https://game.nicovideo.jp/atsumaru/games/gm15182'
LargeImage__ = "a"
}else if(url__.match('https://secure.pasoken.net/maipaso/app')){
url__ = 'https://secure.pasoken.net/maipaso/app'
LargeImage__ = "maipaso"
}else if(url__.match('https://typoly.idolypride.jp/game')){
url__ = 'https://typoly.idolypride.jp/game'
LargeImage__ = "typolypride"
}else if(url__.match('https://sorauchi.com/unity')){
url__ = 'https://sorauchi.com/unity'
LargeImage__ = "sorauchi"
}else if(url__.match('https://1st.natorisana.love/game/zuho_cpp') || url__.match('https://ueken0307.github.io/natori-typing')){
url__ = 'https://1st.natorisana.love/game/zuho_cpp'
LargeImage__ = "natori"
}else if(url__.match('gontyping.com')){
url__ = 'gontyping.com'
LargeImage__ = "a"
}else if(url__.match('https://www.ntv.co.jp/haken2020/special')){
url__ = 'https://www.ntv.co.jp/haken2020/special'
LargeImage__ = "a"
}else if(url__.match('http://sintyaku.pa.land.to/daken2/tajisakumagosou.htm')){
url__ = 'http://sintyaku.pa.land.to/daken2/tajisakumagosou.htm'
LargeImage__ = "typewellr"
}else if(url__.match('http://sintyaku.pa.land.to/daken2/tajitaji.htm')){
url__ = 'http://sintyaku.pa.land.to/daken2/tajitaji.htm'
LargeImage__ = "typewellr"
}else if(url__.match('https://typewell-in-browser.web.app')){
url__ = 'https://typewell-in-browser.web.app'
LargeImage__ = "typewellr"
}else if(url__.match('http://hakatashi.github.io/YouTyping')){
url__ = 'http://hakatashi.github.io/YouTyping'
LargeImage__ = "youtyping"
Detail__ = document.getElementsByClassName("btn-primary")[0].innerText
}else if(url__.match('https://www.intersteno.org/intersteno-internet-contests/training-with-taki-version') || url__.match('contest/app/pages/index.php')){
url__ = 'https://www.intersteno.org/intersteno-internet-contests'
if(!location.href.match('zav')){
Detail__ = "Taki Version"
}
LargeImage__ = "intersteno"
if(location.href.match('contest/app/pages/index.php')){
document.addEventListener("mouseover",function(event){
if(event.target.tagName == "A" && event.target.textContent[0] == " "){
State__ = event.target.textContent
send_localhost()
}
})
return;
}
}else if(url__.match('https://typing-training.net')){
url__ = 'https://typing-training.net'
LargeImage__ = "a"
if(document.querySelector('[itemtype="http://schema.org/WebPage"]') != null){
Detail__ = document.querySelector('[itemtype="http://schema.org/WebPage"]').firstElementChild.textContent
State__ = document.querySelector('[itemtype="http://schema.org/WebPage"]').lastChild.textContent
}
}else if(url__.match('https://manabi-gakushu.benesse.ne.jp/gakushu/typing')){
url__ = 'https://manabi-gakushu.benesse.ne.jp/gakushu/typing/nihongonyuryoku.html'
LargeImage__ = "a"
if(location.href == "https://manabi-gakushu.benesse.ne.jp/gakushu/typing/nihongonyuryoku.html"){
Detail__ = "日本語編"
}else if(location.href == "https://manabi-gakushu.benesse.ne.jp/gakushu/typing/homeposition.html"){
Detail__ = "ホームポジション 基本編"
}else if(location.href == "https://manabi-gakushu.benesse.ne.jp/gakushu/typing/eigonyuryoku.html"){
Detail__ = "英語編"
}else if(location.href == "https://manabi-gakushu.benesse.ne.jp/gakushu/typing/kokugo.html"){
Detail__ = "国語問題編"
}else if(location.href == "https://manabi-gakushu.benesse.ne.jp/gakushu/typing/eigo.html"){
Detail__ = "英語問題編"
}else if(location.href == "https://manabi-gakushu.benesse.ne.jp/gakushu/typing/eigokotowaza.html"){
Detail__ = "英語ことわざ編"
}else if(location.href == "https://manabi-gakushu.benesse.ne.jp/gakushu/typing/homeposition.html"){
Detail__ = "モラル・パソコン用語編"
}
}else if(url__.match('https://typing.playgram.jp')){
url__ = 'https://typing.playgram.jp'
LargeImage__ = "playgramtyping"
Detail__ = "ホーム"
window.addEventListener("load",function(){
setTimeout(function(){
var achievement = document.querySelector(".btn-user-title p")
if(achievement == undefined){
if(localStorage.getItem("typist_achievement")){
State__ = localStorage.getItem("typist_achievement")
}
}else{
localStorage.setItem("typist_achievement",achievement.innerText)
State__ = achievement.innerText
}
if(location.href == "https://typing.playgram.jp/select"){
Detail__ = "モード選択"
}else if(location.href == "https://typing.playgram.jp/assessment"){
Detail__ = "うでだめし"
}else if(location.href == "https://typing.playgram.jp/training"){
Detail__ = "基礎練習 ステージ選択"
}else if(location.href == "https://typing.playgram.jp/advanced"){
Detail__ = "特訓 ステージ選択"
}else if(location.href.match(/training\/\d*/)){
Detail__ = "基礎練習 ステージ "+location.href.match(/training\/\d.*/)[0].replace("training/","").replace("/","-")
}else if(location.href.match("advanced/play")){
let advanced_mode
if(location.href.match("easy")){
advanced_mode = "かんたん"
}else if(location.href.match("normal")){
advanced_mode = "ふつう"
}else{
advanced_mode = "むずかしい"
}
Detail__ = "特訓 ステージ "+advanced_mode
}
send_first_data()
},500)
})
return;
}else if(url__.match('typingclub.com')){
url__ = 'typingclub.com'
LargeImage__ = "typingclub"
Detail__ = "HOME"
let lesson_name = parent.document.documentElement
if(lesson_name == undefined){
send_first_data()
return;
}
Detail__ = lesson_name.outerText.split("\n")[0]
if(Detail__ == "TypingClub"){
Detail__ = "HOME"
}
}else if(url__.match('typrx.com')){
url__ = 'https://www.typrx.com'
LargeImage__ = "x"
Detail__ = "HOME"
if(localStorage.getItem("WPM")){
State__ = localStorage.getItem("WPM")+" / "+ localStorage.getItem("races")
}
if(location.href == "https://www.typrx.com/"){
localStorage.setItem("WPM",document.querySelector("[class='page-body text-center pt-4 pb-3'] h2").innerText)
localStorage.setItem("races",document.querySelector("[class='page-body text-center pt-4 pb-3'] p").innerText.split("\n")[0])
State__ = localStorage.getItem("WPM")+" / "+ localStorage.getItem("races")
}else if(location.href == "https://www.typrx.com/race"){
Detail__ = "Race Now!"
}
}else if(url__.match('10fastfingers.com')){
url__ = 'https://10fastfingers.com'
LargeImage__ = "10fastfingers"
Detail__ = "HOME"
State__ = "Language: "
if(document.getElementsByClassName("active")[0] != null){
Detail__ = document.getElementsByClassName("active")[0].querySelector("strong").innerText
}
if(document.getElementById("language") != null){
State__ += document.getElementById("language").firstElementChild.innerText
}else if(document.getElementById("selected-language") != null){
State__ += document.getElementById("selected-language").innerText
}
}else if(url__.match('typing.io')){
url__ = 'typing.io'
LargeImage__ = "typingio"
Detail__ = "HOME"
if(location.href.match("https://typing.io/lesson/") && sessionStorage.getItem("Detail")){
Detail__ = sessionStorage.getItem("Detail")
State__ = sessionStorage.getItem("State")
}
document.addEventListener("click",function(){
if(event.currentTarget.URL == "https://typing.io/"){
Detail__ = "HOME"
State__ = undefined
}
if(event.target.closest(".lesson-button") != null){
sessionStorage.setItem("Detail","language: "+event.target.closest(".lesson-button").querySelector(".language").innerText)
sessionStorage.setItem("State","genre: "+event.target.closest(".lesson-button").querySelector(".name").innerText)
Detail__ = sessionStorage.getItem("Detail")
State__ = sessionStorage.getItem("State")
send_localhost()
}
})
}else if(url__.match('speedcoder.net')){
url__ = 'speedcoder.net'
LargeImage__ = "speedcoder"
Detail__ = "HOME"
if(!location.href.match("custom") && location.href.match("https://www.speedcoder.net/lessons/") && sessionStorage.getItem("Detail")){
Detail__ = sessionStorage.getItem("Detail")
State__ = sessionStorage.getItem("State")
}
if(location.href.match("custom") && sessionStorage.getItem("State")){
Detail__ = "language: "+location.href.match(/(\d+\/)(\w+)/)[2]
}
document.addEventListener("click",function(){
if(event.target.className.match("lesson")){
sessionStorage.setItem("Detail","language: "+event.target.firstChild.textContent.replace(" ",""))
sessionStorage.setItem("State","genre: "+event.target.lastElementChild.innerText)
}else if(event.target.parentNode.className.match("panel") && location.href == "https://www.speedcoder.net/customcode/"){
sessionStorage.setItem("State","genre: "+event.target.parentNode.firstElementChild.firstElementChild.innerText)
}
})
}else if(url__.match('shakyo.io')){
url__ = 'shakyo.io'
LargeImage__ = "shakyoio"
Detail__ = "ホーム"
window.addEventListener("load",function(){
setTimeout(function(){
var lesson
if(document.getElementsByClassName("lesson-breadcrumb")[0] != null && document.getElementsByClassName("lesson-breadcrumb")[0].lastElementChild != null){
lesson = document.getElementsByClassName("lesson-breadcrumb")[0].lastElementChild
Detail__ = (lesson.textContent+" ").replace("++","++")
sessionStorage.setItem("choice",Detail__)
}else if(document.getElementsByClassName("code-info")[0] != null){
Detail__ = sessionStorage.getItem("choice")
State__ = document.getElementsByClassName("code-info")[0].firstElementChild.textContent
}
if(location.href.match("https://shakyo.io/code")){
sessionStorage.removeItem("choice")
Detail__ = document.getElementsByClassName("code-info-lang")[0] ? document.getElementsByClassName("code-info-lang")[0].innerText : "ホーム"
}
send_first_data()
},2500)
})
return;
}
function send_first_data(){
send_localhost()
focus_in_interval = setInterval(send_localhost,15000)
}
send_first_data()