commit 1fad70df4a10d4554231ad8420b5256b8d5ac9a4 Author: Muhammad Kadi Date: Mon Mar 16 17:25:57 2026 +0400 ١ diff --git a/README.md b/README.md new file mode 100644 index 0000000..34ca8a2 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# talabatk-plus \ No newline at end of file diff --git a/admin.html b/admin.html new file mode 100644 index 0000000..33dfd89 --- /dev/null +++ b/admin.html @@ -0,0 +1,106 @@ + + + + + + لوحة التحكم - طلباتك بلس + + + + + + +
+ + +
+

تسجيل الدخول للإدارة

+ +
+ +
+ + + +
+ + + + + \ No newline at end of file diff --git a/admin.js b/admin.js new file mode 100644 index 0000000..e0f0ef9 --- /dev/null +++ b/admin.js @@ -0,0 +1,240 @@ +/* ============================================ + admin.js - لوحة تحكم طلباتك بلس (نسخة آمنة بدون كلمة مرور ثابتة) + ============================================ */ + +// تحديد رابط API بناءً على البيئة +const API_BASE = (() => { + const host = window.location.hostname; + if (host === 'localhost' || host === '127.0.0.1' || host.startsWith('192.168.')) { + return `http://${host}:3000/api`; // عدّل المنفذ حسب إعدادات السيرفر + } + return '/api'; +})(); + +// --- دالة تسجيل الدخول عبر الخادم --- +async function checkAuth() { + const password = document.getElementById('adminPassword').value; + try { + const res = await fetch(API_BASE + '/login', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ password }) + }); + const data = await res.json(); + if (data.success) { + sessionStorage.setItem('adminPass', password); + document.getElementById('loginSection').classList.add('hidden'); + document.getElementById('adminContent').classList.remove('hidden'); + loadSettings(); // تحميل الإعدادات بعد الدخول + } else { + alert('❌ ' + (data.message || 'كلمة المرور غير صحيحة')); + } + } catch (err) { + alert('❌ فشل الاتصال بالخادم. تأكد من تشغيل السيرفر.'); + } +} + +function logout() { + document.getElementById('loginSection').classList.remove('hidden'); + document.getElementById('adminContent').classList.add('hidden'); + document.getElementById('adminPassword').value = ''; +} + +// --- تحميل الإعدادات من الخادم --- +async function loadSettings() { + try { + const res = await fetch(API_BASE + '/settings'); + if (!res.ok) throw new Error('فشل تحميل الإعدادات'); + const data = await res.json(); + + document.getElementById('whatsappNumber').value = data.whatsappNumber || ''; + document.getElementById('facebookUrl').value = data.facebookUrl || ''; + document.getElementById('instagramUrl').value = data.instagramUrl || ''; + document.getElementById('appStoreUrl').value = data.appStoreUrl || ''; + document.getElementById('googlePlayUrl').value = data.googlePlayUrl || ''; + document.getElementById('apkUrl').value = data.apkUrl || ''; + + if (data.telegramChatIds && Array.isArray(data.telegramChatIds)) { + document.getElementById('telegramChatIds').value = data.telegramChatIds.join('\n'); + } + + renderVideos(data.videos || []); + } catch (error) { + console.error('خطأ في تحميل الإعدادات:', error); + alert('تعذر تحميل الإعدادات. تأكد من تشغيل الخادم.'); + } +} + +// --- عرض الفيديوهات --- +function renderVideos(videos) { + const container = document.getElementById('videosList'); + container.innerHTML = ''; + + videos.forEach((url, index) => { + const videoId = extractYouTubeVideoId(url); + const thumbnail = videoId ? `https://img.youtube.com/vi/${videoId}/mqdefault.jpg` : ''; + + const card = document.createElement('div'); + card.className = 'bg-zinc-100 p-4 rounded-2xl relative'; + card.innerHTML = ` + فيديو +

${url}

