{"id":25037,"date":"2025-10-21T15:06:59","date_gmt":"2025-10-21T19:06:59","guid":{"rendered":"https:\/\/lecochonsavant.com\/?p=25037"},"modified":"2025-10-23T12:52:06","modified_gmt":"2025-10-23T16:52:06","slug":"calendrier-cochon-savant-25-26","status":"publish","type":"post","link":"https:\/\/lecochonsavant.com\/en\/calendrier-cochon-savant-25-26\/","title":{"rendered":"Calendrier Cochon Savant 25-26"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"25037\" class=\"elementor elementor-25037\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-87c26c3 e-flex e-con-boxed e-con e-parent\" data-id=\"87c26c3\" 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-59ba43a elementor-widget elementor-widget-html\" data-id=\"59ba43a\" 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<!doctype html>\r\n<html lang=\"fr\">\r\n<head>\r\n  <meta charset=\"utf-8\">\r\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n  <title>Calendrier \u2014 Cochon Savant<\/title>\r\n  <style>\r\n    :root { --accent:#ff2e79; --bg:#fff; --text:#e70000; --muted:#a6a6a6; }\r\n    *{box-sizing:border-box} html,body{margin:0;background:var(--bg);color:var(--text);font:500 16px\/1.4 system-ui,Segoe UI,Roboto,Arial}\r\n    .wrap{max-width:900px;margin:0 auto}\r\n    header{padding:.75rem 1rem}\r\n    .controls{display:flex;align-items:center;justify-content:space-between;gap:.5rem}\r\n    h1{margin:.25rem 0;font-size:1.6rem;text-transform:capitalize}\r\n    button{background:var(--accent);color:#fff;border:0;border-radius:.5rem;padding:.5rem .9rem;font-weight:700;cursor:pointer}\r\n    button:disabled{opacity:.5;cursor:not-allowed}\r\n    .imgwrap{padding:0 1rem 1rem}\r\n    .imgwrap img{width:100%;height:auto;display:block;background:#000}\r\n    .caption{padding:0 1rem .75rem;color:var(--muted);font-size:.9rem}\r\n    .cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;background:#000;padding:10px 10px 14px;border-top:1px solid #e70000}\r\n    .wd,.d{padding:8px 0;text-align:center}\r\n    .wd{font-weight:700;color:var(--muted);border-bottom:1px solid #222}\r\n    .d{background:#1a1a1a;border-radius:6px}\r\n    .d.today{outline:2px solid var(--accent)}\r\n    .empty{background:transparent}\r\n    .err{display:none;margin:10px 1rem;padding:10px;border-radius:8px;background:#b00020;color:#fff}\r\n    .err.show{display:block}\r\n  <\/style>\r\n<\/head>\r\n<body>\r\n  <div class=\"wrap\">\r\n    <header>\r\n      <div class=\"controls\">\r\n        <button id=\"prev\">\u25c0<\/button>\r\n        <h1 id=\"title\">\u2026<\/h1>\r\n        <button id=\"next\">\u25b6<\/button>\r\n      <\/div>\r\n    <\/header>\r\n\r\n    <div class=\"imgwrap\">\r\n      <img id=\"hero\" alt=\"Illustration du mois\">\r\n    <\/div>\r\n    <div class=\"caption\" id=\"imgStatus\"><\/div>\r\n\r\n    <div class=\"cal\" id=\"cal\"><\/div>\r\n\r\n    <div class=\"err\" id=\"err\">Erreur JavaScript. Ouvre la console pour voir le message.<\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n  (function(){\r\n    var IMAGE_BASE = 'https:\/\/lecochonsavant.com\/wp-content\/uploads\/2025\/10\/';\r\n    var MIN = new Date(2025,10,1); \/\/ 2025-11-01\r\n    var MAX = new Date(2026,11,1); \/\/ 2026-12-01\r\n    var state = { cursor: new Date(2025,10,1), today: new Date() };\r\n\r\n    var elTitle = document.getElementById('title');\r\n    var elImg = document.getElementById('hero');\r\n    var elImgStatus = document.getElementById('imgStatus');\r\n    var elCal = document.getElementById('cal');\r\n    var btnPrev = document.getElementById('prev');\r\n    var btnNext = document.getElementById('next');\r\n    var err = document.getElementById('err');\r\n\r\n    window.addEventListener('error', function(){ err.classList.add('show'); });\r\n\r\n    btnPrev.addEventListener('click', function(){ changeMonth(-1); });\r\n    btnNext.addEventListener('click', function(){ changeMonth(+1); });\r\n\r\n    function pad(n){ return (n<10?'0':'')+n; }\r\n    function yyyymm(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1); }\r\n    function monthName(m){\r\n      var fr=['janvier','f\u00e9vrier','mars','avril','mai','juin','juillet','ao\u00fbt','septembre','octobre','novembre','d\u00e9cembre'];\r\n      return fr[m];\r\n    }\r\n    function clamp(d){ if(d<MIN) return new Date(MIN); if(d>MAX) return new Date(MAX); return d; }\r\n    function sameDay(a,b){ return a.getFullYear()===b.getFullYear() && a.getMonth()===b.getMonth() && a.getDate()===b.getDate(); }\r\n\r\n    function changeMonth(delta){\r\n      var d = new Date(state.cursor);\r\n      d.setMonth(d.getMonth()+delta);\r\n      state.cursor = clamp(d);\r\n      render();\r\n    }\r\n\r\n    function loadImageForMonth(){\r\n      var file = yyyymm(state.cursor)+'.jpg';\r\n      var url = IMAGE_BASE + file;\r\n      elImgStatus.textContent = ''; \/\/ reset\r\n      elImg.src = url;\r\n      elImg.onerror = function(){\r\n        elImg.alt = 'Image introuvable : ' + url;\r\n        elImgStatus.textContent = 'Image introuvable : ' + url;\r\n      };\r\n    }\r\n\r\n    function render(){\r\n      \/\/ Titre + boutons born\u00e9s\r\n      var y = state.cursor.getFullYear();\r\n      var m = state.cursor.getMonth();\r\n      elTitle.textContent = monthName(m)+' '+y;\r\n      btnPrev.disabled = state.cursor.getTime() <= MIN.getTime();\r\n      btnNext.disabled = state.cursor.getTime() >= MAX.getTime();\r\n\r\n      \/\/ Image\r\n      loadImageForMonth();\r\n\r\n      \/\/ Grille\r\n      var first = new Date(y, m, 1);\r\n      var last = new Date(y, m+1, 0);\r\n      var startDay = (first.getDay()+6)%7; \/\/ Lundi=0\r\n      var days = last.getDate();\r\n      var weekdays = ['Lu','Ma','Me','Je','Ve','Sa','Di'];\r\n\r\n      var html = '';\r\n      for(var i=0;i<7;i++){ html += \"<div class='wd'>\"+weekdays[i]+\"<\/div>\"; }\r\n      for(var e=0;e<startDay;e++){ html += \"<div class='empty'><\/div>\"; }\r\n      for(var d=1; d<=days; d++){\r\n        var cur = new Date(y,m,d);\r\n        var cls = 'd' + (sameDay(cur,state.today)?' today':'');\r\n        html += \"<div class='\"+cls+\"'>\"+d+\"<\/div>\";\r\n      }\r\n      elCal.innerHTML = html;\r\n    }\r\n\r\n    render();\r\n  })();\r\n  <\/script>\r\n  <noscript>Active JavaScript pour voir le calendrier.<\/noscript>\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\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>Savoure chaque mois, sans remords.<\/p>","protected":false},"author":1,"featured_media":25039,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[338],"tags":[],"class_list":["post-25037","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles"],"jetpack_publicize_connections":[],"_links":{"self":[{"href":"https:\/\/lecochonsavant.com\/en\/wp-json\/wp\/v2\/posts\/25037","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lecochonsavant.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lecochonsavant.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lecochonsavant.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lecochonsavant.com\/en\/wp-json\/wp\/v2\/comments?post=25037"}],"version-history":[{"count":13,"href":"https:\/\/lecochonsavant.com\/en\/wp-json\/wp\/v2\/posts\/25037\/revisions"}],"predecessor-version":[{"id":25192,"href":"https:\/\/lecochonsavant.com\/en\/wp-json\/wp\/v2\/posts\/25037\/revisions\/25192"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lecochonsavant.com\/en\/wp-json\/wp\/v2\/media\/25039"}],"wp:attachment":[{"href":"https:\/\/lecochonsavant.com\/en\/wp-json\/wp\/v2\/media?parent=25037"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lecochonsavant.com\/en\/wp-json\/wp\/v2\/categories?post=25037"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lecochonsavant.com\/en\/wp-json\/wp\/v2\/tags?post=25037"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}