265 lines
15 KiB
HTML
265 lines
15 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="tr">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>VibeDownloader - Premium Social Media & MP3 Downloader</title>
|
||
<link rel="stylesheet" href="style.css">
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
|
||
<!-- SweetAlert2 -->
|
||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||
</head>
|
||
<body>
|
||
<!-- Custom Glassmorphic Titlebar -->
|
||
<div class="custom-titlebar">
|
||
<div class="titlebar-drag">
|
||
<svg class="titlebar-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
|
||
<polyline points="7 10 12 15 17 10" />
|
||
<line x1="12" y1="15" x2="12" y2="3" />
|
||
</svg>
|
||
<span>VibeDownloader</span>
|
||
</div>
|
||
<div class="titlebar-controls">
|
||
<!-- Language Dropdown -->
|
||
<div class="language-selector-wrapper">
|
||
<select id="language-select" class="language-select">
|
||
<option value="tr">🇹🇷 Türkçe</option>
|
||
<option value="en">🇺🇸 English</option>
|
||
<option value="de">🇩🇪 Deutsch</option>
|
||
<option value="ru">🇷🇺 Русский</option>
|
||
<option value="ar">🇸🇦 العربية</option>
|
||
</select>
|
||
</div>
|
||
<button id="titlebar-minimize" class="control-btn" title="Simge Durumuna Getir" data-i18n-title="titlebar_minimize">
|
||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></svg>
|
||
</button>
|
||
<button id="titlebar-close" class="control-btn close" title="Kapat" data-i18n-title="titlebar_close">
|
||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Vibrant Animated Background Elements -->
|
||
<div class="bg-glow bg-glow-1"></div>
|
||
<div class="bg-glow bg-glow-2"></div>
|
||
<div class="bg-glow bg-glow-3"></div>
|
||
|
||
<!-- Dependency Download Overlay -->
|
||
<div id="dependency-overlay" class="overlay active">
|
||
<div class="glass-card overlay-card text-center">
|
||
<div class="spinner-container">
|
||
<div class="spinner"></div>
|
||
</div>
|
||
<h2 id="dep-title" data-i18n="dep_title">Sistem Hazırlanıyor</h2>
|
||
<p id="dep-msg" data-i18n="dep_msg">Lütfen bekleyin, gerekli bileşenler kontrol ediliyor...</p>
|
||
<div class="progress-bar-container">
|
||
<div id="dep-progress" class="progress-bar-fill" style="width: 0%"></div>
|
||
</div>
|
||
<div id="dep-percent" class="pct-text" data-i18n="dep_percent">0%</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Main Container -->
|
||
<main class="app-container">
|
||
|
||
<!-- STEP 1: Link Analysis -->
|
||
<div id="step-1" class="wizard-step active">
|
||
<header class="app-header text-center">
|
||
<div class="logo-wrapper">
|
||
<svg class="logo-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
|
||
<polyline points="7 10 12 15 17 10" />
|
||
<line x1="12" y1="15" x2="12" y2="3" />
|
||
</svg>
|
||
</div>
|
||
<h1 class="glow-text">VibeDownloader</h1>
|
||
<p class="subtitle" data-i18n="app_subtitle">YouTube, X/Twitter, Instagram, TikTok ve tüm popüler sitelerden video/ses indirin</p>
|
||
</header>
|
||
|
||
<section class="glass-card url-section">
|
||
<div class="input-group">
|
||
<input type="text" id="url-input" data-i18n-placeholder="url_placeholder" placeholder="Sosyal medya veya video platformu bağlantısı yapıştırın (YouTube, Instagram, TikTok, X/Twitter vb.)..." autocomplete="off">
|
||
<button id="analyze-btn" class="glow-button">
|
||
<span data-i18n="btn_analyze">Analiz Et</span>
|
||
<svg class="btn-icon animate-spin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="display: none;">
|
||
<circle cx="12" cy="12" r="10" />
|
||
<path d="M2 12a10 10 0 0 1 8-9.8" />
|
||
</svg>
|
||
</button>
|
||
</div>
|
||
|
||
<div class="output-folder-row">
|
||
<span class="folder-label" data-i18n="folder_label">Kaydetme Yeri:</span>
|
||
<span id="output-path" class="folder-path" data-i18n="folder_loading">Yükleniyor...</span>
|
||
<button id="change-folder-btn" class="text-btn" data-i18n="btn_change_folder">Değiştir</button>
|
||
</div>
|
||
<div class="cookies-row" style="margin-top: 15px; display: flex; align-items: center; justify-content: center; gap: 8px; font-size: 0.85em; opacity: 0.85; border-top: 1px solid rgba(255,255,255,0.06); padding-top: 12px; flex-wrap: wrap;">
|
||
<input type="checkbox" id="use-cookies" style="cursor: pointer; accent-color: #7000ff; width: 15px; height: 15px;">
|
||
<label for="use-cookies" data-i18n="use_cookies_label" style="cursor: pointer; color: #fff; user-select: none;">Giriş gerektiren içerikler (Örn. Instagram Hikayeleri) için tarayıcı oturumunu kullan:</label>
|
||
<select id="cookie-browser" style="background: rgba(23, 20, 38, 0.8); color: #fff; border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 4px; padding: 2px 8px; cursor: pointer; outline: none; font-family: inherit; font-size: 0.95em;">
|
||
<option value="chrome">Chrome</option>
|
||
<option value="edge">Edge</option>
|
||
<option value="firefox">Firefox</option>
|
||
<option value="brave">Brave</option>
|
||
<option value="opera">Opera</option>
|
||
</select>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Error Display in Step 1 -->
|
||
<div id="error-card" class="glass-card error-card" style="display: none;">
|
||
<svg class="error-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||
<circle cx="12" cy="12" r="10" />
|
||
<line x1="12" y1="8" x2="12" y2="12" />
|
||
<line x1="12" y1="16" x2="12.01" y2="16" />
|
||
</svg>
|
||
<span id="error-message" data-i18n="error_default">Bir hata oluştu.</span>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- STEP 2: Download Options & List -->
|
||
<div id="step-2" class="wizard-step">
|
||
<header class="step-header">
|
||
<button id="back-btn" class="back-button">
|
||
<svg class="back-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
|
||
<line x1="19" y1="12" x2="5" y2="12"></line>
|
||
<polyline points="12 19 5 12 12 5"></polyline>
|
||
</svg>
|
||
<span data-i18n="btn_back">Geri Dön</span>
|
||
</button>
|
||
<h2 class="step-title" data-i18n="step2_title">İndirilecek Dosya</h2>
|
||
</header>
|
||
|
||
<!-- Scrollable Track List Area -->
|
||
<div class="track-list-scroll">
|
||
<!-- Playlist Bulk Actions and Select All Header -->
|
||
<div id="playlist-header" class="playlist-header" style="display: none;">
|
||
<div class="playlist-select-all">
|
||
<input type="checkbox" id="select-all-checkbox" checked style="cursor: pointer; accent-color: #7000ff; width: 16px; height: 16px;">
|
||
<label for="select-all-checkbox" id="select-all-label" data-i18n="playlist_select_all" style="cursor: pointer; color: #fff; font-size: 0.9em; font-weight: 500; user-select: none;">Tümünü Seç</label>
|
||
</div>
|
||
<div class="playlist-bulk-actions">
|
||
<button id="bulk-mp3-btn" class="bulk-action-btn">
|
||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="width: 14px; height: 14px;"><path d="M9 18V5l12-2v13" /><circle cx="6" cy="18" r="3" /><circle cx="18" cy="16" r="3" /></svg>
|
||
<span data-i18n="bulk_mp3">Tümünü MP3 Yap</span>
|
||
</button>
|
||
<button id="bulk-mp4-btn" class="bulk-action-btn">
|
||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="width: 14px; height: 14px;"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18" /><line x1="7" y1="2" x2="7" y2="22" /><line x1="17" y1="2" x2="17" y2="22" /><line x1="2" y1="12" x2="22" y2="12" /></svg>
|
||
<span data-i18n="bulk_mp4">Tümünü MP4 Yap</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div id="track-list" class="track-list">
|
||
<!-- Dynamically populated by Javascript -->
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Playlist Summary Statistics Panel -->
|
||
<div id="playlist-summary-card" class="playlist-summary-card" style="display: none;">
|
||
<div class="summary-stat-item">
|
||
<span class="summary-stat-label" data-i18n="summary_total_tracks">Toplam Dosya:</span>
|
||
<span id="summary-total-count" class="summary-stat-value">0</span>
|
||
</div>
|
||
<div class="summary-stat-item" id="summary-item-duration">
|
||
<span class="summary-stat-label" data-i18n="summary_total_duration">Toplam Süre:</span>
|
||
<span id="summary-total-duration" class="summary-stat-value">0 sn</span>
|
||
</div>
|
||
<div class="summary-stat-item summary-stat-speed-item" id="summary-item-speed">
|
||
<span class="summary-stat-label" data-i18n="summary_speed_label">Hız:</span>
|
||
<select id="summary-speed-select" class="summary-speed-select">
|
||
<option value="100">100 Mbps (Fiber)</option>
|
||
<option value="50">50 Mbps (VDSL)</option>
|
||
<option value="24" selected>24 Mbps (ADSL/VDSL)</option>
|
||
<option value="16">16 Mbps (ADSL)</option>
|
||
<option value="8">8 Mbps (Temel)</option>
|
||
</select>
|
||
</div>
|
||
<div class="summary-stat-item" id="summary-item-size">
|
||
<span class="summary-stat-label" data-i18n="summary_est_size">Tahmini Boyut:</span>
|
||
<span id="summary-est-size" class="summary-stat-value">0 MB</span>
|
||
</div>
|
||
<div class="summary-stat-item" id="summary-item-time">
|
||
<span class="summary-stat-label" data-i18n="summary_est_time">Tahmini Süre:</span>
|
||
<span id="summary-est-time" class="summary-stat-value">~0 sn</span>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Fixed Bottom Panel for Formats and Download Action -->
|
||
<div class="fixed-footer glass-card">
|
||
<div class="footer-grid">
|
||
<!-- Formats & Quality Picker -->
|
||
<div class="options-panel">
|
||
<div class="option-row">
|
||
<span class="option-label" data-i18n="format_label">Format:</span>
|
||
<div class="format-toggle">
|
||
<button id="format-mp3-btn" class="format-btn active">
|
||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 18V5l12-2v13" /><circle cx="6" cy="18" r="3" /><circle cx="18" cy="16" r="3" /></svg>
|
||
<span data-i18n="format_mp3">MP3 Ses</span>
|
||
</button>
|
||
<button id="format-mp4-btn" class="format-btn">
|
||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18" /><line x1="7" y1="2" x2="7" y2="22" /><line x1="17" y1="2" x2="17" y2="22" /><line x1="2" y1="12" x2="22" y2="12" /></svg>
|
||
<span data-i18n="format_mp4">MP4 Video</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="option-row">
|
||
<span class="option-label" data-i18n="quality_label">Kalite:</span>
|
||
<div id="quality-pills" class="quality-pills">
|
||
<!-- Populated dynamically -->
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Start Button and Progress Bar -->
|
||
<div class="action-panel">
|
||
<!-- Progress Section (Active during download) -->
|
||
<div id="download-progress-panel" class="progress-panel" style="display: none;">
|
||
<!-- Overall Playlist Progress -->
|
||
<div class="overall-progress-group" style="margin-bottom: 8px; border-bottom: 1px solid rgba(255,255,255,0.06); padding-bottom: 6px;">
|
||
<div class="progress-header" style="margin-bottom: 2px;">
|
||
<span id="overall-status-label" data-i18n="overall_status_label" style="font-size: 0.76rem; color: #a49fc0; font-weight: 500;">Genel İlerleme</span>
|
||
<span id="overall-percent" style="color: #00dfd8; font-weight: 800; font-size: 0.76rem;">0%</span>
|
||
</div>
|
||
<div class="progress-bar-container" style="height: 5px; background: rgba(0, 0, 0, 0.35);">
|
||
<div id="overall-progress-bar" class="progress-bar-fill" style="width: 0%; height: 100%; background: linear-gradient(90deg, #7928ca 0%, #ff0080 100%);"></div>
|
||
</div>
|
||
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 3px;">
|
||
<span id="overall-count-text" style="font-size: 0.72rem; color: #8c88a5;">Tamamlanan: 0 / 0</span>
|
||
<span id="overall-remaining-text" style="font-size: 0.72rem; color: #8c88a5;">Kalan: 0</span>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Active Item Progress -->
|
||
<div class="active-track-progress-group">
|
||
<div class="progress-header">
|
||
<span id="download-status" style="font-size: 0.76rem; font-weight: 600; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; max-width: 190px;">Bağlantı kuruluyor...</span>
|
||
<span id="download-percent" style="font-size: 0.76rem;">0%</span>
|
||
</div>
|
||
<div class="progress-bar-container" style="height: 5px; background: rgba(0, 0, 0, 0.35);">
|
||
<div id="download-progress-bar" class="progress-bar-fill" style="width: 0%"></div>
|
||
</div>
|
||
<div class="progress-footer" style="display: flex; justify-content: space-between; align-items: center; margin-top: 4px;">
|
||
<p id="download-subtext" class="subtext" style="margin-top: 0; font-size: 0.7rem;">Lütfen bekleyin...</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<button id="download-btn" class="glow-button full-width">
|
||
<svg class="dl-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="8 17 12 21 16 17"></polyline><line x1="12" y1="12" x2="12" y2="21"></line><path d="M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29"></path></svg>
|
||
<span data-i18n="btn_download">İndirmeyi Başlat</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</main>
|
||
|
||
<script src="renderer.js"></script>
|
||
</body>
|
||
</html>
|