feat: update share base URL and improve share functionality

- Update share base URL from androidacikkalsin.org to ozgurandroid.yusufipek.me
- Add resolveShareUrl function to handle file protocol and invalid origins
- Improve clipboard API support with fallback mechanisms
- Add popup detection for Twitter share dialog
- Refactor copy functionality into reusable fallbackCopy function
- Enhance error handling for share operations
This commit is contained in:
Yusuf İpek
2025-10-31 23:33:58 +03:00
parent 66a5b9dbc3
commit d3de5235a5
3 changed files with 65 additions and 18 deletions
+1 -1
View File
@@ -9,7 +9,7 @@
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<link rel="icon" type="image/svg+xml" href="assets/favicon.svg"> <link rel="icon" type="image/svg+xml" href="assets/favicon.svg">
</head> </head>
<body data-share-base="https://androidacikkalsin.org/"> <body data-share-base="https://ozgurandroid.yusufipek.me/">
<!-- Hero Section --> <!-- Hero Section -->
<section class="hero"> <section class="hero">
<div class="container"> <div class="container">
+58 -11
View File
@@ -275,6 +275,29 @@ document.addEventListener('DOMContentLoaded', function() {
}); });
}); });
function resolveShareUrl() {
const isFileProtocol = window.location.protocol === 'file:';
const hasValidOrigin = window.location.origin && window.location.origin !== 'null';
if (!isFileProtocol && hasValidOrigin) {
return window.location.href;
}
const base = document.body ? document.body.dataset.shareBase : '';
if (!base) {
return window.location.href;
}
const normalizedBase = base.endsWith('/') ? base : `${base}/`;
const relativePath = window.location.pathname.replace(/^\//, '') || 'index.html';
try {
return new URL(relativePath, normalizedBase).toString();
} catch (error) {
console.error('Paylaşım adresi oluşturulamadı:', error);
return normalizedBase;
}
}
// Share functionality // Share functionality
function shareWebsite() { function shareWebsite() {
if (navigator.share) { if (navigator.share) {
@@ -286,18 +309,18 @@ function shareWebsite() {
} else { } else {
// Fallback for browsers that don't support Web Share API // Fallback for browsers that don't support Web Share API
const url = resolveShareUrl(); const url = resolveShareUrl();
navigator.clipboard.writeText(url).then(() => { const clipboardSupported = navigator.clipboard && typeof navigator.clipboard.writeText === 'function';
showNotification('Link panoya kopyalandı!'); if (clipboardSupported) {
}).catch(() => { navigator.clipboard.writeText(url)
// Final fallback .then(() => {
const textarea = document.createElement('textarea');
textarea.value = url;
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
showNotification('Link panoya kopyalandı!'); showNotification('Link panoya kopyalandı!');
})
.catch(() => {
fallbackCopy(url);
}); });
} else {
fallbackCopy(url);
}
} }
} }
@@ -312,7 +335,31 @@ function shareHashtag() {
} else { } else {
// Open Twitter/X share dialog // Open Twitter/X share dialog
const twitterUrl = `https://twitter.com/intent/tweet?text=${encodeURIComponent(text)}`; const twitterUrl = `https://twitter.com/intent/tweet?text=${encodeURIComponent(text)}`;
window.open(twitterUrl, '_blank', 'width=550,height=420'); const popup = window.open(twitterUrl, '_blank', 'width=550,height=420');
if (!popup) {
fallbackCopy(shareUrl);
}
}
}
function fallbackCopy(value) {
if (!value) {
return;
}
try {
const textarea = document.createElement('textarea');
textarea.value = value;
textarea.style.position = 'fixed';
textarea.style.opacity = '0';
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
showNotification('Link panoya kopyalandı!');
} catch (error) {
console.error('Kopyalama başarısız:', error);
window.prompt('Bağlantıyı manuel kopyalayın:', value);
} }
} }
+1 -1
View File
@@ -9,7 +9,7 @@
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<link rel="icon" type="image/svg+xml" href="assets/favicon.svg"> <link rel="icon" type="image/svg+xml" href="assets/favicon.svg">
</head> </head>
<body data-share-base="https://androidacikkalsin.org/"> <body data-share-base="https://ozgurandroid.yusufipek.me/">
<!-- Header --> <!-- Header -->
<header class="guide-header"> <header class="guide-header">
<div class="container"> <div class="container">