51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
/*
|
|
* Vencord, a Discord client mod
|
|
* Copyright (c) 2025 Vendicated and contributors
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*/
|
|
|
|
import { definePluginSettings } from "@api/Settings";
|
|
import { Devs } from "@utils/constants";
|
|
import definePlugin, { OptionType } from "@utils/types";
|
|
|
|
const ImageExtensionRe = /\.(png|jpg|jpeg|gif|webp|avif)$/i;
|
|
const GifHostRegex = /^(.+?\.)?(tenor|giphy|imgur)\.com$/i;
|
|
|
|
const settings = definePluginSettings({
|
|
showFullUrl: {
|
|
description: "Show the full URL of the image instead of just the file name. Always enabled for GIFs because they usually have no meaningful file name",
|
|
type: OptionType.BOOLEAN,
|
|
default: false,
|
|
},
|
|
});
|
|
|
|
export default definePlugin({
|
|
name: "ImageFilename",
|
|
authors: [Devs.Ven],
|
|
description: "Display the file name of images & GIFs as a tooltip when hovering over them",
|
|
settings,
|
|
|
|
patches: [
|
|
{
|
|
find: ".clickableWrapper",
|
|
replacement: {
|
|
match: /\.originalLink,href:(\i)/,
|
|
replace: "$&,title:$self.getTitle($1)"
|
|
}
|
|
},
|
|
],
|
|
|
|
getTitle(src: string) {
|
|
try {
|
|
const url = new URL(src);
|
|
const isGif = GifHostRegex.test(url.hostname);
|
|
if (!isGif && !ImageExtensionRe.test(url.pathname)) return undefined;
|
|
|
|
return isGif || settings.store.showFullUrl
|
|
? src
|
|
: url.pathname.split("/").pop();
|
|
} catch {
|
|
return undefined;
|
|
}
|
|
}
|
|
});
|