
{"id":347,"date":"2025-07-21T05:05:39","date_gmt":"2025-07-21T02:05:39","guid":{"rendered":"https:\/\/hantema.com\/eders\/?page_id=347"},"modified":"2025-07-28T09:00:47","modified_gmt":"2025-07-28T06:00:47","slug":"sinav","status":"publish","type":"page","link":"https:\/\/hantema.com\/eders\/sinav\/","title":{"rendered":"S\u0131nav"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"347\" class=\"elementor elementor-347\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-88c0bdc elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"88c0bdc\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3e5eb66\" data-id=\"3e5eb66\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-860cd1a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"860cd1a\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0645f40\" data-id=\"0645f40\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-52127f0 elementor-widget elementor-widget-shortcode\" data-id=\"52127f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div id=\"edst-root\" data-test=\"1\" data-nonce=\"393b082bdb\">\n  <div class=\"edst-start\">\n    <div class=\"edst-card\">\n      <div class=\"edst-title\"><i class=\"fa-solid fa-pen-nib\"><\/i> S\u0131nava Giri\u015f<\/div>\n      <div class=\"edst-row\">\n        <label>Ad Soyad<\/label>\n        <input type=\"text\" id=\"edstName\" placeholder=\"\u00d6\u011frenci ad\u0131 soyad\u0131\">\n      <\/div>\n      <div class=\"edst-row\">\n        <label>S\u0131n\u0131f<\/label>\n        <select id=\"edstGrade\"><option value=\"5\">5. S\u0131n\u0131f<\/option><option value=\"6\">6. S\u0131n\u0131f<\/option><option value=\"7\">7. S\u0131n\u0131f<\/option><option value=\"8\">8. S\u0131n\u0131f<\/option><option value=\"9\">9. S\u0131n\u0131f<\/option><option value=\"10\">10. S\u0131n\u0131f<\/option><option value=\"11\">11. S\u0131n\u0131f<\/option><option value=\"12\">12. S\u0131n\u0131f<\/option><\/select>\n      <\/div>\n      <button id=\"edstStart\" class=\"edst-btn\"><i class=\"fa-solid fa-play\"><\/i> Ba\u015flat<\/button>\n      <div class=\"edst-tip\">Not: S\u00fcre s\u0131nav ba\u015flar ba\u015flamaz geri sayar. S\u00fcre doldu\u011funda s\u0131nav otomatik biter.<\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"edst-exam dnone\" id=\"edstExam\">\n    <div class=\"sinav-header\" id=\"edstHeader\"><i class=\"fa-solid fa-pen-nib\"><\/i> S\u0131nav<\/div>\n\n    <!-- Sol-orta sabit geri say\u0131m -->\n    <div class=\"sinav-sayac\" id=\"edstTimerBox\" aria-live=\"polite\">\n      <i class=\"fa-solid fa-hourglass-half\"><\/i> <span id=\"edstTimer\">00:00:00<\/span>\n    <\/div>\n\n    <div class=\"eders-sinav-kitapcik\" id=\"edstContainer\"><\/div>\n\n    <button class=\"edst-finish-btn\" id=\"edstFinish\"><i class=\"fa-solid fa-flag-checkered\"><\/i> S\u0131nav\u0131 Bitir<\/button>\n\n    <div class=\"edst-result dnone\" id=\"edstResult\"><\/div>\n  <\/div>\n<\/div>\n\n<style>\n#edst-root, #edst-root *{box-sizing:border-box;}\n#edst-root a, #edst-root button{color:#111 !important;text-decoration:none !important;}\n#edst-root .edst-finish-btn, #edst-root .edst-finish-btn *, #edst-root .edst-finish-btn i{\n  color:#fff !important; text-decoration:none !important;\n}\n\n.edst-start{display:flex;justify-content:center;padding:40px 20px;}\n.edst-card{width:100%;max-width:640px;background:#fff;border-radius:20px;box-shadow:0 4px 24px rgba(0,0,0,.06);padding:28px;}\n.edst-title{font-size:20px;font-weight:800;margin-bottom:16px;display:flex;gap:8px;color:#001a8c;align-items:center;}\n.edst-row{display:flex;flex-direction:column;gap:8px;margin-bottom:14px;}\n.edst-row input,.edst-row select{padding:12px 14px;border:1px solid #ccc;border-radius:12px;outline:none;}\n.edst-row input:focus,.edst-row select:focus{border-color:#4da6ff;box-shadow:0 0 0 3px rgba(77,166,255,.25);}\n.edst-btn{width:100%;padding:14px;border:none;border-radius:14px;font-weight:800;background:#a5f75e !important;color:#000 !important;cursor:pointer;transition:box-shadow .2s;}\n.edst-btn:hover{box-shadow:0 6px 18px rgba(0,0,0,.08) !important;}\n.edst-tip{margin-top:10px;color:#555;font-size:14px}\n\nbody.edst-no-scroll{background:#f0f2ff;}\n.sinav-header{\n  background:#fff;padding:10px 20px;font-size:16px;font-weight:700;color:#001a8c;border-bottom:1px solid #e0e0e0;\n  display:flex;align-items:center;gap:8px;position:sticky;top:0;z-index:10;\n}\n\n\/* Sol-orta saya\u00e7 *\/\n.sinav-sayac{\n  position:fixed;left:18px;top:50%;transform:translateY(-50%);\n  background:#001a8c;color:#fff;font-weight:700;font-size:20px;line-height:1;\n  padding:14px 18px;border-radius:16px;box-shadow:0 8px 26px rgba(0,0,0,.15);\n  z-index:999;border:1px solid #001a8c;pointer-events:none;\n}\n.sinav-sayac i{margin-right:8px;color:#fff !important;}\n\n\/* Kitap\u00e7\u0131k & \u015f\u0131klar *\/\n.eders-sinav-kitapcik{max-width:750px;margin:30px auto;padding:20px;}\n.soru-kutu{background:#fff;border-radius:12px;padding:20px;margin-bottom:25px;box-shadow:0 4px 20px #001a8c0d;}\n.soru-numara{font-size:18px;font-weight:700;margin-bottom:10px;color:#001a8c;}\n.soru-metin{font-size:16px;margin-bottom:12px;line-height:1.6;color:#111;}\n.soru-gorsel{text-align:center;margin-bottom:15px;}\n.soru-gorsel img{max-width:100%;border-radius:10px;box-shadow:0 0 10px #ddd;}\n.soru-siklar label{\n  display:block;background:#f4f4f4;padding:10px 12px;border-radius:8px;margin-bottom:10px;cursor:pointer;transition:.2s;border:1px solid #e5e5e5 !important;\n}\n.soru-siklar input[type=\"radio\"]{margin-right:8px;transform:scale(1.1);}\n.soru-siklar label:hover{background:#c8ff4d !important;color:#001a8c !important;border-color:#9ae33a !important;}\n.soru-siklar label.secilen{background:#e8ffd0 !important;border-color:#9ae33a !important;}\n\n\/* Bitir \u2013 yaz\u0131 beyaz, link rengi miras almaz *\/\n.edst-finish-btn{\n  position:fixed;right:24px;bottom:24px;background:#001a8c !important;color:#fff !important;border:none;padding:14px 18px;border-radius:14px;\n  font-weight:700;box-shadow:0 8px 26px rgba(0,26,140,.25);cursor:pointer;z-index:1000;\n}\n.edst-finish-btn:hover{box-shadow:0 10px 30px rgba(0,26,140,.35) !important;}\n\n.edst-result{max-width:750px;margin:20px auto;background:#f6fff0;border:1px solid #d6f6b0;border-radius:16px;padding:18px;color:#111;font-weight:600;}\n.dnone{display:none;}\n\n\/* Mobil *\/\n@media (max-width:1024px){\n  .sinav-sayac{left:12px;font-size:18px;padding:12px 16px;border-radius:14px;}\n}\n@media (max-width:640px){\n  .sinav-sayac{left:8px;font-size:16px;padding:10px 14px;border-radius:12px;box-shadow:0 6px 18px rgba(0,0,0,.15);}\n  .edst-finish-btn{right:16px;bottom:16px;padding:12px 16px;border-radius:12px;}\n  .eders-sinav-kitapcik{padding:16px;}\n}\n<\/style>\n\n<script>\n(function(){\n  const root = document.getElementById('edst-root');\n  const ajax = \"https:\/\/hantema.com\/eders\/wp-admin\/admin-ajax.php\";\n  const nonce= root.dataset.nonce;\n  const testId = parseInt(root.dataset.test||0,10);\n\n  const startWrap = document.querySelector('.edst-start');\n  const inpName   = document.getElementById('edstName');\n  const selGrade  = document.getElementById('edstGrade');\n  const btnStart  = document.getElementById('edstStart');\n\n  const examWrap  = document.getElementById('edstExam');\n  const headerEl  = document.getElementById('edstHeader');\n  const timerEl   = document.getElementById('edstTimer');\n  const cont      = document.getElementById('edstContainer');\n  const btnFinish = document.getElementById('edstFinish');\n  const resBox    = document.getElementById('edstResult');\n\n  let cfg = {name:'', grade:6, test_id:testId};\n  let meta = {title:'S\u0131nav', duration:0, total:0};\n  let loaded=0, batch=10, loading=false, done=false;\n  let answers = {};\n  let elapsed=0, tmr=null, remain=0;\n\n  function fmt(sec){\n    const h=(''+Math.floor(sec\/3600)).padStart(2,'0');\n    const m=(''+Math.floor((sec%3600)\/60)).padStart(2,'0');\n    const s=(''+(sec%60)).padStart(2,'0');\n    return `${h}:${m}:${s}`;\n  }\n  function startTimer(){\n    remain = meta.duration;\n    tmr=setInterval(()=>{\n      if(remain<=0){ clearInterval(tmr); finish(true); return; }\n      remain--; elapsed++; timerEl.textContent = fmt(remain);\n    },1000);\n    timerEl.textContent = fmt(remain);\n  }\n\n  async function post(fd){ const r=await fetch(ajax,{method:'POST',body:fd}); return await r.json(); }\n\n  function renderQuestion(q, index){\n    const wrap=document.createElement('div'); wrap.className='soru-kutu';\n    let html = `<div class=\"soru-numara\">${index}. Soru<\/div>`;\n    html += `<div class=\"soru-metin\">${q.text}<\/div>`;\n    if(q.image_url){ html += `<div class=\"soru-gorsel\"><img decoding=\"async\" src=\"${q.image_url}\" alt=\"Soru G\u00f6rseli\"><\/div>`; }\n    html += `<div class=\"soru-siklar\">`;\n    q.choices.forEach((c,i)=>{\n      const checked = (answers[q.id]===i) ? 'checked' : '';\n      const selCls  = (answers[q.id]===i) ? 'secilen' : '';\n      html += `<label class=\"${selCls}\"><input type=\"radio\" name=\"q${q.id}\" value=\"${i}\" ${checked}> ${String.fromCharCode(65+i)}) ${c}<\/label>`;\n    });\n    html += `<\/div>`;\n    wrap.innerHTML = html;\n    wrap.querySelectorAll('input[type=\"radio\"]').forEach(r=>{\n      r.addEventListener('change', (e)=>{\n        const val=parseInt(e.target.value,10);\n        answers[q.id]=val;\n        wrap.querySelectorAll('label').forEach(l=>l.classList.remove('secilen'));\n        e.target.closest('label').classList.add('secilen');\n      });\n    });\n    cont.appendChild(wrap);\n  }\n\n  async function loadMore(){\n    if(loading||done) return;\n    if(loaded>=meta.total) return;\n    loading=true;\n    const fd=new FormData();\n    fd.append('action','edst_get_questions'); fd.append('nonce',nonce);\n    fd.append('test_id', cfg.test_id); fd.append('offset', loaded); fd.append('limit', batch);\n    const j=await post(fd);\n    const arr=j.questions||[];\n    arr.forEach((q,i)=>renderQuestion(q, loaded+i+1));\n    window._edst_allQuestions = (window._edst_allQuestions||[]).concat(arr);\n    loaded+=arr.length; loading=false;\n    if(loaded>=meta.total) done=true;\n  }\n\n  async function startExam(){\n    const fd=new FormData();\n    fd.append('action','edst_get_test'); fd.append('nonce',nonce);\n    fd.append('test_id', cfg.test_id); fd.append('limit', batch);\n    const j=await post(fd);\n    meta.title=j.title||'S\u0131nav'; meta.duration=parseInt(j.duration||0,10); meta.total=parseInt(j.total||0,10);\n    headerEl.innerHTML=`<i class=\"fa-solid fa-pen-nib\"><\/i> ${meta.title}`;\n    document.body.classList.add('edst-no-scroll');\n\n    cont.innerHTML=''; loaded=0; done=false; answers={}; elapsed=0; window._edst_allQuestions=[];\n    (j.questions||[]).forEach((q,i)=>renderQuestion(q,i+1));\n    loaded=(j.questions||[]).length; window._edst_allQuestions=j.questions||[];\n\n    startTimer(); setTimeout(()=>loadMore(),200);\n  }\n\n  function compute(){\n    let correct=0, wrong=0, blank=0;\n    (window._edst_allQuestions||[]).forEach(q=>{\n      const sel=answers[q.id];\n      if(sel==null) blank++;\n      else if(sel===q.correct_index) correct++;\n      else wrong++;\n    });\n    const net=Math.max(0, correct - (wrong\/4));\n    return {correct, wrong, blank, net:Number(net.toFixed(2))};\n  }\n\n  async function finish(timeout=false){\n    if(tmr){ clearInterval(tmr); tmr=null; }\n    if(!window._edst_allQuestions || window._edst_allQuestions.length<meta.total){\n      const fd=new FormData();\n      fd.append('action','edst_get_questions'); fd.append('nonce',nonce);\n      fd.append('test_id', cfg.test_id); fd.append('offset', 0); fd.append('limit', meta.total||9999);\n      const j=await post(fd); window._edst_allQuestions=j.questions||[];\n    }\n    const s=compute();\n    resBox.classList.remove('dnone');\n    resBox.textContent=`Ad: ${cfg.name||'Ziyaret\u00e7i'} \u2022 S\u0131n\u0131f: ${cfg.grade} \u2022 Do\u011fru: ${s.correct} \u2022 Yanl\u0131\u015f: ${s.wrong} \u2022 Bo\u015f: ${s.blank} \u2022 Net: ${s.net} \u2022 S\u00fcre: ${elapsed}s`;\n\n    const fd2=new FormData();\n    fd2.append('action','edst_submit_result'); fd2.append('nonce',nonce);\n    fd2.append('test_id', cfg.test_id); fd2.append('name', cfg.name||'Ziyaret\u00e7i'); fd2.append('grade', cfg.grade);\n    fd2.append('correct', s.correct); fd2.append('wrong', s.wrong); fd2.append('blank', s.blank);\n    fd2.append('net', s.net); fd2.append('duration', elapsed);\n    fd2.append('answers', JSON.stringify(answers));\n    post(fd2);\n\n    examWrap.querySelectorAll('input[type=\"radio\"]').forEach(r=>r.disabled=true);\n    btnFinish.disabled=true;\n    if(timeout) alert('S\u00fcre doldu. S\u0131nav kaydedildi.');\n    window.removeEventListener('scroll', onScroll);\n  }\n\n  function onScroll(){\n    if(window.innerHeight + window.scrollY >= document.body.offsetHeight - 250){ loadMore(); }\n  }\n\n  btnStart.addEventListener('click', async ()=>{\n    cfg.name=inpName.value.trim(); cfg.grade=parseInt(selGrade.value,10);\n    startWrap.classList.add('dnone'); examWrap.classList.remove('dnone');\n    await startExam();\n  });\n  btnFinish.addEventListener('click', ()=>{ if(confirm('S\u0131nav\u0131 bitirmek istiyor musun?')) finish(false); });\n  window.addEventListener('scroll', onScroll);\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-347","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/hantema.com\/eders\/wp-json\/wp\/v2\/pages\/347","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hantema.com\/eders\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/hantema.com\/eders\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/hantema.com\/eders\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hantema.com\/eders\/wp-json\/wp\/v2\/comments?post=347"}],"version-history":[{"count":4,"href":"https:\/\/hantema.com\/eders\/wp-json\/wp\/v2\/pages\/347\/revisions"}],"predecessor-version":[{"id":627,"href":"https:\/\/hantema.com\/eders\/wp-json\/wp\/v2\/pages\/347\/revisions\/627"}],"wp:attachment":[{"href":"https:\/\/hantema.com\/eders\/wp-json\/wp\/v2\/media?parent=347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}