PageSourceSearch

https://fairfuturefoundation.org/wp-content/cache/min/1/wp-content…/js/fff-top-strip-latest.js?ver=1790918834

js fairfuturefoundation.org collected 2026-10-02 05:56:31 UTC 4,031 bytes, 32 lines download raw bytes

1(function(){"use strict";var MEDIA=window.matchMedia("(min-width: 1367px)");var STORAGE_KEY="fffTopStripLatestV1";var STORAGE_MAX_AGE=5*60*1000;var started=!1;function getColumns(){return document.querySelectorAll(".fff-top-strip .fff-col-message")}
2function getCurrentPostId(){var className=document.body?document.body.className:"";var match=className.match(/\bpostid-(\d+)\b/);return match?parseInt(match[1],10):0}
3function getEndpoint(){var apiLink=document.querySelector('link[rel="https://api.w.org/"]');if(apiLink&&apiLink.href){try{return new URL("fff/v1/top-strip/latest",apiLink.href).toString()}catch(error){}}
4return new URL("/wp-json/fff/v1/top-strip/latest",window.location.origin).toString()}
5function isHomepage(){var path=window.location.pathname.replace(/\/+$/,"");return path===""}
6function chooseItem(items){if(!Array.isArray(items)){return null}
7var currentId=getCurrentPostId();var skipNewest=isHomepage();var validSeen=0;for(var i=0;i<items.length;i+=1){var item=items[i];if(!item||!item.id||!item.title||!item.url){continue}
8if(currentId&&Number(item.id)===currentId){continue}
9if(skipNewest&&0===validSeen){validSeen+=1;continue}
10return item}
11return null}
12function createMessage(item){var wrapper=document.createElement("div");wrapper.className="fff-latest-message";var link=document.createElement("a");link.className="fff-latest-link";link.href=item.url;link.target="_blank";link.rel="noopener";link.setAttribute("aria-label","Read: "+item.title);var paragraph=document.createElement("p");var label=document.createElement("span");label.className="fff-latest-label";label.textContent=isHomepage()?"More from the field ·":"Latest from the field ·";var title=document.createElement("strong");title.className="fff-latest-title";title.textContent=item.title;var excerpt=document.createElement("span");excerpt.className="fff-latest-excerpt";excerpt.textContent=item.excerpt||"";paragraph.appendChild(label);paragraph.appendChild(document.createTextNode(" "));paragraph.appendChild(title);if(item.excerpt){paragraph.appendChild(document.createTextNode(" — "));paragraph.appendChild(excerpt)}
13link.appendChild(paragraph);wrapper.appendChild(link);return wrapper}
14function renderPayload(payload){if(!payload||!Array.isArray(payload.items)){return!1}
15var item=chooseItem(payload.items);if(!item){return!1}
16var columns=getColumns();if(!columns.length){return!1}
17columns.forEach(function(column){var oldDynamic=column.querySelector(".fff-latest-message");if(oldDynamic){oldDynamic.remove()}
18column.classList.remove("fff-latest-ready");column.appendChild(createMessage(item));window.requestAnimationFrame(function(){window.requestAnimationFrame(function(){column.classList.add("fff-latest-ready")})})});return!0}
19function readSessionCache(){try{var raw=sessionStorage.getItem(STORAGE_KEY);if(!raw){return null}
20var stored=JSON.parse(raw);if(!stored||!stored.savedAt||!stored.payload){return null}
21if(Date.now()-stored.savedAt>STORAGE_MAX_AGE){return null}
22return stored.payload}catch(error){return null}}
23function writeSessionCache(payload){try{sessionStorage.setItem(STORAGE_KEY,JSON.stringify({savedAt:Date.now(),payload:payload}))}catch(error){}}
24function fetchLatest(){return fetch(getEndpoint(),{method:"GET",credentials:"same-origin",headers:{"Accept":"application/json"}}).then(function(response){if(!response.ok){throw new Error("Top Strip endpoint returned "+response.status)}
25return response.json()}).then(function(payload){if(!payload||!Array.isArray(payload.items)){throw new Error("Invalid Top Strip payload")}
26writeSessionCache(payload);renderPayload(payload)}).catch(function(){})}
27function start(){if(started||!MEDIA.matches){return}
28if(!getColumns().length){return}
29started=!0;var cached=readSessionCache();if(cached&&renderPayload(cached)){return}
30fetchLatest()}
31if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",start,{once:!0})}else{start()}
32if(MEDIA.addEventListener){MEDIA.addEventListener("change",start)}else if(MEDIA.addListener){MEDIA.addListener(start)}})()

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.