From 4c0e3b29185a8dd98b4f2ee79949318746e64890 Mon Sep 17 00:00:00 2001 From: zhx Date: Wed, 20 May 2026 13:53:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AC=E7=9B=98=E6=8A=BD=E5=A5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- h5/yumi-wheel/h5/agencypanel/index.html | 2 +- h5/yumi-wheel/h5/agencypanel/index_local.html | 2 +- .../static/js/wheel-dynamic-preview.js | 535 ++++++++++++++++++ .../static/js/wheel-gateway-api.js | 111 +++- 4 files changed, 646 insertions(+), 4 deletions(-) create mode 100644 h5/yumi-wheel/h5/agencypanel/static/js/wheel-dynamic-preview.js diff --git a/h5/yumi-wheel/h5/agencypanel/index.html b/h5/yumi-wheel/h5/agencypanel/index.html index 872357c..07b3865 100644 --- a/h5/yumi-wheel/h5/agencypanel/index.html +++ b/h5/yumi-wheel/h5/agencypanel/index.html @@ -1 +1 @@ -Yumi
+Yumi
diff --git a/h5/yumi-wheel/h5/agencypanel/index_local.html b/h5/yumi-wheel/h5/agencypanel/index_local.html index b974420..9a08d84 100644 --- a/h5/yumi-wheel/h5/agencypanel/index_local.html +++ b/h5/yumi-wheel/h5/agencypanel/index_local.html @@ -1 +1 @@ -Yumi Wheel Local
+Yumi Wheel Local
diff --git a/h5/yumi-wheel/h5/agencypanel/static/js/wheel-dynamic-preview.js b/h5/yumi-wheel/h5/agencypanel/static/js/wheel-dynamic-preview.js new file mode 100644 index 0000000..e96290f --- /dev/null +++ b/h5/yumi-wheel/h5/agencypanel/static/js/wheel-dynamic-preview.js @@ -0,0 +1,535 @@ +(function () { + var STYLE_ID = 'yumi-wheel-dynamic-preview-style'; + var OVERLAY_CLASS = 'yumi-wheel-dynamic-preview-overlay'; + var PREVIEW_VERSION = '20260520-dynamic-preview-pag'; + var SVGA_SCRIPT_URLS = [ + 'https://cdn.jsdelivr.net/npm/svgaplayerweb@2.3.2/build/svga.min.js', + 'https://unpkg.com/svgaplayerweb@2.3.2/build/svga.min.js' + ]; + var PAG_SCRIPT_URLS = [ + 'https://cdn.jsdelivr.net/npm/libpag@4.2.84/lib/libpag.min.js', + 'https://unpkg.com/libpag@4.2.84/lib/libpag.min.js' + ]; + var PAG_WASM_URLS = [ + 'https://cdn.jsdelivr.net/npm/libpag@4.2.84/lib/libpag.wasm', + 'https://unpkg.com/libpag@4.2.84/lib/libpag.wasm' + ]; + var svgaLoaderPromise = null; + var pagLoaderPromise = null; + var previousBodyOverflow = null; + + function matches(node, selector) { + if (!node || node.nodeType !== 1) return false; + var fn = node.matches || node.webkitMatchesSelector || node.msMatchesSelector; + return !!fn && fn.call(node, selector); + } + + function closest(node, selector) { + while (node && node.nodeType === 1) { + if (matches(node, selector)) return node; + node = node.parentNode; + } + return null; + } + + function hasClass(node, name) { + if (!node) return false; + if (node.classList) return node.classList.contains(name); + return (' ' + (node.className || '') + ' ').indexOf(' ' + name + ' ') >= 0; + } + + function injectStyle() { + if (document.getElementById(STYLE_ID)) return; + var style = document.createElement('style'); + style.id = STYLE_ID; + style.textContent = [ + '.' + OVERLAY_CLASS + '{position:fixed;left:0;top:0;right:0;bottom:0;z-index:2147483000;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.88);touch-action:manipulation;-webkit-tap-highlight-color:transparent;}', + '.yumi-wheel-dynamic-preview-stage{width:100vw;height:100vh;box-sizing:border-box;padding:24px;display:flex;align-items:center;justify-content:center;}', + '.yumi-wheel-dynamic-preview-media{display:block;max-width:92vw;max-height:82vh;object-fit:contain;}', + '.yumi-wheel-dynamic-preview-svga{width:92vw;height:92vw;max-width:420px;max-height:420px;}', + '.yumi-wheel-dynamic-preview-pag{display:block;max-width:92vw;max-height:82vh;}', + '.yumi-wheel-dynamic-preview-spinner{width:38px;height:38px;border-radius:50%;border:3px solid rgba(255,255,255,.28);border-top-color:#fff;animation:yumiWheelPreviewSpin .8s linear infinite;}', + '@media (orientation:landscape){.yumi-wheel-dynamic-preview-media{max-width:82vw;max-height:88vh}.yumi-wheel-dynamic-preview-svga{width:72vh;height:72vh;max-width:520px;max-height:520px}}', + '@keyframes yumiWheelPreviewSpin{to{transform:rotate(360deg)}}' + ].join(''); + document.head.appendChild(style); + } + + function clearNode(node) { + while (node && node.firstChild) node.removeChild(node.firstChild); + } + + function firstString(source, keys) { + if (!source) return ''; + for (var index = 0; index < keys.length; index++) { + var value = source[keys[index]]; + if (value !== null && value !== undefined && String(value).trim() !== '') { + return String(value).trim(); + } + } + return ''; + } + + function dynamicURL(item) { + var merchandise = (item && item.merchandise) || {}; + return ( + firstString(merchandise, ['animationUrl', 'resourceUrl', 'sourceUrl', 'url']) || + firstString(item, ['animationUrl', 'resourceUrl', 'sourceUrl', 'url']) + ); + } + + function coverURL(item) { + var merchandise = (item && item.merchandise) || {}; + return firstString(merchandise, ['coverUrl', 'cover', 'image']) || firstString(item, ['coverUrl', 'cover', 'image']); + } + + function rewardName(item) { + var merchandise = (item && item.merchandise) || {}; + return firstString(merchandise, ['name', 'resourceName']) || firstString(item, ['name', 'resourceName']); + } + + function itemPayload(item) { + var url = dynamicURL(item); + if (!url) return null; + return { + url: url, + cover: coverURL(item), + name: rewardName(item) + }; + } + + function indexOfNode(nodes, target) { + for (var index = 0; index < nodes.length; index++) { + if (nodes[index] === target) return index; + } + return -1; + } + + function gridItemPayload(vm, img) { + if (!img || hasClass(img, 'gift-webp')) return null; + var gridItem = closest(img, '.grid-item'); + if (!gridItem || !vm.$el || !vm.$el.contains(gridItem)) return null; + var grid = closest(gridItem, '.lottery-grid'); + if (!grid || !vm.$el.contains(grid)) return null; + var index = indexOfNode(grid.querySelectorAll('.grid-item'), gridItem); + if (index < 0) return null; + return itemPayload((vm.gridItems || [])[index]); + } + + function currentRewardPayload(vm, img) { + var box = closest(img, '.box-desc'); + if (!box || !vm.$el || !vm.$el.contains(box)) return null; + var popup = closest(box, '.reward-content'); + if (!popup || !vm.$el.contains(popup)) return null; + var boxes = popup.querySelectorAll('.box-desc'); + var index = indexOfNode(boxes, box); + if (index < 0) return null; + var rewards = (vm.currentReward && vm.currentReward.rewards) || []; + return itemPayload(rewards[index]); + } + + function historyRewardPayload(vm, img) { + var box = closest(img, '.box-desc'); + var list = closest(img, '.list'); + if (!box || !list || !vm.$el || !vm.$el.contains(list)) return null; + var popup = closest(list, '.popup-content'); + if (!popup || !vm.$el.contains(popup)) return null; + var recordIndex = indexOfNode(popup.querySelectorAll('.list'), list); + var rewardIndex = indexOfNode(list.querySelectorAll('.box-desc'), box); + var record = (vm.historyRecord || [])[recordIndex]; + if (!record || rewardIndex < 0) return null; + return itemPayload((record.rewards || [])[rewardIndex]); + } + + function prizePayloadFromClick(vm, event) { + var img = closest(event.target, 'img.img'); + if (!img || !vm.$el || !vm.$el.contains(img)) return null; + return gridItemPayload(vm, img) || currentRewardPayload(vm, img) || historyRewardPayload(vm, img); + } + + function mediaKind(url) { + var lower = String(url || '').toLowerCase(); + if (/^data:video\//.test(lower)) return 'video'; + if (/^data:image\//.test(lower)) return 'image'; + try { + lower = new URL(url, window.location.href).pathname.toLowerCase(); + } catch (error) { + lower = lower.split('?')[0].split('#')[0]; + } + if (/\.(mp4|webm|mov|m4v)$/.test(lower)) return 'video'; + if (/\.(gif|webp|png|jpg|jpeg|svg)$/.test(lower)) return 'image'; + if (/\.svga$/.test(lower)) return 'svga'; + if (/\.pag$/.test(lower)) return 'pag'; + return 'unknown'; + } + + function removeExistingOverlay() { + var overlay = document.querySelector('.' + OVERLAY_CLASS); + if (overlay) closeOverlay(overlay); + } + + function lockBodyScroll() { + if (previousBodyOverflow === null && document.body) { + previousBodyOverflow = document.body.style.overflow || ''; + document.body.style.overflow = 'hidden'; + } + } + + function unlockBodyScroll() { + if (previousBodyOverflow !== null && document.body) { + document.body.style.overflow = previousBodyOverflow; + previousBodyOverflow = null; + } + } + + function closeOverlay(overlay) { + if (!overlay) return; + if (overlay.__previewVideo) { + try { + overlay.__previewVideo.pause(); + } catch (error) {} + } + if (overlay.__svgaPlayer && typeof overlay.__svgaPlayer.stopAnimation === 'function') { + try { + overlay.__svgaPlayer.stopAnimation(); + } catch (error) {} + } + if (overlay.__pagView) { + ['pause', 'stop', 'destroy', 'free'].forEach(function (method) { + if (overlay.__pagView && typeof overlay.__pagView[method] === 'function') { + try { + overlay.__pagView[method](); + } catch (error) {} + } + }); + } + if (overlay.parentNode) overlay.parentNode.removeChild(overlay); + unlockBodyScroll(); + } + + function createOverlay() { + injectStyle(); + removeExistingOverlay(); + var overlay = document.createElement('div'); + var stage = document.createElement('div'); + var spinner = document.createElement('div'); + overlay.className = OVERLAY_CLASS; + overlay.setAttribute('role', 'dialog'); + stage.className = 'yumi-wheel-dynamic-preview-stage'; + spinner.className = 'yumi-wheel-dynamic-preview-spinner'; + stage.appendChild(spinner); + overlay.appendChild(stage); + overlay.addEventListener('click', function () { + closeOverlay(overlay); + }); + document.body.appendChild(overlay); + lockBodyScroll(); + return { overlay: overlay, stage: stage }; + } + + function renderImage(stage, overlay, url, fallbackURL, name) { + clearNode(stage); + var image = document.createElement('img'); + image.className = 'yumi-wheel-dynamic-preview-media'; + image.alt = name || ''; + image.src = url; + image.onerror = function () { + if (fallbackURL && image.src !== fallbackURL) { + image.src = fallbackURL; + } + }; + stage.appendChild(image); + overlay.__previewImage = image; + } + + function renderVideo(stage, overlay, url, fallbackURL, name) { + clearNode(stage); + var video = document.createElement('video'); + video.className = 'yumi-wheel-dynamic-preview-media'; + video.src = url; + video.loop = true; + video.muted = true; + video.autoplay = true; + video.playsInline = true; + video.setAttribute('playsinline', ''); + video.setAttribute('webkit-playsinline', ''); + video.setAttribute('aria-label', name || ''); + video.onerror = function () { + renderImage(stage, overlay, fallbackURL || url, fallbackURL, name); + }; + stage.appendChild(video); + overlay.__previewVideo = video; + var playResult = video.play && video.play(); + if (playResult && typeof playResult.catch === 'function') { + playResult.catch(function () {}); + } + } + + function loadSVGAPlayer() { + if (window.SVGA && window.SVGA.Player && window.SVGA.Parser) { + return Promise.resolve(window.SVGA); + } + if (svgaLoaderPromise) return svgaLoaderPromise; + svgaLoaderPromise = new Promise(function (resolve, reject) { + function loadAt(index) { + if (index >= SVGA_SCRIPT_URLS.length) { + reject(new Error('svga player load failed')); + return; + } + var script = document.createElement('script'); + script.async = true; + script.crossOrigin = 'anonymous'; + script.src = SVGA_SCRIPT_URLS[index]; + script.onload = function () { + if (window.SVGA && window.SVGA.Player && window.SVGA.Parser) { + resolve(window.SVGA); + } else { + loadAt(index + 1); + } + }; + script.onerror = function () { + loadAt(index + 1); + }; + document.head.appendChild(script); + } + loadAt(0); + }); + return svgaLoaderPromise; + } + + function loadScript(urls, ready, index) { + index = index || 0; + if (ready()) return Promise.resolve(); + if (index >= urls.length) return Promise.reject(new Error('script load failed')); + return new Promise(function (resolve, reject) { + var script = document.createElement('script'); + script.async = true; + script.crossOrigin = 'anonymous'; + script.src = urls[index]; + script.onload = function () { + if (ready()) { + resolve(); + } else { + reject(new Error('script loaded without api')); + } + }; + script.onerror = reject; + document.head.appendChild(script); + }).catch(function () { + return loadScript(urls, ready, index + 1); + }); + } + + function initPAG(wasmIndex) { + if (!window.libpag || typeof window.libpag.PAGInit !== 'function') { + return Promise.reject(new Error('libpag missing')); + } + return window.libpag.PAGInit({ + locateFile: function (file) { + if (/\.wasm(\?|#|$)/.test(String(file || ''))) { + return PAG_WASM_URLS[wasmIndex] || PAG_WASM_URLS[0]; + } + return file; + } + }); + } + + function loadPAGPlayer() { + if (window.__YUMI_WHEEL_PAG__) return Promise.resolve(window.__YUMI_WHEEL_PAG__); + if (pagLoaderPromise) return pagLoaderPromise; + pagLoaderPromise = loadScript(PAG_SCRIPT_URLS, function () { + return !!(window.libpag && window.libpag.PAGInit); + }).then(function () { + return initPAG(0).catch(function () { + return initPAG(1); + }); + }).then(function (PAG) { + window.__YUMI_WHEEL_PAG__ = PAG; + return PAG; + }); + return pagLoaderPromise; + } + + function loadArrayBuffer(url) { + if (window.fetch) { + return window.fetch(url, { mode: 'cors' }).then(function (response) { + if (!response.ok) throw new Error('pag file load failed'); + return response.arrayBuffer(); + }); + } + return new Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = function () { + if (xhr.status >= 200 && xhr.status < 300) { + resolve(xhr.response); + } else { + reject(new Error('pag file load failed')); + } + }; + xhr.onerror = reject; + xhr.send(); + }); + } + + function renderSVGA(stage, overlay, url, fallbackURL, name) { + var host = document.createElement('div'); + clearNode(stage); + host.className = 'yumi-wheel-dynamic-preview-svga'; + stage.appendChild(host); + loadSVGAPlayer() + .then(function (SVGA) { + if (!document.documentElement.contains(overlay)) return; + var player = new SVGA.Player(host); + var parser = new SVGA.Parser(host); + overlay.__svgaPlayer = player; + parser.load( + url, + function (videoItem) { + if (!document.documentElement.contains(overlay)) return; + player.setVideoItem(videoItem); + player.loops = 0; + player.startAnimation(); + }, + function () { + renderImage(stage, overlay, fallbackURL || url, fallbackURL, name); + } + ); + }) + .catch(function () { + renderImage(stage, overlay, fallbackURL || url, fallbackURL, name); + }); + } + + function renderPAG(stage, overlay, url, fallbackURL, name) { + var canvas = document.createElement('canvas'); + clearNode(stage); + canvas.className = 'yumi-wheel-dynamic-preview-pag'; + canvas.setAttribute('aria-label', name || ''); + stage.appendChild(canvas); + loadPAGPlayer() + .then(function (PAG) { + if (!document.documentElement.contains(overlay)) return null; + return loadArrayBuffer(url).then(function (buffer) { + return PAG.PAGFile.load(buffer); + }).then(function (pagFile) { + if (!document.documentElement.contains(overlay)) return null; + var width = Math.max(1, Number(pagFile.width && pagFile.width()) || 1); + var height = Math.max(1, Number(pagFile.height && pagFile.height()) || 1); + canvas.width = width; + canvas.height = height; + canvas.style.aspectRatio = width + ' / ' + height; + return PAG.PAGView.init(pagFile, canvas).then(function (pagView) { + if (!document.documentElement.contains(overlay)) { + if (pagView && typeof pagView.destroy === 'function') pagView.destroy(); + return null; + } + overlay.__pagView = pagView; + if (typeof pagView.play === 'function') { + return pagView.play(); + } + return null; + }); + }); + }) + .catch(function () { + renderImage(stage, overlay, fallbackURL || url, fallbackURL, name); + }); + } + + function showDynamicPreview(url, fallbackURL, name) { + if (!url) return; + var nodes = createOverlay(); + var kind = mediaKind(url); + if (kind === 'svga') { + renderSVGA(nodes.stage, nodes.overlay, url, fallbackURL, name); + } else if (kind === 'pag') { + renderPAG(nodes.stage, nodes.overlay, url, fallbackURL, name); + } else if (kind === 'video') { + renderVideo(nodes.stage, nodes.overlay, url, fallbackURL, name); + } else if (kind === 'image') { + renderImage(nodes.stage, nodes.overlay, url, fallbackURL, name); + } else { + renderVideo(nodes.stage, nodes.overlay, url, fallbackURL, name); + } + } + + function walkVue(vm, visitor, seen) { + if (!vm || seen.indexOf(vm) >= 0) return; + seen.push(vm); + visitor(vm); + (vm.$children || []).forEach(function (child) { + walkVue(child, visitor, seen); + }); + } + + function visibleElement(el) { + if (!el || !document.documentElement.contains(el)) return false; + var rect = el.getBoundingClientRect(); + return rect.width > 0 && rect.height > 0; + } + + function wheelInstances() { + var roots = []; + var app = document.getElementById('app'); + if (app && app.__vue__) roots.push(app.__vue__); + document.querySelectorAll('.lucky-box').forEach(function (node) { + if (node.__vue__) roots.push(node.__vue__); + }); + + var result = []; + roots.forEach(function (root) { + walkVue(root, function (vm) { + if ( + vm && + Array.isArray(vm.gridItems) && + typeof vm.startLottery === 'function' && + visibleElement(vm.$el) + ) { + result.push(vm); + } + }, []); + }); + return result; + } + + function patchVm(vm) { + if (vm.__wheelDynamicPreviewApplied) return; + vm.__wheelDynamicPreviewApplied = true; + vm.$el.addEventListener( + 'click', + function (event) { + var payload = prizePayloadFromClick(vm, event); + if (!payload || !payload.url) return; + event.preventDefault(); + event.stopPropagation(); + showDynamicPreview(payload.url, payload.cover, payload.name); + }, + true + ); + } + + function patchAll() { + wheelInstances().forEach(patchVm); + } + + var observer = new MutationObserver(patchAll); + observer.observe(document.documentElement, { childList: true, subtree: true }); + setInterval(patchAll, 500); + patchAll(); + + try { + document.documentElement.setAttribute('data-yumi-wheel-dynamic-preview', PREVIEW_VERSION); + document.addEventListener('yumi-wheel-dynamic-preview', function (event) { + var detail = (event && event.detail) || {}; + showDynamicPreview(detail.url, detail.coverUrl || detail.cover, detail.name); + }); + } catch (error) {} + + window.__YUMI_WHEEL_DYNAMIC_PREVIEW__ = { + show: showDynamicPreview, + patchAll: patchAll, + version: PREVIEW_VERSION + }; +})(); diff --git a/h5/yumi-wheel/h5/agencypanel/static/js/wheel-gateway-api.js b/h5/yumi-wheel/h5/agencypanel/static/js/wheel-gateway-api.js index 787caee..bb5538b 100644 --- a/h5/yumi-wheel/h5/agencypanel/static/js/wheel-gateway-api.js +++ b/h5/yumi-wheel/h5/agencypanel/static/js/wheel-gateway-api.js @@ -3,6 +3,7 @@ var productionGatewayBase = 'https://jvapi.haiyihy.com'; var defaultGatewayBase = resolveDefaultGatewayBase(); var defaultGatewayPrefix = '/go'; + var dynamicPreviewVersion = '20260520-dynamic-preview-pag'; var defaultSysOrigin = 'LIKEI'; var defaultReqClient = 'Android'; var defaultReqAppIntel = { @@ -314,6 +315,98 @@ /\/api\/v1\/probability\/[^/]+\/draw$/.test(path); } + function scriptBaseURL(scriptName) { + var script = document.currentScript; + if (!script || !script.src) { + var scripts = document.getElementsByTagName('script'); + for (var index = scripts.length - 1; index >= 0; index -= 1) { + if (String(scripts[index].src || '').indexOf(scriptName) !== -1) { + script = scripts[index]; + break; + } + } + } + var src = script && script.src ? script.src : ''; + return src ? src.split('?')[0].replace(/[^/]*$/, '') : ''; + } + + var dynamicPreviewScriptURL = scriptBaseURL('wheel-gateway-api.js') + + 'wheel-dynamic-preview.js?v=' + dynamicPreviewVersion; + var dynamicPreviewLoaded = false; + var dynamicPreviewTimer = null; + var wheelAPIStarted = false; + var wheelAPIPending = 0; + var wheelAPILoadStartAt = Date.now(); + + function updatePreviewLoaderState() { + window.__YUMI_WHEEL_DYNAMIC_PREVIEW_LOADER__ = { + loaded: dynamicPreviewLoaded, + pendingApis: wheelAPIPending, + seenApi: wheelAPIStarted, + scriptUrl: dynamicPreviewScriptURL + }; + } + + function loadDynamicPreviewScript() { + if (dynamicPreviewLoaded || window.__YUMI_WHEEL_DYNAMIC_PREVIEW__) return; + dynamicPreviewLoaded = true; + updatePreviewLoaderState(); + var script = document.createElement('script'); + script.async = true; + script.src = dynamicPreviewScriptURL; + script.onerror = function () { + dynamicPreviewLoaded = false; + updatePreviewLoaderState(); + }; + (document.head || document.documentElement).appendChild(script); + } + + function scheduleDynamicPreviewLoad(delay) { + clearTimeout(dynamicPreviewTimer); + dynamicPreviewTimer = setTimeout(function () { + if (dynamicPreviewLoaded || window.__YUMI_WHEEL_DYNAMIC_PREVIEW__) return; + if (document.readyState === 'loading') { + scheduleDynamicPreviewLoad(200); + return; + } + if (wheelAPIPending > 0) { + scheduleDynamicPreviewLoad(300); + return; + } + if (!wheelAPIStarted && Date.now() - wheelAPILoadStartAt < 3000) { + scheduleDynamicPreviewLoad(500); + return; + } + loadDynamicPreviewScript(); + }, delay); + } + + function trackWheelAPI(xhr) { + if (!xhr || xhr.__wheelGatewayPreviewTracked) return; + xhr.__wheelGatewayPreviewTracked = true; + wheelAPIStarted = true; + wheelAPIPending += 1; + updatePreviewLoaderState(); + var completed = false; + var done = function (force) { + force = force === true; + if (completed) return; + if (!force && xhr.readyState && xhr.readyState !== 4) return; + completed = true; + wheelAPIPending = Math.max(0, wheelAPIPending - 1); + updatePreviewLoaderState(); + scheduleDynamicPreviewLoad(400); + }; + xhr.__wheelGatewayPreviewDone = function () { + done(true); + }; + xhr.addEventListener('readystatechange', done); + xhr.addEventListener('loadend', done); + xhr.addEventListener('error', done); + xhr.addEventListener('abort', done); + xhr.addEventListener('timeout', done); + } + function normalizeCompareValue(value) { return String(value || '').trim().toLowerCase(); } @@ -522,7 +615,8 @@ XMLHttpRequest.prototype.open = function (method, url) { var originalPath = normalizedPath(url); var nextUrl = rewriteUrl(url); - this.__wheelGatewayRequest = nextUrl !== url && isWheelApiPath(originalPath); + this.__wheelGatewayWheelAPI = isWheelApiPath(originalPath); + this.__wheelGatewayRequest = nextUrl !== url && this.__wheelGatewayWheelAPI; this.__wheelGatewayDrawRequest = this.__wheelGatewayRequest && isWheelDrawPath(originalPath); this.__wheelGatewayUrl = nextUrl; this.__wheelGatewayHeaders = {}; @@ -592,7 +686,15 @@ } catch (error) {} } } - return nativeSend.apply(this, arguments); + if (this.__wheelGatewayWheelAPI) { + trackWheelAPI(this); + } + try { + return nativeSend.apply(this, arguments); + } catch (error) { + if (typeof this.__wheelGatewayPreviewDone === 'function') this.__wheelGatewayPreviewDone(); + throw error; + } }; function stripRoomId(body) { @@ -621,4 +723,9 @@ }, rewriteUrl: rewriteUrl }; + updatePreviewLoaderState(); + window.addEventListener('load', function () { + scheduleDynamicPreviewLoad(500); + }); + scheduleDynamicPreviewLoad(3000); })();