{"id":253350,"date":"2025-08-27T13:30:20","date_gmt":"2025-08-27T11:30:20","guid":{"rendered":"https:\/\/abela.shop\/rs\/?page_id=253350"},"modified":"2025-09-03T12:36:48","modified_gmt":"2025-09-03T10:36:48","slug":"moj-nalog-narudzbine","status":"publish","type":"page","link":"https:\/\/abela.shop\/rs\/moj-nalog-narudzbine\/","title":{"rendered":"Moj nalog &#8211; Narud\u017ebine"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"253350\" class=\"elementor elementor-253350\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"wd-negative-gap elementor-element elementor-element-bb508a4 e-flex e-con-boxed e-con e-parent\" data-id=\"bb508a4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0542cf4 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"0542cf4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- ===== DETALJI PORUD\u017dBINE (Elementor HTML widget) ===== -->\r\n<div class=\"odr-shell\">\r\n\r\n  <!-- Zaglavlje: meta + dugme -->\r\n  <header class=\"odr-summary card\">\r\n    <div class=\"odr-meta\">\r\n      <div class=\"odr-row\">\r\n        <span class=\"odr-label\">Broj porud\u017ebine:<\/span>\r\n        <span class=\"odr-value\" data-bind=\"order_number\">\u2014<\/span>\r\n      <\/div>\r\n      <div class=\"odr-row\">\r\n        <span class=\"odr-label\">Datum porud\u017ebine:<\/span>\r\n        <span class=\"odr-value\" data-bind=\"order_date\">\u2014<\/span>\r\n      <\/div>\r\n      <div class=\"odr-row\">\r\n        <span class=\"odr-label\">Rok za povra\u0107aj:<\/span>\r\n        <span class=\"odr-value\" data-bind=\"return_deadline\">\u2014<\/span>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <a class=\"odr-btn\" data-bind-href=\"manage_url\" href=\"#\" aria-label=\"Upravljaj porud\u017ebinom\">Upravljaj porud\u017ebinom<\/a>\r\n  <\/header>\r\n\r\n  <!-- Paket \/ Po\u0161iljka -->\r\n  <section class=\"odr-parcel card\">\r\n\r\n    <div class=\"odr-parcel-top\">\r\n      <h3 class=\"odr-parcel-title\">Paket 1<\/h3>\r\n      <div class=\"odr-parcel-count\"><span data-bind=\"items_count\">0<\/span> ARTIKLA<\/div>\r\n    <\/div>\r\n\r\n    <div class=\"odr-parcel-head\">\r\n      <div class=\"odr-shipper\">Isporu\u010duje: <strong data-bind=\"shipper\">Kurir<\/strong><\/div>\r\n      <a class=\"odr-invoice\" data-bind-href=\"invoice_url\" href=\"#\" target=\"_blank\" rel=\"noopener\">Ra\u010dun (PDF)<\/a>\r\n    <\/div>\r\n\r\n    <!-- *** TVOJ SISTEM PROGRESA + TIMELINE *** -->\r\n    <div class=\"tracking-stack\">\r\n      <!-- Levi panel: poslednji status -->\r\n      <div id=\"latest-status\" class=\"latest-status\" aria-live=\"polite\">\r\n        <div class=\"expanding-dot\"><\/div>\r\n      <\/div>\r\n\r\n      <!-- Desni panel: ikonice + timeline -->\r\n      <div id=\"cityexpress-tracking\">\r\n        <div class=\"expanding-dot\"><\/div>\r\n      <\/div>\r\n    <\/div>\r\n    <!-- \/tracking-stack -->\r\n\r\n  <\/section>\r\n<\/div>\r\n\r\n<style>\r\n\/* ===== Theme (okvir detalja) ===== *\/\r\n:root{\r\n  --bg:#fff; --text:#111; --muted:#6b7280;\r\n  --brand:#4faf9c; --brand-2:#006969;\r\n  --ok:#16a34a; --line:#e5e7eb; --shadow:0 6px 18px rgba(0,0,0,.07);\r\n}\r\n.odr-shell{max-width:960px;margin:24px auto;padding:0 12px;color:var(--text);font:16px\/1.4 system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif}\r\n.card{background:#fff;border-radius:14px;box-shadow:var(--shadow)}\r\n.odr-summary{display:flex;align-items:center;justify-content:space-between;padding:16px}\r\n.odr-meta{display:grid;gap:6px}\r\n.odr-row{display:flex;gap:10px}\r\n.odr-label{color:var(--muted)}\r\n.odr-value{font-weight:600}\r\n.odr-btn{display:inline-flex;align-items:center;justify-content:center;padding:.7rem 1.1rem;border-radius:10px;background:#fff;border:1px solid var(--line);text-decoration:none}\r\n.odr-btn:hover{border-color:#d3d6da}\r\n.odr-parcel{padding:16px;margin-top:14px}\r\n.odr-parcel-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}\r\n.odr-parcel-title{margin:0;font-size:16px}\r\n.odr-parcel-count{font-size:12px;color:var(--muted)}\r\n.odr-parcel-head{display:flex;align-items:center;justify-content:space-between;margin:12px 0 18px}\r\n.odr-shipper{font-weight:500}\r\n.odr-invoice{font-size:14px}\r\n\r\n\/* ====== Tvoj tracking stil (identi\u010dan) ====== *\/\r\n.expanding-dot{width:20px;height:20px;background:var(--brand-2);border-radius:50%;margin:40px auto;animation:expand 1s infinite ease-in-out}\r\n@keyframes expand{0%,100%{transform:scale(1);opacity:.7}50%{transform:scale(1.5);opacity:1}}\r\n@media (prefers-reduced-motion: reduce){.expanding-dot{animation:none}}\r\n\r\n.tracking-stack{display:flex;align-items:flex-start;gap:20px}\r\n.latest-status{\r\n  flex:0 0 300px;background:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,.08);\r\n  padding:20px;box-sizing:border-box;height:auto;min-height:unset\r\n}\r\n.latest-status h3{margin:0 0 8px 0;font-size:18px;font-weight:700}\r\n.latest-status .status-text{font-size:16px;font-weight:700;line-height:1.45;margin:6px 0 10px;color:#000}\r\n.latest-status .status-time{font-size:12px;color:#999}\r\n.latest-status .status-time time{font-weight:700;color:#000}\r\n.latest-status .status-track{margin-top:10px;font-size:14px;color:#2a2a2a}\r\n.latest-status .status-track strong{font-weight:700}\r\n.latest-status.negative .status-text{color:#b42318}\r\n\r\n.tracking-container{\r\n  background:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,.08);\r\n  padding:20px;max-width:960px;width:100%;text-align:center;box-sizing:border-box\r\n}\r\n\r\n\/* Progress (desktop) *\/\r\n.progress-horizontal{display:flex;align-items:flex-start;justify-content:center;gap:0;margin-bottom:26px;flex-wrap:nowrap}\r\n.progress-step{ text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:flex-start; min-width:86px;max-width:260px}\r\n.progress-step img{width:65px;height:65px;display:block;margin:0 auto 12px auto;object-fit:contain}\r\n.progress-step div{ margin-top:8px;font-size:16px;font-weight:500;line-height:1.3; word-break:break-word;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}\r\n.progress-line{ display:block;align-self:flex-start;height:2px;background:#d9e6e3;width:clamp(28px,6vw,60px); margin:42px 8px 0;border-radius:2px;transition:background .2s ease}\r\n.progress-line.done{ background:#4faf9c }\r\n\r\n\/* Timeline *\/\r\n.unified-timeline{text-align:left}\r\n.timeline-day{ position:relative;padding-left:20px !important;margin-bottom:28px;background:#fff}\r\n.timeline-day .day-header{ display:inline-block;margin:0 0 12px 0;font-weight:700;font-size:15px;color:#2a2a2a}\r\n.timeline-day .day-items{ position:relative}\r\n.timeline-day .day-items::before{ content:\"\";position:absolute;left:0;top:0;bottom:0;width:2px;background:#4faf9c}\r\n.day-item{\r\n  padding-left:20px; display:grid; grid-template-columns: 1fr 90px; grid-template-rows: auto auto;\r\n  grid-template-areas:\"title time\" \"ago time\";\r\n  column-gap:12px; align-items:start; margin-bottom:18px; padding-bottom:10px; border-bottom:1px dashed rgba(0,0,0,.05)}\r\n.day-item:last-child{border-bottom:none;padding-bottom:0}\r\n.day-item-title{grid-area:title;font-size:14px;line-height:1.55;min-width:0}\r\n.day-item-ago{grid-area:ago;font-size:12px;color:#888;margin-top:4px;display:block;white-space:nowrap}\r\n.day-item-time{ grid-area:time; text-align:right; justify-self:end; align-self:start; font-size:13px;font-weight:600;color:#666;white-space:nowrap}\r\n.day-item-time strong{display:none!important}\r\n\r\n\/* Naslov sa #brojem (ako doda\u0161 u H1) *\/\r\n.title-with-order{display:inline!important;position:relative}\r\n.title-with-order::after{content:\" #\" attr(data-order);font:inherit;color:inherit;background:none;border:none;padding:0;margin:0;white-space:normal}\r\n\r\n\/* Responsive *\/\r\n@media (max-width:900px){ .tracking-stack{flex-direction:column;align-items:stretch} .latest-status{width:100%;text-align:center}}\r\n@media (max-width:768px){\r\n  .progress-horizontal{flex-direction:row;align-items:flex-start;justify-content:space-between;gap:0!important;flex-wrap:nowrap;overflow-x:hidden;margin-bottom:18px}\r\n  .progress-line{ display:none }\r\n  .progress-step{flex:1 1 0;width:auto!important;min-width:0!important;max-width:unset!important}\r\n  .progress-step img{width:42px;height:42px;margin-bottom:8px}\r\n  .progress-step div{margin-top:4px;font-size:12px;line-height:1.3;white-space:normal;word-break:break-word;hyphens:auto;-webkit-line-clamp:2;line-clamp:2;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}\r\n  .day-item{ grid-template-columns: 1fr 70px; }\r\n}\r\n@media (max-width:420px){ .progress-step img{width:38px;height:38px} .progress-step div{font-size:11px}}\r\n<\/style>\r\n\r\n<script>\r\n\/* ====== Popuni META (broj, datumi, linkovi) + TVOJ PROGRESS\/TIMELINE ====== *\/\r\ndocument.addEventListener(\"DOMContentLoaded\", () => {\r\n  const qs   = new URLSearchParams(location.search);\r\n  const order = qs.get('order') || '';          \/\/ broj\/ID iz URL-a\r\n  const token = qs.get('token') || '';\r\n  const ajaxUrl = '\/wp-admin\/admin-ajax.php';\r\n\r\n  \/\/ zaglavlje\r\n  const setText = (key, val) => { const el = document.querySelector(`[data-bind=\"${key}\"]`); if(el) el.textContent = val || '\u2014'; };\r\n  const setHref = (key, href) => { const el = document.querySelector(`[data-bind-href=\"${key}\"]`); if(el && href) el.href = href; };\r\n  const toLocalDate = (dmy, plusDays=0) => {\r\n    if (!dmy) return '';\r\n    const [d,m,y] = dmy.split(\/[.\\-\\\/]\/); const dt = new Date(`${y}-${m}-${d}T00:00:00`);\r\n    if (isNaN(dt)) return ''; dt.setDate(dt.getDate()+plusDays);\r\n    return dt.toLocaleDateString('sr-RS', { day:'numeric', month:'long', year:'numeric' });\r\n  };\r\n  if (order) setText('order_number', order);\r\n\r\n  const container = document.getElementById(\"cityexpress-tracking\");\r\n  const latestStatusBox = document.getElementById(\"latest-status\");\r\n  if (!container || !latestStatusBox) return;\r\n\r\n  \/* H1: #broj porud\u017ebine *\/\r\n  (function attachOrderToH1(){\r\n    if (!order) return;\r\n    const pickH1 = () => document.querySelector('.entry-title.title') || document.querySelector('.entry-title, .page-title, h1');\r\n    const apply = () => { const h1 = pickH1(); if (!h1) return false; h1.classList.add('title-with-order'); h1.setAttribute('data-order', order); return true; };\r\n    if (apply()) return; const mo = new MutationObserver(() => { if (apply()) mo.disconnect(); });\r\n    mo.observe(document.body, { childList:true, subtree:true });\r\n  })();\r\n\r\n  if (!order || !token){\r\n    container.innerHTML = \"<p>\u274c Neva\u017ee\u0107i link za pra\u0107enje porud\u017ebine.<\/p>\";\r\n    latestStatusBox.innerHTML = \"<p>\u274c Neva\u017ee\u0107i link.<\/p>\";\r\n    return;\r\n  }\r\n\r\n  \/* ===== Helperi iz tvog koda ===== *\/\r\n  const parseSr = s => { const m = String(s).match(\/(\\d{2}\\.\\d{2}\\.\\d{4})\\s+(\\d{2}:\\d{2}:\\d{2})\/); if (!m) return new Date(NaN); const [ , d, t ] = m; const [dd, mm, yy] = d.split(\".\"); return new Date(`${yy}-${mm}-${dd}T${t}`); };\r\n  const timeAgo = d => { const s = Math.floor((Date.now() - d.getTime())\/1000); const m = Math.floor(s\/60), h = Math.floor(m\/60), da = Math.floor(h\/24); if (da>=1) return `pre ${da} ${da===1?'dan':'dana'}`; if (h>=1) return `pre ${h} ${h>=2&&h<=4?'sata':(h===1?'sat':'sati')}`; if (m>=1) return `pre ${m} ${m===1?'minut':'minuta'}`; return 'upravo sada'; };\r\n  const formatDayHeader = dmy => { const [dd, mm, yyyy] = dmy.split('.'); const months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; const mIdx = Math.max(0, Math.min(11, parseInt(mm,10)-1)); return `${dd.padStart(2,'0')} ${months[mIdx]} ${yyyy}`; };\r\n\r\n  const ICONS = {\r\n    \"u-obradi\": { pending: \"https:\/\/abela.shop\/rs\/wp-content\/uploads\/2025\/08\/u-obradi-ceka-se.png\", done: \"https:\/\/abela.shop\/rs\/wp-content\/uploads\/2025\/08\/u-obradi.png\" },\r\n    \"preuzeto\": { pending: \"https:\/\/abela.shop\/rs\/wp-content\/uploads\/2025\/08\/oreuzeto-od-strane-kurira.png\", done: \"https:\/\/abela.shop\/rs\/wp-content\/uploads\/2025\/08\/preuzeto-od-strane-kurira.png\" },\r\n    \"na-isporuci\": { pending: \"https:\/\/abela.shop\/rs\/wp-content\/uploads\/2025\/08\/na-isporuci-cela-se.png\", done: \"https:\/\/abela.shop\/rs\/wp-content\/uploads\/2025\/08\/na-isporuci.png\" },\r\n    \"finalno\": { pending: \"https:\/\/abela.shop\/rs\/wp-content\/uploads\/2025\/07\/progress-next-1.png\", done: \"https:\/\/abela.shop\/rs\/wp-content\/uploads\/2025\/07\/progress-1.png\", negative:\"https:\/\/abela.shop\/rs\/wp-content\/uploads\/2025\/07\/progress-red.png\" }\r\n  };\r\n\r\n  const WOO_ALIAS={canceled:'wc-cancelled',cancelled:'wc-cancelled',completed:'wc-completed',processing:'wc-processing',refunded:'wc-refunded',failed:'wc-failed',shipped:'wc-utoverano',picked:'wc-preuzeto','on-hold':'wc-on-hold',pending:'wc-pending','pending-payment':'wc-pending'};\r\n  const normalizeWooStatus=s=>{if(!s)return'';let k=s.toString().trim().toLowerCase().replace(\/\\s+\/g,'-');if(WOO_ALIAS[k])return WOO_ALIAS[k];if(!k.startsWith('wc-'))k='wc-'+k;return WOO_ALIAS[k]||k};\r\n  const normalizeCeStatus=s=>(s||'').toString().trim().toUpperCase();\r\n\r\n  const KEYWORD_TO_CE=[{k:['odsutan'],code:'ABST'},{k:['adresa','nepoznata'],code:'ADRU'},{k:['nepoznat','primalac'],code:'RCVU'}];\r\n  function codeFromLabel(label){ if(!label) return ''; const m=label.match(\/\\bCE:\\s*([A-Z]{3,4})\\b|\\(([A-Z]{3,4})\\)\/i); if(m) return (m[1]||m[2]||'').toUpperCase(); const low=label.toLowerCase(); for(const r of KEYWORD_TO_CE){ if(r.k.every(t=>low.includes(t))) return r.code; } return ''; }\r\n\r\n  const STATUS_STEPS=[\r\n    {id:'u-obradi',label:'Pakovanje',match:['wc-processing','PDEF','DDEF','INIT','MISS','ENTY','TRAS','EXPS','IMPI','FRWD','RERT','RTGW','RETC','STCK']},\r\n    {id:'preuzeto',label:'Preuzeto od strane kurira',match:['wc-preuzeto','PICK','DCOL','COPT','COPS','DOPS']},\r\n    {id:'na-isporuci',label:'Na isporuci',match:['wc-utoverano','TOUR','PTOU','DEPT','FRWP','DEPS']},\r\n    {id:'finalno',label:'Isporu\u010deno\/Neisporu\u010deno',match:['wc-completed','DELY','DEPO','DEPS','CASH','ABST','ADRU','RCVU']}\r\n  ];\r\n\r\n  const NEGATIVE_CODES=['wc-cancelled','wc-failed','wc-refunded','wc-void','ABST','ADRU','RCVU'];\r\n  const POSITIVE_FINAL_CODES=['wc-completed','DELY','DEPO','DEPS','CASH'];\r\n\r\n  const datePart=s=>String(s).split(' ')[0]||''; const timePart=s=>String(s).split(' ')[1]||'';\r\n\r\n  fetch(ajaxUrl,{ method:\"POST\", headers:{\"Content-Type\":\"application\/x-www-form-urlencoded\"}, body:new URLSearchParams({action:\"cityexpress_get_tracking_events\",order,token}) })\r\n    .then(r=>r.json())\r\n    .then(data=>{\r\n      if(!data?.success){ container.innerHTML=\"<p>\u274c Gre\u0161ka pri u\u010ditavanju.<\/p>\"; latestStatusBox.innerHTML=\"<p>\u274c Gre\u0161ka.<\/p>\"; return; }\r\n\r\n      const d = data.data || {};\r\n      const cityexpress = d.cityexpress || [];\r\n      const woocommerce = d.woocommerce || [];\r\n\r\n      \/* zaglavlje: datum\/rok\/kurir\/broj artikala\/linkovi *\/\r\n      const created = woocommerce.find(e => \/kreirana\/i.test(e.desc) || e.status === 'wc-pending');\r\n      if (created) {\r\n        setText('order_date', toLocalDate(created.time.split(' ')[0]));\r\n        setText('return_deadline', toLocalDate(created.time.split(' ')[0], 14)); \/\/ pode\u0161avanje roka\r\n      }\r\n      setText('shipper', d.tracking_provider || 'Kurir');\r\n      if (d.items_count) setText('items_count', d.items_count);\r\n      setHref('invoice_url', d.invoice_url || '');\r\n      setHref('manage_url', d.view_url || '');\r\n\r\n      \/* ---- SPOJ DOGA\u0110AJE I PRIPREMI STEPERE ---- *\/\r\n      const all=[];\r\n      cityexpress.forEach(e=>{ const code=normalizeCeStatus(e.status)||codeFromLabel(e.desc); all.push({type:'ce',timestamp:parseSr(e.time),label:e.desc,code,time:e.time}); });\r\n      woocommerce.forEach(e=>{ all.push({type:'wc',timestamp:parseSr(e.time),label:e.desc,code:normalizeWooStatus(e.status),time:e.time}); });\r\n\r\n      all.sort((a,b)=>(a.timestamp-b.timestamp)||(a.type==='wc'&&b.type==='ce'?-1:1));\r\n\r\n      const seen=new Set(), merged=[];\r\n      for(const ev of all){\r\n        const tsBucket=isFinite(ev.timestamp)?Math.floor(ev.timestamp.getTime()\/300000):Math.random();\r\n        const baseKey=ev.code?`${ev.code}|${datePart(ev.time)}`:`ts${tsBucket}|${datePart(ev.time)}`;\r\n        const key=ev.type==='ce'?baseKey:`wc|${baseKey}`;\r\n        if(!seen.has(key)){merged.push(ev);seen.add(key);}\r\n      }\r\n\r\n      const negativeEvent=[...merged].reverse().find(e=>NEGATIVE_CODES.includes(e.code));\r\n      const hasNegative=Boolean(negativeEvent);\r\n      const latestPositiveFinal=[...merged].reverse().find(e=>POSITIVE_FINAL_CODES.includes(e.code));\r\n      const hasPositiveAfterNegative=hasNegative && latestPositiveFinal && latestPositiveFinal.timestamp>negativeEvent?.timestamp;\r\n      const shouldShowNegativeFinal=hasNegative && !hasPositiveAfterNegative;\r\n      const negTs=hasNegative ? (negativeEvent.timestamp?.getTime?.() ?? Infinity) : Infinity;\r\n\r\n      function getLatestEventForStep(step, cutoffTs = Infinity){\r\n        for (let i = merged.length - 1; i >= 0; i--){\r\n          const ev = merged[i];\r\n          if (!(ev.timestamp instanceof Date) || isNaN(ev.timestamp)) continue;\r\n          if (ev.timestamp.getTime() > cutoffTs) continue;\r\n          if (step.match.includes(ev.code)) return ev;\r\n        }\r\n        return null;\r\n      }\r\n\r\n      let lastSuccessIdx=-1;\r\n      STATUS_STEPS.forEach((step, idx)=>{ const ev = getLatestEventForStep(step, shouldShowNegativeFinal ? negTs : Infinity); if (ev) lastSuccessIdx = idx; });\r\n\r\n      let currentStepIdx = 0;\r\n      if (shouldShowNegativeFinal) currentStepIdx = 3;\r\n      else {\r\n        const posFinal = getLatestEventForStep(STATUS_STEPS[3], Infinity);\r\n        if (posFinal) currentStepIdx = 3;\r\n        else if (lastSuccessIdx >= 0) currentStepIdx = lastSuccessIdx;\r\n        else currentStepIdx = 0;\r\n      }\r\n\r\n      \/* PROGRESS (identi\u010dan tvojem) *\/\r\n      let progressHTML='';\r\n      STATUS_STEPS.forEach((step,i)=>{\r\n        if(i>0){\r\n          const lineDone = (i-1) <= lastSuccessIdx;\r\n          progressHTML += `<div class=\"progress-line${lineDone?' done':''}\" aria-hidden=\"true\"><\/div>`;\r\n        }\r\n        let icon, labelText, title='';\r\n        const reached = i <= lastSuccessIdx;\r\n\r\n        if (step.id === \"finalno\") {\r\n          const positiveFinalEvent = getLatestEventForStep(step, Infinity);\r\n          if (shouldShowNegativeFinal){ icon = ICONS[\"finalno\"].negative; labelText = \"Neisporu\u010deno\"; title = negativeEvent?.time || \"\"; }\r\n          else if (positiveFinalEvent){ icon = ICONS[\"finalno\"].done; labelText = \"Isporu\u010deno\"; title = positiveFinalEvent?.time || \"\"; }\r\n          else { icon = ICONS[\"finalno\"].pending; labelText = \"\u010ceka se\"; title = positiveFinalEvent?.time || \"\"; }\r\n        } else {\r\n          icon = reached ? ICONS[step.id].done : ICONS[step.id].pending;\r\n          labelText = step.label;\r\n          const ev = getLatestEventForStep(step, shouldShowNegativeFinal ? negTs : Infinity);\r\n          title = ev?.time || \"\";\r\n        }\r\n        const renderText = (i === currentStepIdx) ? labelText : \"\";\r\n        progressHTML += `<div class=\"progress-step\" title=\"${title}\"><img decoding=\"async\" src=\"${icon}\" alt=\"\"><div>${renderText}<\/div><\/div>`;\r\n      });\r\n\r\n      \/* TIMELINE *\/\r\n      const display=[...merged].sort((a,b)=>b.timestamp-a.timestamp);\r\n      const groups=new Map();\r\n      const CODE_MAP={'INIT':'Inicijalizacija po\u0161iljke (registrovana u sistemu).','wc-processing':'Porud\u017ebina je u obradi.','wc-utoverano':'Porud\u017ebina je otpremljena.','wc-preuzeto':'Preuzeto od strane kurira.','wc-completed':'Porud\u017ebina je isporu\u010dena.','DELY':'Po\u0161iljka je isporu\u010dena.','DEPO':'Isporu\u010dena zamenskom primaocu.','DEPS':'Dostavljena u odredi\u0161ni OEX Shop.'};\r\n      const NEGATIVE_LABELS={'wc-cancelled':'Porud\u017ebina je otkazana.','wc-failed':'Pla\u0107anje neuspe\u0161no.','wc-refunded':'Porud\u017ebina je refundirana.','wc-void':'Porud\u017ebina stornirana.','ABST':'Primalac odsutan u vreme isporuke.','ADRU':'Adresa primaoca nepoznata.','RCVU':'Na adresi nema naslovljenog primaoca.'};\r\n\r\n      display.forEach(e=>{\r\n        const day=datePart(e.time);\r\n        const txt=NEGATIVE_LABELS[e.code]||CODE_MAP[e.code]||e.label||e.code||'';\r\n        const item={timeOnly:timePart(e.time),ago:timeAgo(e.timestamp),text:txt,ts:e.timestamp.getTime()};\r\n        if(!groups.has(day)) groups.set(day,[]); groups.get(day).push(item);\r\n      });\r\n\r\n      const sortedDays=[...groups.keys()].sort((d1,d2)=>{ const [dd1,mm1,yy1]=d1.split('.'),[dd2,mm2,yy2]=d2.split('.'); return new Date(`${yy2}-${mm2}-${dd2}`)-new Date(`${yy1}-${mm1}-${dd1}`); });\r\n\r\n      let timelineHTML='';\r\n      sortedDays.forEach(day=>{\r\n        const items=groups.get(day).sort((x,y)=> y.ts-x.ts);\r\n        let itemsHTML='';\r\n        items.forEach(it=>{\r\n          itemsHTML+=`<div class=\"day-item\"><div class=\"day-item-title\">${it.text}<\/div><div class=\"day-item-ago\">${it.ago}<\/div><div class=\"day-item-time\">${it.timeOnly}<\/div><\/div>`;\r\n        });\r\n        if (itemsHTML.trim() !== \"\") {\r\n          const niceDay = formatDayHeader(day);\r\n          timelineHTML+=`<div class=\"timeline-day\"><div class=\"day-header\">${niceDay}<\/div><div class=\"day-items\">${itemsHTML}<\/div><\/div>`;\r\n        }\r\n      });\r\n\r\n      \/* Poslednji status kartica *\/\r\n      const lastEvent=display[0];\r\n      if(lastEvent){\r\n        const isNeg=NEGATIVE_CODES.includes(lastEvent.code);\r\n        const text=(NEGATIVE_LABELS[lastEvent.code]||CODE_MAP[lastEvent.code]||lastEvent.label||lastEvent.code||'');\r\n        latestStatusBox.classList.toggle('negative',isNeg);\r\n        latestStatusBox.innerHTML = `<h3>\ud83d\udce6 Trenutni status<\/h3><div class=\"status-text\">${text}<\/div><div class=\"status-time\"><time>${lastEvent.time}<\/time><\/div>${ (d.cargo_id||'').toString().length ? `<div class=\"status-track\"><strong>Broj za pra\u0107enje:<\/strong> ${d.cargo_id}<\/div>` : '' }`;\r\n      }\r\n\r\n      container.innerHTML = `<div class=\"tracking-container\"><div class=\"progress-horizontal\">${progressHTML}<\/div><div class=\"unified-timeline\">${timelineHTML}<\/div><\/div>`;\r\n    })\r\n    .catch(()=>{ container.innerHTML=\"<p>\u274c Do\u0161lo je do gre\u0161ke prilikom u\u010ditavanja.<\/p>\"; latestStatusBox.innerHTML=\"<p>\u274c Gre\u0161ka.<\/p>\"; });\r\n});\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8cf0dea e-con-full e-flex e-con e-child\" data-id=\"8cf0dea\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"wd-negative-gap elementor-element elementor-element-fdd20f5 e-flex e-con-boxed e-con e-parent\" data-id=\"fdd20f5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Broj porud\u017ebine: \u2014 Datum porud\u017ebine: \u2014 Rok za povra\u0107aj: \u2014 Upravljaj porud\u017ebinom Paket 1 0 ARTIKLA Isporu\u010duje: Kurir Ra\u010dun (PDF)<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-253350","page","type-page","status-publish","hentry"],"acf":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/abela.shop\/rs\/wp-json\/wp\/v2\/pages\/253350","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abela.shop\/rs\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/abela.shop\/rs\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/abela.shop\/rs\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/abela.shop\/rs\/wp-json\/wp\/v2\/comments?post=253350"}],"version-history":[{"count":0,"href":"https:\/\/abela.shop\/rs\/wp-json\/wp\/v2\/pages\/253350\/revisions"}],"wp:attachment":[{"href":"https:\/\/abela.shop\/rs\/wp-json\/wp\/v2\/media?parent=253350"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}