mirror of https://gitgud.io/fatchan/jschan.git
add tegaki replay feature See merge request fatchan/jschan!265indiachan-spamvector
commit
fb737b14df
5 changed files with 5705 additions and 6268 deletions
@ -0,0 +1,74 @@ |
|||||||
|
function getTegakiReplayBTN(url) { |
||||||
|
let a = document.createElement('a'); |
||||||
|
a.text = '[View replay]'; |
||||||
|
a.classList.add('dummy-link'); |
||||||
|
a.download = url; |
||||||
|
a.href = url; |
||||||
|
|
||||||
|
a.addEventListener('click', (me) => { |
||||||
|
me.preventDefault(); |
||||||
|
window.dispatchEvent( |
||||||
|
(new CustomEvent('showTegakiReplay',{detail:url})) |
||||||
|
); |
||||||
|
}); |
||||||
|
|
||||||
|
return a; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
*
|
||||||
|
* @param {HTMLElement[]} fileInfos
|
||||||
|
* @param {string} tegakiName
|
||||||
|
* @returns {HTMLAnchorElement|undefined} |
||||||
|
*/ |
||||||
|
function getReplayElement(fileInfos,tegakiName) { |
||||||
|
let replay = undefined; |
||||||
|
fileInfos.forEach((e) => { |
||||||
|
e.querySelectorAll('a').forEach((a) => { |
||||||
|
let tegaki = tegakiName.replace('tegaki.png', 'replay.tgkr'); |
||||||
|
if (tegaki === a.download) { |
||||||
|
replay = a; |
||||||
|
return; |
||||||
|
} |
||||||
|
}); |
||||||
|
if (replay) {
|
||||||
|
return; |
||||||
|
}
|
||||||
|
}); |
||||||
|
|
||||||
|
return replay; |
||||||
|
} |
||||||
|
|
||||||
|
function tryAddTegakiReplays(post) { |
||||||
|
let fileInfos = post.querySelectorAll('.post-file-info'); |
||||||
|
|
||||||
|
fileInfos.forEach((fi) => { |
||||||
|
let a = fi.querySelector('a'); |
||||||
|
let isTegakiReplay = a.download.endsWith('.tgkr'); |
||||||
|
let isTegaki = a.download.endsWith('-tegaki.png'); |
||||||
|
|
||||||
|
if (isTegaki) { |
||||||
|
let replay = getReplayElement(fileInfos, a.download); |
||||||
|
|
||||||
|
if (replay) { |
||||||
|
fi.appendChild(getTegakiReplayBTN(`${replay.href}`)); |
||||||
|
replay.parentElement.parentElement.parentElement.remove(); |
||||||
|
} |
||||||
|
|
||||||
|
} else if (isTegakiReplay) { |
||||||
|
fi.appendChild(getTegakiReplayBTN(`${a.href}`)); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
window.addEventListener('DOMContentLoaded', () => { |
||||||
|
let postContainers = document.querySelectorAll('.post-container'); |
||||||
|
|
||||||
|
postContainers.forEach((post) => { |
||||||
|
tryAddTegakiReplays(post); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
window.addEventListener('addPost', function (e) { |
||||||
|
tryAddTegakiReplays(e.detail.post); |
||||||
|
}); |
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue