1// ============================================================ 2// about-pecos.js â Data layer + renderer 3// Mirrors source: about-pecos__2_.html (pecosleague.com/about-pecos) 4// All DATA matches source HTML exactly: 5// - All 2026 current teams (Mountain + Pacific) 6// - Full season history 2011â2026 7// - Season narratives 8// - Timeline table 9// - MLB alumni (source exact list) 10// - Former teams 11// ============================================================ 12 13// ââ CURRENT TEAMS (from source HTML, exact match) âââââââââââââââââââââââââââââ 14const MOUNTAIN_TEAMS = [ 15 { 16 id: 3, name: "Roswell Invaders", 17 ballpark: "Joe Bauman Park", address: "100 E Poe", city: "Roswell", state: "NM", zip: "88203", 18 website: "https://www.RoswellInvaders.com", 19 phone: "575-838-2667", founded: 2011, 20 logo: "https://www.pecosleague.com/images/roswell.png", 21 fb: "http://www.facebook.com/RoswellInvaders", 22 ig: "https://www.instagram.com/roswell_invaders/?hl=en", 23 tv: "https://pecosleague.vhx.tv/roswell-invaders", 24 yt: "https://www.youtube.com/@roswellinvaders", 25 record: "0-0", illus: "https://www.pecosleague.com/images/illustrations/3.png", 26 }, 27 { 28 id: 4, name: "Alpine Cowboys", 29 ballpark: "Kokernot Field", address: "400 Loop Road", city: "Alpine", state: "TX", zip: "79830", 30 website: "https://Alpine.PecosLeague.com", 31 phone: "432-386-3402", founded: 2009, 32 logo: "https://www.pecosleague.com/images/alpine.png", 33 fb: "https://www.facebook.com/AlpineCowboys", 34 ig: "https://www.instagram.com/alpinecowboyso6/?hl=en", 35 tv: "https://pecosleague.vhx.tv/alpine-cowboys", 36 yt: "https://www.youtube.com/@06AlpineCowboys", 37 record: "0-0", illus: "https://www.pecosleague.com/images/illustrations/4.png", 38 }, 39 { 40 id: 5, name: "Pecos Bills", 41 ballpark: "Martinez Field", address: "66 Co Rd 118", city: "Pecos", state: "TX", zip: "79772", 42 website: "https://www.PecosBills.com", 43 phone: "432-400-1298", founded: 2024, 44 logo: "https://www.pecosleague.com/images/5.png", 45 fb: "https://www.facebook.com/PecosBillsBaseball", 46 ig: "https://www.instagram.com/pecosbillsbaseball", 47 tv: "https://pecosleague.vhx.tv/pecos-bills", 48 yt: "https://www.youtube.com/@pecosbills", 49 record: "0-0", illus: "https://www.pecosleague.com/images/illustrations/5.png", 50 }, 51 { 52 id: 13, name: "Santa Fe Fuego", 53 ballpark: "Fort Marcy Park", address: "Murales", city: "Santa Fe", state: "NM", zip: "87504", 54 website: "https://www.SantaFeFuego.com", 55 phone: "505-428-5715", founded: 2012, 56 logo: "https://www.pecosleague.com/images/sf.png", 57 fb: "https://www.facebook.com/fuegobaseball", 58 ig: "https://www.instagram.com/santafefuego/?hl=en", 59 tv: "https://pecosleague.vhx.tv/santa-fe-fuego", 60 yt: "https://www.youtube.com/@santafefuegobaseball", 61 record: "0-0", illus: "https://www.pecosleague.com/images/illustrations/13.png", 62 }, 63 { 64 id: 9, name: "Blackwell FlyCatchers", 65 ballpark: "Morgan Field", address: "800 South Main Street", city: "Blackwell", state: "OK", zip: "74631", 66 website: "https://www.BlackwellFlycatchers.com", 67 phone: "580-606-6722", founded: 2023, 68 logo: "https://www.pecosleague.com/images/flycatchers.png", 69 fb: "https://www.facebook.com/BlackwellFlycatchers", 70 ig: "https://www.instagram.com/blackwellflycatchers/", 71 tv: "https://pecosleague.vhx.tv/blackwell-flycatchers", 72 yt: "https://www.youtube.com/@blackwellflycatchers", 73 record: "0-0", illus: "https://www.pecosleague.com/images/illustrations/9.png", 74 }, 75 { 76 id: 15, name: "Trinidad Triggers", 77 ballpark: "Central Park", address: "700 Smith", city: "Trinidad", state: "CO", zip: "81082", 78 website: "https://www.TrinidadTriggers.com",
79 phone: "719-679-5954", founded: 2012, 80 logo: "https://www.pecosleague.com/images/trinidad.png", 81 fb: "https://www.facebook.com/triggersbaseball", 82 ig: "https://www.instagram.com/triggersbaseball/", 83 tv: "https://pecosleague.vhx.tv/trinidad-triggers", 84 yt: "https://www.youtube.com/@trinidadtriggers", 85 record: "0-0", illus: "https://www.pecosleague.com/images/illustrations/15.png", 86 }, 87 { 88 id: 17, name: "Garden City Wind", 89 ballpark: "Clint Lightner", address: "706 E Maple", city: "Garden City", state: "KS", zip: "67846", 90 website: "https://www.GardenCityWind.com", 91 phone: "620-937-8838", founded: 2015, 92 logo: "https://www.pecosleague.com/images/gc.png", 93 fb: "http://www.facebook.com/gardencitywind", 94 ig: "", 95 tv: "https://pecosleague.vhx.tv/garden-city-wind", 96 yt: "https://www.youtube.com/@gardencitywind", 97 record: "0-0", illus: "https://www.pecosleague.com/images/illustrations/17.png", 98 }, 99]; 100 101const PACIFIC_TEAMS = [ 102 { 103 id: 26, name: "Bakersfield Train Robbers", 104 ballpark: "Sam Lynn Ballpark", address: "4009 Chester Ave", city: "Bakersfield", state: "CA", zip: "93301", 105 website: "https://www.BakersfieldTrainRobbers.com", 106 phone: "661-520-1714", founded: 2013, 107 logo: "https://www.pecosleague.com/images/bakersfield.png", 108 fb: "https://www.facebook.com/bakersfieldtrainrobbers", 109 ig: "https://www.instagram.com/bakersfieldtrainrobbers661/", 110 tv: "https://pecosleague.vhx.tv/bakersfield-train-robbers", 111 yt: "https://www.youtube.com/@trainrobbers", 112 record: "0-0", illus: "https://www.pecosleague.com/images/illustrations/26.png", 113 }, 114 { 115 id: 8, name: "Tucson Saguaros", 116 ballpark: "Kino Stadium", address: "2500 E Ajo Way", city: "Tucson", state: "AZ", zip: "85713", 117 website: "https://www.SaguarosBaseball.com", 118 phone: "520-829-5687", founded: 2016, 119 logo: "https://www.pecosleague.com/images/tucson.png", 120 fb: "https://www.facebook.com/SaguarosBaseball", 121 ig: "https://www.instagram.com/tucsonsaguaros520/", 122 tv: "https://pecosleague.vhx.tv/tucson-saguaros", 123 yt: "https://www.youtube.com/@saguarosbaseball", 124 record: "0-0", illus: "https://www.pecosleague.com/images/illustrations/8.png", 125 }, 126 127 { 128 id: 28, name: "Martinez Sturgeon", 129 ballpark: "Waterfront Park", address: "1204 Joe DiMaggio Drive", city: "Martinez", state: "CA", zip: "94553", 130 website: "https://www.MartinezSturgeon.com/", 131 phone: "925-372-5265", founded: 2020, 132 logo: "https://www.pecosleague.com/images/martinez.png", 133 fb: "https://www.facebook.com/MtzSturgeon", 134 ig: "https://www.instagram.com/martinezsturgeon/", 135 tv: "https://pecosleague.vhx.tv/martinez-sturgeon", 136 yt: "https://www.youtube.com/@martinezsturgeon", 137 record: "0-0", illus: "https://www.pecosleague.com/images/illustrations/28.png", 138 }, 139 { 140 id: 801, name: "San Rafael Pacifics", 141 ballpark: "Albert Park", address: "100 Albert Park Ln", city: "San Rafael", state: "CA", zip: "94901", 142 website: "https://www.PacificsBaseball.com", 143 phone: "415-726-2044", founded: 2012, 144 logo: "https://www.pecosleague.com/images/801.png", 145 fb: "https://www.facebook.com/SanRafaelPacifics", 146 ig: "https://www.instagram.com/srpacifics/", 147 tv: "https://pecosleague.vhx.tv/san-rafael-pacifics", 148 yt: "https://www.youtube.com/@SanRafaelPacifics", 149 record: "0-0", illus: "https://www.pecosleague.com/images/illustrations/801.png", 150 }, 151 { 152 id: 14, name: "Grand Junction Razorback Suckers", 153 ballpark: "Suplizio Field", address: "1315 North Ave", city: "Grand Junction", state: "CO", zip: "81501", 154 website: "https://www.razorbacksuckers.com", 155 phone: "970-315-5183", founded: 2026, 156 logo: "https://www.pecosleague.com/images/14.png", 157 fb: "https://www.facebook.com/profile.php?id=61582001350228", 158 ig: "https://www.instagram.com/grandjunctionrazorbacksuckers/", 159 tv: "https://pecosleague.vhx.tv/grand-junction-razorback-suckers", 160 yt: "https://www.youtube.com/@pecosleague", 161 record: "0-0", illus: "https://www.pecosleague.com/images/illustrations/14.png", 162 }, 163 164 165 { 166 id: 6, name: "Austin Weirdos", 167 ballpark: "Weirdos Park", address: "4009 Chester Ave", city: "Bakersfield", state: "CA", zip: "93301", 168 website: "https://www.WeirdosBaseball.com", 169 phone: "512-649-5418", founded: 2022, 170 logo: "https://www.pecosleague.com/images/6.png", 171 fb: "https://www.facebook.com/AustinWeirdos", 172 ig: "https://www.instagram.com/austin_weirdos/", 173 tv: "", 174 yt: "https://www.youtube.com/@weirdosbaseball", 175 record: "0-0", illus: "https://www.pecosleague.com/images/illustrations/6.png", 176 }, 177 { 178 id: 33, name: "Dublin Leprechauns", 179 ballpark: "Fallon Sports Park", address: "2605 Central Parkway", city: "Dublin", state: "CA", zip: "94568", 180 website: "https://www.DublinLeprechauns.com", 181 phone: "(925) 434-5160", founded: 2023, 182 logo: "https://www.pecosleague.com/images/33.png", 183 fb: "https://www.facebook.com/dublinleprechauns", 184 ig: "https://www.instagram.com/dublinleprechauns/", 185 tv: "https://pecosleague.vhx.tv/dublin-leprechauns", 186 yt: "https://www.youtube.com/@dublinleprechauns", 187 record: "0-0", illus: "https://www.pecosleague.com/images/illustrations/33.png", 188 }, 189]; 190 191// ââ SEASON HISTORY DATA (exact from source HTML) ââââââââââââââââââââââââââââââ 192// Format: { year, teams: [{img, name, record, isChamp, tid, prefix, baseUrl}] } 193// tid + prefix mirror the ASP page links in source exactly 194const SEASONS = [ 195 { 196 year: 2026, 197 champion: "Garden City Wind", 198 narrative: "Garden City Wind defeated Martinez Sturgeon for first ever Pecos League Championship. The Pecos League moved to Grand Junction Colorado. The Pecos League moved to Presto Sports and Vimeo Streaming Platform. A major rule change after 10 innings games were ended in a tie.", 199 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2025.png", 200 photos: [ 201 "https://www.pecosleague.com/images/mediaupload/4283.jpg", 202 "https://www.pecosleague.com/images/mediaupload/GardenCityWind2026ChampionsPicture.jpg", 203 "https://www.pecosleague.com/images/mediaupload/3765.jpg", 204 "https://www.pecosleague.com/images/mediaupload/7673.jpg", 205 ], 206 teams: [ 207 { img:"17.png", name:"Garden City Wind", record:"40-11-1", isChamp:true, tid:17, prefix:"wind", baseUrl:"https://www.GardenCityWind.com",champFlag:"https://www.pecosleague.com/images/flags/2026new.png" }, 208 { img:"28.png", name:"Martinez Sturgeon", record:"24-23-1", isChamp:false, tid:28, prefix:"martinez", baseUrl:"https://www.MartinezSturgeon.com/",champFlag:"https://www.pecosleague.com/images/flags/2026PacificChamps.png" }, 209 { img:"3.png", name:"Roswell Invaders", record:"29-17", isChamp:false, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com" }, 210 { img:"8.png", name:"Tucson Saguaros", record:"21-27-1", isChamp:false, tid:8, prefix:"tucson", baseUrl:"https://www.SaguarosBaseball.com", }, 211 { img:"14.png", name:"Grand Junction", record:"30-23-1", isChamp:false, tid:14, prefix:"grandjunction", baseUrl:"https://www.razorbacksuckers.com" }, 212 { img:"801.png", name:"San Rafael Pacifics", record:"26-19-2", isChamp:false, tid:801, prefix:"pacifics", baseUrl:"https://www.PacificsBaseball.com"}, 213 { img:"15.png", name:"Trinidad Triggers", record:"36-16-1", isChamp:false, tid:15, prefix:"trinidad", baseUrl:"https://www.TrinidadTriggers.com" }, 214 { img:"26.png", name:"Bakersfield Train Robbers",record:"29-20-1", isChamp:false, tid:26, prefix:"bakersfield",baseUrl:"https://www.BakersfieldTrainRobbers.com" }, 215 { img:"33.png", name:"Dublin Leprechauns", record:"30-13-4", isChamp:false, tid:33, prefix:"dublin", baseUrl:"https://www.DublinLeprechauns.com" }, 216 { img:"18.png", name:"North Platte 80s", record:"16-35-1", isChamp:false, tid:18, prefix:"platte", baseUrl:"https://www.NorthPlatte80s.com" }, 217 { img:"4.png", name:"Alpine Cowboys", record:"28-21-1", isChamp:false, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com" }, 218 { img:"9.png", name:"Blackwell FlyCatchers", record:"14-34-1", isChamp:false, tid:9, prefix:"blackwell", baseUrl:"https://www.BlackwellFlycatchers.com" }, 219 { img:"5.png", name:"Pecos Bills", record:"21-29", isChamp:false, tid:5, prefix:"bills", baseUrl:"https://www.PecosBills.com" }, 220 { img:"13.png", name:"Santa Fe Fuego", record:"15-37-1", isChamp:false, tid:13, prefix:"santafe", baseUrl:"https://www.SantaFeFuego.com" }, 221 { img:"6.png", name:"Austin Weirdos", record:"6-42", isChamp:false, tid:6, prefix:"austin", baseUrl:"https://www.weirdosbaseball.com" }, 222 ] 223 }, 224 225 226 227 { 228 year: 2025, 229 champion: "Tucson Saguaros", 230 narrative: "Sean McNeill became the Pecos League's all time winningest manager, winning his 275th game and third championship. The Pecos League broadcasts were outstanding across most of the league. <a href='https://ca.news.yaho
230o.com/baseball-youtube-sensation-marika-lyszczyk-175147427.html'>Marika Lyszczyk</a> became the first female to ever play in Pecos League.", 231 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2025.png", 232 photos: [ 233 "https://www.pecosleague.com/images/mediaupload/4097.jpg", 234 "https://www.pecosleague.com/images/mediaupload/8923.jpg", 235 "https://www.pecosleague.com/images/mediaupload/7850.jpg", 236 "https://www.pecosleague.com/images/mediaupload/7673.jpg", 237 ], 238 teams: [ 239 { img:"17.png", name:"Garden City Wind", record:"44-7", isChamp:false, tid:17, prefix:"wind", baseUrl:"https://www.GardenCityWind.com" }, 240 { img:"8.png", name:"Tucson Saguaros", record:"43-9", isChamp:true, tid:8, prefix:"tucson", baseUrl:"https://www.SaguarosBaseball.com", champFlag:"https://www.pecosleague.com/images/flags/2025new.png" }, 241 { img:"801.png", name:"San Rafael Pacifics", record:"38-16", isChamp:false, tid:801, prefix:"pacifics", baseUrl:"https://www.PacificsBaseball.com", champFlag:"https://www.pacificsbaseball.com/images/champions/2025.png" }, 242 { img:"26.png", name:"Bakersfield Train Robbers",record:"35-19", isChamp:false, tid:26, prefix:"bakersfield",baseUrl:"https://www.BakersfieldTrainRobbers.com" }, 243 { img:"33.png", name:"Dublin Leprechauns", record:"33-20", isChamp:false, tid:33, prefix:"dublin", baseUrl:"https://www.DublinLeprechauns.com" }, 244 { img:"18.png", name:"North Platte 80s", record:"27-27", isChamp:false, tid:18, prefix:"platte", baseUrl:"https://www.NorthPlatte80s.com" }, 245 { img:"4.png", name:"Alpine Cowboys", record:"28-22", isChamp:false, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com" }, 246 { img:"9.png", name:"Blackwell FlyCatchers", record:"23-23", isChamp:false, tid:9, prefix:"blackwell", baseUrl:"https://www.BlackwellFlycatchers.com" }, 247 { img:"5.png", name:"Pecos Bills", record:"25-25", isChamp:false, tid:5, prefix:"bills", baseUrl:"https://www.PecosBills.com" }, 248 { img:"28.png", name:"Martinez Sturgeon", record:"25-29", isChamp:false, tid:28, prefix:"martinez", baseUrl:"https://www.MartinezSturgeon.com/" }, 249 { img:"15.png", name:"Trinidad Triggers", record:"21-31", isChamp:false, tid:15, prefix:"trinidad", baseUrl:"https://www.TrinidadTriggers.com" }, 250 { img:"13.png", name:"Santa Fe Fuego", record:"16-34", isChamp:false, tid:13, prefix:"santafe", baseUrl:"https://www.SantaFeFuego.com" }, 251 { img:"11.png", name:"Iola Hormigas", record:"12-34", isChamp:false, tid:11, prefix:"kansascity",baseUrl:"https://www.HormigasBaseball.com" }, 252 { img:"32.png", name:"Vallejo Seaweed", record:"17-37", isChamp:false, tid:32, prefix:"vallejo", baseUrl:"https://www.VallejoSeaweed.com" }, 253 { img:"23.png", name:"Monterey Amberjacks", record:"13-40", isChamp:false, tid:23, prefix:"monterey", baseUrl:"https://www.MontereyAmberJacks.com" }, 254 { img:"3.png", name:"Roswell Invaders", record:"9-42", isChamp:false, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com" }, 255 ] 256 }, 257 { 258 year: 2024, 259 champion: "Alpine Cowboys", 260 narrative: "The day the season ended the Pecos League completed its goal of leaving Marysville and returning to Monterey for the 6th California Division Team. <a href='https://www.uscannenbergmedia.com/2024/04/10/oakland-athletics-to-move-to-sacramento-for-2025-season/'>The Oakland A's announced they were moving to Sacramento for the 2025 season</a>, just 31 minutes away from Marysville. The Pecos League accepted the offer from the City of Kansas City to occupy Satchel Paige Stadium.", 261 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2024.png", 262 photos: [ 263 "https://www.pecosleague.com/images/mediaupload/9929.jpg", 264 "https://www.pecosleague.com/images/mediaupload/4126.jpg", 265 ], 266 teams: [ 267 { img:"4.png", name:"Alpine Cowboys", record:"45-4", isChamp:true, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com", champFlag:"https://www.pecosleague.com/images/flags/2024new.png" }, 268 { img:"17.png", name:"Garden City Wind", record:"42-9", isChamp:false, tid:17, prefix:"wind", baseUrl:"https://www.GardenCityWind.com" }, 269 { img:"15.png", name:"Trinidad Triggers", record:"34-17", isChamp:false, tid:15, prefix:"trinidad", baseUrl:"https://www.TrinidadTriggers.com" }, 270 { img:"8.png", name:"Tucson Saguaros", record:"27-18", isChamp:false, tid:8, prefix:"tucson", baseUrl:"https://www.SaguarosBaseball.com" }, 271 { img:"26.png", name:"Bakersfield Train Robbers",record:"33-21", isChamp:false, tid:26, prefix:"bakersfield",baseUrl:"https://www.BakersfieldTrainRobbers.com" }, 272 { img:"9.png", name:"Blackwell FlyCatchers", record:"27-22", isChamp:false, tid:9, prefix:"blackwell", baseUrl:"https://www.BlackwellFlycatchers.com" }, 273 { img:"801.png", name:"San Rafael Pacifics", record:"31-23", isChamp:false, tid:801, prefix:"pacifics", baseUrl:"https://www.PacificsBaseball.com", champFlag:"https://www.pacificsbaseball.com/images/champions/2024.png" }, 274 { img:"30.png", name:"Marysville Drakes", record:"29-25", isChamp:false, tid:30, prefix:"marysville",baseUrl:"https://www.marysvilledrakes.com" }, 275 { img:"32.png", name:"Vallejo Seaweed", record:"25-29", isChamp:false, tid:32, prefix:"vallejo", baseUrl:"https://www.VallejoSeaweed.com" }, 276 { img:"33.png", name:"Dublin Leprechauns", record:"24-30", isChamp:false, tid:33, prefix:"dublin", baseUrl:"https://www.DublinLeprechauns.com" }, 277 { img:"3.png", name:"Roswell Invaders", record:"20-30", isChamp:false, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com" }, 278 { img:"18.png", name:"North Platte 80s", record:"16-33", isChamp:false, tid:18, prefix:"platte", baseUrl:"https://www.NorthPlatte80s.com" }, 279 { img:"28.png", name:"Martinez Sturgeon", record:"20-34", isChamp:false, tid:28, prefix:"martinez", baseUrl:"https://www.MartinezSturgeon.com/" }, 280 { img:"13.png", name:"Santa Fe Fuego", record:"16-35", isChamp:false, tid:13, prefix:"santafe", baseUrl:"https://www.SantaFeFuego.com" }, 281 { img:"5.png", name:"Pecos Bills", record:"14-38", isChamp:false, tid:5, prefix:"bills", baseUrl:"https://www.PecosBills.com" }, 282 { img:"6.png", name:"Austin Weirdos", record:"8-43", isChamp:false, tid:6, prefix:"austin", baseUrl:"https://www.WeirdosBaseball.com" }, 283 ] 284 }, 285 { 286 year: 2023, 287 champion: "San Rafael Pacifics", 288 narrative: "In 2022â2023 the Pecos League had its best offseason ever. The addition of Vallejo Seaweed, Lancaster Sound Breakers, Dublin Leprechauns, and Marysville Drakes cemented an eight team California only Pacific Division. The Austin Weirdos field was deemed unplayable after the 2nd series of the year which forced them on the road for the entire season. They responded with a 1-47 record. San Rafael defeated Tucson in the league finals.", 289 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2023.png", 290 photos: [ 291 "https://www.pecosleague.com/images/mediaupload/3666.jpg", 292 "https://www.pecosleague.com/images/mediaupload/3610.jpg", 293 ], 294 teams: [ 295 { img:"801.png", name:"San Rafael Pacifics", record:"39-8", isChamp:true, tid:801, prefix:"pacifics", baseUrl:"https://www.PacificsBaseball.com", champFlag:"https://www.pecosleague.com/images/flags/2023new.png" }, 296 { img:"8.png", name:"Tucson Saguaros", record:"34-13", isChamp:false, tid:8, prefix:"tucson", baseUrl:"https://www.SaguarosBaseball.com" }, 297 { img:"4.png", name:"Alpine Cowboys", record:"36-13", isChamp:false, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com" }, 298 { img:"23.png", name:"Monterey Amberjacks", record:"31-18", isChamp:false, tid:23, prefix:"monterey", baseUrl:"https://www.MontereyAmberJacks.com" }, 299 { img:"26.png", name:"Bakersfield Train Robbers",record:"29-18", isChamp:false, tid:26, prefix:"bakersfield",baseUrl:"https://www.BakersfieldTrainRobbers.com" }, 300 { img:"15.png", name:"Trinidad Triggers", record:"30-19", isChamp:false, tid:15, prefix:"trinidad", baseUrl:"https://www.TrinidadTriggers.com" }, 301 { img:"17.png", name:"Garden City Wind", record:"30-20", isChamp:false, tid:17, prefix:"wind", baseUrl:"https://www.GardenCityWind.com" }, 302 { img:"37.png", name:"Lancaster Sound Breakers", record:"28-22", isChamp:false, tid:37, prefix:"lancaster", baseUrl:"http://www.lancastersoundbreakers.com" }, 303 { img:"30.png", name:"Marysville Drakes", record:"27-23", isChamp:false, tid:30, prefix:"marysville",baseUrl:"https://www.marysvilledrakes.com" }, 304 { img:"3.png", name:"Roswell Invaders", record:"29-23", isChamp:false, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com" }, 305 { img:"28.png", name:"Martinez Sturgeon", record:"25-24", isChamp:false, tid:28, prefix:"martinez", baseUrl:"https://www.MartinezSturgeon.com/" }, 306 { img:"9.png", name:"Blackwell FlyCatchers", record:"17-25", isChamp:false, tid:9, prefix:"blackwell", baseUrl:"https://www.BlackwellFlycatchers.com" }, 307 { img:"13.png", name:"Santa Fe Fuego", record:"17-31", isChamp:false, tid:13, prefix:"santafe", baseUrl:"https://www.SantaFeFuego.com" }, 308 { img:"32.png", name:"Vallejo Seaweed", record:"12-37", isChamp:false, tid:32, prefix:"vallejo", baseUrl:"https://www.VallejoSeaweed.com" }, 309 { img:"33.png", name:"Dublin Leprechauns", record:"4-44", isChamp:false, tid:33, prefix:"dublin", baseUrl:"https://www.DublinLeprechauns.com" }, 310 { img:"6.png", name:"Austin Weirdos", record:"1-47", isChamp:false, tid:6, prefix:"austin", baseUrl:"https://www.WeirdosBaseball.com" }, 311 ] 312 }, 313 { 314 year: 2022, 315 champion: "Roswell Invaders", 316 narrative: "The offseason of 2022 only featured four changes: The Wasco Reserves became a travel team playing all their games in Bakersfield. Santa Rosa Scuba Divers were added to Pacific Division. Tucson went back to Pacific Division. The Mountain Division saw the addition of Weimar Hormigas and Austin Weirdos. Roswell defeated Tucson in the 2nd Pecos League Finals rematch.", 317 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2022.png", 318 photos: [ 319 "https://www.pecosleague.com/images/mediaupload/2930.jpg", 320 "https://www.pecosleague.com/images/mediaupload/2826.jpg", 321 ], 322 teams: [ 323 { img:"8.png", name:"Tucson Saguaros", record:"34-8", isChamp:false, tid:8, prefix:"tucson", baseUrl:"https://www.SaguarosBaseball.com" }, 324 { img:"801.png", name:"San Rafael Pacifics", record:"41-9", isChamp:false, tid:801, prefix:"pacifics", baseUrl:"https://www.PacificsBaseball.com" }, 325 { img:"17.png", name:"Garden City Wind", record:"36-10", isChamp:false, tid:17, prefix:"wind", baseUrl:"https://www.GardenCityWind.com" }, 326 { img:"4.png", name:"Alpine Cowboys", record:"32-17", isChamp:false, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com" }, 327 { img:"15.png", name:"Trinidad Triggers", record:"25-18", isChamp:false, tid:15, prefix:"trinidad", baseUrl:"https://www.TrinidadTriggers.com" }, 328 { img:"26.png", name:"Bakersfield Train Robbers",record:"31-18", isChamp:false, tid:26, prefix:"bakersfield",baseUrl:"https://www.BakersfieldTrainRobbers.com" }, 329 { img:"3.png", name:"Roswell Invaders", record:"27-22", isChamp:true, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com", champFlag:"https://www.pecosleague.com/images/flags/2022new.png" }, 330 { img:"13.png", name:"Santa Fe Fuego", record:"21-25", isChamp:false, tid:13, prefix:"santafe", baseUrl:"https://www.SantaFeFuego.com" }, 331 { img:"23.png", name:"Monterey Amberjacks", record:"21-29", isChamp:false, tid:23, prefix:"monterey", baseUrl:"https://www.MontereyAmberJacks.com" }, 332 { img:"29.png", name:"Santa Rosa Scuba Divers", record:"22-29", isChamp:false, tid:29, prefix:"santarosa", baseUrl:"https://www.santarosascubadivers.com" }, 333 { img:"19.png", name:"Colorado Springs Snow Sox",record:"14-31", isChamp:false, tid:19, prefix:"snowsox", baseUrl:"http://www.coloradospringssnowsox.com" }, 334 { img:"57.png", name:"Weimar Hormigas", record:"16-31", isChamp:false, tid:57, prefix:"weimar", baseUrl:"http://www.weimarhormigas.com" }, 335 { img:"6.png", name:"Austin Weirdos", record:"19-31", isChamp:false, tid:6, prefix:"austin", baseUrl:"https://www.WeirdosBaseball.com" }, 336 { img:"28.png", name:"Martinez Sturgeon", record:"19-31", isChamp:false, tid:28, prefix:"martinez", baseUrl:"https://www.MartinezSturgeon.com/" }, 337 { img:"31.png", name:"Santa Cruz Seaweed", record:"17-33", isChamp:false, tid:31, prefix:"seaweed", baseUrl:"http://www.SeaWeedBaseball.com" }, 338 { img:"27.png", name:"Wasco Reserve", record:"7-40", isChamp:false, tid:27, prefix:"wasco", baseUrl:"http://www.WascoReserves.com" }, 339 ] 340 }, 341 { 342 year: 2021, 343 champion: "Tucson Saguaros", 344 narrative: "The Pecos League moved into the Bay Area of California with the addition of the San Rafael Pacifics, Santa Cruz Seaweed and Martinez Sturgeon. The Pecos League replaced White Sands with Colorado Springs. Many teams set attendance records including Santa Fe and Garden City. Tucson was the first back to back Champion.", 345 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2021.png", 346 photos: [ 347 "https://www.pecosleague.com/images/mediaupload/9529.jpg", 348 "https://www.pecosleague.com/images/mediaupload/9296.jpg", 349 ], 350 teams: [ 351 { img:"26.png", name:"Bakersfield Train Robbers",record:"33-5", isChamp:false, tid:26, prefix:"bakersfield",baseUrl:"https://www.BakersfieldTrainRobbers.com" }, 352 { img:"19.png", name:"Colorado Springs Snow Sox",record:"29-14", isChamp:false, tid:19, prefix:"snowsox", baseUrl:"http://www.coloradospringssnowsox.com" }, 353 { img:"28.png", name:"Martinez Sturgeon", record:"23-17", isChamp:false, tid:28, prefix:"martinez", baseUrl:"https://www.MartinezSturgeon.com/" }, 354 { img:"801.png", name:"San Rafael Pacifics", record:"21-18", isChamp:false, tid:801, prefix:"pacifics", baseUrl:"https://www.PacificsBaseball.com", champFlag:"http://www.pacificsbaseball.com/images/champions/2021.png" }, 355 { img:"17.png", name:"Garden City Wind", record:"20-16", isChamp:false, tid:17, prefix:"wind", baseUrl:"https://www.GardenCityWind.com" }, 356 { img:"8.png", name:"Tucson Saguaros", record:"32-23", isChamp:true, tid:8, prefix:"tucson", baseUrl:"https://www.SaguarosBaseball.com", champFlag:"https://www.pecosleague.com/images/flags/2021new.png" }, 357 { img:"31.png", name:"Santa Cruz Seaweed", record:"16-24", isChamp:false, tid:31, prefix:"seaweed", baseUrl:"http://www.SeaWeedBaseball.com" }, 358 { img:"23.png", name:"Monterey Amberjacks", record:"14-24", isChamp:false, tid:23, prefix:"monterey", baseUrl:"https://www.MontereyAmberJacks.com" }, 359 { img:"4.png", name:"Alpine Cowboys", record:"30-25", isChamp:false, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com" }, 360 { img:"3.png", name:"Roswell Invaders", record:"30-26", isChamp:false, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com" }, 361 { img:"13.png", name:"Santa Fe Fuego", record:"27-28", isChamp:false, tid:13, prefix:"santafe", baseUrl:"https://www.SantaFeFuego.com" }, 362 { img:"27.png", name:"Wasco Reserve", record:"10-29", isChamp:false, tid:27, prefix:"wasco", baseUrl:"http://www.WascoReserves.com" }, 363 { img:"15.png", name:"Trinidad Triggers",
363record:"19-31", isChamp:false, tid:15, prefix:"trinidad", baseUrl:"https://www.TrinidadTriggers.com" }, 364 { img:"16.png", name:"Salina Stockade", record:"10-41", isChamp:false, tid:16, prefix:"salina", baseUrl:"http://www.SalinaStockade.com" }, 365 ] 366 }, 367 { 368 year: 2020, 369 champion: "Tucson Saguaros", 370 narrative: "The Pecos League was not allowed to play any games in its regular cities with fans. The Pecos League played the entire season with four teams in Houston, Texas at Coastal Baseball Park. There were also no night games. The Tucson Saguaros completely dominated the league going 26-4 and sweeping the Championship Series over Salina.", 371 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2020.png", 372 photos: [ 373 "https://www.pecosleague.com/images/mediaupload/9589.jpg", 374 "https://www.pecosleague.com/images/mediaupload/9462.jpg", 375 ], 376 teams: [ 377 { img:"8.png", name:"Tucson Saguaros", record:"26-4", isChamp:true, tid:8, prefix:"tucson", baseUrl:"https://www.SaguarosBaseball.com", champFlag:"https://www.pecosleague.com/images/flags/2020new.png" }, 378 { img:"16.png", name:"Salina Stockade", record:"16-15", isChamp:false, tid:16, prefix:"salina", baseUrl:"http://www.SalinaStockade.com" }, 379 { img:"3.png", name:"Roswell Invaders", record:"10-19", isChamp:false, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com" }, 380 { img:"21.png", name:"Houston Apollos", record:"7-21", isChamp:false, tid:21, prefix:"apollos", baseUrl:"https://www.HoustonApollos.com" }, 381 ] 382 }, 383 { 384 year: 2019, 385 champion: "Alpine Cowboys", 386 narrative: "The offseason of 2019 only featured one change: The Wasco Reserves replaced the Ruidoso Osos. The Pecos League went back to two divisions. The Salina Stockade served as a fulltime travel team in the Pacific Association. The Monterey Amberjacks qualified for the playoffs for the first time in team history. Alpine defeated Bakersfield in the first ever Pecos League Finals rematch.", 387 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2019.png", 388 photos: [ 389 "https://www.pecosleague.com/images/mediaupload/7427.jpg", 390 "https://www.pecosleague.com/images/mediaupload/7465.jpg", 391 ], 392 teams: [ 393 { img:"4.png", name:"Alpine Cowboys", record:"41-16", isChamp:true, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com", champFlag:"https://www.pecosleague.com/images/flags/2019new.png" }, 394 { img:"24.png", name:"High Desert Yardbirds", record:"46-18", isChamp:false, tid:24, prefix:"highdesert", baseUrl:"http://www.HighDesertYardBirds.com" }, 395 { img:"3.png", name:"Roswell Invaders", record:"37-21", isChamp:false, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com" }, 396 { img:"23.png", name:"Monterey Amberjacks", record:"36-25", isChamp:false, tid:23, prefix:"monterey", baseUrl:"https://www.MontereyAmberJacks.com" }, 397 { img:"26.png", name:"Bakersfield Train Robbers",record:"37-26", isChamp:false, tid:26, prefix:"bakersfield",baseUrl:"https://www.BakersfieldTrainRobbers.com" }, 398 { img:"8.png", name:"Tucson Saguaros", record:"30-30", isChamp:false, tid:8, prefix:"tucson", baseUrl:"https://www.SaguarosBaseball.com" }, 399 { img:"13.png", name:"Santa Fe Fuego", record:"27-31", isChamp:false, tid:13, prefix:"santafe", baseUrl:"https://www.SantaFeFuego.com" }, 400 { img:"15.png", name:"Trinidad Triggers", record:"25-31", isChamp:false, tid:15, prefix:"trinidad", baseUrl:"https://www.TrinidadTriggers.com" }, 401 { img:"17.png", name:"Garden City Wind", record:"42-40", isChamp:false, tid:17, prefix:"wind", baseUrl:"https://www.GardenCityWind.com" }, 402 { img:"27.png", name:"Wasco Reserve", record:"19-43", isChamp:false, tid:27, prefix:"wasco", baseUrl:"http://www.WascoReserves.com" }, 403 { img:"22.png", name:"California City Whiptails",record:"12-47", isChamp:false, tid:22, prefix:"californiacity",baseUrl:"http://www.CaliforniaCityWhiptails.com" }, 404 { img:"1.png", name:"White Sands Pupfish", record:"8-50", isChamp:false, tid:1, prefix:"pupfish", baseUrl:"http://www.WhiteSandsPupfish.com" }, 405 ] 406 }, 407 { 408 year: 2018, 409 champion: "Bakersfield Train Robbers", 410 narrative: "The Pecos League's salary structure changed with the America's Pastime Act minimum wage passing right before the season. Teams now paid their players individually; the league no longer could pay players. In the playoffs it was Trinidad defeating Roswell and Bakersfield defeating California City in the first roun
410d. Bakersfield defeated Alpine in a great 3 game series in West Texas.", 411 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2018.png", 412 photos: [ 413 "https://www.pecosleague.com/images/mediaupload/7119.jpg", 414 "https://www.pecosleague.com/images/mediaupload/7137.jpg", 415 ], 416 teams: [ 417 { img:"4.png", name:"Alpine Cowboys", record:"47-15", isChamp:false, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com" }, 418 { img:"8.png", name:"Tucson Saguaros", record:"41-18", isChamp:false, tid:8, prefix:"tucson", baseUrl:"https://www.SaguarosBaseball.com" }, 419 { img:"3.png", name:"Roswell Invaders", record:"41-19", isChamp:false, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com" }, 420 { img:"15.png", name:"Trinidad Triggers", record:"41-21", isChamp:false, tid:15, prefix:"trinidad", baseUrl:"https://www.TrinidadTriggers.com" }, 421 { img:"26.png", name:"Bakersfield Train Robbers",record:"37-26", isChamp:true, tid:26, prefix:"bakersfield",baseUrl:"https://www.BakersfieldTrainRobbers.com", champFlag:"https://www.pecosleague.com/images/flags/2018new.png" }, 422 { img:"22.png", name:"California City Whiptails",record:"35-29", isChamp:false, tid:22, prefix:"californiacity",baseUrl:"http://www.CaliforniaCityWhiptails.com" }, 423 { img:"13.png", name:"Santa Fe Fuego", record:"31-30", isChamp:false, tid:13, prefix:"santafe", baseUrl:"https://www.SantaFeFuego.com" }, 424 { img:"24.png", name:"High Desert Yardbirds", record:"30-31", isChamp:false, tid:24, prefix:"highdesert", baseUrl:"http://www.HighDesertYardBirds.com" }, 425 { img:"10.png", name:"Ruidoso Osos", record:"26-34", isChamp:false, tid:10, prefix:"osos", baseUrl:"http://www.RuidosoOsos.com" }, 426 { img:"23.png", name:"Monterey Amberjacks", record:"19-43", isChamp:false, tid:23, prefix:"monterey", baseUrl:"https://www.MontereyAmberJacks.com" }, 427 { img:"17.png", name:"Garden City Wind", record:"11-50", isChamp:false, tid:17, prefix:"wind", baseUrl:"https://www.GardenCityWind.com" }, 428 { img:"1.png", name:"White Sands Pupfish", record:"7-51", isChamp:false, tid:1, prefix:"pupfish", baseUrl:"http://www.WhiteSandsPupfish.com" }, 429 ] 430 }, 431 { 432 year: 2017, 433 champion: "High Desert Yardbirds", 434 narrative: "The off season of 2017 changed the entire footprint and the future of the Pecos League forever. The Pecos League traded its Kansas identity for four teams in California, going from 10 teams to 12 and moving 4 teams into California. Once a desert league with mainly New Mexico Teams, the Pecos League now had teams in six states and three time zones.", 435 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2017.png", 436 photos: [ 437 "https://www.pecosleague.com/images/mediaupload/6010.jpg", 438 "https://www.pecosleague.com/images/mediaupload/6192.jpg", 439 ], 440 teams: [ 441 { img:"8.png", name:"Tucson Saguaros", record:"46-14", isChamp:false, tid:8, prefix:"tucson", baseUrl:"https://www.SaguarosBaseball.com" }, 442 { img:"4.png", name:"Alpine Cowboys", record:"43-18", isChamp:false, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com" }, 443 { img:"3.png", name:"Roswell Invaders", record:"41-22", isChamp:false, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com" }, 444 { img:"15.png", name:"Trinidad Triggers", record:"36-23", isChamp:false, tid:15, prefix:"trinidad", baseUrl:"https://www.TrinidadTriggers.com" }, 445 { img:"26.png", name:"Bakersfield Train Robbers",record:"36-25", isChamp:false, tid:26, prefix:"bakersfield",baseUrl:"https://www.BakersfieldTrainRobbers.com" }, 446 { img:"13.png", name:"Santa Fe Fuego", record:"32-26", isChamp:false, tid:13, prefix:"santafe", baseUrl:"https://www.SantaFeFuego.com" }, 447 { img:"24.png", name:"High Desert Yardbirds", record:"35-27", isChamp:true, tid:24, prefix:"highdesert", baseUrl:"http://www.HighDesertYardBirds.com", champFlag:"https://www.pecosleague.com/images/flags/2017new.png" }, 448 { img:"22.png", name:"California City Whiptails",record:"28-35", isChamp:false, tid:22, prefix:"californiacity",baseUrl:"http://www.CaliforniaCityWhiptails.com" }, 449 { img:"35.png", name:"Hollywood Stars", record:"20-39", isChamp:false, tid:35, prefix:"hollywood", baseUrl:"http://hollywood.pecosleague.com" }, 450 { img:"17.png", name:"Garden City Wind", record:"18-43", isChamp:false, tid:17, prefix:"wind", baseUrl:"https://www.GardenCityWind.com" }, 451 { img:"23.png", name:"Monterey Amberjacks", record:"18-43", isChamp:false, tid:23, prefix:"monterey", baseUrl:"https://www.MontereyAmberJacks.com" }, 452 { img:"1.png", name:"White Sands Pupfish", record:"12-50", isChamp:false, tid:1, prefix:"pupfish", baseUrl:"http://www.WhiteSandsPupfish.com" }, 453 ] 454 }, 455 { 456 year: 2016, 457 champion: "Tucson Saguaros", 458 narrative: "In the offseason of 2016 the Pecos League finally added Tucson to the Pecos League. The Saguaros won the league championship and the Regular season t
458itle. Kino Sportsplex instantly became the GEM of the Pecos League. Tucson set the league record for wins with 51 and lead the league in attendance.", 459 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2016.png", 460 photos: [ 461 "https://www.pecosleague.com/images/mediaupload/5505.jpg", 462 "https://www.pecosleague.com/images/mediaupload/5636.jpg", 463 ], 464 teams: [ 465 { img:"8.png", name:"Tucson Saguaros", record:"51-14", isChamp:true, tid:8, prefix:"tucson", baseUrl:"https://www.SaguarosBaseball.com", champFlag:"https://www.pecosleague.com/images/flags/2016new.png" }, 466 { img:"3.png", name:"Roswell Invaders", record:"44-23", isChamp:false, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com" }, 467 { img:"17.png", name:"Garden City Wind", record:"38-26", isChamp:false, tid:17, prefix:"wind", baseUrl:"https://www.GardenCityWind.com" }, 468 { img:"15.png", name:"Trinidad Triggers", record:"35-29", isChamp:false, tid:15, prefix:"trinidad",baseUrl:"https://www.TrinidadTriggers.com" }, 469 { img:"4.png", name:"Alpine Cowboys", record:"32-32", isChamp:false, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com" }, 470 { img:"82.png", name:"Topeka Train Robbers", record:"28-33", isChamp:false, tid:82, prefix:"topeka", baseUrl:"http://www.topekarobbers.com" }, 471 { img:"16.png", name:"Salina Stockade", record:"29-36", isChamp:false, tid:16, prefix:"salina", baseUrl:"http://www.SalinaStockade.com" }, 472 { img:"1.png", name:"White Sands Pupfish", record:"28-39", isChamp:false, tid:1, prefix:"pupfish", baseUrl:"http://www.WhiteSandsPupfish.com" }, 473 { img:"92.png", name:"Great Bend Boom", record:"19-43", isChamp:false, tid:92, prefix:"boom", baseUrl:"http://www.greatbendboom.com" }, 474 { img:"13.png", name:"Santa Fe Fuego", record:"19-47", isChamp:false, tid:13, prefix:"santafe", baseUrl:"https://www.SantaFeFuego.com" }, 475 ] 476 }, 477 { 478 year: 2015, 479 champion: "Roswell Invaders", 480 narrative: "In 2015 the Pecos League really began to turn the corner. The league strictly enforced a 22 man paid roster. The League implemented a 25 and under age limit. The Roswell Invaders made the playoffs, beat Alpine in the first round and beat Santa Fe in the finals to win their 3rd championship in five years.", 481 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2015.png", 482 photos: [ 483 "https://www.pecosleague.com/images/mediaupload/5493.jpg", 484 "https://www.pecosleague.com/images/mediaupload/5159.jpg", 485 ], 486 teams: [ 487 { img:"15.png", name:"Trinidad Triggers", record:"43-18", isChamp:false, tid:15, prefix:"trinidad", baseUrl:"https://www.TrinidadTriggers.com" }, 488 { img:"13.png", name:"Santa Fe Fuego", record:"33-21", isChamp:false, tid:13, prefix:"santafe", baseUrl:"https://www.SantaFeFuego.com" }, 489 { img:"4.png", name:"Alpine Cowboys", record:"41-26", isChamp:false, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com" }, 490 { img:"1.png", name:"White Sands Pupfish", record:"37-28", isChamp:false, tid:1, prefix:"pupfish", baseUrl:"http://www.WhiteSandsPupfish.com" }, 491 { img:"3.png", name:"Roswell Invaders", record:"40-28", isChamp:true, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com", champFlag:"https://www.pecosleague.com/images/flags/2015new.png" }, 492 { img:"84.png", name:"Las Vegas Train Robbers",record:"23-41",isChamp:false,tid:84, prefix:"lasvegas", baseUrl:"http://lasvegas.pecosleague.com" }, 493 { img:"17.png", name:"Garden City Wind", record:"21-43", isChamp:false, tid:17, prefix:"wind", baseUrl:"https://www.GardenCityWind.com" }, 494 { img:"2.png", name:"Las Cruces Vaqueros", record:"18-50", isChamp:false, tid:2, prefix:"vaqueros", baseUrl:"http://www.LasCrucesVaqueros.com" }, 495 ] 496 }, 497 { 498 year: 2014, 499 champion: "Santa Fe Fuego", 500 narrative: "The move of the Padres to El Paso happened and the Pecos League attempted to move to Tucson but instead had teams on border towns of Bisbee and Douglas. All teams from 2013 returned with the addition of two Arizona Teams. Future MLB Players Eric Yardley and Yermin Mercedes played the entire season. Santa Fe beat Alpine in tough three game series â this was the first road team to win the Pecos League Title.", 501 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2014.png", 502 photos: [ 503 "https://www.pecosleague.com/images/mediaupload/4408.jpg", 504 "https://www.pecosleague.com/images/mediaupload/4415.jpg", 505 ], 506 teams: [ 507 { img:"4.png", name:"Alpine Cowboys", record:"48-20", isChamp:false, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com" }, 508 { img:"13.png", name:"Santa Fe Fuego", record:"48-24", isChamp:true, tid:13, prefix:"santafe", baseUrl:"https://www.SantaFeFuego.com", champFlag:"https://www.pecosleague.com/images/flags/2014new.png" }, 509 { img:"3.png", name:"Roswell Invaders", record:"38-27", isChamp:false, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com" }, 510 { img:"15.png", name:"Trinidad Triggers", record:"35-27", isChamp:false, tid:15, prefix:"trinidad", baseUrl:"https://www.TrinidadTriggers.com" }, 511 { img:"7.png", name:"Bisbee Blue", record:"33-30", isChamp:false, tid:7, prefix:"bisbee", baseUrl:"http://bisbee.pecosleague.com" }, 512 { img:"1.png", name:"White Sands Pupfish", record:"28-33", isChamp:false, tid:1, prefix:"pupfish", baseUrl:"http://www.WhiteSandsPupfish.com" }, 513 { img:"67.png", name:"Douglas Diablos", record:"28-36", isChamp:false, tid:67, prefix:"douglas", baseUrl:"http://www.Douglasdiablos.com" }, 514 { img:"12.png", name:"Raton Osos", record:"23-38", isChamp:false, tid:12, prefix:"raton", baseUrl:"http://www.ratonosos.com" }, 515 { img:"20.png", name:"Taos Blizzard", record:"22-40", isChamp:false, tid:20, prefix:"taos", baseUrl:"http://www.taosblizzard.com" }, 516 { img:"84.png", name:"Las Vegas Train Robbers",record:"16-42",isChamp:false,tid:84, prefix:"lasvegas", baseUrl:"http://lasvegas.pecosleague.com" }, 517 ] 518 }, 519 { 520 year: 2013, 521 champion: "Roswell Invaders", 522 narrative: "The 2013 Season will be the season always remembered for filming of the Pecos League TV Show. 2013 the league removed Taxi Players for good. 2013 also marked the first year of the Rawlings Baseball and no more composite bats were allowed. The DH was removed for good. The Roswell Invaders had the best season in Pecos League History with 50 regular season wins and did not lose a playoff game to win the Pecos League Title.", 523 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2013.png", 524 photos: [ 525 "https://www.pecosleague.com/images/mediaupload/A_Kam_25-820.jpg", 526 "https://www.pecosleague.com/images/mediaupload/RosvsWS5-22-820-1.jpg", 527 ], 528 teams: [ 529 { img:"3.png", name:"Roswell Invaders", record:"50-17", isChamp:true, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com", champFlag:"https://www.pecosleague.com/images/flags/2013
529new.png" }, 530 { img:"4.png", name:"Alpine Cowboys", record:"43-25", isChamp:false, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com" }, 531 { img:"84.png", name:"Las Vegas Train Robbers",record:"41-27",isChamp:false,tid:84, prefix:"lasvegas",baseUrl:"http://lasvegas.pecosleague.com" }, 532 { img:"15.png", name:"Trinidad Triggers", record:"38-31", isChamp:false, tid:15, prefix:"trinidad",baseUrl:"https://www.TrinidadTriggers.com" }, 533 { img:"13.png", name:"Santa Fe Fuego", record:"36-31", isChamp:false, tid:13, prefix:"santafe", baseUrl:"https://www.SantaFeFuego.com" }, 534 { img:"1.png", name:"White Sands Pupfish", record:"26-40", isChamp:false, tid:1, prefix:"pupfish", baseUrl:"http://www.WhiteSandsPupfish.com" }, 535 { img:"20.png", name:"Taos Blizzard", record:"24-42", isChamp:false, tid:20, prefix:"taos", baseUrl:"http://www.taosblizzard.com" }, 536 { img:"12.png", name:"Raton Osos", record:"13-54", isChamp:false, tid:12, prefix:"raton", baseUrl:"http://www.ratonosos.com" }, 537 ] 538 }, 539 { 540 year: 2012, 541 champion: "Alpine Cowboys", 542 narrative: "The Pecos League took a major step forward in many areas. The league went with two full time umpire crews for the first time. The DH was added for this season. The Pecos League hired league umpires. The Pecos Spring League was formed as a source for players. The Alpine Cowboys beat the Las Cruces Vaqueros in the Championship Series.", 543 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2012.png", 544 photos: [ 545 "https://www.pecosleague.com/images/mediaupload/J_Carranza_7-R_Normoyle_19-820.jpg", 546 "https://www.pecosleague.com/images/mediaupload/AlpvsRos5-25-Bell-820.jpg", 547 ], 548 teams: [ 549 { img:"4.png", name:"Alpine Cowboys", record:"45-24", isChamp:true, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com", champFlag:"https://www.pecosleague.com/images/flags/2012new.png" }, 550 { img:"2.png", name:"Las Cruces Vaqueros", record:"42-28", isChamp:false, tid:2, prefix:"vaqueros",baseUrl:"http://www.LasCrucesVaqueros.com" }, 551 { img:"3.png", name:"Roswell Invaders", record:"41-29", isChamp:false, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com" }, 552 { img:"1.png", name:"White Sands Pupfish", record:"28-33", isChamp:false, tid:1, prefix:"pupfish", baseUrl:"http://www.WhiteSandsPupfish.com" }, 553 { img:"15.png", name:"Trinidad Triggers", record:"31-39", isChamp:false, tid:15, prefix:"trinidad",baseUrl:"https://www.TrinidadTriggers.com" }, 554 { img:"13.png", name:"Santa Fe Fuego", record:"23-47", isChamp:false, tid:13, prefix:"santafe", baseUrl:"https://www.SantaFeFuego.com" }, 555 ] 556 }, 557 { 558 year: 2011, 559 champion: "Roswell Invaders", 560 narrative: "The first ever Pecos League Game occurred in Cohen Stadium when the Roswell Invaders defeated the El Paso Diablos from the American Association 10-7. Two days later the Invaders played the first regular season game in Ruidoso and lost 18-13. The Roswell Invaders were the inaugural Pecos League Champions, defeating Ruidoso in a tight three game series.", 561 archiveImg: "https://www.pecosleague.com/images/archives/pecosarchiveaugust2011.png", 562 photos: [ 563 "https://www.pecosleague.com/images/mediaupload/cohen_stadium_820.jpg", 564 "https://www.pecosleague.com/images/mediaupload/marvins-cowboys-sm-800x531.jpg", 565 ], 566 teams: [ 567 { img:"3.png", name:"Roswell Invaders", record:"47-27", isChamp:true, tid:3, prefix:"roswell", baseUrl:"https://www.RoswellInvaders.com", champFlag:"https://www.pecosleague.com/images/flags/2011new.png" }, 568 { img:"1.png", name:"White Sands Pupfish", record:"41-29", isChamp:false, tid:1, prefix:"pupfish", baseUrl:"http://www.WhiteSandsPupfish.com" }, 569 { img:"10.png", name:"Ruidoso Osos", record:"38-29", isChamp:false, tid:10, prefix:"osos", baseUrl:"http://www.RuidosoOsos.com" }, 570 { img:"4.png", name:"Alpine Cowboys", record:"39-31", isChamp:false, tid:4, prefix:"cowboys", baseUrl:"https://Alpine.PecosLeague.com" }, 571 { img:"2.png", name:"Las Cruces Vaqueros", record:"35-32", isChamp:false, tid:2, prefix:"vaqueros", baseUrl:"http://www.LasCrucesVaqueros.com" }, 572 { img:"112.png", name:"Carlsbad Bats", record:"9-58", isChamp:false, tid:112, prefix:"carlsbad", baseUrl:"http://carlsbad.pecosleague.com" }, 573 ] 574 }, 575]; 576 577// ââ FORMER TEAMS (from source HTML) ââââââââââââââââââââââââââââââââââââââââââ 578const FORMER_TEAMS = [ 579 { img:"images/mediaupload/kansascityhormigas2025.jpg", name:"Iola Hormigas", city:"Iola/Kansas City", year:2025, record:"12-34", link:"https://www.pecosleague.com/pecosleague.asp?year=2025&page=2025" }, 580 { img:"images/mediaupload/2025MontereyAmberjacks.jpg", name:"Monterey Amberjacks", city:"Monterey, CA", year:2025, record:"13
580-40", link:"https://www.pecosleague.com/pecosleague.asp?year=2025&page=2025" }, 581 { img:"images/mediaupload/2024Drakes985.jpg", name:"Marysville Drakes", city:"Marysville, CA", year:2024, record:"29-25", link:"https://www.pecosleague.com/pecosleague.asp?year=2024&page=2024" }, 582 { img:"images/mediaupload/Lancaster2023SoundBreakers.jpg",name:"Lancaster Sound Breakers",city:"Lancaster, CA", year:2023, record:"28-22", link:"https://www.pecosleague.com/pecosleague.asp?year=2023&page=2023" }, 583 { img:"images/mediaupload/2022santarosa.jpg", name:"Santa Rosa Scuba Divers", city:"Santa Rosa, CA", year:2022, record:"22-29", link:"https://www.pecosleague.com/pecosleague.asp?year=2022&page=2022" }, 584 { img:"images/mediaupload/coloradospringsSnowSox2022.jpg",name:"Colorado Springs Snow Sox",city:"Colorado Springs, CO",year:2022,record:"14-31",link:"https://www.pecosleague.com/pecosleague.asp?year=2022&page=2022" }, 585 { img:"images/mediaupload/2022weimarhormigas.jpg", name:"Weimar Hormigas", city:"Weimar, TX", year:2022, record:"16-31", link:"https://www.pecosleague.com/pecosleague.asp?year=2022&page=2022" }, 586 { img:"images/mediaupload/2022santaCruzSeaweed820.jpg",name:"Santa Cruz Seaweed", city:"Santa Cruz, CA", year:2022, record:"17-33", link:"https://www.pecosleague.com/pecosleague.asp?year=2022&page=2022" }, 587 { img:"images/mediaupload/2022wascoreserve.jpg", name:"Wasco Reserve", city:"Wasco, CA", year:2022, record:"7-40", link:"https://www.pecosleague.com/pecosleague.asp?year=2022&page=2022" }, 588 { img:"images/mediaupload/salina_stockade_2021.jpg", name:"Salina Stockade", city:"Salina, KS", year:2021, record:"10-41", link:"https://www.pecosleague.com/pecosleague.asp?year=2021&page=2021" }, 589 { img:"images/mediaupload/2017hollywoodstars.jpg", name:"Hollywood Stars", city:"Hollywood, CA", year:2017, record:"20-39", link:"https://www.pecosleague.com/pecosleague.asp?year=2017&page=2017" }, 590 { img:"images/mediaupload/high_desert2018.jpg", name:"High Desert Yardbirds", city:"Adelanto, CA", year:2019, record:"46-18", link:"https://www.pecosleague.com/pecosleague.asp?year=2019&page=2019" }, 591 { img:"images/mediaupload/2018californiacitywhiptails.jpg",name:"California City Whiptails",city:"California City, CA",year:2019,record:"12-47",link:"https://www.pecosleague.com/pecosleague.asp?year=2019&page=2019" }, 592 { img:"images/mediaupload/2018osos.jpg", name:"Ruidoso Osos", city:"Ruidoso, NM", year:2018, record:"26-34", link:"https://www.pecosleague.com/pecosleague.asp?year=2018&page=2018" }, 593 { img:"images/mediaupload/2016_salina_stockade.jpg", name:"Salina Stockade (2016)", city:"Salina, KS", year:2016, record:"29-36", link:"https://www.pecosleague.com/pecosleague.asp?year=2016&page=2016" }, 594 { img:"images/mediaupload/greatbend_boom_2016.jpg", name:"Great Bend Boom", city:"Great Bend, KS", year:2016, record:"19-43", link:"https://www.pecosleague.com/pecosleague.asp?year=2016&page=2016" }, 595 { img:"images/mediaupload/2016_topeka_train_robbers.jpg",name:"Topeka Train Robbers", city:"Topeka, KS", year:2016, record:"28-33", link:"https://www.pecosleague.com/pecosleague.asp?year=2016&page=2016" }, 596 { img:"images/2015pupfish.jpg", name:"White Sands Pupfish", city:"Alamogordo, NM", year:2015, record:"37-28", link:"https://www.pecosleague.com/pecosleague.asp?year=2015&page=2015" }, 597 { img:"images/2015LasCrucesVaqueros.jpg", name:"Las Cruces Vaqueros", city:"Las Cruces, NM", year:2015, record:"18-50", link:"https://www.pecosleague.com/pecosleague.asp?year=2015&page=2015" }, 598 { img:"images/mediaupload/2014_douglas_diablos.jpg", name:"Douglas Diablos", city:"Douglas, AZ", year:2014, record:"28-36", link:"https://www.pecosleague.com/pecosleague.asp?year=2014&page=2014" }, 599 { img:"images/mediaupload/bisbee_blue.jpg", name:"Bisbee Blue", city:"Bisbee, AZ", year:2014, record:"33-30", link:"https://www.pecosleague.com/pecosleague.asp?year=2014&page=2014" }, 600 { img:"images/mediaupload/taos_blizzard4646.jpg", name:"Taos Blizzard", city:"Taos, NM", year:2014, record:"22-40", link:"https://www.pecosleague.com/pecosleague.asp?year=2014&page=2014" }, 601 { img:"images/mediaupload/2014_raton_osos.jpg", name:"Raton Osos", city:"Raton, NM", year:2014, record:"23-38", link:"https://www.pecosleague.com/pecosleague.asp?year=2014&page=2014" }, 602 { img:"images/mediaupload/osos_pink_820.jpg", name:"Raton Osos (2013)", city:"Raton, NM", year:2013, record:"13
602-54", link:"https://www.pecosleague.com/pecosleague.asp?year=2013&page=2013" }, 603 { img:"images/mediaupload/DSC_5202-820.jpg", name:"Taos Blizzard (2013)", city:"Taos, NM", year:2013, record:"24-42", link:"https://www.pecosleague.com/pecosleague.asp?year=2013&page=2013" }, 604 { img:"images/2011_ruidoso_osos.jpg", name:"Ruidoso Osos", city:"Ruidoso, NM", year:2011, record:"38-29", link:"https://www.pecosleague.com/pecosleague.asp?year=2011&page=2011" }, 605 { img:"images/mediaupload/43AC_Rigby_makes_a_face.jpg",name:"Carlsbad Bats", city:"Carlsbad, NM", year:2011, record:"9-58", link:"https://www.pecosleague.com/pecosleague.asp?year=2011&page=2011" }, 606]; 607 608// ââ TIMELINE DATA (mirrors source HTML table exactly) ââââââââââââââââââââââââ 609// Each row: { year, imgIds: [id|null, ...] } â null = blank cell, matching source columns 610const TIMELINE_YEARS = [2026,2025,2024,2023,2022,2021,2020,2019,2018,2017,2016,2015,2014,2013,2012,2011]; 611// Image IDs per year (taken directly from source HTML timeline table columns) 612const TIMELINE_DATA = { 613 2026: [null,"3","4","5","6","9","13","14","15","26","17","18",null,"8",null,null,null,null,null,null,"33",null,null,null,null,null,null,null,"28","801",null], 614 2025: [null,"3","4","5",null,"9","13",null,"15","26","17","18",null,"8",null,"23",null,"11",null,null,"33",null,null,"32",null,null,null,null,"28","801",null], 615 2024: [null,"3","4","5","6","9","13",null,"15","26","17","18",null,"8",null,null,null,null,null,null,"33","30",null,"32",null,null,null,null,"28","801",null], 616 2023: [null,"3","4",null,"6","9","13",null,"15","26","17",null,null,"8",null,"23",null,null,null,null,"33","30",null,"32","37",null,null,null,"28","801",null], 617 2022: [null,"3","4",null,"6",null,"13",null,"15","26","17",null,null,"8",null,"23",null,null,null,null,null,null,"29",null,null,"19",null,"27","28","801","31"], 618 2021: [null,"3","4",null,null,null,"13",null,"15","26","17",null,"16","8",null,"23",null,null,null,null,null,null,null,null,null,"19",null,"27","28","801","31"], 619 2020: [null,"3",null,null,null,null,null,null,null,null,null,null,"16","8",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], 620 2019: ["1","3","4",null,null,null,"13",null,"15","26","17",null,"16","8","22","23","24",null,null,null,null,null,null,null,null,null,null,"27",null,null,null], 621 2018: ["1","3","4",null,null,null,"13",null,"15","26","17",null,"16","8","22","23","24",null,"10",null,null,null,null,null,null,null,null,null,null,null,null], 622 2017: ["1","3","4",null,null,null,"13",null,"15","26","17",null,"16","8","22","23","24",null,null,null,null,null,null,null,null,null,null,null,null,null,null], 623 2016: ["1","3","4",null,null,null,"13",null,"15","26","17",null,"16","8",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], 624 2015: ["1","3","4",null,null,null,"13",null,"15","26","17",null,null,null,null,null,null,null,null,"2",null,null,null,null,null,null,null,null,null,null,null], 625 2014: ["1","3","4",null,null,null,"13",null,"15","26",null,null,null,"7/67",null,null,null,"10",null,null,null,null,null,null,null,null,"20",null,null,null,null], 626 2013: ["1","3","4",null,null,null,"13",null,"15","26",null,null,null,null,null,null,null,"10",null,null,null,null,null,null,null,null,"20",null,null,null,null], 627 2012: ["1","3","4",null,null,null,"13",null,"15",null,null,null,null,null,null,null,null,null,null,"2",null,null,null,null,null,null,null,null,null,null,null], 628 2011: ["1","3","4",null,null,null,null,null,null,null,null,null,null,null,null,null,null,"10","2",null,null,null,null,null,null,null,null,null,null,null,null], 629}; 630 631// ââ UTILITY ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 632function esc(s) { 633 return String(s ?? '') 634 .replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"'); 635} 636const curYear = new Date().getFullYear(); 637 638function socialIcons(t) { 639 const icons = []; 640 if (t.fb) icons.push(`<a href="${esc(t.fb)}" class="soc-icon" title="Facebook"><i class="fab fa-facebook-f"></i></a>`); 641 if (t.ig) icons.push(`<a href="${esc(t.ig)}" class="soc-icon" title="Instagram"><i class="fab fa-instagram"></i></a>`); 642 if (t.tv) icons.push(`<a href="${esc(t.tv)}" class="soc-icon" title="Watch"><i class="fas fa-tv"></i></a>`); 643 if (t.yt) icons.push(`<a href="${esc(t.yt)}" class="soc-icon" title="YouTube"><i class="fab fa-youtube"></i></a>`); 644 return icons.join(''); 645} 646 647// ââ RENDER: TEAM CARD âââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 648function renderTeamCard(t, delayClass = '') { 649 return `
650 <div class="team-card reveal ${delayClass} p-5 text-center"> 651 <a href="${esc(t.website)}" class="block mb-3"> 652 <img src="${esc(t.logo)}" alt="${esc(t.name)}" class="logo mx-auto" 653 onerror="this.src='https://www.pecosleague.com/images/0.png'"> 654 </a> 655 <h4 style="font-family:'Oswald',sans-serif;font-weight:700;font-size:0.82rem;text-transform:uppercase;letter-spacing:0.06em;color:#fff;margin-bottom:4px;"> 656 ${esc(t.name)} 657 </h4> 658 <p style="font-size:0.75rem;color:#6b7280;margin-bottom:2px;"> 659 <a href="${esc(t.illus)}" style="color:#c9973a;">${esc(t.ballpark)}</a> 660 </p> 661 <p style="font-size:0.72rem;color:#6b7280;margin-bottom:2px;">${esc(t.address)} <br>${esc(t.city)}, ${esc(t.state)} ${esc(t.zip)}</p> 662 <p style="font-size:0.72rem;margin-bottom:2px;"> 663 <a href="${esc(t.website)}" style="color:#c9973a;font-size:0.7rem;">${esc(t.website)}</a> 664 </p> 665 <p style="font-size:0.72rem;color:#6b7280;margin-bottom:2px;">Year Founded: ${esc(t.founded)}</p> 666 <p style="font-size:0.72rem;color:#6b7280;margin-bottom:8px;">Phone: ${esc(t.phone)}</p> 667 <p style="font-size:0.72rem;color:#9ca3af;margin-bottom:8px;">${esc(t.record)}</p> 668 <div style="display:flex;justify-content:center;gap:6px;flex-wrap:wrap;">${socialIcons(t)}</div> 669 </div>`; 670} 671 672// ââ RENDER: SEASON BLOCK (mirrors source table structure) ââââââââââââââââââââ
673function renderSeasonCard(entry, year) { 674 const champBadge = entry.isChamp 675 ? `<div style="margin-top:4px;"><span class="champ-badge">🏆 CHAMPS</span></div>` : ''; 676 const champImg = entry.champFlag 677 ? `<img src="${esc(entry.champFlag)}" alt="Champion" style="width:60px;height:60px;object-fit:contain;margin:4px auto 0;display:block;" onerror="this.style.display='none'">` : ''; 678 const asp = `${esc(entry.baseUrl)}/${esc(entry.prefix)}.asp`; 679 const tbl = `pecos_players_${esc(year)}`; 680 681 return ` 682 <div class="season-card reveal"> 683 <div style="font-size:0.65rem;color:#6b7280;margin-bottom:3px;">${year}</div> 684 <a href="${esc(entry.baseUrl)}"> 685 <img src="https://www.pecosleague.com/images/${esc(entry.img)}" 686 alt="${esc(entry.name)}" onerror="this.src='https://www.pecosleague.com/images/0.png'"> 687 </a> 688 <div style="font-family:'Oswald',sans-serif;font-size:0.72rem;color:#fff;margin-top:4px;font-weight:600;">${esc(entry.name)}</div> 689 <div style="font-size:0.72rem;color:#c9973a;font-weight:700;">${esc(entry.record)}</div> 690 ${champBadge} 691 ${champImg} 692 <div style="display:flex;justify-content:center;gap:4px;margin-top:6px;flex-wrap:wrap;"> 693 <a href="${asp}?page=11&team=${esc(entry.tid)}&year=${year}" style="font-size:0.6rem;color:#60a5fa;">Sched</a> 694 <span style="color:#374151;">·</span> 695 <a href="${asp}?page=3&team=${esc(entry.tid)}&year=${year}" style="font-size:0.6rem;color:#60a5fa;">Stats</a> 696 <span style="color:#374151;">·</span> 697 <a href="${asp}?page=4&tablename=${tbl}&team=${esc(entry.tid)}&year=${year}" style="font-size:0.6rem;color:#60a5fa;">Roster</a> 698 </div> 699 </div>`; 700} 701
702function renderSeasonBlock(season) { 703 const cards = season.teams.map(t => renderSeasonCard(t, season.year)).join(''); 704 const photos = season.photos.map(p => 705 `<a href="${esc(p)}" class="arch-img"> 706 <img src="${esc(p)}" alt="" style="width:100%;border-radius:8px;height:160px;object-fit:cover;" 707 onerror="this.style.display='none'"> 708 </a>` 709 ).join(''); 710 const photoCols = season.photos.length >= 4 711 ? 'grid-cols-2 sm:grid-cols-4' 712 : 'grid-cols-2 sm:grid-cols-2'; 713 714 return ` 715 <div class="mb-14 reveal"> 716 <div style="display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap;"> 717 <a href="pecosleague.asp?page=${season.year}&year=${season.year}"> 718 <div class="year-header">${season.year}</div> 719 </a> 720 <a href="pecosleague.asp?page=${season.year}&year=${season.year}" 721 style="font-size:0.85rem;color:#9ca3af;text-decoration:underline;"> 722 (Season Standings/Playoffs) 723 </a> 724 ${season.champion ? `<span style="font-family:'Oswald',sans-serif;font-size:0.75rem;color:#c9973a;font-weight:700;">🏆 ${esc(season.champion)}</span>` : ''} 725 </div> 726 ${season.narrative ? `<p class="prose-pecos" style="font-size:0.88rem;margin-bottom:14px;">${season.narrative}</p>` : ''} 727 <div class="grid grid-cols-2 sm:grid-cols-4 md:grid-cols-6 lg:grid-cols-8 gap-2"> 728 ${cards} 729 </div> 730 ${photos ? `<div class="grid ${photoCols} gap-3 mt-5">${photos}</div>` : ''} 731 <hr class="gold-divider"> 732 </div>`; 733} 734 735// ââ RENDER: TIMELINE TABLE âââââââââââââââââââââââââââââââââââââââââââââââââââ 736function renderTimeline() { 737 let html = `<table style="border-collapse:collapse;width:100%;background:rgba(13,12,36,0.9);border:1px solid rgba(30,29,58,0.9);border-radius:8px;overflow:hidden;">`; 738 TIMELINE_YEARS.forEach(year => { 739 const cells = TIMELINE_DATA[year]; 740 html += `<tr> 741 <td style="padding:4px 8px;font-family:'Oswald',sans-serif;font-weight:700;font-size:0.75rem;color:#c9973a;white-space:nowrap;border:1px solid rgba(30,29,58,0.6);background:rgba(0,0,0,0.3);">${year}</td>`; 742 cells.forEach(cell => { 743 if (!cell) { 744 html += `<td style="padding:3px;border:1px solid rgba(30,29,58,0.4);width:38px;"> </td>`; 745 } else { 746 // Handle combined cells like "7/67" 747 const imgs = cell.split('/'); 748 const content = imgs.map(id => 749 `<img width="35" src="https://www.pecosleague.com/images/${id}.png" 750 onerror="this.style.display='none'">` 751 ).join(''); 752 html += `<td style="padding:3px;text-align:center;border:1px solid rgba(30,29,58,0.4);width:38px;">${content}</td>`; 753 } 754 }); 755 html += `</tr>`; 756 }); 757 html += `</table>`; 758 return html; 759} 760 761// ââ RENDER: FORMER TEAM CARD ââââââââââââââââââââââââââââââââââââââââââââââââââ 762function renderFormerTeamCard(t) { 763 return ` 764 <div class="season-card reveal" style="padding:10px;"> 765 <a href="${esc(t.link)}"> 766 <img src="https://www.pecosleague.com/${esc(t.img)}" alt="${esc(t.name)}" 767 style="width:80px;height:80px;object-fit:contain;margin:0 auto;display:block;" 768 onerror="this.src='https://www.pecosleague.com/images/0.png'"> 769 </a> 770 <div style="font-family:'Oswald',sans-serif;font-size:0.72rem;color:#fff;margin-top:6px;font-weight:600;">${esc(t.name)}</div> 771 <div style="font-size:0.68rem;color:#9ca3af;">${esc(t.city)}</div> 772 <div style="font-size:0.68rem;color:#c9973a;">${esc(t.year)} · ${esc(t.record)}</div> 773 </div>`; 774} 775 776// ââ RENDER: ARCHIVE YEAR BUTTONS âââââââââââââââââââââââââââââââââââââââââââââ 777function renderArchiveYears() { 778 let html = ''; 779 for (let y = 2022; y >= 2011; y--) { 780 html += `<a href="pecosleague.asp?page=${y}&year=${y}" class="btn-outline" style="font-size:0.75rem;padding:6px 14px;">${y}</a>\n`; 781 } 782 return html; 783} 784 785// ââ MAIN PAGE INIT ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 786function initPage() { 787 // Hero stats 788 const totalSeasons = curYear - 2010; 789 790 const statSeasonsEl = document.getElementById('stat-seasons'); 791 if (statSeasonsEl) statSeasonsEl.textContent = totalSeasons; 792 793 const totalTeams = MOUNTAIN_TEAMS.length + PACIFIC_TEAMS.length; 794 const statTeamsEl = document.getElementById('stat-teams'); 795 if (statTeamsEl) statTeamsEl.textContent = totalTeams; 796 797 // ââ Mountain Division teams 798 const mDiv = document.getElementById('mountain-teams'); 799 if (mDiv) { 800 mDiv.innerHTML = MOUNTAIN_TEAMS.map((t, i) => renderTeamCard(t, `d${(i % 5) + 1}`)).join(''); 801 } 802 803 // ââ Pacific Division teams 804 const pDiv = document.getElementById('pacific-teams'); 805 if (pDiv) { 806 pDiv.innerHTML = PACIFIC_TEAMS.map((t, i) => renderTeamCard(t, `d${(i % 5) + 1}`)).join(''); 807 } 808 809 // ââ Season history blocks (all years from newest to oldest, grouped) 810 // 2025, 2024, 2023 get their own containers; rest go into history 811 const s2026 = document.getElementById('season-2026'); 812 const s2025 = document.getElementById('season-2025'); 813 const s2024 = document.getElementById('season-2024'); 814 const s2023 = document.getElementById('season-2023'); 815 const historyEl = document.getElementById('history'); 816 817 818 if (s2026) s2026.innerHTML = renderSeasonBlock(SEASONS.find(s => s.year === 2026)); 819 if (s2025) s2025.innerHTML = renderSeasonBlock(SEASONS.find(s => s.year === 2025));
820 if (s2024) s2024.innerHTML = renderSeasonBlock(SEASONS.find(s => s.year === 2024)); 821 if (s2023) s2023.innerHTML = renderSeasonBlock(SEASONS.find(s => s.year === 2023)); 822 823 // Build older seasons after archive-years div 824 const archiveYearsEl = document.getElementById('archive-years'); 825 if (archiveYearsEl) { 826 archiveYearsEl.innerHTML = renderArchiveYears(); 827 828 // Insert older seasons (2022â2011) immediately after archive-years section 829 const olderHtml = SEASONS 830 .filter(s => s.year <= 2022) 831 .map(renderSeasonBlock) 832 .join(''); 833 834 const olderDiv = document.createElement('div'); 835 olderDiv.id = 'older-seasons'; 836 olderDiv.innerHTML = olderHtml; 837 archiveYearsEl.parentNode.insertAdjacentElement('afterend', olderDiv); 838 } 839 840 // ââ Timeline 841 const tlEl = document.getElementById('timeline-table'); 842 if (tlEl) tlEl.innerHTML = renderTimeline(); 843 844 // ââ Former teams 845 const ftEl = document.getElementById('former-teams'); 846 if (ftEl) ftEl.innerHTML = FORMER_TEAMS.map(renderFormerTeamCard).join(''); 847 848 // ââ Footer dynamic links 849 const fyEl = document.getElementById('footer-year'); 850 if (fyEl) fyEl.textContent = curYear; 851 const flEl = document.getElementById('footer-season-label'); 852 if (flEl) flEl.textContent = `${curYear} Season Coming Soon`; 853 const fs1 = document.getElementById('footer-stats-y1'); 854 if (fs1) { fs1.textContent = `${curYear - 1} Stats`; fs1.href = `pecosleague.asp?page=3&year=${curYear - 1}`; } 855 const fs2 = document.getElementById('footer-stats-y2'); 856 if (fs2) { fs2.textContent = `${curYear - 2} Stats`; fs2.href = `pecosleague.asp?page=3&year=${curYear - 2}`; } 857 const fsc = document.getElementById('footer-schedule'); 858 if (fsc) { fsc.textContent = `${curYear} Schedule`; fsc.href = `pecosleague.asp?page=68&date=${curYear}-5-1_schedule`; } 859 const ftg = document.getElementById('footer-todays-game'); 860 if (ftg) { 861 const now = new Date(); 862 ftg.href = `pecosleague.asp?page=195&cal_eventdate=${now.getMonth()+1}/${now.getDate()}/${curYear}`; 863 } 864 865 // ââ Intersection Observer (reveal animations) 866 const obs = new IntersectionObserver( 867 entries => entries.forEach(e => { if (e.isIntersecting) e.target.classList.add('visible'); }), 868 { threshold: 0.07, rootMargin: '0px 0px -40px 0px' } 869 ); 870 document.querySelectorAll('.reveal,.reveal-l,.reveal-r').forEach(el => obs.observe(el)); 871 872 // ââ Smooth scroll for anchor links 873 document.querySelectorAll('a[href^="#"]').forEach(a => { 874 a.addEventListener('click', function(e) { 875 const target = document.querySelector(this.getAttribute('href')); 876 if (target) { e.preventDefault(); target.scrollIntoView({ behavior: 'smooth', block: 'start' }); } 877 }); 878 }); 879 880 // ââ Navbar scroll effect (glass tint intensifies on scroll) 881 window.addEventListener('scroll', () => { 882 const n = document.getElementById('navbar'); 883 if (n) n.style.background = window.scrollY > 20 ? 'rgba(6,5,24,0.97)' : 'rgba(6,5,24,0.92)'; 884 }); 885 886 // ââ Mobile drawer 887 const toggle = document.getElementById('mobileToggle'); 888 const overlay = document.getElementById('mobileOverlay'); 889 const drawer = document.getElementById('mobileDrawer'); 890 const closeBtn= document.getElementById('mobileClose'); 891 const menuIcon= document.getElementById('menuIcon'); 892 893 function openMenu() { 894 if (!overlay || !drawer) return; 895 overlay.classList.remove('opacity-0','pointer-events-none'); 896 overlay.classList.add('opacity-100'); 897 drawer.classList.remove('translate-x-full'); 898 drawer.classList.add('translate-x-0'); 899 if (menuIcon) { menuIcon.classList.remove('fa-bars'); menuIcon.classList.add('fa-times'); } 900 document.body.style.overflow = 'hidden'; 901 } 902 function closeMenu() { 903 if (!overlay || !drawer) return; 904 overlay.classList.add('opacity-0','pointer-events-none'); 905 overlay.classList.remove('opacity-100'); 906 drawer.classList.add('translate-x-full'); 907 drawer.classList.remove('translate-x-0'); 908 if (menuIcon) { menuIcon.classList.remove('fa-times'); menuIcon.classList.add('fa-bars'); } 909 document.body.style.overflow = ''; 910 } 911 912 if (toggle) toggle.addEventListener('click', () => drawer && drawer.classList.contains('translate-x-full') ? openMenu() : closeMenu()); 913 if (closeBtn) closeBtn.addEventListener('click', closeMenu); 914 if (overlay) overlay.addEventListener('click', closeMenu); 915 document.querySelectorAll('#mobileDrawer a').forEach(a => a.addEventListener('click', closeMenu)); 916} 917 918document.addEventListener('DOMContentLoaded', initPage);
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.