Song select fixes

- Searching diverge:yes returns songs with branches
- Fade out music slightly while search window is open
- When opening search box with a saved query, all the text gets selected
- Fix Ctrl+F not working during song select fade in
- Fix edge case highlighting only working on lowercase letters
- Fix right clicking selected text in the search box so it no longer gets unselected
- Fix Netplay option appearing when netplay is offline
- Use category id instead of name in the generated stylesheet
- Languages can choose to fallback to english instead of japanese with preferEn
This commit is contained in:
KatieFrogs 2022-03-03 23:38:29 +03:00
parent 6f10718bd2
commit 6c54c45a23
3 changed files with 49 additions and 21 deletions

View File

@ -48,7 +48,7 @@
padding: 0.5em 0.7em; padding: 0.5em 0.7em;
border-radius: 0.2em; border-radius: 0.2em;
border: 0.13em black solid; border: 0.13em black solid;
font-family: TnT; font-family: inherit;
box-sizing: border-box; box-sizing: border-box;
-webkit-box-sizing:border-box; -webkit-box-sizing:border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;

View File

@ -77,7 +77,7 @@ class Lyrics{
break break
} }
var lang = text.slice(index1 + 6, index2).toLowerCase() var lang = text.slice(index1 + 6, index2).toLowerCase()
if(strings.id === lang){ if(strings.preferEn && lang === "en" || strings.id === lang){
var index3 = text.indexOf("<lang ", index2 + 1) var index3 = text.indexOf("<lang ", index2 + 1)
if(index3 !== -1){ if(index3 !== -1){
textLang = text.slice(index2 + 1, index3) textLang = text.slice(index2 + 1, index3)

View File

@ -86,6 +86,7 @@ class SongSelect{
if(category.songSkin.sort === null){ if(category.songSkin.sort === null){
category.songSkin.sort = songSkinLength + 1 category.songSkin.sort = songSkinLength + 1
} }
category.songSkin.id = category.id
this.songSkin[category.title] = category.songSkin this.songSkin[category.title] = category.songSkin
} }
} }
@ -95,12 +96,14 @@ class SongSelect{
var searchCss = [] var searchCss = []
Object.keys(this.songSkin).forEach(key => { Object.keys(this.songSkin).forEach(key => {
var skin = this.songSkin[key] var skin = this.songSkin[key]
var stripped = key.replace(/\W/g, '') if("id" in skin || key === "default"){
var id = "id" in skin ? ("cat" + skin.id) : key
searchCss.push('.song-search-' + stripped + ' { background-color: ' + skin.background + ' }') searchCss.push('.song-search-' + id + ' { background-color: ' + skin.background + ' }')
searchCss.push('.song-search-' + stripped + '::before { border: 0.4em solid ' + skin.border[0] + ' ; border-bottom-color: ' + skin.border[1] + ' ; border-right-color: ' + skin.border[1] + ' }') searchCss.push('.song-search-' + id + '::before { border: 0.4em solid ' + skin.border[0] + ' ; border-bottom-color: ' + skin.border[1] + ' ; border-right-color: ' + skin.border[1] + ' }')
searchCss.push('.song-search-' + stripped + ' .song-search-result-title::before { -webkit-text-stroke: 0.4em ' + skin.outline + ' }') searchCss.push('.song-search-' + id + ' .song-search-result-title::before { -webkit-text-stroke: 0.4em ' + skin.outline + ' }')
searchCss.push('.song-search-' + stripped + ' .song-search-result-subtitle::before { -webkit-text-stroke: 0.4em ' + skin.outline + ' }') searchCss.push('.song-search-' + id + ' .song-search-result-subtitle::before { -webkit-text-stroke: 0.4em ' + skin.outline + ' }')
}
}) })
this.searchStyle.appendChild(document.createTextNode(searchCss.join("\n"))) this.searchStyle.appendChild(document.createTextNode(searchCss.join("\n")))
loader.screen.appendChild(this.searchStyle) loader.screen.appendChild(this.searchStyle)
@ -447,7 +450,7 @@ class SongSelect{
} }
}else if(name === "confirm"){ }else if(name === "confirm"){
if(Number.isInteger(this.search.active)){ if(Number.isInteger(this.search.active)){
this.searchProceed(parseInt(this.search.results[this.search.active].dataset.song_id)) this.searchProceed(parseInt(this.search.results[this.search.active].dataset.songId))
} }
} }
}else if(this.state.screen === "song"){ }else if(this.state.screen === "song"){
@ -487,7 +490,7 @@ class SongSelect{
}else if(this.state.screen === "difficulty"){ }else if(this.state.screen === "difficulty"){
if(event && event.keyCode && event.keyCode === 70 && ctrl){ if(event && event.keyCode && event.keyCode === 70 && ctrl){
this.displaySearch() this.displaySearch()
event.preventDefault() if(event){ event.preventDefault() }
}else if(name === "confirm"){ }else if(name === "confirm"){
if(this.selectedDiff === 0){ if(this.selectedDiff === 0){
this.toSongSelect() this.toSongSelect()
@ -508,13 +511,18 @@ class SongSelect{
this.endPreview(true) this.endPreview(true)
this.playBgm(false) this.playBgm(false)
} }
}else if(this.state.screen === "title" || this.state.screen === "titleFadeIn"){
if(event && event.keyCode && event.keyCode === 70 && ctrl){
this.displaySearch()
if(event){ event.preventDefault() }
}
} }
} }
mouseDown(event){ mouseDown(event){
if(event.target === this.selectable || event.target.parentNode === this.selectable){ if(event.target === this.selectable || event.target.parentNode === this.selectable){
this.selectable.focus() this.selectable.focus()
}else{ }else if(event.target.tagName !== "INPUT"){
getSelection().removeAllRanges() getSelection().removeAllRanges()
this.selectable.blur() this.selectable.blur()
} }
@ -896,7 +904,7 @@ class SongSelect{
this.selectedDiff = 1 this.selectedDiff = 1
do{ do{
this.state.options = this.mod(this.optionsList.length, this.state.options + moveBy) this.state.options = this.mod(this.optionsList.length, this.state.options + moveBy)
}while((p2.socket && p2.socket.readyState !== 1 || assets.customSongs) && this.state.options === 2) }while((!p2.socket || p2.socket.readyState !== 1 || assets.customSongs) && this.state.options === 2)
} }
} }
toTitleScreen(){ toTitleScreen(){
@ -2711,15 +2719,17 @@ class SongSelect{
var title = this.getLocalTitle(song.title, song.title_lang) var title = this.getLocalTitle(song.title, song.title_lang)
var subtitle = this.getLocalTitle(title === song.title ? song.subtitle : "", song.subtitle_lang) var subtitle = this.getLocalTitle(title === song.title ? song.subtitle : "", song.subtitle_lang)
var strippedCat = "default" var id = "default"
if(song.category_id){ if(song.category_id){
var cat = assets.categories.find(cat => cat.id === song.category_id) var cat = assets.categories.find(cat => cat.id === song.category_id)
strippedCat = cat.title.replace(/\W/g, '') if(cat && "id" in cat){
id = "cat" + cat.id
}
} }
var resultDiv = document.createElement("div") var resultDiv = document.createElement("div")
resultDiv.classList.add("song-search-result", "song-search-" + strippedCat) resultDiv.classList.add("song-search-result", "song-search-" + id)
resultDiv.dataset.song_id = song.id resultDiv.dataset.songId = song.id
var resultInfoDiv = document.createElement("div") var resultInfoDiv = document.createElement("div")
resultInfoDiv.classList.add("song-search-result-info") resultInfoDiv.classList.add("song-search-result-info")
@ -2868,9 +2878,15 @@ class SongSelect{
this.setSearchTip() this.setSearchTip()
cancelTouch = false cancelTouch = false
noResizeRoot = true noResizeRoot = true
if(this.songs[this.selectedSong].courses){
snd.previewGain.setVolumeMul(0.5)
}else if(this.bgmEnabled){
snd.musicGain.setVolumeMul(0.5)
}
setTimeout(() => { setTimeout(() => {
this.search.input.focus() this.search.input.focus()
this.search.input.setSelectionRange(0, this.search.input.value.length)
}, 10) }, 10)
var lastQuery = localStorage.getItem("lastSearchQuery") var lastQuery = localStorage.getItem("lastSearchQuery")
@ -2894,6 +2910,11 @@ class SongSelect{
delete this.search delete this.search
cancelTouch = true cancelTouch = true
noResizeRoot = false noResizeRoot = false
if(this.songs[this.selectedSong].courses){
snd.previewGain.setVolumeMul(1)
}else if(this.bgmEnabled){
snd.musicGain.setVolumeMul(1)
}
} }
} }
@ -2964,6 +2985,7 @@ class SongSelect{
case "creative": case "creative":
case "played": case "played":
case "maker": case "maker":
case "diverge":
filters[parts[0]] = parts[1] filters[parts[0]] = parts[1]
break break
} }
@ -3037,7 +3059,12 @@ class SongSelect{
if(aliases.find(alias => alias.toLowerCase() === value.toLowerCase())){ if(aliases.find(alias => alias.toLowerCase() === value.toLowerCase())){
passedFilters++ passedFilters++
} }
break
case "diverge":
var branch = Object.values(song.courses).find(course => course && course.branch)
if((value === "yes" && branch) || (value === "no" && !branch)){
passedFilters++
}
break break
} }
}) })
@ -3068,7 +3095,7 @@ class SongSelect{
} }
lastIdx = range[1] lastIdx = range[1]
}) })
var index = a[0].target.indexOf(query) var index = a[0].target.toLowerCase().indexOf(query)
if(index !== -1){ if(index !== -1){
a[0].ranges = [[index, index + query.length - 1]] a[0].ranges = [[index, index + query.length - 1]]
}else if(rangeAmount > a[0].indexes.length / 2){ }else if(rangeAmount > a[0].indexes.length / 2){
@ -3134,8 +3161,9 @@ class SongSelect{
} }
searchInput(){ searchInput(){
var text = this.search.input.value.toLowerCase() var text = this.search.input.value
localStorage.setItem("lastSearchQuery", text) localStorage.setItem("lastSearchQuery", text)
text = text.toLowerCase()
if(text.length === 0){ if(text.length === 0){
this.setSearchTip() this.setSearchTip()
@ -3181,7 +3209,7 @@ class SongSelect{
}else if(e.which === 1){ }else if(e.which === 1){
var songEl = e.target.closest(".song-search-result") var songEl = e.target.closest(".song-search-result")
if(songEl){ if(songEl){
var songId = parseInt(songEl.dataset.song_id) var songId = parseInt(songEl.dataset.songId)
this.searchProceed(songId) this.searchProceed(songId)
} }
} }
@ -3309,7 +3337,7 @@ class SongSelect{
getLocalTitle(title, titleLang){ getLocalTitle(title, titleLang){
if(titleLang){ if(titleLang){
for(var id in titleLang){ for(var id in titleLang){
if(id === strings.id && titleLang[id]){ if(id === "en" && strings.preferEn && !(strings.id in titleLang) && titleLang.en || id === strings.id && titleLang[id]){
return titleLang[id] return titleLang[id]
} }
} }