MediaWiki:Gadget-AudioText.js:修订间差异
外观
![]() OctoberSama(留言 | 贡献) 小 |
![]() OctoberSama(留言 | 贡献) 小 |
||
第5行: | 第5行: | ||
function handlePlay(element) { | function handlePlay(element) { | ||
const audioFile = element.dataset.audioFile; | const audioFile = element.dataset.audioFile; | ||
if (audioUrlCache.has(audioFile)) { | if (audioUrlCache.has(audioFile)) { | ||
new Audio(audioUrlCache.get(audioFile)).play(); | new Audio(audioUrlCache.get(audioFile)).play(); | ||
第29行: | 第28行: | ||
if (element._audioBound) return; | if (element._audioBound) return; | ||
element._audioBound = true; | element._audioBound = true; | ||
// 修改事件处理逻辑 | |||
const handler = (event) => { | const handler = (event) => { | ||
// 关键修改:不阻止默认行为和冒泡 | |||
const toggle = element.closest('.mw-customtoggle'); | |||
if (toggle) { | |||
// 手动触发折叠状态切换 | |||
mw.collapse.handleClicks(event); | |||
} | |||
handlePlay(element); | handlePlay(element); | ||
}; | }; | ||
element.addEventListener('click', handler); | element.addEventListener('click', handler); | ||
element.addEventListener('touchstart', handler); | |||
}); | }); | ||
} | } | ||
mw.hook('wikipage.content').add(initAudioTriggers); | mw.hook('wikipage.content').add(initAudioTriggers); | ||
mw.loader.using('mediawiki.api').then(initAudioTriggers); | mw.loader.using(['mediawiki.api', 'mediawiki.collapse']).then(initAudioTriggers); | ||
})(); | })(); |
2025年5月24日 (六) 23:45的版本
// MediaWiki:Gadget-AudioText.js (function() { const audioUrlCache = new Map(); function handlePlay(element) { const audioFile = element.dataset.audioFile; if (audioUrlCache.has(audioFile)) { new Audio(audioUrlCache.get(audioFile)).play(); return; } const apiUrl = mw.util.wikiScript('api') + '?action=query&titles=' + encodeURIComponent(audioFile) + '&prop=imageinfo&iiprop=url&format=json'; fetch(apiUrl) .then(response => response.json()) .then(data => { const pages = data.query.pages; const pageId = Object.keys(pages)[0]; const audioUrl = pages[pageId].imageinfo[0].url; audioUrlCache.set(audioFile, audioUrl); new Audio(audioUrl).play(); }); } function initAudioTriggers() { document.querySelectorAll('.audio-trigger').forEach(element => { if (element._audioBound) return; element._audioBound = true; // 修改事件处理逻辑 const handler = (event) => { // 关键修改:不阻止默认行为和冒泡 const toggle = element.closest('.mw-customtoggle'); if (toggle) { // 手动触发折叠状态切换 mw.collapse.handleClicks(event); } handlePlay(element); }; element.addEventListener('click', handler); element.addEventListener('touchstart', handler); }); } mw.hook('wikipage.content').add(initAudioTriggers); mw.loader.using(['mediawiki.api', 'mediawiki.collapse']).then(initAudioTriggers); })();