From c9796f29c6b30a46edad184102e09a37a81638c7 Mon Sep 17 00:00:00 2001 From: almazlar Date: Sat, 7 Feb 2026 22:36:41 +0300 Subject: [PATCH] feat: inline CSS and JavaScript directly into index.html by deleting external files. --- index.html | 219 +++++++++++++++++++++++++++++++++++++++++++++++++++-- script.js | 133 -------------------------------- style.css | 125 ------------------------------ 3 files changed, 214 insertions(+), 263 deletions(-) delete mode 100644 script.js delete mode 100644 style.css diff --git a/index.html b/index.html index 25aa39d..822fb9b 100644 --- a/index.html +++ b/index.html @@ -5,8 +5,133 @@ AI Vision - + @@ -33,13 +158,97 @@ Türkçe Çeviri
- - - + diff --git a/script.js b/script.js deleted file mode 100644 index 933adc7..0000000 --- a/script.js +++ /dev/null @@ -1,133 +0,0 @@ -let base64Image = ""; -let rawDescription = ""; - -// Görüntü seçildiğinde önizleme yap ve boyutlandır -function handlePreview(input) { - const file = input.files[0]; - if (!file) return; - - const reader = new FileReader(); - reader.onload = function (e) { - const img = new Image(); - img.onload = function () { - const canvas = document.createElement('canvas'); - let width = img.width; - let height = img.height; - const max_size = 1024; - - if (width > height) { - if (width > max_size) { - height *= max_size / width; - width = max_size; - } - } else { - if (height > max_size) { - width *= max_size / height; - height = max_size; - } - } - - canvas.width = width; - canvas.height = height; - const ctx = canvas.getContext('2d'); - ctx.drawImage(img, 0, 0, width, height); - - const previewImg = document.getElementById('preview'); - previewImg.src = canvas.toDataURL('image/jpeg', 0.8); - previewImg.style.display = "block"; - base64Image = previewImg.src.split(',')[1]; - - document.getElementById('analyzeBtn').disabled = false; - document.getElementById('uploadText').innerText = file.name; - document.getElementById('resetBtn').style.display = "block"; - }; - img.src = e.target.result; - }; - reader.readAsDataURL(file); -} - -// Moondream ile analiz yap -async function analyzeImage() { - const btn = document.getElementById('analyzeBtn'); - const resultBox = document.getElementById('englishOutput'); - const resultText = document.getElementById('resultText'); - - btn.disabled = true; - btn.innerHTML = ' Düşünüyor...'; - resultBox.style.display = "block"; - resultText.innerText = "Görsel işleniyor, lütfen bekleyin..."; - - try { - const response = await fetch('https://ai.almazlar.com/ollama/api/generate', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - model: "moondream", - prompt: "Describe this image concisely but accurately in English.", - images: [base64Image], - stream: false - }) - }); - - if (!response.ok) throw new Error(`Sunucu hatası: ${response.status}`); - - const data = await response.json(); - rawDescription = data.response; - resultText.innerText = rawDescription; - document.getElementById('translateBtn').style.display = "block"; - } catch (err) { - resultText.innerText = `Hata: ${err.message}. Lütfen bağlantıyı veya model ayarlarını kontrol edin.`; - console.error(err); - } finally { - btn.innerHTML = "Yeniden Analiz Et"; - btn.disabled = false; - } -} - -// Llama 3 ile çeviri yap -async function translateText() { - const transBtn = document.getElementById('translateBtn'); - const trBox = document.getElementById('translationResult'); - const trText = document.getElementById('trText'); - - transBtn.disabled = true; - transBtn.innerHTML = ' Çevriliyor...'; - trBox.style.display = "block"; - trText.innerText = "Çeviri yapılıyor..."; - - try { - const response = await fetch('https://ai.almazlar.com/ollama/api/generate', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - model: "llama3", - prompt: `Translate the following description into natural Turkish. Only output the translation: "${rawDescription}"`, - stream: false - }) - }); - - if (!response.ok) throw new Error(`Çeviri hatası: ${response.status}`); - - const data = await response.json(); - trText.innerText = data.response; - } catch (err) { - trText.innerText = `Hata: ${err.message}`; - } finally { - transBtn.disabled = false; - transBtn.innerHTML = "Türkçeye Çevir (Llama 3)"; - } -} - -// Uygulamayı sıfırla -function resetApp() { - document.getElementById('fileInput').value = ""; - document.getElementById('preview').style.display = "none"; - document.getElementById('preview').src = ""; - document.getElementById('englishOutput').style.display = "none"; - document.getElementById('translationResult').style.display = "none"; - document.getElementById('analyzeBtn').disabled = true; - document.getElementById('uploadText').innerText = "📷 Görseli seçmek için buraya tıklayın"; - document.getElementById('resetBtn').style.display = "none"; - base64Image = ""; - rawDescription = ""; -} diff --git a/style.css b/style.css deleted file mode 100644 index 6c4bc50..0000000 --- a/style.css +++ /dev/null @@ -1,125 +0,0 @@ -:root { - --bg: #0f1117; - --card: #161b22; - --accent: #58a6ff; - --success: #238636; - --text: #c9d1d9; -} - -body { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif; - background: var(--bg); - color: var(--text); - display: flex; - justify-content: center; - padding: 20px; - line-height: 1.6; -} - -.container { - background: var(--card); - padding: 2rem; - border-radius: 12px; - width: 100%; - max-width: 600px; - border: 1px solid #30363d; - box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5); -} - -h2 { - text-align: center; - color: var(--accent); - margin-top: 0; -} - -.upload-section { - border: 2px dashed #30363d; - padding: 30px; - text-align: center; - border-radius: 8px; - cursor: pointer; - transition: 0.3s; - margin-bottom: 20px; -} - -.upload-section:hover { - border-color: var(--accent); - background: #1c2128; -} - -#preview { - max-width: 100%; - border-radius: 8px; - margin: 15px 0; - display: none; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); -} - -button { - background: var(--accent); - color: white; - border: none; - padding: 12px; - border-radius: 6px; - cursor: pointer; - font-weight: 600; - width: 100%; - font-size: 1rem; - transition: 0.2s; -} - -button:disabled { - background: #21262d; - color: #8b949e; - cursor: not-allowed; -} - -#translateBtn { - background: var(--success); - margin-top: 15px; - display: none; -} - -.result-box { - margin-top: 25px; - background: #0d1117; - padding: 20px; - border-radius: 8px; - border-left: 4px solid var(--accent); -} - -.label { - font-size: 0.75rem; - color: #8b949e; - text-transform: uppercase; - letter-spacing: 1px; - margin-bottom: 8px; - display: block; -} - -#translationResult { - margin-top: 20px; - color: #acb6c2; - border-left: 4px solid var(--success); -} - -.loader { - display: inline-block; - width: 12px; - height: 12px; - border: 2px solid #fff; - border-bottom-color: transparent; - border-radius: 50%; - animation: rotation 1s linear infinite; - margin-right: 8px; -} - -@keyframes rotation { - 0% { - transform: rotate(0deg); - } - - 100% { - transform: rotate(360deg); - } -}