跳转到内容

MediaWiki:Gadget-AudioText.js:修订间差异

来自电棍ottowiki
第1行: 第1行:
// MediaWiki:Gadget-AudioText.js
(function() {
(function() {
     const audioUrlCache = new Map();
     const audioUrlCache = new Map();
第4行: 第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();

2025年5月24日 (六) 23:50的版本

// 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) => {
                event.preventDefault();
                handlePlay(element);
            };
            element.addEventListener('touchstart', handler, { passive: false });
            element.addEventListener('click', handler);
        });
    }

    mw.hook('wikipage.content').add(initAudioTriggers);
    mw.loader.using('mediawiki.api').then(initAudioTriggers);
})();