93 lines
4.0 KiB
JavaScript
93 lines
4.0 KiB
JavaScript
(function () {
|
||
const API_BASE = 'https://marmarislocal.com';
|
||
|
||
// Sayfadaki tüm widget container'larını bul
|
||
const containers = document.querySelectorAll('[data-marmaris-widget]');
|
||
|
||
containers.forEach(function (container) {
|
||
// data-marmaris-widget = marker (boolean), data-neighborhood = bölge slug (opsiyonel)
|
||
const neighborhood = container.dataset.neighborhood || '';
|
||
const category = container.dataset.category || '';
|
||
const limit = parseInt(container.dataset.limit || '3', 10);
|
||
const lang = container.dataset.lang || document.documentElement.lang || 'tr';
|
||
|
||
container.innerHTML = '<div style="font-family:sans-serif;padding:16px;opacity:0.4;font-size:13px;">Yükleniyor...</div>';
|
||
|
||
var params = new URLSearchParams();
|
||
if (neighborhood) params.set('neighborhood', neighborhood);
|
||
if (category) params.set('category', category);
|
||
|
||
fetch(API_BASE + '/api/widget/nearby?' + params)
|
||
.then(function (res) {
|
||
if (!res.ok) throw new Error('fetch failed');
|
||
return res.json();
|
||
})
|
||
.then(function (data) {
|
||
// API { listings: [...] } formatında dönüyor
|
||
var items = (data.listings || []).slice(0, limit);
|
||
if (!items || items.length === 0) {
|
||
container.innerHTML = '';
|
||
return;
|
||
}
|
||
render(container, items, lang, neighborhood);
|
||
})
|
||
.catch(function () {
|
||
// Sessizce gizle — kırık widget partner sitesinde kötü görünür
|
||
container.innerHTML = '';
|
||
});
|
||
});
|
||
|
||
function getName(item, lang) {
|
||
if (lang === 'en' && item.nameEn) return item.nameEn;
|
||
if (lang === 'ru' && item.nameRu) return item.nameRu;
|
||
return item.name;
|
||
}
|
||
|
||
function render(container, items, lang, neighborhood) {
|
||
var labels = {
|
||
tr: { title: 'Bölgede Öneriler', by: 'Marmaris Local tarafından' },
|
||
en: { title: 'Recommended Nearby', by: 'by Marmaris Local' },
|
||
ru: { title: 'Рекомендации поблизости', by: 'от Marmaris Local' }
|
||
};
|
||
var t = labels[lang] || labels.tr;
|
||
|
||
var cards = items.map(function (item) {
|
||
var href = API_BASE + '/tr/' + item.categorySlug + '/' + item.slug + '?utm_source=widget&utm_medium=partner';
|
||
var name = getName(item, lang);
|
||
var img = item.coverImage
|
||
? '<img src="' + item.coverImage + '" alt="" style="width:44px;height:44px;border-radius:8px;object-fit:cover;flex-shrink:0;">'
|
||
: '';
|
||
var meta = item.categoryName + (item.rating ? ' · ★ ' + Number(item.rating).toFixed(1) : '');
|
||
|
||
return '<a href="' + href + '" target="_blank" rel="noopener"'
|
||
+ ' style="display:flex;gap:10px;align-items:center;text-decoration:none;color:inherit;padding:8px;border-radius:10px;transition:background .15s;"'
|
||
+ ' onmouseover="this.style.background=\'rgba(46,156,154,0.08)\'"'
|
||
+ ' onmouseout="this.style.background=\'transparent\'">'
|
||
+ img
|
||
+ '<div style="min-width:0;">'
|
||
+ '<div style="font-weight:600;font-size:13.5px;color:#123238;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">' + name + '</div>'
|
||
+ '<div style="font-size:12px;color:#4F7C93;margin-top:2px;">' + meta + '</div>'
|
||
+ '</div>'
|
||
+ '</a>';
|
||
}).join('');
|
||
|
||
container.innerHTML = '<div style="'
|
||
+ 'font-family:-apple-system,BlinkMacSystemFont,\'Segoe UI\',Roboto,Helvetica,Arial,sans-serif;'
|
||
+ 'border:1px solid rgba(18,50,56,0.1);'
|
||
+ 'border-radius:14px;'
|
||
+ 'padding:18px;'
|
||
+ 'background:#FBFAF6;'
|
||
+ 'max-width:100%;'
|
||
+ 'box-sizing:border-box;'
|
||
+ '">'
|
||
+ '<div style="display:flex;justify-content:space-between;align-items:baseline;margin-bottom:14px;">'
|
||
+ '<h3 style="margin:0;font-size:15px;font-weight:700;color:#123238;">' + t.title + '</h3>'
|
||
+ '<a href="' + API_BASE + '/tr" target="_blank" rel="noopener" style="font-size:11px;color:#2E9C9A;text-decoration:none;">' + t.by + '</a>'
|
||
+ '</div>'
|
||
+ '<div style="display:flex;flex-direction:column;gap:4px;">'
|
||
+ cards
|
||
+ '</div>'
|
||
+ '</div>';
|
||
}
|
||
})();
|