Update ImageUtilities.plugin.js
This commit is contained in:
parent
938fd95ac6
commit
181dae5411
|
@ -14,12 +14,15 @@ module.exports = (_ => {
|
||||||
"info": {
|
"info": {
|
||||||
"name": "ImageUtilities",
|
"name": "ImageUtilities",
|
||||||
"author": "DevilBro",
|
"author": "DevilBro",
|
||||||
"version": "4.2.6",
|
"version": "4.2.7",
|
||||||
"description": "Add a handful of options for images/emotes/avatars (direct download, reverse image search, zoom, copy image link, copy image to clipboard, gallery mode)"
|
"description": "Add a handful of options for images/emotes/avatars (direct download, reverse image search, zoom, copy image link, copy image to clipboard, gallery mode)"
|
||||||
},
|
},
|
||||||
"changeLog": {
|
"changeLog": {
|
||||||
"added": {
|
"fixed": {
|
||||||
"Videos": "Save as and Copy File Link now also works for videos"
|
"Image as Video": "Fixed issue where images would sometimes be seen as videos"
|
||||||
|
},
|
||||||
|
"improved": {
|
||||||
|
"Discords Native Options": "Hides Discords Native (Save/Copy/Link Copy) options to stop context menus from having duplicates and being huge"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -523,6 +526,11 @@ module.exports = (_ => {
|
||||||
}).filter(n => n);
|
}).filter(n => n);
|
||||||
if (!validUrls.length) return;
|
if (!validUrls.length) return;
|
||||||
|
|
||||||
|
let [removeParent, removeIndex] = BDFDB.ContextMenuUtils.findItem(e.returnvalue, {id: "copy-native-link"});
|
||||||
|
if (removeIndex > -1) removeParent.splice(removeIndex, 1);
|
||||||
|
[removeParent, removeIndex] = BDFDB.ContextMenuUtils.findItem(e.returnvalue, {id: "copy-image", group: true});
|
||||||
|
if (removeIndex > -1) removeParent.splice(removeIndex, 1);
|
||||||
|
|
||||||
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 [children, index] = BDFDB.ContextMenuUtils.findItem(e.returnvalue, {id: "devmode-copy-id", group: true});
|
let [children, index] = BDFDB.ContextMenuUtils.findItem(e.returnvalue, {id: "devmode-copy-id", group: true});
|
||||||
children.splice(index > -1 ? index : children.length, 0, BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuGroup, {
|
children.splice(index > -1 ? index : children.length, 0, BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuGroup, {
|
||||||
|
@ -642,11 +650,13 @@ 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 = 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 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]]});
|
||||||
if (index > -1) {
|
if (index > -1) {
|
||||||
let type = this.isValid(url, "video") ? BDFDB.LanguageUtils.LanguageStrings.VIDEO : BDFDB.LanguageUtils.LanguageStrings.IMAGE;
|
let type = isVideo ? BDFDB.LanguageUtils.LanguageStrings.VIDEO : BDFDB.LanguageUtils.LanguageStrings.IMAGE;
|
||||||
let openContext = event => {
|
let openContext = event => {
|
||||||
BDFDB.ContextMenuUtils.open(this, event, BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuGroup, {
|
BDFDB.ContextMenuUtils.open(this, event, BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuGroup, {
|
||||||
children: Object.keys(zoomSettings).map(type => BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuSliderItem, Object.assign({
|
children: Object.keys(zoomSettings).map(type => BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuSliderItem, Object.assign({
|
||||||
|
@ -665,12 +675,11 @@ module.exports = (_ => {
|
||||||
}, BDFDB.ObjectUtils.extract(this.defaults.zoomSettings[type], "digits", "minValue", "maxValue"))))
|
}, BDFDB.ObjectUtils.extract(this.defaults.zoomSettings[type], "digits", "minValue", "maxValue"))))
|
||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
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";
|
|
||||||
children[index] = BDFDB.ReactUtils.createElement("span", {
|
children[index] = BDFDB.ReactUtils.createElement("span", {
|
||||||
className: BDFDB.disCN._imageutilitiesoperations,
|
className: BDFDB.disCN._imageutilitiesoperations,
|
||||||
children: [
|
children: [
|
||||||
children[index],
|
children[index],
|
||||||
settings.enableSaveImg && !isVideo && [
|
settings.enableSaveImg && [
|
||||||
BDFDB.ReactUtils.createElement("span", {
|
BDFDB.ReactUtils.createElement("span", {
|
||||||
className: BDFDB.disCN.downloadlink,
|
className: BDFDB.disCN.downloadlink,
|
||||||
children: "|",
|
children: "|",
|
||||||
|
@ -695,7 +704,7 @@ module.exports = (_ => {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
settings.enableCopyImg && this.isValid(url, "copyable") && !isVideo && [
|
settings.enableCopyImg && this.isValid(url, "copyable") && [
|
||||||
BDFDB.ReactUtils.createElement("span", {
|
BDFDB.ReactUtils.createElement("span", {
|
||||||
className: BDFDB.disCN.downloadlink,
|
className: BDFDB.disCN.downloadlink,
|
||||||
children: "|",
|
children: "|",
|
||||||
|
@ -743,7 +752,7 @@ module.exports = (_ => {
|
||||||
if (settings.addDetails) e.returnvalue.props.children.push(BDFDB.ReactUtils.createElement("div", {
|
if (settings.addDetails) e.returnvalue.props.children.push(BDFDB.ReactUtils.createElement("div", {
|
||||||
className: BDFDB.disCN._imageutilitiesdetailswrapper,
|
className: BDFDB.disCN._imageutilitiesdetailswrapper,
|
||||||
children: [
|
children: [
|
||||||
{label: "Source", text: e.instance.props.src},
|
{label: "Source", text: url},
|
||||||
{label: "Size", text: `${e.instance.props.width}x${e.instance.props.height}px`},
|
{label: "Size", text: `${e.instance.props.width}x${e.instance.props.height}px`},
|
||||||
{label: "Image", text: `${imageIndex + 1} of ${amount}`}
|
{label: "Image", text: `${imageIndex + 1} of ${amount}`}
|
||||||
].map(data => BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextElement, {
|
].map(data => BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextElement, {
|
||||||
|
@ -786,7 +795,8 @@ module.exports = (_ => {
|
||||||
processLazyImage (e) {
|
processLazyImage (e) {
|
||||||
if (e.node) {
|
if (e.node) {
|
||||||
if (e.instance.props.resized) e.instance.state.readyState = BDFDB.LibraryComponents.Image.ImageReadyStates.READY;
|
if (e.instance.props.resized) e.instance.state.readyState = BDFDB.LibraryComponents.Image.ImageReadyStates.READY;
|
||||||
if (settings.enableZoom && !e.node.querySelector("video") && !BDFDB.DOMUtils.containsClass(e.node.parentElement, BDFDB.disCN._imageutilitiessibling) && BDFDB.DOMUtils.getParent(BDFDB.dotCN.imagemodal, e.node)) {
|
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";
|
||||||
|
if (settings.enableZoom && !isVideo && !BDFDB.DOMUtils.containsClass(e.node.parentElement, BDFDB.disCN._imageutilitiessibling) && BDFDB.DOMUtils.getParent(BDFDB.dotCN.imagemodal, e.node)) {
|
||||||
e.node.addEventListener("mousedown", event => {
|
e.node.addEventListener("mousedown", event => {
|
||||||
if (event.which != 1) return;
|
if (event.which != 1) return;
|
||||||
BDFDB.ListenerUtils.stopEvent(event);
|
BDFDB.ListenerUtils.stopEvent(event);
|
||||||
|
@ -945,7 +955,7 @@ module.exports = (_ => {
|
||||||
isValid (url, type) {
|
isValid (url, type) {
|
||||||
if (!url) return false;
|
if (!url) return false;
|
||||||
const file = url && (BDFDB.LibraryModules.URLParser.parse(url).pathname || "").toLowerCase();
|
const file = url && (BDFDB.LibraryModules.URLParser.parse(url).pathname || "").toLowerCase();
|
||||||
return file && (url.startsWith("https://images-ext-2.discordapp.net/") || !type && Object.keys(fileTypes).some(t => file.endsWith(`.${t}`)) || type && Object.keys(fileTypes).filter(t => fileTypes[t][type]).some(t => file.endsWith(`.${t}`)));
|
return file && (!type && (url.startsWith("https://images-ext-2.discordapp.net/") || Object.keys(fileTypes).some(t => file.endsWith(`/${t}`)) || file.endsWith(`.${t}`)) || type && Object.keys(fileTypes).filter(t => fileTypes[t][type]).some(t => file.endsWith(`/${t}`) || file.endsWith(`.${t}`)));
|
||||||
}
|
}
|
||||||
|
|
||||||
downloadFile (url, path) {
|
downloadFile (url, path) {
|
||||||
|
@ -968,7 +978,7 @@ module.exports = (_ => {
|
||||||
let hrefURL = window.URL.createObjectURL(new Blob([body]));
|
let hrefURL = window.URL.createObjectURL(new Blob([body]));
|
||||||
let tempLink = document.createElement("a");
|
let tempLink = document.createElement("a");
|
||||||
tempLink.href = hrefURL;
|
tempLink.href = hrefURL;
|
||||||
tempLink.download = `${url.split("/").pop().split(".").slice(0, -1).join(".")}.${response.headers["content-type"].split("/").pop().split("+")[0]}`;
|
tempLink.download = `${url.split("/").pop().split(".").slice(0, -1).join(".") || "unknown"}.${response.headers["content-type"].split("/").pop().split("+")[0]}`;
|
||||||
tempLink.click();
|
tempLink.click();
|
||||||
window.URL.revokeObjectURL(hrefURL);
|
window.URL.revokeObjectURL(hrefURL);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue