diff --git a/src/lib/components/SocialButton.svelte b/src/lib/components/SocialButton.svelte
index dd1ff40..f12be28 100644
--- a/src/lib/components/SocialButton.svelte
+++ b/src/lib/components/SocialButton.svelte
@@ -1,5 +1,5 @@
-
-
-
+
+
+
-
\ No newline at end of file
+
diff --git a/src/lib/util/IconResolver.ts b/src/lib/util/LinkResolver.ts
similarity index 74%
rename from src/lib/util/IconResolver.ts
rename to src/lib/util/LinkResolver.ts
index 1488d59..28fc72e 100644
--- a/src/lib/util/IconResolver.ts
+++ b/src/lib/util/LinkResolver.ts
@@ -62,4 +62,22 @@ export function tryGetIcon(link: string): string {
}
return getIconFromUrl(url) ?? icons['none'];
+}
+
+/**
+ * Проверка на "локальность" ссылки - принадлежность её этому сайту. Используется, например,
+ * в социальных ссылках, чтобы не открывать новую вкладку для страниц сайта.
+ * @param link Локальная либо глобальная ссылка
+ * @returns true, если ссылка не ведёт за пределы сайта
+ */
+export function isLinkLocal(link: string): boolean {
+ let url: URL;
+ try {
+ url = new URL(link);
+ } catch {
+ return true;
+ }
+
+ // Поддомены teasanctuary.ru должны всегда быть "внешними"
+ return url.hostname === "" || url.hostname === "teasanctuary.ru";
}
\ No newline at end of file