/* 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 teams Arizona Diamondbacks Athletics Atlanta Braves Baltimore Orioles Boston Red Sox Chicago Cubs Chicago White Sox Cincinnati Reds Cleveland Guardians Colorado Rockies Detroit Tigers Houston Astros Kansas City Royals Los Angeles Angels Los Angeles Dodgers Miami Marlins Milwaukee Brewers Minnesota Twins New York Mets New York Yankees Philadelphia Phillies Pittsburgh Pirates San Diego Padres San Francisco Giants Seattle Mariners St. Louis Cardinals Tampa Bay Rays Texas Rangers Toronto Blue Jays Washington Nationals Sort: A\u2013Z (MLB first) Sort: 2026 fWAR Sort: fWAR 2024\u201326 '+["all"].concat(n).map(function(t){return''+("all"===t?"All levels":t)+" "}).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''+t[1]+" "}).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''+t[1]+" "}).join("")+'
',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?'Show more ยท '+(e.length-window.__btdN).toLocaleString()+' left ':''):'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)}();