/* BT players directory v3 (reads the player index file instead of paging 16 Ghost requests) (moved out of Site Footer; adds team filter, all-team levels) */ (function(){var s=document.createElement("style");s.textContent=".btd-tm{font:inherit;font-size:.95em;font-weight:600;color:inherit;background:#0c2138;border:1px solid var(--bt-line);border-radius:10px;padding:10px 12px;outline:0;max-width:100%}.btd-tm:focus{border-color:var(--bt-blue)}";document.head.appendChild(s)})(); var TMOK={"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"158":1}; !function(){"use strict";if(/^\/players\/(page\/\d+\/)?$/.test(location.pathname)){var t=document.querySelector("main .gh-container, .gh-container, main");if(t&&!t.getAttribute("data-btd")){t.setAttribute("data-btd","1");var e="https://statsapi.mlb.com/api/v1",r={1:"MLB",11:"AAA",12:"AA",13:"A+",14:"A",16:"R"},n=["MLB","AAA","AA","A+","A","R","Other"],a=["C","1B","2B","3B","SS","IF","LF","CF","RF","OF","DH","UT","RHS","LHS","RHP","LHP","RHR","LHR","TWP"],o={q:"",lvl:"MLB",grp:"all",ps:[],sort:"default",dir:1,tm:"all"},i=document.createElement("div");i.className="btd",i.innerHTML='

Player Pages

'+["all"].concat(n).map(function(t){return'"}).join("")+'
'+[["all","All positions"],["SP","SP"],["RP","RP"],["C","C"],["1B","1B"],["2B","2B"],["3B","3B"],["SS","SS"],["LF","LF"],["CF","CF"],["RF","RF"],["OF","All OF"]].map(function(t){return'"}).join("")+'
Pick one or more positions. Shows players with 20+ games at each one, 2025\u201326 combined (SP = starts, RP = relief outings).
'+[["name","Player"],["pos","Pos"],["level","Level"],["team","Team"],["rank","BT Rank"]].map(function(t){return'"}).join("")+'
Loading players\u2026
',t.innerHTML="",t.appendChild(i),document.title="Player Pages \xb7 Baseball Things";var l=i.querySelector(".btd-body"),s=i.querySelector(".btd-count"),c=[];i.addEventListener("click",function(t){if(t.target.closest(".btd-more")){window.__btdN+=100;return void b()}var ar=t.target.closest(".btd-arrow");if(ar){t.preventDefault();t.stopPropagation();return void window.__btdTog(ar)}var e=t.target.closest("button");if(e){if(e.classList.contains("btd-reset"))return o={q:"",lvl:"MLB",grp:"all",ps:[],sort:"default",dir:1,tm:"all"},i.querySelector(".btd-q").value="",i.querySelector(".btd-tm").value="all",void b();var r=e.closest(".btd-chips");if(r){var kk=r.getAttribute("data-k"),vv=e.getAttribute("data-v");if("grp"===kk){if("all"===vv)o.ps=[];else{var ix=o.ps.indexOf(vv);ix>-1?o.ps.splice(ix,1):o.ps.push(vv)}}else o[kk]=vv;return void b()}var n=e.getAttribute("data-s");n&&(o.sort===n?o.dir=-o.dir:(o.sort=n,o.dir=1),b())}}),i.querySelector(".btd-q").addEventListener("input",function(t){o.q=t.target.value,b()}),i.querySelector(".btd-tm").addEventListener("change",function(t){o.tm=t.target.value,b()}),i.querySelector(".btd-sort").addEventListener("change",function(t){o.sort=t.target.value,o.dir=1,b()}),function(){var tq=new URLSearchParams(location.search).get("team");tq&&TMOK[tq]&&(o.tm=tq,o.lvl="all",i.querySelector(".btd-tm").value=tq)}();var u=fetch("https://docs.google.com/spreadsheets/d/1stxy35aQDJmFjVRpS0EGR9Ds9qT77HJuuRgYZHcWnvY/export?format=csv&gid=0").then(function(t){return t.ok?t.text():""}).then(function(t){var e=function(t){for(var e=[],r=[],n="",a=!1,o=0;o=s.length)){var t=s[d++];return function(t,r){var n=["C","1B","2B","3B","SS","LF","CF","RF","OF"];function a(r){return p(e+"/people/"+t+"/stats?stats=season&group=fielding&season="+r+"&leagueListId=mlb_milb").then(function(t){var e={},r=0;return(((t.stats||[])[0]||{}).splits||[]).forEach(function(t){var n=t.position&&t.position.abbreviation,a=t.sport&&t.sport.id;if(n&&"DH"!==n&&"P"!==n&&21!==a&&17!==a){var o=+t.stat.gamesPlayed||0;e[n]=(e[n]||0)+o,r+=o}}),Object.keys(e).filter(function(t){return e[t]>=.25*r}).sort(function(t,r){return e[r]-e[t]}).slice(0,2).sort(function(t,e){return n.indexOf(t)-n.indexOf(e)}).join("/")}).catch(function(){return""})}return a(r).then(function(t){return t||a(r-1)})}(t.id,u).then(function(e){return e&&(t.pos=e),f()})}b()}Promise.all([f(),f(),f(),f(),f(),f()]).then(b)})})}).catch(function(t){l.innerHTML='
Couldn\u2019t load players right now ('+f(t.message)+"). Refresh to try again.
"})}}function p(t){return fetch(t).then(function(t){if(!t.ok)throw new Error("HTTP "+t.status);return t.json()})}function f(t){return String(null==t?"":t).replace(/[&<>"']/g,function(t){return{"&":"&","<":"<",">":">",'"':""","'":"'"}[t]})}function m(t){return(t||"").normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/\b(jr|sr|ii|iii|iv)\b\.?/g,"").replace(/[^a-z ]/g," ").replace(/\s+/g," ").trim()}function v(t){return(t||"").toUpperCase().split("/").map(function(t){return t.trim()}).filter(Boolean)}function h(t){var e=v(t)[0],r=a.indexOf(e);return r<0?99:r}function b(){var ss=i.querySelector(".btd-sort");ss&&(ss.value=/^(default|w|w3)$/.test(o.sort)?o.sort:"default");[].forEach.call(i.querySelectorAll(".btd-chips"),function(t){var e=t.getAttribute("data-k");[].forEach.call(t.children,function(t){var r="grp"===e?("all"===t.getAttribute("data-v")?!o.ps.length:o.ps.indexOf(t.getAttribute("data-v"))>-1):t.getAttribute("data-v")===o[e];t.classList.toggle("on",r),t.setAttribute("aria-pressed",r)})}),[].forEach.call(i.querySelectorAll("[data-s]"),function(t){var e=t.getAttribute("data-s")===o.sort;t.classList.toggle("on",e),t.querySelector("i").textContent=e?o.dir>0?"\u25b2":"\u25bc":""});var t=m(o.q),e=c.filter(function(e){return("all"===o.tm||e.org===o.tm)&&("all"===o.lvl||e.level===o.lvl)&&(r=0,n=0,!o.ps.length||o.ps.every(function(p){var g=((window.__btdD||{})[e.id]||{}).p||{};return("OF"===p?(g.LF||0)+(g.CF||0)+(g.RF||0):(g[p]||0))>=20}))&&(!t||e.key.indexOf(t)>-1);var r,n}),r={name:function(t,e){return t.last.localeCompare(e.last)||t.name.localeCompare(e.name)},pos:function(t,e){return h(t.pos)-h(e.pos)},level:function(t,e){return n.indexOf(t.level)-n.indexOf(e.level)},team:function(t,e){return(t.team||"~").localeCompare(e.team||"~")},rank:function(t,e){return(t.rank||999)-(e.rank||999)},w:function(t,e){return window.__btdW(e,"w")-window.__btdW(t,"w")},w3:function(t,e){return window.__btdW(e,"w3")-window.__btdW(t,"w3")},default:function(t,e){return(e.level==="MLB"?1:0)-(t.level==="MLB"?1:0)}};e.sort(function(t,e){return o.dir*r[o.sort](t,e)||r.name(t,e)}),s.textContent=e.length+(1===e.length?" player":" players"),i.querySelector(".btd-reset").hidden="default"===o.sort&&"MLB"===o.lvl&&"all"===o.grp&&!o.ps.length&&!o.q;var a="default"===o.sort,u=null;l.innerHTML=e.length?(function(){var k=JSON.stringify(o);if(window.__btdK!==k){window.__btdK=k;window.__btdN=100}return e.slice(0,window.__btdN)})().map(function(t){var e="";return a&&(t.level==="MLB")!==u&&(e='
'+(t.level==="MLB"?"MLB players":"Everyone else")+"
",u=(t.level==="MLB")),e+''+f(t.name)+''+(/^w3?$/.test(o.sort)?''+window.__btdFW(t.id,o.sort)+'':'')+''+f(t.pos)+''+f("Other"===t.level?"\u2014":t.level)+''+f(window.__btdTM(t,o.lvl))+''+(t.rank?"No. "+t.rank+"":"")+""}).join("")+(e.length>window.__btdN?'':''):'
No players match.
'}}(); !function(){var st=document.createElement('style');st.textContent='.btd-arrow{flex:none;width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;cursor:pointer;color:var(--bt-mut);margin-right:-4px}.btd-arrow:before{content:"";width:0;height:0;border-left:6px solid currentColor;border-top:4.5px solid transparent;border-bottom:4.5px solid transparent;transition:transform .15s}.btd-arrow[aria-expanded=true]:before{transform:rotate(90deg)}.btd-arrow:hover{color:inherit;background:var(--bt-soft)}.btd-blurb{padding:2px 16px 14px 46px;font-size:.86em;line-height:1.5;color:color-mix(in srgb,currentColor 72%,transparent)}.btd-blurb p{margin:0 0 .6em}.btd-blurb p:last-child{margin:0}.btd-blurb a{font-weight:600}.btd-more{display:block;width:100%;padding:14px 16px;border:0;border-top:1px solid var(--bt-line);background:var(--bt-soft);color:inherit;font:inherit;font-weight:650;cursor:pointer}.btd-more:hover{background:color-mix(in srgb,var(--bt-blue) 14%,transparent)}@media(max-width:640px){.btd-blurb{padding:2px 12px 12px}}';document.head.appendChild(st);var C={}; window.__btdTog=function(ar){var row=ar.closest('.btd-row'),nx=row.nextElementSibling;if(nx&&nx.classList.contains('btd-blurb')){nx.remove();ar.setAttribute('aria-expanded','false');return}ar.setAttribute('aria-expanded','true');var d=document.createElement('div');d.className='btd-blurb';d.textContent='Loading\u2026';row.after(d);var u=row.getAttribute('href');(C[u]||(C[u]=fetch(u).then(function(r){return r.text()}).then(function(h){var x=new DOMParser().parseFromString(h,'text/html').querySelector('#bt-season-summary');return x?[].map.call(x.querySelectorAll('p'),function(p){return '

'+p.innerHTML+'

'}).join(''):''}))).then(function(ps){d.innerHTML=(ps||'

No 2026 season summary yet.

')+'

Full player page \u2192

'}).catch(function(){delete C[u];d.textContent='Couldn\'t load the summary. Try again.'})}; document.addEventListener('keydown',function(e){var a=e.target.closest&&e.target.closest('.btd-arrow');if(a&&(e.key==='Enter'||e.key===' ')){e.preventDefault();window.__btdTog(a)}})}(); !function(){window.__btdNK={"Arizona Diamondbacks":"Diamondbacks","Athletics":"Athletics","Atlanta Braves":"Braves","Baltimore Orioles":"Orioles","Boston Red Sox":"Red Sox","Chicago Cubs":"Cubs","Chicago White Sox":"White Sox","Cincinnati Reds":"Reds","Cleveland Guardians":"Guardians","Colorado Rockies":"Rockies","Detroit Tigers":"Tigers","Houston Astros":"Astros","Kansas City Royals":"Royals","Los Angeles Angels":"Angels","Los Angeles Dodgers":"Dodgers","Miami Marlins":"Marlins","Milwaukee Brewers":"Brewers","Minnesota Twins":"Twins","New York Mets":"Mets","New York Yankees":"Yankees","Philadelphia Phillies":"Phillies","Pittsburgh Pirates":"Pirates","San Diego Padres":"Padres","San Francisco Giants":"Giants","Seattle Mariners":"Mariners","St. Louis Cardinals":"Cardinals","Tampa Bay Rays":"Rays","Texas Rangers":"Rangers","Toronto Blue Jays":"Blue Jays","Washington Nationals":"Nationals"};var rl=function(){var s=document.querySelector(".btd-tm");if(!s||s.getAttribute("data-nk"))return!!s;s.setAttribute("data-nk","1");var v=s.value,os=[].slice.call(s.options),all=os.shift();os.forEach(function(o){o.textContent=window.__btdNK[o.textContent]||o.textContent});os.sort(function(a,b){return a.textContent.localeCompare(b.textContent)});s.innerHTML="";s.appendChild(all);os.forEach(function(o){s.appendChild(o)});s.value=v;all.textContent="All Teams";return!0};if(!rl()){var mo=new MutationObserver(function(){rl()&&mo.disconnect()});mo.observe(document.documentElement,{childList:!0,subtree:!0})}window.__btdD=window.__btdD||{};window.__btdW=function(p,k){var d=window.__btdD[p.id];return d&&d[k]!=null?d[k]:-99};window.__btdFW=function(id,k){var d=window.__btdD[id];return d&&d[k]!=null?d[k].toFixed(1)+' fWAR':'\u2014'};window.__btdSN={};window.__btdTM=function(p,lv){var n=p.team;if(!n)return"\u2014";if("MLB"===p.level)return window.__btdNK[n]||n;if("Other"===p.level)return n;var s=window.__btdSN[n]||n;return lv===p.level?s:s+" ("+p.level+")"};window.__btdDP=Promise.all([fetch("https://storage.ghost.io/c/f2/85/f285ce72-40e3-409f-ae3b-2ef371936c02/content/files/2026/10/bt-players-dirdata-2026-10-17b.json").then(function(r){return r.json()}).then(function(j){window.__btdD=j.d||{}}).catch(function(){}),fetch("https://statsapi.mlb.com/api/v1/teams?sportIds=11,12,13,14,16&season="+new Date().getFullYear()).then(function(r){return r.json()}).then(function(j){(j.teams||[]).forEach(function(x){window.__btdSN[x.name]=x.shortName||x.name})}).catch(function(){})]).then(function(){return{}});var st=document.createElement('style');st.textContent='.btd-sort{align-self:flex-start;font:inherit;font-size:.9em;font-weight:600;color:inherit;background:transparent;border:1px solid var(--bt-line);border-radius:10px;padding:8px 12px;cursor:pointer}.btd-sort option{color:#111;background:#fff}.btd-note{font-size:.78em;color:var(--bt-mut);margin-top:-4px}.btd-war{flex:none;font-style:normal;font-size:.8em;font-weight:700;color:var(--bt-blue);margin-left:auto;padding-left:8px;white-space:nowrap}';document.head.appendChild(st)}();