|
25 | 25 | // @grant GM.setValue |
26 | 26 | // @grant GM.xmlHttpRequest |
27 | 27 | // |
28 | | -// @version 1.2.44 |
| 28 | +// @version 1.2.45 |
29 | 29 | // @author tophf |
30 | 30 | // |
31 | 31 | // @original-version 2017.9.29 |
@@ -103,7 +103,7 @@ let trustedHTML, trustedScript; |
103 | 103 | //#region GM4 polyfill |
104 | 104 |
|
105 | 105 | if (typeof GM === 'undefined' || !GM.xmlHttpRequest) |
106 | | - this.GM = {info: GM_info}; |
| 106 | + this.GM = {__proto__: null, info: GM_info}; |
107 | 107 | if (!GM.getValue) |
108 | 108 | GM.getValue = GM_getValue; // we use it only with `await` so no need to return a Promise |
109 | 109 | if (!GM.setValue) |
@@ -1163,15 +1163,15 @@ const Gallery = { |
1163 | 1163 |
|
1164 | 1164 | next(dir) { |
1165 | 1165 | if (dir) ai.gIndex = Gallery.nextIndex(dir); |
1166 | | - const item = ai.gItems[ai.gIndex]; |
| 1166 | + const item = ai.gItem = ai.gItems[ai.gIndex]; |
1167 | 1167 | if (Array.isArray(item.url)) { |
1168 | 1168 | ai.urls = item.url.slice(1); |
1169 | 1169 | ai.url = item.url[0]; |
1170 | 1170 | } else { |
1171 | 1171 | ai.urls = null; |
1172 | 1172 | ai.url = item.url; |
1173 | 1173 | } |
1174 | | - ai.preloadUrl = ensureArray(ai.gItems[Gallery.nextIndex(dir || 1)].url)[0]; |
| 1174 | + ai.gItemNext = ai.gItems[Gallery.nextIndex(dir || 1)]; |
1175 | 1175 | App.startSingle(); |
1176 | 1176 | Bar.updateName(); |
1177 | 1177 | if (dir) Bar.show(0); |
@@ -1375,16 +1375,36 @@ const Popup = { |
1375 | 1375 | this.setAttribute('loaded', ''); |
1376 | 1376 | ai.popupLoaded = true; |
1377 | 1377 | Status.set('-loading'); |
1378 | | - if (ai.preloadUrl) { |
1379 | | - $new('img', {src: ai.preloadUrl}); |
1380 | | - ai.preloadUrl = null; |
1381 | | - } |
| 1378 | + let i = ai.gItem; |
| 1379 | + if (i) i.url = this.src; |
| 1380 | + if ((i = ai.gItemNext)) |
| 1381 | + Popup.preload(this, i); |
1382 | 1382 | } |
1383 | 1383 | }, |
1384 | 1384 |
|
1385 | 1385 | onZoom() { |
1386 | 1386 | this.classList.remove(`${PREFIX}zooming`); |
1387 | 1387 | }, |
| 1388 | + |
| 1389 | + async preload(p, item, u = item.url, el = $new('img')) { |
| 1390 | + ai.gItemNext = null; |
| 1391 | + if (!Array.isArray(u)) { |
| 1392 | + el.src = u; |
| 1393 | + return; |
| 1394 | + } |
| 1395 | + for (const arr = u; p === ai.popup && item.url === arr && (u = arr[0]);) { |
| 1396 | + const {type} = await new Promise(cb => { |
| 1397 | + el.src = u; |
| 1398 | + el.onload = el.onerror = cb; |
| 1399 | + }); |
| 1400 | + if (arr[0] === u) |
| 1401 | + arr.shift(); |
| 1402 | + if (type === 'load') { |
| 1403 | + item.url = u; |
| 1404 | + break; |
| 1405 | + } |
| 1406 | + } |
| 1407 | + }, |
1388 | 1408 | }; |
1389 | 1409 |
|
1390 | 1410 | const PopupVideo = { |
|
0 commit comments