PageSourceSearch

https://www.aloyemek.com/assets/alotema/alotema.js?v=1789929154

js aloyemek.com collected 2026-09-24 14:10:51 UTC 9,566 bytes, 249 lines download raw bytes

1/* ALOYEMEK TEMA 1.0.0 — kucuk arayuz islevleri (18 Eylul 2026)
2   Yalniz eklenti acikken yuklenir. Vue koklerinin icine dokunmaz;
3   olaylar belge duzeyinde delegasyonla baglanir. */
4(function () {
5  "use strict";
6
7  /* duyuru bandi: kapatinca bu tarayicida bir gun gorunmez */
8  var ANAHTAR = "alo_duyuru_kapali";
9
10  function bugun() {
11    var t = new Date();
12    return t.getFullYear() + "-" + (t.getMonth() + 1) + "-" + t.getDate();
13  }
14
15  function duyuruBasla() {
16    var bant = document.getElementById("alo-duyuru");
17    if (!bant) return;
18    try {
19      if (window.localStorage && localStorage.getItem(ANAHTAR) === bugun()) {
20        bant.style.display = "none";
21      }
22    } catch (e) { /* ozel pencere: bant acik kalir */ }
23  }
24
25  document.addEventListener("click", function (olay) {
26    var dugme = olay.target.closest ? olay.target.closest(".alo-duyuru-kapat") : null;
27    if (!dugme) return;
28    var bant = document.getElementById("alo-duyuru");
29    if (bant) bant.style.display = "none";
30    try { if (window.localStorage) localStorage.setItem(ANAHTAR, bugun()); } catch (e) {}
31  });
32
33
34  /* ------------------------------------------------------------------
35     ARAMA PANELI — ust bardaki arama kutusuna basinca acilir.
36     Sitenin Vue koklerine dokunmaz; panel body'nin sonuna eklenir.
37     Icerik: son aramalar (bu tarayici), populer aramalar, mutfaklar (/api/CuisineList2)
38     ------------------------------------------------------------------ */
39  var ALO = window.ALO_TEMA || {};
40  var GECMIS = "alo_son_aramalar";
41
42  function gecmisOku() {
43    try {
44      var ham = window.localStorage ? localStorage.getItem(GECMIS) : null;
45      return ham ? JSON.parse(ham) : [];
46    } catch (e) { return []; }
47  }
48
49  function gecmisYaz(terim) {
50    try {
51      if (!window.localStorage || !terim) return;
52      var liste = gecmisOku().filter(function (x) { return x !== terim; });
53      liste.unshift(terim);
54      localStorage.setItem(GECMIS, JSON.stringify(liste.slice(0, 6)));
55    } catch (e) {}
56  }
57
58  function kacis(m) {
59    return String(m).replace(/[&<>"']/g, function (k) {
60      return { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" }[k];
61    });
62  }
63
64  function aramayaGit(terim) {
65    terim = (terim || "").trim();
66    if (!terim) return;
67    gecmisYaz(terim);
68    window.location.href = ALO.arama_url + "?q=" + encodeURIComponent(terim);
69  }
70
71  var panel = null, mutfaklar = null, mutfakIstek = false;
72
73  function panelKur() {
74    if (panel) return panel;
75    panel = document.createElement("div");
76    panel.className = "alo-arama-katman";
77    panel.innerHTML =
78      '<div class="alo-arama-ortu"></div>' +
79      '<div class="alo-arama-panel" role="dialog" aria-modal="true">' +
80        '<div class="alo-arama-satir">' +
81          '<span class="alo-arama-ikon"></span>' +
82          '<input type="search" class="alo-arama-giris" placeholder="' + kacis(ALO.ph || "") + '" autocomplete="off">' +
83          '<button type="button" class="alo-arama-git">' + kacis(ALO.ara || "Ara") + '</button>' +
84        '</div>' +
85        '<div class="alo-arama-icerik">' +
86          '<div class="alo-arama-bolum alo-arama-gecmis" hidden>' +
87            '<h4>' + kacis(ALO.son || "") + '</h4><div class="alo-arama-cipler"></div>' +
88          '</div>' +
89          '<div class="alo-arama-bolum">' +
90            '<h4>' + kacis(ALO.populer || "") + '</h4>' +
91            '<div class="alo-arama-cipler alo-arama-populer"></div>' +
92          '</div>' +
93          '<div class="alo-arama-bolum alo-arama-mutfakbolum" hidden>' +
94            '<h4>' + kacis(ALO.mutfaklar || "") + '</h4>' +
95            '<div class="alo-arama-izgara"></div>' +
96          '</div>' +
97        '</div>' +
98      '</div>';
99    document.body.appendChild(panel);
100
101    // populer aramalar
102    var pop = panel.querySelector(".alo-arama-populer");
103    (ALO.populer_liste || []).forEach(function (t) {
104      var a = document.createElement("button");
105      a.type = "button"; a.className = "alo-arama-cip"; a.textContent = t;
106      a.addEventListener("click", function () { aramayaGit(t); });
107      pop.appendChild(a);
108    });
109
110    panel.querySelector(".alo-arama-ortu").addEventListener("click", panelKapat);
111    panel.querySelector(".alo-arama-git").addEventListener("click", function () {
112      aramayaGit(panel.querySelector(".alo-arama-giris").value);
113    });
114    panel.querySelector(".alo-arama-giris").addEventListener("keydown", function (o) {
115      if (o.key === "Enter") aramayaGit(this.value);
116      if (o.key === "Escape") panelKapat();
117    });
118    return panel;
119  }
120
121  function gecmisBas() {
122    var kutu = panel.querySelector(".alo-arama-gecmis"),
123        yer = kutu.querySelector(".alo-arama-cipler"),
124        liste = gecmisOku();
125    yer.innerHTML = "";
126    if (!liste.length) { kutu.hidden = true; return; }
127    kutu.hidden = false;
128    liste.forEach(function (t) {
129      var a = document.createElement("button");
130      a.type = "button"; a.className = "alo-arama-cip alo-arama-cip-gecmis"; a.textContent = t;
131      a.addEventListener("click", function () { aramayaGit(t); });
132      yer.appendChild(a);
133    });
134  }
135
136  function mutfakBas() {
137    if (!mutfaklar || !mutfaklar.length) return;
138    var bolum = panel.querySelector(".alo-arama-mutfakbolum"),
139        yer = bolum.querySelector(".alo-arama-izgara");
140    if (yer.childElementCount) { bolum.hidden = false; return; }
141    mutfaklar.forEach(function (m) {
142      var a = document.createElement("a");
143      a.className = "alo-arama-mutfak"; a.href = m.url;
144      a.innerHTML = '<span class="alo-arama-mutfak-resim"><img src="' + kacis(m.featured_image) + '" alt="" loading="lazy"></span>' +
145                    '<span class="alo-arama-mutfak-ad">' + kacis(m.cuisine_name) + "</span>";
146      yer.appendChild(a);
147    });
148    bolum.hidden = false;
149  }
150
151  function mutfakGetir() {
152    if (mutfaklar || mutfakIstek || !ALO.mutfak_url) return;
153    mutfakIstek = true;
154    fetch(ALO.mutfak_url, { credentials: "same-origin" })
155      .then(function (y) { return y.json(); })
156      .then(function (v) {
157        mutfaklar = (v && v.details) ? v.details : [];
158        mutfakBas();
159      })
160      .catch(function () { mutfakIstek = false; });
161  }
162
163  function panelAc() {
164    panelKur();
165    gecmisBas();
166    mutfakGetir();
167    mutfakBas();
168    panel.classList.add("acik");
169    document.body.classList.add("alo-kilit");
170    setTimeout(function () { panel.querySelector(".alo-arama-giris").focus(); }, 60);
171  }
172
173  function panelKapat() {
174    if (!panel) return;
175    panel.classList.remove("acik");
176    document.body.classList.remove("alo-kilit");
177  }
178
179  document.addEventListener("click", function (olay) {
180    if (!olay.target.closest) return;
181    if (olay.target.closest(".alo-arama-hap")) {
182      olay.preventDefault();
183      panelAc();
184    }
185  });
186  document.addEventListener("keydown", function (o) { if (o.key === "Escape") panelKapat(); });
187
188  if (document.readyState === "loading") {
189    document.addEventListener("DOMContentLoaded", duyuruBasla);
190  } else duyuruBasla();
191})();
192
193/* 20 Eylul 2026: ust sekme seridi — parmakla kaydirirken yanlislikla sekmeye
194   gidilmesin. Kaydirma basladiginda serit "alo-kayiyor" sinifini alir
195   (CSS pointer-events:none), kaydirma bitince kalkar. */
196(function(){
197  var serit = document.querySelector('.alo-ust-sekmeler');
198  if(!serit) return;
199  var zamanlayici = null, baslangic = 0, kaydi = false;
200  serit.addEventListener('touchstart', function(){ baslangic = serit.scrollLeft; kaydi = false; }, {passive:true});
201  serit.addEventListener('scroll', function(){
202    if(Math.abs(serit.scrollLeft - baslangic) > 6){ kaydi = true; serit.classList.add('alo-kayiyor'); }
203    clearTimeout(zamanlayici);
204    zamanlayici = setTimeout(function(){ serit.classList.remove('alo-kayiyor'); }, 220);
205  }, {passive:true});
206  serit.addEventListener('click', function(e){
207    if(kaydi){ e.preventDefault(); e.stopPropagation(); kaydi = false; }
208  }, true);
209})();
210
211/* 20 Eylul 2026 (kullanici: "mobilde elle kaydirma yapiyorum zorla gidiyor"):
212   Sitenin Swiper seritleri (mutfaklar, restoran listeleri) freeMode KAPALI kuruluyor;
213   parmak birakilinca serit en yakin slayta zorla oturuyor ve hareket dirençli hissettiriyor.
214   Telefonda freeMode + momentum aciliyor, surtunme dusuruluyor. Masaustunde dokunulmuyor
215   (ok dugmeleriyle slayt slayt gitmek orada dogru davranis).
216   Swiper ornekleri Vue render'indan sonra olustugu icin belirli araliklarla taranir. */
217(function(){
218  if(!window.matchMedia || !window.matchMedia("(max-width: 991.98px)").matches) return;
219
220  function akiciYap(el){
221    var s = el && el.swiper;
222    if(!s || s.destroyed || el.getAttribute("data-alo-akici") === "1") return;
223    try {
224      if(s.params.freeMode && typeof s.params.freeMode === "object"){
225        s.params.freeMode.enabled = true;
226        s.params.freeMode.momentum = true;
227        s.params.freeMode.momentumRatio = 1.2;
228        s.params.freeMode.momentumBounce = false;
229      } else {
230        s.params.freeMode = true;
231      }
232      s.params.touchRatio = 1.4;
233      s.params.resistanceRatio = 0.25;
234      s.params.followFinger = true;
235      s.update();
236      el.setAttribute("data-alo-akici", "1");
237    } catch(e){}
238  }
239
240  function tara(){ document.querySelectorAll(".swiper").forEach(akiciYap); }
241
242  var kalan = 20;                      /* ~10 sn: Vue listeleri sirayla gelir */
243  var sayac = setInterval(function(){
244    tara();
245    if(--kalan <= 0) clearInterval(sayac);
246  }, 500);
247  if(document.readyState === "loading") document.addEventListener("DOMContentLoaded", tara);
248  else tara();
249})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.