{"id":814,"date":"2026-07-10T04:29:22","date_gmt":"2026-07-10T02:29:22","guid":{"rendered":"https:\/\/autoposzt.hu\/?p=814"},"modified":"2026-07-10T06:57:57","modified_gmt":"2026-07-10T04:57:57","slug":"kdriu-vonalkod-olvaso","status":"publish","type":"post","link":"https:\/\/autoposzt.hu\/?p=814","title":{"rendered":"KDRI\u00dc &#8211; Vonalk\u00f3d olvas\u00f3"},"content":{"rendered":"\n\n\n<!DOCTYPE html>\n<html lang=\"hu\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n<meta name=\"theme-color\" content=\"#15191E\">\n<title>Vonalk\u00f3d k\u00fcld\u0151<\/title>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html5-qrcode\/2.3.8\/html5-qrcode.min.js\"><\/script>\n<style>\n  :root {\n    --bg: #EEF1F4;\n    --panel: #FFFFFF;\n    --ink: #15191E;\n    --ink-soft: #5A6470;\n    --line: #D6DCE2;\n    --amber: #FFB000;\n    --amber-ink: #1A1200;\n    --ok: #1E8A4C;\n    --err: #C7382E;\n    --mono: ui-monospace, \"SF Mono\", \"Cascadia Mono\", Consolas, monospace;\n    --sans: -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", sans-serif;\n  }\n  * { box-sizing: border-box; margin: 0; padding: 0; }\n  html, body { height: 100%; }\n  body {\n    font-family: var(--sans);\n    background: var(--bg);\n    color: var(--ink);\n    display: flex;\n    flex-direction: column;\n    max-width: 520px;\n    margin: 0 auto;\n    padding: 0 16px 24px;\n  }\n\n  \/* Fejl\u00e9c: vonalk\u00f3d-cs\u00edk mot\u00edvum *\/\n  header {\n    padding: 18px 0 14px;\n    border-bottom: 2px solid var(--ink);\n    margin-bottom: 18px;\n  }\n  .stripes {\n    height: 14px;\n    margin-bottom: 10px;\n    background: repeating-linear-gradient(\n      90deg,\n      var(--ink) 0 3px, transparent 3px 6px,\n      var(--ink) 6px 8px, transparent 8px 14px,\n      var(--ink) 14px 20px, transparent 20px 23px,\n      var(--ink) 23px 25px, transparent 25px 32px\n    );\n  }\n  h1 { font-size: 17px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; }\n  header p { font-size: 13px; color: var(--ink-soft); margin-top: 2px; }\n\n  .card {\n    background: var(--panel);\n    border: 1px solid var(--line);\n    border-radius: 10px;\n    padding: 16px;\n    margin-bottom: 14px;\n  }\n\n  label {\n    display: block;\n    font-size: 11px;\n    font-weight: 700;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: var(--ink-soft);\n    margin-bottom: 6px;\n  }\n\n  \/* Keres\u0151 \/ kamera *\/\n  #reader-wrap {\n    position: relative;\n    border-radius: 10px;\n    overflow: hidden;\n    background: #0B0E11;\n    display: none;\n  }\n  #reader-wrap.active { display: block; }\n  #reader { width: 100%; }\n  #reader video { width: 100% !important; display: block; }\n  .laser {\n    position: absolute;\n    left: 10%; right: 10%;\n    height: 2px;\n    background: var(--amber);\n    box-shadow: 0 0 8px var(--amber);\n    top: 20%;\n    animation: sweep 1.8s ease-in-out infinite alternate;\n    pointer-events: none;\n  }\n  @keyframes sweep { from { top: 22%; } to { top: 74%; } }\n  @media (prefers-reduced-motion: reduce) { .laser { animation: none; top: 48%; } }\n\n  .code-display {\n    font-family: var(--mono);\n    font-size: 22px;\n    font-weight: 600;\n    letter-spacing: 0.06em;\n    padding: 12px;\n    background: var(--bg);\n    border: 1px dashed var(--line);\n    border-radius: 8px;\n    min-height: 50px;\n    display: flex;\n    align-items: center;\n    word-break: break-all;\n    color: var(--ink);\n  }\n  .code-display.empty { color: var(--ink-soft); font-size: 14px; font-family: var(--sans); font-weight: 400; }\n\n  input[type=\"text\"], input[type=\"url\"], textarea {\n    width: 100%;\n    font-family: var(--sans);\n    font-size: 16px;\n    padding: 12px;\n    border: 1px solid var(--line);\n    border-radius: 8px;\n    background: var(--panel);\n    color: var(--ink);\n  }\n  textarea { resize: vertical; min-height: 72px; }\n  input:focus, textarea:focus, button:focus-visible, summary:focus-visible {\n    outline: 3px solid var(--amber);\n    outline-offset: 1px;\n  }\n\n  button {\n    width: 100%;\n    font-family: var(--sans);\n    font-size: 16px;\n    font-weight: 700;\n    padding: 15px;\n    border: none;\n    border-radius: 10px;\n    cursor: pointer;\n    letter-spacing: 0.02em;\n  }\n  .btn-primary { background: var(--amber); color: var(--amber-ink); }\n  .btn-primary:active { filter: brightness(0.92); }\n  .btn-secondary { background: var(--panel); color: var(--ink); border: 1.5px solid var(--ink); }\n  .btn-ghost { background: transparent; color: var(--ink-soft); font-weight: 600; padding: 10px; font-size: 14px; }\n  button:disabled { opacity: 0.45; cursor: not-allowed; }\n  .row { display: flex; gap: 10px; }\n  .row button { flex: 1; }\n  .mt { margin-top: 12px; }\n\n  .status {\n    display: none;\n    padding: 12px 14px;\n    border-radius: 8px;\n    font-size: 14px;\n    font-weight: 600;\n    margin-bottom: 14px;\n  }\n  .status.show { display: block; }\n  .status.ok { background: #E4F4EA; color: var(--ok); border: 1px solid #BCE3CB; }\n  .status.err { background: #FBE9E7; color: var(--err); border: 1px solid #F0C3BF; }\n\n  details { margin-top: 4px; }\n  summary {\n    font-size: 13px;\n    color: var(--ink-soft);\n    cursor: pointer;\n    padding: 6px 0;\n    user-select: none;\n  }\n  .hint { font-size: 12px; color: var(--ink-soft); margin-top: 6px; line-height: 1.5; }\n<\/style>\n<\/head>\n<body>\n\n\n<div id=\"status\" class=\"status\" role=\"status\"><\/div>\n\n<div class=\"card\">\n  <label>1 \u00b7 Vonalk\u00f3d<\/label>\n  <div id=\"reader-wrap\">\n    <div id=\"reader\"><\/div>\n    <div class=\"laser\" aria-hidden=\"true\"><\/div>\n  <\/div>\n  <div id=\"code\" class=\"code-display empty\">M\u00e9g nincs beolvasott k\u00f3d<\/div>\n  <div class=\"row mt\">\n    <button id=\"scanBtn\" class=\"btn-primary\">Beolvas\u00e1s ind\u00edt\u00e1sa<\/button>\n    <button id=\"stopBtn\" class=\"btn-secondary\" style=\"display:none\">Le\u00e1ll\u00edt\u00e1s<\/button>\n  <\/div>\n  <details>\n    <summary>K\u00e9zi bevitel<\/summary>\n    <input type=\"text\" id=\"manualCode\" inputmode=\"text\" placeholder=\"K\u00f3d beg\u00e9pel\u00e9se\" class=\"mt\" style=\"margin-top:8px\">\n    <button id=\"manualBtn\" class=\"btn-ghost\">K\u00f3d \u00e1tv\u00e9tele<\/button>\n  <\/details>\n<\/div>\n\n<div class=\"card\">\n  <label for=\"note\">2 \u00b7 Megjegyz\u00e9s<\/label>\n  <textarea id=\"note\" placeholder=\"R\u00f6vid sz\u00f6veg a k\u00f3dhoz\u2026\"><\/textarea>\n<\/div>\n\n<button id=\"sendBtn\" class=\"btn-primary\" disabled>Bek\u00fcld\u00e9s<\/button>\n<button id=\"resetBtn\" class=\"btn-ghost mt\" style=\"display:none\">\u00daj beolvas\u00e1s<\/button>\n\n<details class=\"mt\">\n  <summary>Be\u00e1ll\u00edt\u00e1s: webhook c\u00edme<\/summary>\n  <input type=\"url\" id=\"webhookUrl\" placeholder=\"https:\/\/hook.eu1.make.com\/\u2026\">\n  <p class=\"hint\">A c\u00edm alap\u00e9rt\u00e9ke a f\u00e1jlban a <b>WEBHOOK_URL<\/b> konstansban adhat\u00f3 meg v\u00e9glegesen. Az itt be\u00edrt c\u00edm csak erre a munkamenetre \u00e9rv\u00e9nyes.<\/p>\n<\/details>\n\n<script>\n\/\/ ================================================================\n\/\/  \u00c1LL\u00cdTSD BE: ide \u00edrd a saj\u00e1t webhook-c\u00edmedet (pl. Make webhook)\nconst WEBHOOK_URL = \"https:\/\/hook.eu1.make.com\/x4qmzjr4ok8fqlokjqm1hdi6lac6l2fb\";\n\/\/ ================================================================\n\nconst el = id => document.getElementById(id);\nconst statusBox = el('status');\nlet scanner = null;\nlet scannedCode = \"\";\n\nel('webhookUrl').value = WEBHOOK_URL.includes(\"IDE-A-SAJAT\") ? \"\" : WEBHOOK_URL;\n\nfunction setStatus(msg, kind) {\n  statusBox.textContent = msg;\n  statusBox.className = 'status show ' + kind;\n}\nfunction clearStatus() { statusBox.className = 'status'; }\n\nfunction setCode(code) {\n  scannedCode = code.trim();\n  const box = el('code');\n  if (scannedCode) {\n    box.textContent = scannedCode;\n    box.classList.remove('empty');\n    el('sendBtn').disabled = false;\n    if (navigator.vibrate) navigator.vibrate(120);\n  } else {\n    box.textContent = \"M\u00e9g nincs beolvasott k\u00f3d\";\n    box.classList.add('empty');\n    el('sendBtn').disabled = true;\n  }\n}\n\nasync function startScan() {\n  clearStatus();\n  el('reader-wrap').classList.add('active');\n  el('scanBtn').style.display = 'none';\n  el('stopBtn').style.display = 'block';\n  scanner = new Html5Qrcode(\"reader\");\n  const formats = [\n    Html5QrcodeSupportedFormats.EAN_13,\n    Html5QrcodeSupportedFormats.EAN_8,\n    Html5QrcodeSupportedFormats.UPC_A,\n    Html5QrcodeSupportedFormats.UPC_E,\n    Html5QrcodeSupportedFormats.CODE_128,\n    Html5QrcodeSupportedFormats.CODE_39,\n    Html5QrcodeSupportedFormats.CODE_93,\n    Html5QrcodeSupportedFormats.ITF,\n    Html5QrcodeSupportedFormats.QR_CODE,\n    Html5QrcodeSupportedFormats.DATA_MATRIX\n  ];\n  try {\n    await scanner.start(\n      { facingMode: \"environment\" },\n      { fps: 10, qrbox: { width: 260, height: 160 }, formatsToSupport: formats },\n      (decodedText) => { setCode(decodedText); stopScan(); },\n      () => {} \/\/ sikertelen k\u00e9pkock\u00e1k \u2013 nem hiba\n    );\n  } catch (err) {\n    stopScan();\n    setStatus(\"A kamera nem indult el. Ellen\u0151rizd a kameraenged\u00e9lyt, \u00e9s hogy az oldal HTTPS-en fut-e. K\u00e9zi bevitel tov\u00e1bbra is haszn\u00e1lhat\u00f3.\", \"err\");\n  }\n}\n\nasync function stopScan() {\n  if (scanner) {\n    try { await scanner.stop(); scanner.clear(); } catch (e) {}\n    scanner = null;\n  }\n  el('reader-wrap').classList.remove('active');\n  el('scanBtn').style.display = 'block';\n  el('stopBtn').style.display = 'none';\n}\n\nasync function send() {\n  const url = el('webhookUrl').value.trim() || WEBHOOK_URL;\n  if (!url || url.includes(\"IDE-A-SAJAT\")) {\n    setStatus(\"Nincs be\u00e1ll\u00edtva webhook-c\u00edm. Add meg a \u201eBe\u00e1ll\u00edt\u00e1s\u201d r\u00e9szben, vagy \u00edrd be a f\u00e1jl WEBHOOK_URL konstans\u00e1ba.\", \"err\");\n    return;\n  }\n  if (!scannedCode) return;\n\n  el('sendBtn').disabled = true;\n  el('sendBtn').textContent = \"K\u00fcld\u00e9s\u2026\";\n  clearStatus();\n\n  try {\n    const res = await fetch(url, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application\/json\" },\n      body: JSON.stringify({\n        barcode: scannedCode,\n        note: el('note').value.trim(),\n        timestamp: new Date().toISOString()\n      })\n    });\n    if (!res.ok) throw new Error(\"HTTP \" + res.status);\n    setStatus(\"Elk\u00fcldve \u2713  (\" + scannedCode + \")\", \"ok\");\n    el('resetBtn').style.display = 'block';\n    el('sendBtn').textContent = \"Elk\u00fcldve\";\n  } catch (err) {\n    setStatus(\"A k\u00fcld\u00e9s nem siker\u00fclt: \" + err.message + \". Ellen\u0151rizd a webhook-c\u00edmet \u00e9s az internetkapcsolatot.\", \"err\");\n    el('sendBtn').disabled = false;\n    el('sendBtn').textContent = \"Bek\u00fcld\u00e9s\";\n  }\n}\n\nfunction reset() {\n  setCode(\"\");\n  el('note').value = \"\";\n  el('manualCode').value = \"\";\n  el('sendBtn').textContent = \"Bek\u00fcld\u00e9s\";\n  el('resetBtn').style.display = 'none';\n  clearStatus();\n}\n\nel('scanBtn').addEventListener('click', startScan);\nel('stopBtn').addEventListener('click', stopScan);\nel('sendBtn').addEventListener('click', send);\nel('resetBtn').addEventListener('click', reset);\nel('manualBtn').addEventListener('click', () => {\n  const v = el('manualCode').value.trim();\n  if (v) { setCode(v); clearStatus(); }\n});\n<\/script>\n<\/body>\n<\/html>\n\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":823,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"categories":[37],"tags":[],"class_list":["post-814","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ingyenes-teszt"],"_links":{"self":[{"href":"https:\/\/autoposzt.hu\/index.php?rest_route=\/wp\/v2\/posts\/814","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/autoposzt.hu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/autoposzt.hu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/autoposzt.hu\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/autoposzt.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=814"}],"version-history":[{"count":11,"href":"https:\/\/autoposzt.hu\/index.php?rest_route=\/wp\/v2\/posts\/814\/revisions"}],"predecessor-version":[{"id":826,"href":"https:\/\/autoposzt.hu\/index.php?rest_route=\/wp\/v2\/posts\/814\/revisions\/826"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/autoposzt.hu\/index.php?rest_route=\/wp\/v2\/media\/823"}],"wp:attachment":[{"href":"https:\/\/autoposzt.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=814"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/autoposzt.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=814"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/autoposzt.hu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=814"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}