/* LIFE General Services – custom storefront layout (Salla custom JS) */ (function () { var PHONE = '966540999883'; var EMAIL = 'asdfgh0909h@gmail.com'; var CATEGORY_ORDER = ['خدمات مدرسية', 'خدمات حكومية', 'خدمات قانونية', 'مواعيد ومعاريض', 'متجر إلكتروني', 'عقارات', 'إعلانات']; var PHONE_PRETTY = '+' + PHONE.slice(0, 3) + ' ' + PHONE.slice(3, 5) + ' ' + PHONE.slice(5, 8) + ' ' + PHONE.slice(8); var WA = 'https://wa.me/' + PHONE; var LOGO = " "; function esc(s) { return String(s == null ? '' : s).replace(/&/g, '&').replace(/"/g, '"').replace(//g, '>'); } // DOMParser documents are inert: descriptions are read as text without running handlers. function parse(html) { return new DOMParser().parseFromString(html || '', 'text/html').body; } function plain(html) { return (parse(html).textContent || '').replace(/\s+/g, ' ').trim(); } // Cards show only the lead line; the full description lives on the product page. function firstLine(html) { var d = parse(html); var first = d.querySelector('p, div, h1, h2, h3'); var text = first ? first.textContent : d.textContent; // The listing API may flatten paragraphs; the lead always ends before the first section marker. return (text || '').split('\n')[0].split('✨')[0].replace(/\s+/g, ' ').trim(); } function home() { return (window.salla && salla.config && salla.config.get('page.slug')) === 'index'; } function storeUrl() { return (window.salla && salla.config && salla.config.get('store.url')) || '/'; } function headerHTML() { return '' + '
' + '
' + '📞 ' + PHONE_PRETTY + '' + '✉️ ' + EMAIL + '' + '
' + '
' + '✅ موثوق في منصة أعمال' + '🏛️ موثق في إحكام' + '🏠 رخصة فال: معتمد' + '
' + '
' + '
' + '' + '' + LOGO + '' + 'لايف للخدمات العامة' + 'خدمات مدرسية وقانونية وعقارية وإعلانات' + '' + '
' + '' + 'WhatsApp 💬' + '' + '
' + '
'; } function footerHTML() { var cats = [ ['🎒 مطويات ابتدائية - جامعية', 'خدمات مدرسية'], ['🏛️ الضمان وحساب المواطن وشمل والعمل الحر', 'خدمات حكومية'], ['⚖️ رفع قضايا + استشارات', 'خدمات قانونية'], ['📅 مواعيد + معاريض ملكية', 'مواعيد ومعاريض'], ['🛒 متجر سلة وتصميم', 'متجر إلكتروني'], ['🏠 عقارات برخصة فال', 'عقارات'], ['🚀 إعلانات تيك توك وسناب ويوتيوب', 'إعلانات'] ]; return '' + '
' + '' + '
' + '💬'; } function homeHTML() { return '' + '
' + '
' + ' متجر موثوق - منصة أعمال + منصة إحكام + رخصة فال' + '

خدماتك المدرسية
والقانونية والعقارية في مكان واحد

' + '

من الصف الابتدائي حتى الجامعة، رفع قضايا، مواعيد حكومية، معاريض الديوان الملكي، متاجر سلة، إدارة عقارات برخصة فال وإعلانات تيك توك وسناب ويوتيوب. تصميم مريح للعين وخدمة موثوقة.

' + '
' + '✅ موثوق في أعمال' + '🏛️ إحكام موثوق' + '🏠 فال معتمد' + '
' + '' + '
💳 مدى، فيزا، أبل باي•قسّمها مع تابي وتمارا
' + '
' + '
' + '
' + '
' + '

📦 جارٍ تحميل الخدمات...

' + '
' + '
' + '
' + '

طرق الدفع الآمنة

ادفع بأمان مع خيارات متعددة وقسّم فاتورتك بدون فوائد

✨ قسّمها مع تابي وتمارا
' + '
' + '
💳
Madaمدى
' + '
💳
Visaفيزا
' + '
💳
Mastercardماستركارد
' + '
Apple Payأبل باي
' + '
🟣
Tabbyتابي
' + '
🟡
Tamaraتمارا
' + '
' + '
%
قسّم فاتورتك على 4 دفعات بدون فوائد مع تابي وتمارامتوافق مع أحكام الشريعة - موافقة فورية
' + '
tabbytamara
' + '
' + '
' + '
⚡
خدمة سريعةتسليم خلال 24 ساعة للخدمات المدرسية
' + '
💬
دعم واتساب مباشررقم جديد ' + PHONE + ' - رد فوري
' + '
🛡️
موثوق ومرخصمنصة أعمال + إحكام + رخصة فال العقارية
' + '
' + '
'; } /* ---------- Services catalogue ---------- */ function Services(root) { this.grid = root.querySelector('[data-lf-grid]'); this.filters = root.querySelector('[data-lf-filters]'); this.count = root.querySelector('[data-lf-count]'); this.search = root.querySelector('[data-lf-search]'); this.products = []; this.cat = ''; this.q = ''; } Services.prototype.load = function () { var all = []; var seen = {}; var self = this; // The storefront API pages with an opaque cursor taken from cursor.next. function page(cursor, n) { var params = { source: 'latest' }; if (cursor) params.cursor = cursor; return salla.api.product.fetch(params).then(function (res) { var items = (res && res.data) || []; var fresh = items.filter(function (p) { return !seen[p.id] && (seen[p.id] = true); }); all = all.concat(fresh); var next = res && res.cursor && res.cursor.next; if (next && fresh.length && n < 20) { return page(new URL(next, location.origin).searchParams.get('cursor'), n + 1); } }).catch(function () {}); } return page(null, 1).then(function () { // "latest" is newest first; keep the order in which services were added. all.reverse(); var rank = function (n) { var i = CATEGORY_ORDER.indexOf(n); return i === -1 ? 99 : i; }; self.products = all.map(function (p, i) { return { p: p, i: i }; }) .sort(function (a, b) { return rank(a.p.category && a.p.category.name) - rank(b.p.category && b.p.category.name) || a.i - b.i; }) .map(function (x) { return x.p; }); }); }; Services.prototype.init = function () { var self = this; return this.load().then(function () { self.renderFilters(); self.render(); self.bind(); }); }; Services.prototype.renderFilters = function () { var names = []; this.products.forEach(function (p) { var n = p.category && p.category.name; if (n && names.indexOf(n) === -1) names.push(n); }); names.sort(function (a, b) { var ra = CATEGORY_ORDER.indexOf(a), rb = CATEGORY_ORDER.indexOf(b); return (ra === -1 ? 99 : ra) - (rb === -1 ? 99 : rb); }); this.filters.innerHTML = '' + names.map(function (n) { return ''; }).join(''); }; Services.prototype.setCat = function (cat) { var self = this; this.cat = cat || ''; this.filters.querySelectorAll('.lf-chip').forEach(function (c) { c.classList.toggle('is-active', c.dataset.cat === self.cat); }); this.render(); }; Services.prototype.bind = function () { var self = this; this.filters.addEventListener('click', function (e) { var chip = e.target.closest('.lf-chip'); if (chip) self.setCat(chip.dataset.cat); }); var input = this.search.querySelector('input'); input.addEventListener('input', function () { self.q = input.value.trim(); self.render(); }); this.search.addEventListener('submit', function (e) { e.preventDefault(); self.q = input.value.trim(); self.render(); document.getElementById('lf-services').scrollIntoView({ behavior: 'smooth' }); }); document.querySelectorAll('[data-lf-cat]').forEach(function (a) { a.addEventListener('click', function () { self.setCat(a.dataset.lfCat); }); }); }; Services.prototype.render = function () { var self = this; var q = this.q.toLowerCase(); var items = this.products.filter(function (p) { if (self.cat && (!p.category || p.category.name !== self.cat)) return false; return !q || (p.name + ' ' + plain(p.description) + ' ' + (p.category ? p.category.name : '')).toLowerCase().indexOf(q) !== -1; }); this.count.textContent = '📦 عرض ' + items.length + ' من ' + this.products.length + ' خدمة'; this.grid.innerHTML = items.length ? items.map(function (p) { return self.card(p); }).join('') : '

لا توجد خدمات مطابقة لبحثك.

'; }; Services.prototype.price = function (p) { var full = plain(p.description); if (!Number(p.price)) { var pct = full.match(/\d+(\.\d+)?%/); return pct ? 'عمولة ' + pct[0] : 'حسب الطلب'; } var amount = salla.money(p.is_on_sale ? p.sale_price : p.price); return /السعر شهري/.test(full) ? amount + ' / شهري' : amount; }; Services.prototype.card = function (p) { var desc = p.subtitle || firstLine(p.description); var img = p.image && p.image.url; return '
' + '
' + '' + (img ? '' : '') + '' + '
' + (p.promotion_title ? '' + esc(p.promotion_title) + '' : '') + (p.category && p.category.name ? '' + esc(p.category.name) + '' : '') + '
' + '
' + '

' + esc(p.name) + '

' + '

' + esc(desc) + '

' + '
' + '
' + this.price(p) + 'شامل الضريبة
' + '🛒 أضف للسلة' + '
' + '
'; }; /* ---------- Mount ---------- */ function mount() { if (document.body.classList.contains('lf-active')) return; document.body.classList.add('lf-active'); var head = document.createElement('div'); head.className = 'lf-chrome-header'; head.innerHTML = headerHTML(); var raedHeader = document.querySelector('.store-header'); (raedHeader ? raedHeader.parentNode : document.body).insertBefore(head, raedHeader || document.body.firstChild); var foot = document.createElement('footer'); foot.className = 'store-footer lf-footer'; foot.innerHTML = footerHTML(); var raedFooter = document.querySelector('.store-footer'); if (raedFooter) raedFooter.parentNode.insertBefore(foot, raedFooter.nextSibling); else document.body.appendChild(foot); if (home()) { var main = document.getElementById('main-content'); if (main) { document.body.classList.add('lf-home'); var root = document.createElement('div'); root.className = 'lf-home-root'; root.innerHTML = homeHTML(); main.insertBefore(root, main.firstChild); new Services(root).init(); } } } function whenReady(fn) { var tries = 0; (function wait() { if (window.salla && salla.config && salla.config.get('page.slug') && salla.api) return fn(); if (++tries < 100) setTimeout(wait, 100); })(); } if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', function () { whenReady(mount); }); else whenReady(mount); })();