mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FIX: Load short upload URLs only once (#15918)
Loading did not work when it was used for multiple posts. Only the short URLs from the first post were loaded.
This commit is contained in:
parent
2d30dd439f
commit
add4b74e08
@ -1,5 +1,6 @@
|
|||||||
import I18n from "I18n";
|
|
||||||
import discourseDebounce from "discourse-common/lib/debounce";
|
import discourseDebounce from "discourse-common/lib/debounce";
|
||||||
|
import I18n from "I18n";
|
||||||
|
import { Promise } from "rsvp";
|
||||||
|
|
||||||
let _cache = {};
|
let _cache = {};
|
||||||
|
|
||||||
@ -160,6 +161,15 @@ function _loadCachedShortUrls(uploadElements, siteSettings, opts) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let queueUrls;
|
||||||
|
let queuePromise;
|
||||||
|
let queueResolve;
|
||||||
|
|
||||||
|
function queuePop(ajax) {
|
||||||
|
lookupUncachedUploadUrls(queueUrls, ajax).then(queueResolve);
|
||||||
|
queueUrls = queueResolve = null;
|
||||||
|
}
|
||||||
|
|
||||||
function _loadShortUrls(uploads, ajax, siteSettings, opts) {
|
function _loadShortUrls(uploads, ajax, siteSettings, opts) {
|
||||||
let urls = [...uploads].map((upload) => {
|
let urls = [...uploads].map((upload) => {
|
||||||
return (
|
return (
|
||||||
@ -168,9 +178,20 @@ function _loadShortUrls(uploads, ajax, siteSettings, opts) {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
return lookupUncachedUploadUrls(urls, ajax).then(() =>
|
if (!queueUrls) {
|
||||||
_loadCachedShortUrls(uploads, siteSettings, opts)
|
queueUrls = [...urls];
|
||||||
);
|
queuePromise = new Promise((resolve) => {
|
||||||
|
queueResolve = resolve;
|
||||||
|
});
|
||||||
|
|
||||||
|
discourseDebounce(null, queuePop, ajax, 450);
|
||||||
|
} else {
|
||||||
|
queueUrls.push(...urls);
|
||||||
|
}
|
||||||
|
|
||||||
|
return queuePromise.then(() => {
|
||||||
|
_loadCachedShortUrls(uploads, siteSettings, opts);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const SHORT_URL_ATTRIBUTES =
|
const SHORT_URL_ATTRIBUTES =
|
||||||
@ -192,17 +213,7 @@ export function resolveAllShortUrls(ajax, siteSettings, scope, opts) {
|
|||||||
|
|
||||||
shortUploadElements = scope.querySelectorAll(SHORT_URL_ATTRIBUTES);
|
shortUploadElements = scope.querySelectorAll(SHORT_URL_ATTRIBUTES);
|
||||||
if (shortUploadElements.length > 0) {
|
if (shortUploadElements.length > 0) {
|
||||||
// this is carefully batched so we can do a leading debounce (trigger right away)
|
return _loadShortUrls(shortUploadElements, ajax, siteSettings, opts);
|
||||||
return discourseDebounce(
|
|
||||||
null,
|
|
||||||
_loadShortUrls,
|
|
||||||
shortUploadElements,
|
|
||||||
ajax,
|
|
||||||
siteSettings,
|
|
||||||
opts,
|
|
||||||
450,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user