+ + `; + container.appendChild(card); + }); +} + +function extractYouTubeVideoId(url) { + const patterns = [ + /youtube\.com\/watch\?v=([^&]+)/, + /youtu\.be\/([^?]+)/, + /youtube\.com\/embed\/([^?]+)/ + ]; + for (let pattern of patterns) { + const match = url.match(pattern); + if (match && match[1]) return match[1]; + } + return null; +} + +// --- إضافة فيديو جديد --- +async function addVideo() { + const url = document.getElementById('newVideoUrl').value.trim(); + if (!url) { + alert('الرجاء إدخال رابط الفيديو'); + return; + } + + try { + const res = await fetch(API_BASE + '/settings'); + const data = await res.json(); + const videos = data.videos || []; + videos.push(url); + + const updateRes = await fetch(API_BASE + '/settings', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'x-admin-password': sessionStorage.getItem('adminPass') || '' + }, + body: JSON.stringify({ videos }) + }); + + if (updateRes.ok) { + document.getElementById('newVideoUrl').value = ''; + loadSettings(); // إعادة تحميل القائمة + alert('✅ تمت إضافة الفيديو بنجاح'); + } else { + alert('❌ فشل إضافة الفيديو'); + } + } catch (error) { + console.error(error); + alert('❌ خطأ في الاتصال بالخادم'); + } +} + +// --- حذف فيديو --- +async function deleteVideo(index) { + if (!confirm('هل أنت متأكد من حذف هذا الفيديو؟')) return; + + try { + const res = await fetch(API_BASE + '/settings'); + const data = await res.json(); + const videos = data.videos || []; + videos.splice(index, 1); + + const updateRes = await fetch(API_BASE + '/settings', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'x-admin-password': sessionStorage.getItem('adminPass') || '' + }, + body: JSON.stringify({ videos }) + }); + + if (updateRes.ok) { + loadSettings(); + alert('✅ تم الحذف'); + } else { + alert('❌ فشل الحذف'); + } + } catch (error) { + console.error(error); + alert('❌ خطأ في الاتصال'); + } +} + +// --- دوال تحديث الحقول الفردية --- +async function updateWhatsApp() { + const value = document.getElementById('whatsappNumber').value.trim(); + await updateField('whatsappNumber', value); +} +async function updateFacebook() { + const value = document.getElementById('facebookUrl').value.trim(); + await updateField('facebookUrl', value); +} +async function updateInstagram() { + const value = document.getElementById('instagramUrl').value.trim(); + await updateField('instagramUrl', value); +} +async function updateAppStore() { + const value = document.getElementById('appStoreUrl').value.trim(); + await updateField('appStoreUrl', value); +} +async function updateGooglePlay() { + const value = document.getElementById('googlePlayUrl').value.trim(); + await updateField('googlePlayUrl', value); +} +async function updateApk() { + const value = document.getElementById('apkUrl').value.trim(); + await updateField('apkUrl', value); +} + +async function updateTelegramChatIds() { + const text = document.getElementById('telegramChatIds').value.trim(); + const ids = text.split('\n') + .map(line => line.trim()) + .filter(line => line !== ''); + await updateField('telegramChatIds', ids); +} + +// دالة عامة لتحديث حقل واحد +async function updateField(key, value) { + const password = document.getElementById('adminPassword').value || sessionStorage.getItem('adminPass') || ''; + try { + const res = await fetch(API_BASE + '/settings', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'x-admin-password': password + }, + body: JSON.stringify({ [key]: value }) + }); + + if (res.ok) { + alert('✅ تم الحفظ بنجاح'); + } else { + const err = await res.json(); + alert('❌ فشل الحفظ: ' + (err.message || 'خطأ غير معروف')); + } + } catch (error) { + console.error(error); + alert('❌ خطأ في الاتصال بالخادم'); + } +} + +// ربط الدوال بالكائن window +window.checkAuth = checkAuth; +window.logout = logout; +window.addVideo = addVideo; +window.deleteVideo = deleteVideo; +window.updateWhatsApp = updateWhatsApp; +window.updateFacebook = updateFacebook; +window.updateInstagram = updateInstagram; +window.updateAppStore = updateAppStore; +window.updateGooglePlay = updateGooglePlay; +window.updateApk = updateApk; +window.updateTelegramChatIds = updateTelegramChatIds; \ No newline at end of file diff --git a/driver.webp b/driver.webp new file mode 100644 index 0000000..fdb0d3e Binary files /dev/null and b/driver.webp differ diff --git a/foodimg_webp/#U0662#U0660#U0662#U0665#U0661#U0662#U0662#U0662_#U0661#U0669#U0664#U0667#U0660#U0660.jpg.webp b/foodimg_webp/#U0662#U0660#U0662#U0665#U0661#U0662#U0662#U0662_#U0661#U0669#U0664#U0667#U0660#U0660.jpg.webp new file mode 100644 index 0000000..de8178a Binary files /dev/null and b/foodimg_webp/#U0662#U0660#U0662#U0665#U0661#U0662#U0662#U0662_#U0661#U0669#U0664#U0667#U0660#U0660.jpg.webp differ diff --git a/foodimg_webp/1.webp b/foodimg_webp/1.webp new file mode 100644 index 0000000..20ebd62 Binary files /dev/null and b/foodimg_webp/1.webp differ diff --git a/foodimg_webp/10.webp b/foodimg_webp/10.webp new file mode 100644 index 0000000..d629786 Binary files /dev/null and b/foodimg_webp/10.webp differ diff --git a/foodimg_webp/2.webp b/foodimg_webp/2.webp new file mode 100644 index 0000000..fcc578c Binary files /dev/null and b/foodimg_webp/2.webp differ diff --git a/foodimg_webp/3.webp b/foodimg_webp/3.webp new file mode 100644 index 0000000..1ba673a Binary files /dev/null and b/foodimg_webp/3.webp differ diff --git a/foodimg_webp/4(1).webp b/foodimg_webp/4(1).webp new file mode 100644 index 0000000..f024cb4 Binary files /dev/null and b/foodimg_webp/4(1).webp differ diff --git a/foodimg_webp/4.webp b/foodimg_webp/4.webp new file mode 100644 index 0000000..f024cb4 Binary files /dev/null and b/foodimg_webp/4.webp differ diff --git a/foodimg_webp/5.webp b/foodimg_webp/5.webp new file mode 100644 index 0000000..f1f57e7 Binary files /dev/null and b/foodimg_webp/5.webp differ diff --git a/foodimg_webp/6.webp b/foodimg_webp/6.webp new file mode 100644 index 0000000..754dabb Binary files /dev/null and b/foodimg_webp/6.webp differ diff --git a/foodimg_webp/7.webp b/foodimg_webp/7.webp new file mode 100644 index 0000000..c9fbec7 Binary files /dev/null and b/foodimg_webp/7.webp differ diff --git a/foodimg_webp/8.webp b/foodimg_webp/8.webp new file mode 100644 index 0000000..9cebda7 Binary files /dev/null and b/foodimg_webp/8.webp differ diff --git a/foodimg_webp/9.webp b/foodimg_webp/9.webp new file mode 100644 index 0000000..cf62a50 Binary files /dev/null and b/foodimg_webp/9.webp differ diff --git a/foodimg_webp/IMG_4044.jpg.webp b/foodimg_webp/IMG_4044.jpg.webp new file mode 100644 index 0000000..033467f Binary files /dev/null and b/foodimg_webp/IMG_4044.jpg.webp differ diff --git a/img1.webp b/img1.webp new file mode 100644 index 0000000..fda661e Binary files /dev/null and b/img1.webp differ diff --git a/img2.webp b/img2.webp new file mode 100644 index 0000000..d6c6866 Binary files /dev/null and b/img2.webp differ diff --git a/index.css b/index.css new file mode 100644 index 0000000..3d37fa0 --- /dev/null +++ b/index.css @@ -0,0 +1,254 @@ +/* ============================================ + index.css - طلباتك بلس - الصفحة الرئيسية + ============================================ */ + +/* 1. استيراد الخطوط وتعريف المتغيرات */ +@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans+Arabic:wght@300;400;600;700&display=swap'); + +:root { + --primary: #ff661c; + --secondary: #4458a8; +} + +/* 2. التنسيق العام للجسم */ +body { + font-family: 'IBM Plex Sans Arabic', sans-serif; + background-color: #f4f4f5; + min-height: 100vh; + margin: 0; + position: relative; +} + +/* 3. تنسيق قسم الـ Hero (تدرج لوني مع نقش خلفية) */ +.hero-bg { + position: relative; + background: linear-gradient(135deg, #FFFFFF, #4458a8 35%); + isolation: isolate; + overflow: hidden; +} + +.hero-bg::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: url('https://d2xsxph8kpxj0f.cloudfront.net/310519663283773943/B6VScFZzyyFsbsNTibkNXq/delivery-benefits-pattern-kLL7PjAxESmg8sQjNQs3GU.webp'); + background-repeat: repeat; + background-size: 400px; + opacity: 0.03; + pointer-events: none; + z-index: 0; +} + +.hero-bg > * { + position: relative; + z-index: 1; +} + +/* 4. تنسيق شريط الصور المتحرك (Ticker) */ +.ticker { + overflow: hidden; + white-space: nowrap; +} + +.ticker-track { + display: flex; + animation: marquee 25s linear infinite; +} + +.ticker-track img { + border: 2px solid var(--primary); + border-radius: 1.5rem; + transition: all 0.3s ease; + cursor: pointer; +} + +.ticker-track img:hover { + transform: scale(1.1); + box-shadow: 0 10px 20px rgba(255, 102, 28, 0.3); +} + +@keyframes marquee { + from { transform: translateX(0); } + to { transform: translateX(100%); } +} + +.ticker-track-reverse { + animation-direction: reverse; +} + +/* 5. بطاقات المميزات (Feature Cards) */ +.features-grid { + display: grid; + grid-template-columns: 1fr; + gap: 1.5rem; + max-width: 800px; + margin: 3rem auto; +} + +.feature-card { + background: linear-gradient(135deg, #4458a8 0%, #4458a8 30%, #ff661c 100%); + backdrop-filter: blur(4px); + -webkit-backdrop-filter: blur(4px); + padding: 2.5rem 2rem; + border-radius: 1.5rem; + display: flex; + flex-direction: column; + align-items: flex-start; + text-align: right; + color: white; + border: none; + cursor: pointer; + transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.4s ease; + position: relative; + z-index: 1; +} + +.feature-card:hover { + transform: scale(1.08); + box-shadow: 0 15px 35px rgba(0, 0, 0, 0.3); + z-index: 10; +} + +.feature-icon-svg { + width: 50px; + height: 50px; + margin-bottom: 1.5rem; + fill: white; + transition: transform 0.4s ease; +} + +.feature-card:hover .feature-icon-svg { + transform: rotate(-10deg); +} + +.feature-card h4 { + font-size: 2rem; + font-weight: 700; + margin-bottom: 0.7rem; +} + +.feature-card p { + font-size: 1.1rem; + line-height: 1.6; + color: rgba(255, 255, 255, 0.9); +} + +/* 6. بطاقات الخطوات (Step Cards) */ +.step-card { + position: relative; + background-color: rgba(255, 255, 255, 0.85); + backdrop-filter: blur(4px); + -webkit-backdrop-filter: blur(4px); + border-radius: 1.5rem; + padding: 2.5rem 2rem; + transition: all 0.3s ease; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + cursor: pointer; + border: none; + overflow: hidden; + z-index: 1; +} + +.step-card::before { + content: ""; + position: absolute; + inset: 0; + border-radius: 1.5rem; + padding: 2px; + background: transparent; + transition: all 0.3s ease; + -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); + -webkit-mask-composite: xor; + mask-composite: exclude; + z-index: -1; +} + +.step-card:hover::before { + background: linear-gradient(to bottom, #ff661c, #4458a8); +} + +.step-card:hover { + transform: translateY(-12px) scale(1.05); + box-shadow: 0 20px 40px rgba(68, 88, 168, 0.25); + border-color: var(--secondary); +} + +.step-card:hover + .step-number, +.flex:hover .step-number { + background-color: var(--secondary) !important; + transform: scale(1.1); + transition: all 0.3s ease; +} + +.step-card:hover h3 { + color: var(--secondary); + transition: color 0.3s ease; +} + +.step-card h3 { + font-size: 2.2rem; + font-weight: 700; + color: #1f2937; +} + +.step-card p { + font-size: 1.3rem; + line-height: 1.6; +} + +/* زر السجل */ +.btn-step-style { + transition: all 0.3s ease; + border: 2px solid transparent; + position: relative; + overflow: hidden; + z-index: 1; +} + +.btn-register-style { + transition: all 0.3s ease; + border: 2px solid white; +} + +.btn-register-style:hover { + background-color: var(--secondary) !important; + transform: scale(1.1); + box-shadow: 0 10px 20px rgba(68, 88, 168, 0.25); + border-color: var(--primary); +} + +/* أرقام الخطوات */ +.step-number { + width: 3.5rem; + height: 3.5rem; + background-color: var(--primary); + color: white; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-size: 2rem; + font-weight: bold; + margin-bottom: -1.75rem; + position: relative; + z-index: 10; + border: 4px solid white; +} + +/* 7. تأثيرات الظهور (Fade-in) */ +.fade-in { + opacity: 0; + transform: translateY(30px); + transition: all 0.8s ease-out; +} + +.fade-in.visible { + opacity: 1; + transform: translateY(0); +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..f802821 --- /dev/null +++ b/index.html @@ -0,0 +1,413 @@ + + + + + + طلباتك بلس - فرصة عمل كسائق توصيل بدخل مميز + + + + + + + + طلباتك بلس - فرصة عمل كسائق توصيل بدخل مميز + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + فرصة عمل مرنة متاحة الآن +
+ +

+ انضم إلى طلباتك بلس
+ وابدأ كسبك اليوم! +

+ +

+ كن سائق توصيل مع أسرع تطبيق طلبات في المنطقة. دخل يومي مرتفع + جدول زمني مرن + دعم 24/7 +

+ + +
+
+
+ +
+
+ +
+
+
+
+1200 سائق
+
انضموا هذا الشهر
+
+
+
+ + +
+
+ سائق توصيل على دراجة نارية +
+
+ + +
+
دراجات نارية • سيارات • دراجات هوائية
+
+
مدعوم من أكثر من 35 مطعم
+
+
+ + +
+
+
+ برجر + بيتزا + شاورما + دجاج مقلي + كيك + فلافل + مناقيش + أرز + شاورما + دجاج مقلي + كيك + فلافل + برجر + بيتزا + شاورما + دجاج مقلي + كيك + فلافل + مناقيش + أرز + شاورما + دجاج مقلي + كيك + فلافل +
+
+
+ + +
+
+
من نحن؟
+

طلباتك بلس هي أسرع منصة توصيل طعام في المنطقة

+

+ نحن نربط بين المطاعم والعملاء بأسرع وقت، ونمنح السائقين فرصة حقيقية لكسب دخل ممتاز مع مرونة كاملة في الأوقات. +

+
+
+ +
تقييم 4.9
+
+
+
أكثر من 35 مطعم شريك
+
+
+ + +
+ + +
+
+
+
+
35
+
مطعم شريك
+
+
+
2800
+
طلب يومي
+
+
+
136
+
سائق نشط
+
+
+
93%
+
رضا السائقين
+
+
+
+
+ + +
+
+
+ أرز + شاورما + دجاج مقلي + كيك + فلافل + برجر + بيتزا + شاورما + دجاج مقلي + كيك + فلافل + مناقيش + برجر + شاورما + دجاج مقلي + كيك + فلافل + برجر + بيتزا + شاورما + دجاج مقلي + كيك + فلافل + مناقيش + برجر +
+
+
+ + +
+
+

أربع خطوات بسيطة للبدء

+

انضم إلى فريقنا في دقائق معدودة

+
+ +
+
+
1
+
+

اقرأ الشروط

+

تعرف على شروط العمل والتفاصيل الكاملة

+
+
+ +
+
2
+
+

سجل بياناتك

+

أدخل معلوماتك الشخصية والبنكية

+
+
+ +
+
3
+
+

أرسل الأوراق

+

أرفع الأوراق الثبوتية المطلوبة

+
+
+ +
+
4
+
+

ابدأ العمل

+

استلم العدة وابدأ التوصيل فوراً

+
+
+
+
+ + +
+
+
انضم لعائلتنا الآن
+

ابدأ العمل في دقائق

+

التطبيق متوفر على أندرويد وآيفون. سجل، أكمل الوثائق، وابدأ التوصيل فوراً.

+
+
+
+ + + +

مرونة كاملة

+

اختر أوقات عملك بحرية تامة بما يناسبك.

+
+ +
+ + + +

دعم متواصل

+

فريقنا معك في كل خطوة وعلى مدار الساعة.

+
+ +
+ + + +

دخل متصاعد

+

حقق أرباحاً ممتازة مع نظام المكافآت الجديد.

+
+
+
+ + + + + + + + + diff --git a/index.js b/index.js new file mode 100644 index 0000000..b6406d1 --- /dev/null +++ b/index.js @@ -0,0 +1,51 @@ +/* ============================================ + index.js - طلباتك بلس - الصفحة الرئيسية + ============================================ */ + +// ---- تأثير العداد (Counter Animation) ---- +function animateCounter(id, target, duration = 2000, suffix = '') { + let start = 0; + const increment = target / (duration / 16); + const el = document.getElementById(id); + + const timer = setInterval(() => { + start += increment; + if (start >= target) { + clearInterval(timer); + el.textContent = Math.floor(target) + suffix; + } else { + el.textContent = Math.floor(start) + suffix; + } + }, 16); +} + +// ---- مراقب التمرير للـ Fade-in والعدادات ---- +function setupScrollAnimations() { + const observer = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + entry.target.classList.add('visible'); + + if (entry.target.id === 'stats') { + animateCounter('stat1', 35); + animateCounter('stat2', 2800, 1800); + animateCounter('stat3', 136); + animateCounter('stat4', 93, 1200, '%'); + } + } + }); + }, { threshold: 0.3 }); + + document.querySelectorAll('section').forEach(section => { + section.classList.add('fade-in'); + observer.observe(section); + }); + + observer.observe(document.getElementById('stats')); +} + +// ---- تهيئة كل شيء عند تحميل الصفحة ---- +window.onload = function () { + setupScrollAnimations(); + console.log('%c✅ موقع طلباتك بلس جاهز للاستخدام!', 'color:#ff661c; font-size:13px; font-weight:bold'); +}; diff --git a/index2.html b/index2.html new file mode 100644 index 0000000..6dd4c70 --- /dev/null +++ b/index2.html @@ -0,0 +1,123 @@ + + + + + + + + طلباتك بلس - صفحة المعلومات + + + + + + + + + + + +
+
+
+
+ +
+
+

مرحباً بك في طلباتك بلس

+

أفضل منصة لتوصيل الطلبات بسرعة وسهولة

+
+ +
+

معلومات عن العمل

+

+ نحن في طلباتك بلس نقدم خدمة توصيل الطلبات بأعلى جودة وأسرع وقت. + فريقنا مجهز بأحدث الوسائل لضمان وصول طلباتك بأمان. +

+
+ +
+

فيديوهات تعريفية

+
+ +
+
+ + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/info.js b/info.js new file mode 100644 index 0000000..590fabd --- /dev/null +++ b/info.js @@ -0,0 +1,108 @@ +/* ============================================ + info.js - طلباتك بلس - صفحة المعلومات (index2) + ============================================ */ + +// --- إعدادات API (تأخذ القيمة من المتغير المُعرّف في index2.html) --- + + +// --- التحكم بالسلايدر (تبديل الصور) --- +let currentSlide = 1; +let slideInterval; + +function startSlider() { + // تبديل كل 5 ثواني + slideInterval = setInterval(() => { + const slide1 = document.getElementById('slide1'); + const slide2 = document.getElementById('slide2'); + if (currentSlide === 1) { + slide1.style.opacity = '0'; + slide2.style.opacity = '1'; + currentSlide = 2; + } else { + slide1.style.opacity = '1'; + slide2.style.opacity = '0'; + currentSlide = 1; + } + }, 5000); +} + +// --- تحميل وعرض الفيديوهات --- +async function loadVideos() { + try { + const res = await fetch('/api/settings'); + if (!res.ok) throw new Error('فشل تحميل الإعدادات'); + const data = await res.json(); + const videos = data.videos || []; + renderVideos(videos); + } catch (err) { + console.error('خطأ في تحميل الفيديوهات:', err); + document.getElementById('videosContainer').innerHTML = '

تعذر تحميل الفيديوهات

'; + } +} + +function renderVideos(videoUrls) { + const container = document.getElementById('videosContainer'); + container.innerHTML = ''; // تفريغ أي محتوى سابق + + if (!videoUrls || videoUrls.length === 0) { + container.innerHTML = '

لا توجد فيديوهات متاحة حالياً

'; + return; + } + + videoUrls.forEach(url => { + const videoId = extractYouTubeVideoId(url); + if (!videoId) return; // تجاهل الروابط غير الصالحة + + // إنشاء بطاقة الفيديو باستخدام Tailwind + const card = document.createElement('div'); + card.className = 'bg-zinc-50 p-4 rounded-2xl shadow-md border border-zinc-200'; + + // يمكن عرض الفيديو كصورة مصغرة مع رابط للتشغيل، أو تضمين iframe للمعاينة المباشرة. + // هنا سنستخدم iframe لتشغيل الفيديو مباشرة (يمكن تغييرها إلى صورة مصغرة حسب الرغبة). + card.innerHTML = ` +
+ +
+ + مشاهدة على يوتيوب + + `; + container.appendChild(card); + }); +} + +// استخراج معرف الفيديو من رابط يوتيوب (يدعم عدة صيغ) +function extractYouTubeVideoId(url) { + const patterns = [ + /youtube\.com\/watch\?v=([^&]+)/, + /youtu\.be\/([^?]+)/, + /youtube\.com\/embed\/([^?]+)/, + /youtube\.com\/v\/([^?]+)/, + /youtube\.com\/shorts\/([^?]+)/ + ]; + for (let pattern of patterns) { + const match = url.match(pattern); + if (match && match[1]) return match[1]; + } + return null; +} + +// --- تهيئة الصفحة --- +document.addEventListener('DOMContentLoaded', () => { + startSlider(); + loadVideos(); +}); + +// اختياري: إيقاف السلايدر عندما لا تكون الصفحة مرئية لتوفير الموارد +document.addEventListener('visibilitychange', () => { + if (document.hidden) { + clearInterval(slideInterval); + } else { + startSlider(); + } +}); \ No newline at end of file diff --git a/join.css b/join.css new file mode 100644 index 0000000..fe64de7 --- /dev/null +++ b/join.css @@ -0,0 +1,28 @@ +/* ============================================ + join.css - طلباتك بلس - صفحة تسجيل السائق + ============================================ */ + +@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans+Arabic:wght@400;700&display=swap'); + +:root { + --primary: #ff661c; + --secondary: #4458a8; +} + +body { + font-family: 'IBM Plex Sans Arabic', sans-serif; + background-color: #f4f4f5; +} + +.form-container { + background: white; + border-radius: 2rem; + box-shadow: 0 20px 50px rgba(0, 0, 0, 0.05); +} + +input:focus, +select:focus { + border-color: var(--primary) !important; + outline: none; + box-shadow: 0 0 0 2px rgba(255, 102, 28, 0.1); +} diff --git a/join.html b/join.html new file mode 100644 index 0000000..4a6c09b --- /dev/null +++ b/join.html @@ -0,0 +1,204 @@ + + + + + + تسجيل سائق جديد - انضم لفريق طلباتك بلس + + + + + + + + +
+ + +
+
+
+ طلباتك + بلس +
+
+ + العودة للرئيسية + + +
+ + +
+

انضم لأسرة طلباتك

+

كن شريكاً في النجاح وابدأ بجني الأرباح معنا

+
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+
+ + +
+ +
+ +
+ + + + +

اضغط هنا لرفع الصورة

+ +
+
+
+ + + + + + +
+ + +
+

تابعونا على مواقع التواصل الاجتماعي

+ +

أو واتساب: 0985377283

+
+ +
+ + + + + + diff --git a/join.js b/join.js new file mode 100644 index 0000000..1f26880 --- /dev/null +++ b/join.js @@ -0,0 +1,80 @@ +/* ============================================ + join.js - طلباتك بلس - صفحة تسجيل السائق + ============================================ */ + +// --- إعدادات الـ Backend (تعمل محلياً وعلى الاستضافة) --- +const _host = window.location.hostname; +const _isLocal = _host === 'localhost' || _host === '127.0.0.1' || _host.startsWith('192.168.'); +const API_URL = _isLocal ? `http://${_host}:3000/api/join` : '/api/join'; + +const form = document.getElementById('driverForm'); +const btn = document.getElementById('submitBtn'); +const photoInput = document.getElementById('photoInput'); + +// --- عرض معاينة الصورة عند اختيارها --- +photoInput.addEventListener('change', () => { + const preview = document.getElementById('fileNamePreview'); + const previewContainer = document.getElementById('imagePreviewContainer'); + const imagePreview = document.getElementById('imagePreview'); + + const file = photoInput.files[0]; + if (file) { + preview.innerText = file.name; + const reader = new FileReader(); + reader.onload = (e) => { + imagePreview.src = e.target.result; + previewContainer.classList.remove('hidden'); + }; + reader.readAsDataURL(file); + } else { + preview.innerText = ''; + previewContainer.classList.add('hidden'); + } +}); + +// --- إرسال النموذج عبر Telegram Bot --- +form.addEventListener('submit', async (e) => { + e.preventDefault(); + btn.disabled = true; + btn.innerText = 'جاري إرسال طلبك...'; + + const formData = new FormData(form); + const photoFile = photoInput.files[0]; + + const message = + `🚀 *طلب انضمام جديد (طلباتك بلس)* \n\n` + + `👤 *الاسم:* ${formData.get('name')}\n` + + `📱 *الجوال:* ${formData.get('phone')}\n` + + `🆔 *الرقم الوطني:* ${formData.get('nationalId')}\n` + + `📍 *العنوان:* ${formData.get('address')}\n` + + `🛵 *نوع المركبة:* ${formData.get('vehicleType')}\n` + + `🔢 *هل منمرة:* ${formData.get('isNumbered')}\n` + + `📄 *رقم اللوحة:* ${formData.get('plateNumber') || 'لا يوجد'}\n` + + `💡 *عمل سابقاً في التوصيل:* ${formData.get('previousExperience')}\n` + + `🗺️ *خبرة بمناطق حلب:* ${formData.get('aleppKnowledge')}\n\n` + + `✅ *موافق على الشروط والتأمين*`; + + try { + const backendFormData = new FormData(); + backendFormData.append('photo', photoFile); + backendFormData.append('message', message); + + const response = await fetch(API_URL, { + method: 'POST', + body: backendFormData + }); + + const result = await response.json(); + + if (result.ok) { + window.location.href = 'success.html'; + } else { + alert('حدث خطأ في الإرسال: ' + (result.description || 'فشل إرسال الطلب.')); + } + } catch (error) { + alert('فشل الاتصال بالخادم.'); + } finally { + btn.disabled = false; + btn.innerText = 'إرسال طلب الانضمام'; + } +}); diff --git a/logos/logos_webp/barakat.jpg.webp b/logos/logos_webp/barakat.jpg.webp new file mode 100644 index 0000000..933ba30 Binary files /dev/null and b/logos/logos_webp/barakat.jpg.webp differ diff --git a/logos/logos_webp/logo_main.webp b/logos/logos_webp/logo_main.webp new file mode 100644 index 0000000..ae3fb2e Binary files /dev/null and b/logos/logos_webp/logo_main.webp differ diff --git a/logos/logos_webp/ابو كوكو.webp b/logos/logos_webp/ابو كوكو.webp new file mode 100644 index 0000000..4de41da Binary files /dev/null and b/logos/logos_webp/ابو كوكو.webp differ diff --git a/logos/logos_webp/ذكور.webp b/logos/logos_webp/ذكور.webp new file mode 100644 index 0000000..7f3183f Binary files /dev/null and b/logos/logos_webp/ذكور.webp differ diff --git a/logos/logos_webp/هاوس شيكن.webp b/logos/logos_webp/هاوس شيكن.webp new file mode 100644 index 0000000..e0d10e9 Binary files /dev/null and b/logos/logos_webp/هاوس شيكن.webp differ diff --git a/logos_webp/logo_main.webp b/logos_webp/logo_main.webp new file mode 100644 index 0000000..ae3fb2e Binary files /dev/null and b/logos_webp/logo_main.webp differ diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..a7a6851 --- /dev/null +++ b/robots.txt @@ -0,0 +1,5 @@ +User-agent: * +Allow: / +Disallow: /admin + +Sitemap: https://drivers.talabatukplus.com/sitemap.xml diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..14dc68d --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,18 @@ + + + + https://drivers.talabatukplus.com/ + weekly + 1.0 + + + https://drivers.talabatukplus.com/info + weekly + 0.8 + + + https://drivers.talabatukplus.com/join + monthly + 0.9 + + diff --git a/success.html b/success.html new file mode 100644 index 0000000..a530341 --- /dev/null +++ b/success.html @@ -0,0 +1,25 @@ + + + + + + تم الإرسال بنجاح - طلباتك بلس + + + + + +
+ +

تم إرسال طلبك بنجاح!

+

شكراً لانضمامك إلينا. سيقوم فريقنا بمراجعة طلبك والتواصل معك في أقرب وقت ممكن.

+ + العودة إلى الصفحة الرئيسية + +
+ + diff --git a/talabatk.webp b/talabatk.webp new file mode 100644 index 0000000..d8c1396 Binary files /dev/null and b/talabatk.webp differ