Update loader being removed correctly on manually forced transition duration (#3384) --------- Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>

578c3dda73d654f33a6eedf4a38a9630964a7c2c

IceFog72 <164350516+IceFog72@users.noreply.github.com>

Signed
1 files changed, +33 -12Ignore whitespace
public/scripts/loader.js+33 -12
@@ -27,24 +27,45 @@ export async function hideLoader() {
2727 }
2828
2929 return new Promise((resolve) => {
30- // Spinner blurs/fades out
30+ const spinner = $('#load-spinner');
31- $('#load-spinner').on('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function () {
31+ if (!spinner.length) {
32+ console.warn('Spinner element not found, skipping animation');
33+ cleanup();
34+ return;
35+ }
36+
37+ // Check if transitions are enabled
38+ const transitionDuration = spinner[0] ? getComputedStyle(spinner[0]).transitionDuration : '0s';
39+ const hasTransitions = parseFloat(transitionDuration) > 0;
40+
41+ if (hasTransitions) {
42+ Promise.race([
43+ new Promise((r) => setTimeout(r, 500)), // Fallback timeout
44+ new Promise((r) => spinner.one('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', r)),
45+ ]).finally(cleanup);
46+ } else {
47+ cleanup();
48+ }
49+
50+ function cleanup() {
3251 $('#loader').remove();
3352 // Yoink preloader entirely; it only exists to cover up unstyled content while loading JS
3453 // If it's present, we remove it once and then it's gone.
3554 yoinkPreloader();
3655
3756 loaderPopup.complete(POPUP_RESULT.AFFIRMATIVE).then(() => {
38- loaderPopup = null;
57+ .catch((err) => console.error('Error completing loaderPopup:', err))
39- resolve();
58+ .finally(() => {
40- });
59+ loaderPopup = null;
41- });
60+ resolve();
61+ });
62+ }
4263
43- $('#load-spinner')
64+ // Apply the styles
4465 spinner.css({
4566 'filter': 'blur(15px)',
4667 'opacity': '0',
4768 });
4869 });
4970}
5071