{"id":1794,"date":"2026-04-10T13:20:44","date_gmt":"2026-04-10T06:20:44","guid":{"rendered":"https:\/\/upabahasa.unsil.ac.id\/?page_id=1794"},"modified":"2026-04-10T14:34:13","modified_gmt":"2026-04-10T07:34:13","slug":"catalog-pelatihan","status":"publish","type":"page","link":"https:\/\/upabahasa.unsil.ac.id\/en\/catalog-pelatihan\/","title":{"rendered":"Catalog pelatihan"},"content":{"rendered":"<style>\n:root {\n  --bg: #ffffff;\n  --card: #ffffff;\n  --text-main: #1e293b;\n  --text-sub: #64748b;\n\n  --green1: #15803d;\n  --green2: #16a34a;\n\n  --red1: #991b1b;\n  --red2: #dc2626;\n\n  --gray1: #475569;\n  --gray2: #94a3b8;\n}\n\nbody {\n  background: var(--bg);\n  font-family: 'Inter', sans-serif;\n}\n\n.catalog-container {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n  gap: 16px;\n}\n\n.catalog-card {\n  border-radius: 12px;\n  padding: 10px;\n  background: var(--card);\n  border: 1px solid #e5e7eb;\n  box-shadow: 0 4px 12px rgba(0,0,0,0.04);\n  transition: 0.25s ease;\n}\n\n.catalog-card:hover {\n  transform: translateY(-3px);\n  box-shadow: 0 10px 20px rgba(0,0,0,0.08);\n}\n\n.catalog-image {\n  position: relative;\n  border-radius: 10px;\n  overflow: hidden;\n}\n\n.catalog-image img {\n  width: 100%;\n  border-radius: 10px;\n}\n\n.badge {\n  position: absolute;\n  top: 8px;\n  left: 8px;\n  padding: 4px 10px;\n  font-size: 10px;\n  border-radius: 999px;\n  color: #fff;\n}\n\n.badge.open {\n  background: linear-gradient(135deg, var(--red1), var(--red2));\n}\n\n.badge.closed {\n  background: linear-gradient(135deg, var(--gray1), var(--gray2));\n}\n\n.catalog-content {\n  padding: 10px 4px 4px;\n}\n\n.catalog-title {\n  font-size: 14px;\n  font-weight: 600;\n}\n\n.catalog-sub {\n  font-size: 12px;\n  color: var(--text-sub);\n  margin-top: 3px;\n}\n\n.catalog-btn {\n  margin-top: 8px;\n  display: inline-block;\n  padding: 6px 14px;\n  font-size: 12px;\n  border-radius: 8px;\n  color: #fff;\n  text-decoration: none;\n  font-weight: 500;\n  background: linear-gradient(135deg, var(--green1), var(--green2));\n}\n<\/style>\n\n<div class=\"catalog-container\" id=\"catalog\"><\/div>\n\n<script>\nconst API = \"https:\/\/sistem.mcreative.my\/api.php\";\n\n\/* \ud83d\udd25 VALIDATOR FINAL (SUB WAJIB) *\/\nfunction isValid(d){\n  const title = d.title?.trim();\n  const image = d.image?.trim();\n  const link  = d.link?.trim();\n  const sub   = d.sub?.trim();\n\n  return (\n    title &&\n    image && image.startsWith(\"http\") &&\n    link && link.startsWith(\"http\") &&\n    sub && sub !== \"-\" \/\/ \ud83d\udd25 WAJIB ADA DESKRIPSI\n  );\n}\n\n\/* \ud83d\udd25 RENDER *\/\nfunction render(data){\n\n  let html = \"\";\n\n  data.forEach(d => {\n\n    if(!isValid(d)){\n      console.log(\"\u274c SKIP:\", d);\n      return;\n    }\n\n    console.log(\"\u2705 RENDER:\", d);\n\n    const isOpen = d.jadwal == 1;\n\n    const badgeText = isOpen\n      ? (d.badge_buka || \"Dibuka\")\n      : (d.badge_tutup || \"Ditutup\");\n\n    html += `\n      <div class=\"catalog-card\">\n        <div class=\"catalog-image\">\n          <img decoding=\"async\" src=\"${d.image}\" loading=\"lazy\">\n          <span class=\"badge ${isOpen ? 'open' : 'closed'}\">\n            ${badgeText}\n          <\/span>\n        <\/div>\n\n        <div class=\"catalog-content\">\n          <div class=\"catalog-title\">${d.title}<\/div>\n          <div class=\"catalog-sub\">${d.sub}<\/div>\n\n          <a href=\"${d.link}\" class=\"catalog-btn\" target=\"_blank\">\n            ${isOpen ? \"Daftar Sekarang\" : \"Lihat Detail\"}\n          <\/a>\n        <\/div>\n      <\/div>\n    `;\n  });\n\n  document.getElementById(\"catalog\").innerHTML = html;\n}\n\n\/* \ud83d\udd25 LOAD *\/\nasync function loadCatalog(){\n\n  try {\n\n    const res = await fetch(API,{\n      method:\"POST\",\n      headers:{ \"Content-Type\":\"application\/json\" },\n      body:JSON.stringify({action:\"get_catalog_jadwal\"})\n    });\n\n    let data = await res.json();\n\n    console.log(\"\ud83d\udce6 RAW API:\", data);\n\n    \/\/ \ud83d\udd25 FILTER FINAL\n    data = data.filter(isValid);\n\n    console.log(\"\ud83d\udd25 FILTERED:\", data);\n\n    render(data);\n\n  } catch(e){\n    console.error(\"\u274c ERROR:\", e);\n  }\n}\n\n\/* INIT *\/\nloadCatalog();\n\n\/* REFRESH *\/\nsetInterval(loadCatalog,15000);\n<\/script>","protected":false},"excerpt":{"rendered":"","protected":false},"author":5,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1794","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/upabahasa.unsil.ac.id\/en\/wp-json\/wp\/v2\/pages\/1794","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/upabahasa.unsil.ac.id\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/upabahasa.unsil.ac.id\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/upabahasa.unsil.ac.id\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/upabahasa.unsil.ac.id\/en\/wp-json\/wp\/v2\/comments?post=1794"}],"version-history":[{"count":3,"href":"https:\/\/upabahasa.unsil.ac.id\/en\/wp-json\/wp\/v2\/pages\/1794\/revisions"}],"predecessor-version":[{"id":1799,"href":"https:\/\/upabahasa.unsil.ac.id\/en\/wp-json\/wp\/v2\/pages\/1794\/revisions\/1799"}],"wp:attachment":[{"href":"https:\/\/upabahasa.unsil.ac.id\/en\/wp-json\/wp\/v2\/media?parent=1794"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}