console.log('GLMV JS loaded!') let modelLoad = document.createElement('script') modelLoad.setAttribute('type','module') modelLoad.setAttribute('src','https://ajax.googleapis.com/ajax/libs/model-viewer/3.5.0/model-viewer.min.js') let headElem = document.getElementsByTagName('head')[0] headElem.appendChild(modelLoad) let urlProm let glbElems = document.querySelectorAll('.mw-body-content [href$=".glb"][title$=".glb"') if (glbElems.length > 0) { [...glbElems].forEach(ge => { console.log(ge) let modelRef = ge.href if (modelRef.indexOf('File:') >= 0) { console.log(`Getting true url of ${ge.title}`) urlProm = getImageUrl(ge.title) } else { urlProm = Promise.resolve(() => { return modelRef }) } Promise.all([urlProm]).then((imageUrl) => { let newModel = document.createElement('model-viewer') newModel.src = imageUrl newModel.toggleAttribute('camera-controls') newModel.toggleAttribute('ar') ge.parentElement.replaceChild(newModel, ge) console.log(`Replacing ${ge}...`) }) }) } async function getImageUrl(imageTitle) { if (!imageTitle || typeof imageTitle != 'string') return false console.log('Making api call...') const mwApi = new mw.Api let apiResp = await mwApi.get({ "action": "query", "format": "json", "prop": "imageinfo", "titles": imageTitle, "iiprop": "url" }) console.log(apiResp) return apiResp.query.pages[Object.keys(apiResp.query.pages)[0]].imageinfo[0].url }