This commit is contained in:
Mirco Wittrien 2021-03-06 18:30:44 +01:00
parent 8271e685fa
commit f64a2c6ec8
2 changed files with 61 additions and 22 deletions

View File

@ -1751,9 +1751,10 @@ module.exports = (_ => {
if (m && typeof m == "function" && filter(m)) { if (m && typeof m == "function" && filter(m)) {
if (req.c[i]) return getExport ? req.c[i].exports : req.c[i]; if (req.c[i]) return getExport ? req.c[i].exports : req.c[i];
else { else {
let resolved = {}; let resolved = {}, resolved2 = {};
req.m[i](resolved, null, req); m(resolved, resolved2, req);
return getExport ? resolved.exports : resolved; let trueResolved = resolved2 && BDFDB.ObjectUtils.isEmpty(resolved2) ? resolved : resolved2;
return getExport ? trueResolved.exports : trueResolved;
} }
} }
} }
@ -6817,7 +6818,7 @@ module.exports = (_ => {
BOTTOM: "M4.08643 11.0903L5.67742 9.49929L9.4485 13.2704L7.85751 14.8614L4.08643 11.0903Z" BOTTOM: "M4.08643 11.0903L5.67742 9.49929L9.4485 13.2704L7.85751 14.8614L4.08643 11.0903Z"
} }
}; };
const SwitchInner = function(props) { const SwitchInner = function (props) {
let reducedMotion = BDFDB.ReactUtils.useContext(LibraryModules.PreferencesContext.AccessibilityPreferencesContext).reducedMotion; let reducedMotion = BDFDB.ReactUtils.useContext(LibraryModules.PreferencesContext.AccessibilityPreferencesContext).reducedMotion;
let ref = BDFDB.ReactUtils.useRef(null); let ref = BDFDB.ReactUtils.useRef(null);
let state = BDFDB.ReactUtils.useState(false); let state = BDFDB.ReactUtils.useState(false);
@ -7271,6 +7272,35 @@ module.exports = (_ => {
} }
}; };
const VideoInner = function (props) {
let ref = BDFDB.ReactUtils.useRef(null);
BDFDB.ReactUtils.useEffect(_ => {
if (ref.current) props.play ? ref.current.play() : ref.current.pause();
}, [props.play]);
return props.naturalWidth <= BDFDB.DiscordConstants.MAX_VIDEO_WIDTH && props.naturalHeight <= BDFDB.DiscordConstants.MAX_VIDEO_HEIGHT || props.naturalWidth <= BDFDB.DiscordConstants.MAX_VIDEO_HEIGHT && props.naturalHeight <= BDFDB.DiscordConstants.MAX_VIDEO_WIDTH ? BDFDB.ReactUtils.createElement(InternalComponents.LibraryComponents.VideoForwardRef, {
ref: ref,
className: props.className,
poster: props.poster,
src: props.src,
width: props.width,
height: props.height,
muted: true,
loop: true,
autoPlay: props.play,
preload: "none"
}) : BDFDB.ReactUtils.createElement("img", {
alt: "",
src: props.poster,
width: props.width,
height: props.height
});
};
InternalComponents.LibraryComponents.Video = reactInitialized && class BDFDB_Video extends LibraryModules.React.Component {
render() {
return BDFDB.ReactUtils.createElement(VideoInner, this.props);
}
};
for (let type in InternalComponents.NativeSubComponents) if (InternalComponents.LibraryComponents[type]) for (let key in InternalComponents.NativeSubComponents[type]) if (key != "displayName" && key != "name" && (typeof InternalComponents.NativeSubComponents[type][key] != "function" || key.charAt(0) == key.charAt(0).toUpperCase())) { for (let type in InternalComponents.NativeSubComponents) if (InternalComponents.LibraryComponents[type]) for (let key in InternalComponents.NativeSubComponents[type]) if (key != "displayName" && key != "name" && (typeof InternalComponents.NativeSubComponents[type][key] != "function" || key.charAt(0) == key.charAt(0).toUpperCase())) {
if (key == "defaultProps") InternalComponents.LibraryComponents[type][key] = Object.assign({}, InternalComponents.LibraryComponents[type][key], InternalComponents.NativeSubComponents[type][key]); if (key == "defaultProps") InternalComponents.LibraryComponents[type][key] = Object.assign({}, InternalComponents.LibraryComponents[type][key], InternalComponents.NativeSubComponents[type][key]);
else InternalComponents.LibraryComponents[type][key] = InternalComponents.NativeSubComponents[type][key]; else InternalComponents.LibraryComponents[type][key] = InternalComponents.NativeSubComponents[type][key];

View File

@ -523,7 +523,7 @@ module.exports = (_ => {
else if (BDFDB.DOMUtils.containsClass(e.instance.props.target, BDFDB.disCN.emojiold, "emote", false) && settings.addEmojiEntry) this.injectItem(e, e.instance.props.target.src); else if (BDFDB.DOMUtils.containsClass(e.instance.props.target, BDFDB.disCN.emojiold, "emote", false) && settings.addEmojiEntry) this.injectItem(e, e.instance.props.target.src);
} }
else if (e.instance.props.target.tagName == "VIDEO") { else if (e.instance.props.target.tagName == "VIDEO") {
if (BDFDB.DOMUtils.getParent(BDFDB.dotCN.attachmentvideo, e.instance.props.target)) this.injectItem(e, e.instance.props.target.src); if (BDFDB.DOMUtils.containsClass(e.instance.props.target, BDFDB.disCN.embedvideo) || BDFDB.DOMUtils.getParent(BDFDB.dotCN.attachmentvideo, e.instance.props.target)) this.injectItem(e, e.instance.props.target.src);
} }
else { else {
let reaction = BDFDB.DOMUtils.getParent(BDFDB.dotCN.messagereaction, e.instance.props.target); let reaction = BDFDB.DOMUtils.getParent(BDFDB.dotCN.messagereaction, e.instance.props.target);
@ -535,15 +535,15 @@ module.exports = (_ => {
injectItem (e, ...urls) { injectItem (e, ...urls) {
let fileTypes = []; let fileTypes = [];
let validUrls = urls.filter(n => this.isValid(n)).map(n => { let validUrls = urls.filter(n => this.isValid(n)).map(n => {
let originalUrl = n.replace(/^url\(|\)$|"|'/g, "").replace(/\?size\=\d+$/, "?size=4096"); let srcUrl = n.replace(/^url\(|\)$|"|'/g, "").replace(/\?size\=\d+$/, "?size=4096");
let url = originalUrl.replace(/[\?\&](height|width)=\d+/g, "").split("%3A")[0]; let url = srcUrl.replace(/[\?\&](height|width)=\d+/g, "").split("%3A")[0];
if (url.indexOf("https://images-ext-1.discordapp.net/external/") > -1 || url.indexOf("https://images-ext-2.discordapp.net/external/") > -1) { if (url.indexOf("https://images-ext-1.discordapp.net/external/") > -1 || url.indexOf("https://images-ext-2.discordapp.net/external/") > -1) {
if (url.split("/https/").length > 1) url = "https://" + url.split("/https/").pop(); if (url.split("/https/").length > 1) url = "https://" + url.split("/https/").pop();
else if (url.split("/http/").length > 1) url = "http://" + url.split("/http/").pop(); else if (url.split("/http/").length > 1) url = "http://" + url.split("/http/").pop();
} }
const file = url && (BDFDB.LibraryModules.URLParser.parse(url).pathname || "").toLowerCase(); const file = url && (BDFDB.LibraryModules.URLParser.parse(url).pathname || "").toLowerCase();
const fileType = file && (file.split(".").pop() || ""); const fileType = file && (file.split(".").pop() || "");
return url && fileType && !fileTypes.includes(fileType) && fileTypes.push(fileType) && {url, originalUrl, fileType}; return url && fileType && !fileTypes.includes(fileType) && fileTypes.push(fileType) && {url, srcUrl, fileType};
}).filter(n => n); }).filter(n => n);
if (!validUrls.length) return; if (!validUrls.length) return;
@ -557,10 +557,10 @@ module.exports = (_ => {
let type = this.isValid(validUrls[0].url, "video") ? BDFDB.LanguageUtils.LanguageStrings.VIDEO : BDFDB.LanguageUtils.LanguageStrings.IMAGE; let type = this.isValid(validUrls[0].url, "video") ? BDFDB.LanguageUtils.LanguageStrings.VIDEO : BDFDB.LanguageUtils.LanguageStrings.IMAGE;
let isNative = validUrls.length == 1 && removeIndex > -1; let isNative = validUrls.length == 1 && removeIndex > -1;
let subMenu = validUrls.length == 1 ? this.createUrlMenu(e, validUrls[0].url, validUrls[0].originalUrl) : validUrls.map((urlData, i) => BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { let subMenu = validUrls.length == 1 ? this.createUrlMenu(e, validUrls[0].url, validUrls[0].srcUrl) : validUrls.map((urlData, i) => BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
label: urlData.fileType.toUpperCase(), label: urlData.fileType.toUpperCase(),
id: BDFDB.ContextMenuUtils.createItemId(this.name, "subitem", i), id: BDFDB.ContextMenuUtils.createItemId(this.name, "subitem", i),
children: this.createUrlMenu(e, urlData.url, urlData.originalUrl) children: this.createUrlMenu(e, urlData.url, urlData.srcUrl)
})); }));
let [children, index] = isNative ? [removeParent, removeIndex] : BDFDB.ContextMenuUtils.findItem(e.returnvalue, {id: "devmode-copy-id", group: true}); let [children, index] = isNative ? [removeParent, removeIndex] : BDFDB.ContextMenuUtils.findItem(e.returnvalue, {id: "devmode-copy-id", group: true});
@ -573,7 +573,7 @@ module.exports = (_ => {
})); }));
} }
createUrlMenu (e, url, originalUrl) { createUrlMenu (e, url, srcUrl) {
let enginesWithoutAll = BDFDB.ObjectUtils.filter(enabledEngines, n => n != "_all", true); let enginesWithoutAll = BDFDB.ObjectUtils.filter(enabledEngines, n => n != "_all", true);
let engineKeys = Object.keys(enginesWithoutAll); let engineKeys = Object.keys(enginesWithoutAll);
let locations = Object.keys(ownLocations).filter(n => ownLocations[n].enabled); let locations = Object.keys(ownLocations).filter(n => ownLocations[n].enabled);
@ -594,12 +594,12 @@ module.exports = (_ => {
BDFDB.NotificationUtils.toast(BDFDB.LanguageUtils.LanguageStrings.LINK_COPIED, {type: "success"}); BDFDB.NotificationUtils.toast(BDFDB.LanguageUtils.LanguageStrings.LINK_COPIED, {type: "success"});
} }
}), }),
!isVideo && BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, {
label: this.labels.context_view.replace("{{var0}}", type), label: this.labels.context_view.replace("{{var0}}", type),
id: BDFDB.ContextMenuUtils.createItemId(this.name, "view-file"), id: BDFDB.ContextMenuUtils.createItemId(this.name, "view-file"),
action: _ => { action: _ => {
let img = new Image(); let img = document.createElement(isVideo ? "video" : "img");
img.onload = function() { img.addEventListener(isVideo ? "loadedmetadata" : "load", function() {
BDFDB.LibraryModules.ModalUtils.openModal(modalData => { BDFDB.LibraryModules.ModalUtils.openModal(modalData => {
return BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ModalComponents.ModalRoot, Object.assign({ return BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ModalComponents.ModalRoot, Object.assign({
className: BDFDB.disCN.imagemodal className: BDFDB.disCN.imagemodal
@ -607,17 +607,26 @@ module.exports = (_ => {
size: BDFDB.LibraryComponents.ModalComponents.ModalSize.DYNAMIC, size: BDFDB.LibraryComponents.ModalComponents.ModalSize.DYNAMIC,
"aria-label": BDFDB.LanguageUtils.LanguageStrings.IMAGE, "aria-label": BDFDB.LanguageUtils.LanguageStrings.IMAGE,
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ImageModal, { children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ImageModal, {
src: originalUrl || url, animated: !!isVideo,
original: originalUrl || url, src: srcUrl || url,
width: this.width, original: url,
height: this.height, width: isVideo ? this.videoWidth : this.width,
height: isVideo ? this.videoHeight : this.height,
className: BDFDB.disCN.imagemodalimage, className: BDFDB.disCN.imagemodalimage,
shouldAnimate: true, shouldAnimate: true,
renderLinkComponent: props => BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Anchor, props) renderLinkComponent: props => BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Anchor, props),
children: isVideo && (videoData => BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Video, {
src: srcUrl || url,
width: videoData.size.width,
height: videoData.size.height,
naturalWidth: this.videoWidth,
naturalHeight: this.videoHeight,
play: true
}))
}) })
}), true); }), true);
}); });
}; });
img.src = url; img.src = url;
} }
}), }),
@ -684,8 +693,8 @@ module.exports = (_ => {
processImageModal (e) { processImageModal (e) {
if (clickedImage) e.instance.props.cachedImage = clickedImage; if (clickedImage) e.instance.props.cachedImage = clickedImage;
let url = this.getImageSrc(e.instance.props.cachedImage && e.instance.props.cachedImage.src ? e.instance.props.cachedImage : e.instance.props.src); let url = this.getImageSrc(e.instance.props.cachedImage && e.instance.props.cachedImage.src ? e.instance.props.cachedImage : e.instance.props.src);
let isVideo = (typeof e.instance.props.children == "function" && e.instance.props.children(Object.assign({}, e.instance.props, {size: e.instance.props})) || {type: {}}).type.displayName == "Video"; url = this.getImageSrc((typeof e.instance.props.children == "function" && e.instance.props.children(Object.assign({}, e.instance.props, {size: e.instance.props})) || {type: {}}).props.src) || url;
url = isVideo ? (typeof e.instance.props.children == "function" && e.instance.props.children(Object.assign({}, e.instance.props, {size: e.instance.props})) || {type: {}}).props.src : url; let isVideo = this.isValid(url, "video");
let messages = this.getMessageGroupOfImage(url); let messages = this.getMessageGroupOfImage(url);
if (e.returnvalue) { if (e.returnvalue) {
let [children, index] = BDFDB.ReactUtils.findParent(e.returnvalue, {props: [["className", BDFDB.disCN.downloadlink]]}); let [children, index] = BDFDB.ReactUtils.findParent(e.returnvalue, {props: [["className", BDFDB.disCN.downloadlink]]});