PageSourceSearch

https://nbarapm.com/optimized/load.3579738cc4d7e32e.js

js nbarapm.com collected 2026-09-28 13:17:36 UTC 38,122 bytes, 1 lines download raw bytes

1async function loadAllData(playerNameFromUrl){const player_name_raw=playerNameFromUrl||window.lastSearchedPlayer;console.log("[loadAllData] Starting... Received player name:",player_name_raw);const player_name=player_name_raw?player_name_raw.replace(/[-_]/g," "):null;if(!player_name){console.error("[loadAllData] Error: No valid player name available.");return}if(window.activePlayerLoad===player_name)return;window.activePlayerLoad=player_name;console.log("[loadAllData] Using cleaned player name:",player_name);window.lastSearchedPlayer=player_name;window.rsdata=void 0;clearAllData();const layoutReservations=window.playerLayoutReservations||[];const overallStart=performance.now();try{const safeLoad=(label,promise)=>Promise.resolve(promise).catch(error=>{console.warn(`[loadAllData] ${label} failed`,error);return null});const remainingLoads=Promise.all([safeLoad("peak metrics",loadPeakMetrics(player_name)),safeLoad("current metrics",loadCurrentMetrics(player_name)),safeLoad("player sheets",loadPlayerSheetsData(player_name)),safeLoad("team data",fetchTeamData(player_name)),safeLoad("28 year RAPM",load28year(player_name)),safeLoad("DARKO",loadDarkoData(player_name)),safeLoad("MAMBA",loadMambaData(player_name)),safeLoad("LAKER",loadLakerData(player_name)),safeLoad("RAPTOR",loadRaptorData(player_name)),safeLoad("LEBRON",loadlebrondata(player_name)),safeLoad("comparison",loadcomp(player_name))]);let bundle=null;try{if(typeof playerBundle!=="undefined"){bundle=await playerBundle.fetchPlayerBundle(player_name);
1await playerBundle.applyPlayerBundle(bundle);if(window.lastSearchedPlayer!==player_name)return;console.log("[loadAllData] player bundle hydrated. playerFullData:",window.playerFullData)}else{await loadOffenseData(player_name);console.log("[loadAllData] loadOffenseData completed. playerFullData:",window.playerFullData)}}catch(bundleError){console.warn(`[loadAllData] primary bundle unavailable for ${player_name}; loading remaining datasets`,bundleError)}try{if(bundle?.dashboard&&typeof applyStatsConfigResponse==="function"){window.clearDashboardConfigCache?.();if(bundle.dashboard_configs&&typeof window.cacheDashboardConfigs==="function"){window.cacheDashboardConfigs(bundle.dashboard_configs)}applyStatsConfigResponse(bundle.dashboard_configs?.advanced||bundle.dashboard)}else{await fetchStatsConfig(null,"advanced",null,player_name,{allConfigs:true})}}catch(configError){console.warn(`[loadAllData] dashboard config unavailable for ${player_name}`,configError)}const githubFallbackLoads=typeof playerBundle==="undefined"?[loadOnOffData(player_name),loadscpossdata(player_name),loadPlaytypeData(player_name),loaddPlaytypeData(player_name),loadplayoffRTS(player_name)]:[];await Promise.all([remainingLoads,...githubFallbackLoads.map((load,index)=>safeLoad(`github fallback ${index+1}`,load)),safeLoad("Pure RAPM",loadPureRAPMData(player_name))]);console.log("All data loaded successfully");if(typeof window.redrawVisibleTables==="function"){const redrawActive=()=>{const activeTab=document.querySelector('.tabcontent[style*="block"]')||document;window.redrawVisibleTables(activeTab)};if(document.fonts&&document.fonts.ready){document.fonts.ready.then(redrawActive)}else{redrawActive()}}}catch(error){console.error("Error loading data:",error)}finally{if(window.activePlayerLoad===player_name)window.activePlayerLoad=null;for(const[section,minHeight]of layoutReservations){section.style.minHeight=minHeight}window.playerLayoutReservations=[];if(typeof window.setStableMetricsRefreshing==="function"){window.setStableMetricsRefreshing(false)}const overallEnd=performance.now();console.log(`Overall data load time: ${(overallEnd-overallStart).toFixed(2)}ms`)}}var playType="Isolation";function getSelectedPlayType(){const activeButton=document.querySelector(".playtype-button.active");return activeButton?.getAttribute("data-play-type")||playType||"Isolation"}window.getSelectedPlayType=getSelectedPlayType;function applyFilter(selectedPlayType){playType=selectedPlayType||getSelectedPlayType();const rsTable=Tabulator.findTable("#rs-playtype-table")[0];const psTable=Tabulator.findTable("#ps-playtype-table")[0];if(rsTable){rsTable.setFilter("PLAY_TYPE","=",playType)}if(psTable){psTable.setFilter("PLAY_TYPE","=",playType)}}function attachPlaytypeListeners(){document.querySelectorAll(".playtype-button").forEach(button=>{button.addEventListener("click",function(){document.querySelectorAll(".playtype-button").forEach(btn=>btn.classList.remove("active"));this.classList.add("active");applyFilter(this.getAttribute("data-play-type"))})})}document.addEventListener("DOMContentLoaded",function(){attachPlaytypeListeners()});function loadPlaytypeData(player_name){return new Promise((resolve,reject)=>{var playerName=player_name||lastSearchedPlayer;console.log("[loadPlaytypeData] Using playerName:",playerName);if(!playerName){console.error("[loadPlaytypeData] Error: No player name provided.");reject(new Error("No player name provided for Playtype data."));return}$.ajax({url:"/playtype",method:"POST",data:{player_name:playerName},dataType:"json",success:function(data2){if(data2.error){console.error(data2.error);createPlayType("#rs-playtype-table",[]);createPlayType("#ps-playtype-table",[]);createPlayTypeYear("#rs-playtype-by-year-table",[]);createPlayTypeYear("#ps-playtype-by-year-table",[]);resolve(null);return}function normalizePlaytypeTritype(rows){return(rows||[]).map(function(row){var r=Object.assign({},row);if(r.PLAY_TYPE==="Transition"){r.tritype="transition";r.tritype_sort=3}else if(r.tritype==="opportunistic finishes"||r.tritype_sort==3){r.tritype_sort=4}else if(r.tritype==="transition"&&r.PLAY_TYPE!=="Transition"){r.tritype_sort=3}return r})}const rsData=normalizePlaytypeTritype(data2.rs);const psData=normalizePlaytypeTritype(data2.ps);playType=getSelectedPlayType();createPlayType("#rs-playtype-table",rsData);window.ptyear=createPlayTypeYear("#rs-playtype-by-year-table",rsData);if(psData&&psData.length>0){createPlayType("#ps-playtype-table",psData);createPlayTypeYear("#ps-playtype-by-year-table",psData)}else{$("#psoffplaytype").empty().append("<p>No player stats data available.</p>")}resolve(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("Error loading playtype data:",textStatus,errorThrown);createPlayType("#rs-playtype-table",[]);createPlayType("#ps-playtype-table",[]);createPlayTypeYear("#rs-playtype-by-year-table",[]);createPlayTypeYear("#ps-playtype-by-year-table",[]);reject(new Error(textStatus))}})})}function loaddPlaytypeData(player_name){return new Promise((resolve,reject)=>{$.ajax({url:"/dplaytype",method:"POST",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.error(data2.error);resolve(null);return}const offenseData=processOffenseData(data2.rs);if(document.querySelector("#rs-dplaytype-table")){createPlayType("#rs-dplaytype-table",offenseData)}if(data2.ps&&data2.ps.length>0){const defenseData=processOffenseData(data2.ps);if(document.querySelector("#ps-dplaytype-table")){createPlayType("#ps-dplaytype-table",defenseData)}}else{$("#psoffplaytype").empty().append("<p>No player stats data available.</p>")}resolve(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("Error loading defensive playtype data:",textStatus,errorThrown);reject(new Error(textStatus))}})})}function loadscpossdata(player_name){console.log("[loadscpossdata] Using playerName:",player_name);$.ajax({url:"/scposs",method:"POST",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.error(data2.error);createscposstable("#scposstable",[]);if(typeof window.createsixfactorimpacttable==="function"){window.createsixfactorimpacttable(null,[])}}else{cacheScpossRowsForPureRapm(data2.rs,player_name);createscposstable("#scposstable",data2.rs);if(typeof window.createsixfactorimpacttable==="function"){window.createsixfactorimpacttable(null,data2.rs)}}},error:function(jqXHR,textStatus,errorThrown){createscposstable("#scposstable",[]);if(typeof window.createsixfactorimpacttable==="function"){window.createsixfactorimpacttable(null,[])}console.error("Error fetching 6f data:",textStatus,errorThrown)}})}function newPercentileFormatter(cell,formatterParams,onRendered){const value=cell.getValue();const params=formatterParams||{};const percentileField=params.percentileField;const decimalPlaces=params.decimalPlaces!==void 0?params.decimalPlaces:1;const isBold=params.isBold||false;
1const showPercentage=params.showPercentage||false;const showPlus=params.showPlus||false;const invertPercentile=params.invertPercentile||false;const multiply=params.multiply??1;let rank=params.rank;if(rank!==void 0){const rankValue=typeof rank==="function"?rank(cell):rank;rank=Math.floor(rankValue)}let percentileValue;if(rank!==void 0){const rankValue=typeof rank==="function"?rank(cell):rank;percentileValue=rankValue>=400?0:(400-rankValue)/400}else{percentileValue=cell.getData()[percentileField]}if(percentileValue===void 0||percentileValue===null||isNaN(percentileValue)||value===void 0||value===null||isNaN(value)){cell.getElement().style.backgroundColor=getColor(50,0,100);cell.getElement().style.color="black";return`<div style="display: flex; flex-direction: column; font-size: 0.8rem; ${isBold?"font-weight: bold;":""}">${"-"}<div style="font-size: 0.65rem; color: 'gray'">${"-"}</div></div>`}percentileValue=Math.max(0,Math.min(1,percentileValue));const displayPercentile=invertPercentile?1-percentileValue:percentileValue;const backgroundColor=getColor(displayPercentile*100,0,100);cell.getElement().style.backgroundColor=backgroundColor;cell.getElement().style.color="black";let numericValue=typeof value==="string"?parseFloat(value.replace(/[+%]/g,"")):value;if(isNaN(numericValue)){cell.getElement().style.backgroundColor=getColor(50,0,100);return`<div style="display: flex; flex-direction: column; font-size: 0.75rem; ${isBold?"font-weight: bold;":""}">${"-"}<div style="font-size: 0.65rem; color: 'gray'">${"-"}</div></div>`}numericValue*=multiply;let displayValue=numericValue.toFixed(decimalPlaces);if(showPlus&&numericValue>0){displayValue="+"+displayValue}if(isBold){displayValue=`<strong>${displayValue}</strong>`}if(showPercentage){displayValue=String(displayValue)+"%"}let bottomValue=rank!==void 0?typeof rank==="function"?rank(cell):rank:Math.round(displayPercentile*100);if(numericValue===0&&percentileValue===0){cell.getElement().style.backgroundColor=getColor(50,0,100);return`<div style="display: flex; flex-direction: column; font-size: 0.8rem; ${isBold?"font-weight: bold;":""}">${"-"}<div style="font-size: 0.65rem; color: 'gray'">${"-"}</div></div>`}return`<div style="display: flex; flex-direction: column; font-size: 0.75rem; ${isBold?"font-weight: bold;":""}"><div style="white-space: nowrap;">${displayValue}</div><div style="font-size: 0.65rem; color: 'gray'">${bottomValue}</div></div>`}function hydrateOffenseData(data2){if(!data2||data2.error){console.log("dyson error?");console.error(data2?.error||"No offense data returned");return}$("#rsoffense").empty();$("#rsclutch").empty();$("#rsshooting").empty();$("#rs-dfg-table").empty();$("#rs-passing-table").empty();$("#def-table").empty();$("#psoffense").empty();$("#psclutch").empty();$("#psshooting").empty();$("#ps-passing-table").empty();$("#ps-dfg-table").empty();$("#ps-def-table").empty();console.log("data.rs",data2.rs);window.rsdata=data2.rs;if(!window.playerFullData){window.playerFullData={}}if(!window.playerFullData.pbp){window.playerFullData.pbp={}}window.playerFullData.pbp.rs=data2.rs||[];window.playerFullData.pbp.ps=data2.ps||[];console.log("Assigned data to window.playerFullData.pbp.rs");createTStable("#tsrs",data2.rs);createoffensetable("#rsoffense",data2.rs);createclutchtable("#rsclutch",data2.rs);createShootingTable("#rsshooting",data2.rs);createoldShootingTable("#oldrsshooting",data2.rs);window.dfgtable=createDFGtable(data2.rs,"#rs-dfg-table");window.currentpassingtable=createcurrentpassingtable("#rs-passing-table",data2.rs);window.deftable=createDEFtable(data2.rs,"#def-table");console.log("data.ps",data2.ps);if(data2.ps&&data2.ps.length>0){createTStable("#tsps",data2.ps);createoffensetable("#psoffense",data2.ps);createclutchtable("#psclutch",data2.ps);createShootingTable("#psshooting",data2.ps);createoldShootingTable("#oldpsshooting",data2.ps);window.currentpassingtable=createcurrentpassingtable("#ps-passing-table",data2.ps);window.dfgtablez=createDFGtable(data2.ps,"#ps-dfg-table");window.psdeftable=createDEFtable(data2.ps,"#ps-def-table")}else{$("#psoffense").append("<p>No player stats data available.</p>");$("#psclutch").append("<p>No player stats data available.</p>")}}window.hydrateOffenseData=hydrateOffenseData;function loadOffenseData(player_name){var playerName=player_name||lastSearchedPlayer;return $.ajax({url:"/offense",method:"POST",data:{player_name:player
1Name},dataType:"json",success:function(data2){if(data2.error){hydrateOffenseData(data2)}else{console.log("asdfgaass",playerName);hydrateOffenseData(data2)}},error:function(jqXHR,textStatus,errorThrown){console.error(`Error fetching offense data for player ${playerName}. Status: ${textStatus}. Error details: ${errorThrown}. Please check if the player name is correct and try again.`)}})}function processOffenseData(data2){return data2.map(row=>{let baseValue;if(row.OPP_TS_PCT!==void 0){baseValue=parseFloat(row.OPP_TS_PCT)/100}else{baseValue=parseFloat(row.avg_ts)}const calculatedRow={...row,TSA100:100*(parseFloat(row.TSA)/parseFloat(row.OffPoss)).toFixed(3),rTsPct:((parseFloat(row.TS_pct)-baseValue)*100).toFixed(3),Pts75:(parseFloat(row.Points)/parseFloat(row.OffPoss)*75).toFixed(3),nonPassTOVPct:((parseFloat(row.Turnovers)-parseFloat(row.BadPassTurnovers)-parseFloat(row.BadPassOutOfBoundsTurnovers))/parseFloat(row.TSA)*100).toFixed(3),ProbabilityOffRebounded:parseFloat(row.ProbabilityOffRebounded)*100,FG3A100:parseFloat(row.FG3A)/parseFloat(row.OffPoss)*100,firstchanceperc:row.FirstChancePoints/(row.FirstChancePoints+row.SecondChancePoints),grenadeperc:row.late_fga/row.FGA};return calculatedRow})}function loadDEF(){var player_name=lastSearchedPlayer;$.ajax({url:"/search/defense?allow_empty=1",method:"GET",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.warn("Playoff RTS data error:",data2.error);data2=[]}window.deftable=createDEFtable(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("AJAX error:",textStatus,errorThrown);window.deftable=createDEFtable([])}})}function loadscaledfactorrapm(){console.log("is scaled even loading?");var player_name=lastSearchedPlayer;$.ajax({url:"/search/scaled_factor_rapm_2y?allow_empty=1",method:"GET",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.warn("scaled factor rapm error",data2.error);data2=[];document.getElementById("threefactorO").style.display="none";document.getElementById("threefactorD").style.display="none"}else{document.getElementById("threefactorO").style.display="flex";document.getElementById("threefactorD").style.display="flex";window.fofftable=create_off_factor_table(data2);createAwesomeLineGraph("O-FACTOR-graph",data2,"year","scaled_oTS","scaled_oTOV","scaled_oREB","O-FACTOR");createAwesomeLineGraph("D-FACTOR-graph",data2,"year","scaled_dTS","scaled_dTOV","scaled_dREB","D-FACTOR");window.fdeftable=create_def_factor_table(data2)}},error:function(jqXHR,textStatus,errorThrown){console.error("AJAX error:",textStatus,errorThrown);window.fofftable=create_off_factor_table([]);window.fdeftable=create_def_factor_table([]);createAwesomeLineGraph("O-FACTOR-graph",data,"year","scaled_oTS","scaled_oTOV","LEBRON","LEBRON");createAwesomeLineGraph("D-FACTOR-graph",data,"year","scaled_dTS","scaled_dTOV","scaled_dREB","D-FACTOR")}})}function loadDFG(){var player_name=lastSearchedPlayer;$.ajax({url:"/search/dfg_breakdown?allow_empty=1",method:"GET",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.warn("Playoff RTS data error:",data2.error);data2=[]}window.dfgtable=createDFGtable(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("AJAX error:",textStatus,errorThrown);window.dfgtable=createDFGtable([])}})}function loadDFG_ps(){var player_name=lastSearchedPlayer;$.ajax({url:"/search/dfg_breakdown_ps?allow_empty=1",method:"GET",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.warn("Playoff RTS data error:",data2.error);data2=[]}window.dfgtablez=createDFGtable_ps(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("AJAX error:",textStatus,errorThrown);window.dfgtablez=createDFGtable_ps([])}})}function loadplayoffRTS(player_name){var player_name=player_name||lastSearchedPlayer;$.ajax({url:"/playoffRTS",method:"POST",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.warn("Playoff RTS data error:",data2.error);data2=[]}window.playoffRTStable=createplayoffRTStable(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("AJAX error:",textStatus,errorThrown);window.playoffRTStable=createplayoffRTStable([])}})}function loadpassingdata(){var player_name=lastSearchedPlayer;$.ajax({url:"/search/passing_rs_updated?allow_empty=1",method:"GET",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.warn("Passing data error:",data2.error);data2=[]}window.passingtable=createpassingtable(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("AJAX error:",textStatus,errorThrown);window.passingtable=createpassingtable([])}})}function loadplayoffpassingdata(){var player_name=lastSearchedPlayer;$.ajax({url:"/search/passing_ps_updated?allow_empty=1",method:"GET",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.warn("Playoff passing data error:",data2.error);data2=[]}window.playoffpassingtable=createplayoffpassingtable(data2);window.currentpspassingtable=createpscurrentpassingtable(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("AJAX error:",textStatus,errorThrown);window.playoffpassingtable=createplayoffpassingtable([]);window.currentpspassingtable=createpscurrentpassingtable([])}})}function loadpassingdiff(){var player_name=lastSearchedPlayer;$.ajax({url:"/search/passing_playoff_differences?allow_empty=1",method:"GET",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.warn("Passing diff data error:",data2.error);data2=[]}window.passingdifftable=createpassingdifftable(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("AJAX error:",textStatus,errorThrown);window.passingdifftable=createpassingdifftable([])}})}function loadtimedecayRAPMData(){var player_name=lastSearchedPlayer;$.ajax({url:"/search/timedecay?allow_empty=1",method:"GET",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.warn("Timedecay RAPM data error:",data2.error);data2=[]}window.timedecayRAPMTable=createtimedecayRAPMTable(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("AJAX error:",textStatus,errorThrown);window.timedecayRAPMTable=createtimedecayRAPMTable([])}})}function loadrecencyRAPMData(){var player_name=lastSearchedPlayer;$.ajax({url:"/search/recency_RAPM?allow_empty=1",method:"GET",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.warn("Recency RAPM data error:",data2.error);data2=[]}window.recencyRAPMTable=createrecencyRAPMTable(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("AJAX error:",textStatus,errorThrown);window.recencyRAPMTable=createrecencyRAPMTable([])}})}function loadTwoYearRAPMData(player_name){return new Promise((resolve,reject)=>{$.ajax({url:"/search/nbarapm?allow_empty=1",method:"GET",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.warn("Two Year RAPM data error:",data2.error);window.twoYearRAPMTable=createTwoYearRAPMTable([]);createAwesomeLineGraph("two-year-rapm-graph",[],"Seasons","offense","defense","total");resolve(null);return}window.twoYearRAPMTable=createTwoYearRAPMTable(data2);createAwesomeLineGraph("two-year-rapm-graph",data2,"Seasons","offense","defense","total");resolve(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("Error loading Two Year RAPM data:",textStatus,errorThrown);window.twoYearRAPMTable=createTwoYearRAPMTable([]);createAwesomeLineGraph("two-year-rapm-graph",[],"Seasons","offense","defense","total");reject(new Error(textStatus))}})})}function loadFFrapm(player_name){return new Promise((resolve,reject)=>{const activeButton_two=document.querySelector(".tablinks_ff.active");const csvLength=activeButton_two?activeButton_two.getAttribute("csv-length"):"d3";$.ajax({url:"/search/"+csvLength+"?allow_empty=1",method:"GET",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.warn("FFrapm data error:",data2.error);window.FFOFF=createOffensiveFourFactorsTable([]);window.FFDEF=createDefensiveFourFactorsTable([]);window.FFTOT=createTotalFourFactorsTable([]);resolve(null);return}window.FFOFF=createOffensiveFourFactorsTable(data2);window.FFDEF=createDefensiveFourFactorsTable(data2);window.FFTOT=createTotalFourFactorsTable(data2);resolve(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("Error loading FFrapm data:",textStatus,errorThrown);window.FFOFF=createOffensiveFourFactorsTable([]);window.FFDEF=createDefensiveFourFactorsTable([]);window.FFTOT=createTotalFourFactorsTable([]);reject(new Error(textStatus))}})})}function loadstructuredcomp(player_name){return Promise.resolve(null)}function loadPeakMetrics(player_name){return new Promise((resolve,reject)=>{var playerName=player_name||lastSearchedPlayer;if(!playerName){return reject(new Error("No player name for peakmetrics"))}const section=document.getElementById("career-metrics-rapm-section");const tableEl=document.getElementById("peak-metrics-table");const existingPeakTable=Tabulator.findTable("#peak-metrics-table")[0];$.ajax({url:"/api/peakmetrics",method:"GET",data:{player_name:player
1Name},dataType:"json",success:function(data2){if(data2.error){console.warn("Peak metrics error:",data2.error);if(!existingPeakTable){if(tableEl)tableEl.innerHTML="";if(section)section.style.display="none"}if(section)section.classList.remove("stable-metrics-refreshing");resolve(null)}else{if(section)section.style.display="inline-block";window.peakmetrics=typeof updatepeakmetrics==="function"?updatepeakmetrics(data2):null;if(!window.peakmetrics){if(tableEl)tableEl.innerHTML="";window.peakmetrics=createpeakmetrics(data2)}if(section)section.classList.remove("stable-metrics-refreshing");resolve(data2)}},error:function(jqXHR,textStatus,errorThrown){console.error("Error loading peak metrics:",textStatus,errorThrown);if(!existingPeakTable){if(tableEl)tableEl.innerHTML="";if(section)section.style.display="none"}if(section)section.classList.remove("stable-metrics-refreshing");resolve(null)}})})}function loadCurrentMetrics(player_name){return new Promise((resolve,reject)=>{var playerName=player_name||lastSearchedPlayer;if(!playerName){return reject(new Error("No player name for currentmetrics"))}const section=document.getElementById("current-metrics-rapm-section");const tableEl=document.getElementById("current-metrics-table");const existingCurrentTable=Tabulator.findTable("#current-metrics-table")[0];$.ajax({url:"/api/currentmetrics",method:"GET",data:{player_name:playerName},dataType:"json",success:function(data2){if(data2.error){console.warn("Current metrics data error:",data2.error);if(!existingCurrentTable){if(tableEl)tableEl.innerHTML="";if(section)section.style.display="none"}if(section)section.classList.remove("stable-metrics-refreshing");resolve(null)}else{const timedecayRow=(data2||[]).find(function(row){return String(row.dataset||"").toLowerCase().replace(/[^a-z0-9]/g,"")==="timedecayrapm"});if(timedecayRow&&typeof window.setBioRapmMeta==="function"){window.setBioRapmMeta(timedecayRow)}if(section)section.style.display="inline-block";window.currentmetrics=typeof updatecurrentmetrics==="function"?updatecurrentmetrics(data2):null;if(!window.currentmetrics){if(tableEl)tableEl.innerHTML="";window.currentmetrics=createcurrentmetrics(data2)}if(section)section.classList.remove("stable-metrics-refreshing");resolve(data2)}},error:function(jqXHR,textStatus,errorThrown){console.error("Error loading current metrics:",textStatus,errorThrown);if(!existingCurrentTable){if(tableEl)tableEl.innerHTML="";if(section)section.style.display="none"}if(section)section.classList.remove("stable-metrics-refreshing");resolve(null)}})})}function loadcomp(player_name){return new Promise((resolve,reject)=>{var playerName=player_name||lastSearchedPlayer;if(!playerName){return reject(new Error("No player name for comp"))}$.ajax({url:"/search/current_comp?allow_empty=1",method:"GET",data:{player_name:playerName},dataType:"json",success:function(data2){if(data2.error){console.warn("Comp data error:",data2.error);window.radarchart=createAdvancedStatsRadarChart("advanced-stats-chart",[]);resolve(null);return}window.radarchart=createAdvancedStatsRadarChart("advanced-stats-chart",data2);resolve(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("Error loading comp data:",textStatus,errorThrown);window.radarchart=createAdvancedStatsRadarChart("advanced-stats-chart",[]);reject(new Error(textStatus))}})})}function load28year(player_name){return new Promise((resolve,reject)=>{var playerName=player_name||lastSearchedPlayer;if(!playerName){return reject(new Error("No player name for 28year"))}$.ajax({url:"/search/28year?allow_empty=1",method:"GET",data:{player_name:playerName},dataType:"json",success:function(data2){if(data2.error){console.warn("28 Year RAPM data error:",data2.error);window.twentyeightYearRAPMTable=create28YearRAPMTable([]);window.twentyeightOFF=create28YearOFF([]);window.twentyeightDEF=create28YearDEF([]);window.twentyeightTOT=create28YearTOT([]);resolve(null);return}window.twentyeightYearRAPMTable=create28YearRAPMTable(data2);window.twentyeightOFF=create28YearOFF(data2);window.twentyeightDEF=create28YearDEF(data2);window.twentyeightTOT=create28YearTOT(data2);resolve(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("Error loading 28 year data:",textStatus,errorThrown);window.twentyeightYearRAPMTable=create28YearRAPMTable([]);window.twentyeightOFF=create28YearOFF([]);window.twentyeightDEF=create28YearDEF([]);window.twentyeightTOT=create28YearTOT([]);reject(new Error(textStatus))}})})}function loadRaptorData(player_name){return new Promise((resolve,reject)=>{var playerName=player_name||lastSearchedPlayer;if(!playerName){return reject(new Error("No player name for Raptor"))}$.ajax({url:"/search/raptor?allow_empty=1",method:"GET",data:{player_name:player
1Name},dataType:"json",success:function(data2){if(data2.error){console.warn("RAPTOR data error:",data2.error);window.raptorTable=createRaptorTable([]);createAwesomeLineGraph("raptor-graph",[],"season","raptor_offense","raptor_defense","raptor_total","RAPTOR");resolve(null);return}window.raptorRawData=data2;window.raptorTable=createRaptorTable(data2);createAwesomeLineGraph("raptor-graph",data2,"season","raptor_offense","raptor_defense","raptor_total","RAPTOR");resolve(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("Error loading RAPTOR data:",textStatus,errorThrown);window.raptorTable=createRaptorTable([]);createAwesomeLineGraph("raptor-graph",[],"season","raptor_offense","raptor_defense","raptor_total","RAPTOR");reject(new Error(textStatus))}})})}function loadlebrondata(player_name){return new Promise((resolve,reject)=>{var playerName=player_name||lastSearchedPlayer;if(!playerName){return reject(new Error("No player name for LEBRON"))}$.ajax({url:"/search/lebron?allow_empty=1",method:"GET",data:{player_name:playerName},dataType:"json",success:function(data2){console.log("Received LEBRON data:",data2);if(data2.error){$("#LEBRON-table").html('<p style="color: red;">'+data2.error+"</p>");$("#LEBRON-graph").html("");resolve(null);return}window.lebronRawData=data2;const existingLebronTable=Tabulator.findTable("#LEBRON-table")[0];if(window.lebronTable&&existingLebronTable===window.lebronTable){window.lebronTable.setData(data2)}else{if(existingLebronTable)existingLebronTable.destroy();window.lebronTable=createLEBRONtable(data2)}createAwesomeLineGraph("LEBRON-graph",data2,"Season","O-LEBRON","D-LEBRON","LEBRON","LEBRON");resolve(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("Error loading LEBRON data:",textStatus,errorThrown);$("#LEBRON-table").html('<p style="color: red;">Error fetching LEBRON data: '+textStatus+"</p>");createAwesomeLineGraph("LEBRON-graph",[],"Season","O-LEBRON","D-LEBRON","LEBRON","LEBRON");reject(new Error(textStatus))}})})}function loadMambaData(player_name){return new Promise((resolve,reject)=>{var playerName=player_name||lastSearchedPlayer;if(!playerName){return reject(new Error("No player name for MAMBA"))}$.ajax({url:"/search/mamba?allow_empty=1",method:"GET",data:{player_name:playerName},dataType:"json",success:function(data2){if(data2.error){console.warn("MAMBA data error:",data2.error);window.darkoTable=createMAMBATable([]);createAwesomeLineGraph("MAMBA-graph",[],"year","O-MAMBA","D-MAMBA","MAMBA","MAMBA");resolve(null);return}window.mambaRawData=data2;window.darkoTable=createMAMBATable(data2);createAwesomeLineGraph("MAMBA-graph",data2,"year","O-MAMBA","D-MAMBA","MAMBA","MAMBA");resolve(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("Error loading MAMBA data:",textStatus,errorThrown);window.MAMBATable=createMAMBATable([]);createAwesomeLineGraph("MAMBA-graph",[],"year","O-MAMBA","D-MAMBA","MAMBA","MAMBA");reject(new Error(textStatus))}})})}window.lakerSeasonType=window.lakerSeasonType||"rs";function isLakerPlayoffRow(row){const seasonType=String(row?.season_type||row?.type||"").toLowerCase();const playoffs=row?.playoffs;return seasonType==="ps"||seasonType.includes("playoff")||seasonType.includes("post")||playoffs===true||playoffs===1||String(playoffs).toLowerCase()==="true"||String(playoffs).toLowerCase()==="t"||String(playoffs).toLowerCase()==="yes"}function filterLakerRows(rows){const seasonType=window.lakerSeasonType||"rs";return(rows||[]).filter(row=>isLakerPlayoffRow(row)===(seasonType==="ps"))}function clearLakerGraph(){const canvas=document.getElementById("LAKER-graph");if(!canvas)return;const existingChart=window.Chart?.getChart?.(canvas);if(existingChart)existingChart.destroy();const context=canvas.getContext("2d");if(context)context.clearRect(0,0,canvas.width,canvas.height)}function updateLakerSeasonToggleState(){document.querySelectorAll(".laker-season-button").forEach(button=>{button.classList.toggle("active",button.dataset.lakerSeason===window.lakerSeasonType)})}function renderLakerData(){updateLakerSeasonToggleState();const rows=filterLakerRows(window.lakerRawData||[]);const existingLakerTable=Tabulator.findTable("#LAKER-table")[0];if(window.lakerTable&&existingLakerTable===window.lakerTable){window.lakerTable.setData(rows)}else{if(existingLakerTable)existingLakerTable.destroy();window.lakerTable=createLAKERTable(rows)}if(rows.length>0){createAwesomeLineGraph("LAKER-graph",rows,"year","orapm","drapm","rapm","LAKER")}else{clearLakerGraph()}return rows}function setLakerSeasonType(seasonType){window.lakerSeasonType=seasonType==="ps"?"ps":"rs";return renderLakerData()}document.addEventListener("DOMContentLoaded",function(){document.querySelectorAll(".laker-season-button").forEach(button=>{button.addEventListener("click",function(){setLakerSeasonType(this.dataset.lakerSeason)})});updateLakerSeasonToggleState()});function loadLakerData(player_name){return new Promise((resolve,reject)=>{var playerName=player_name||lastSearchedPlayer;if(!playerName){return reject(new Error("No player name for LAKER"))}$.ajax({url:"/search/LAKER_history?allow_empty=1",method:"GET",data:{player_name:player
1Name},dataType:"json",success:function(data2){if(data2.error){console.warn("LAKER data error:",data2.error);window.lakerRawData=[];renderLakerData();resolve(null);return}window.lakerRawData=data2;resolve(renderLakerData())},error:function(jqXHR,textStatus,errorThrown){console.error("Error loading LAKER data:",textStatus,errorThrown);window.lakerRawData=[];renderLakerData();reject(new Error(textStatus))}})})}function loadDarkoData(player_name){return new Promise((resolve,reject)=>{var playerName=player_name||lastSearchedPlayer;if(!playerName){return reject(new Error("No player name for DARKO"))}$.ajax({url:"/search/DARKO?allow_empty=1",method:"GET",data:{player_name:playerName},dataType:"json",success:function(data2){if(data2.error){console.warn("DARKO data error:",data2.error);window.darkoTable=createDarkoTable([]);createAwesomeLineGraph("darko-graph",[],"season","o_dpm","d_dpm","dpm","DARKO");resolve(null);return}window.darkoRawData=data2;window.darkoTable=createDarkoTable(data2);createAwesomeLineGraph("darko-graph",data2,"season","o_dpm","d_dpm","dpm","DARKO");resolve(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("Error loading DARKO data:",textStatus,errorThrown);window.darkoTable=createDarkoTable([]);createAwesomeLineGraph("darko-graph",[],"season","o_dpm","d_dpm","dpm","DARKO");reject(new Error(textStatus))}})})}function loadOnOffData(player_name){console.log("[loadOnOffData] Received player_name arg:",player_name);return new Promise((resolve,reject)=>{$.ajax({url:"/on_off",method:"POST",data:{player_name},dataType:"json",success:function(data2){if(data2.error){console.warn("On/Off data error:",data2.error);resolve(null);return}if(typeof window.hydrateOnOffData==="function"){window.hydrateOnOffData(data2)}resolve(data2)},error:function(jqXHR,textStatus,errorThrown){console.error("Error loading on/off data:",textStatus,errorThrown);reject(new Error(textStatus))}})})}function handleSubbuttonClick(event){}const PURE_RAPM_LENGTHS=["1","2","3","4","5"];function pureRapmScpossRowsFromCache(){const bundleRows=window.playerGithubBundle&&window.playerGithubBundle.scposs?window.playerGithubBundle.scposs.rs:null;if(Array.isArray(bundleRows)&&bundleRows.length){return bundleRows}if(Array.isArray(window.latestScpossRows)&&window.latestScpossRows.length){return window.latestScpossRows}return null}function normalizePureRapmRowsFromScposs(rows){return(rows||[]).map(row=>{const length=String(row.Year_Interval||row.length_of_rapm||"").replace(/[^0-9]/g,"");const endingSeason=Number(row.Latest_Year??row.ending_season);return Object.assign({},row,{ending_season:endingSeason,length_of_rapm:length,start_szn:endingSeason&&length?endingSeason-Number(length)+1:row.start_szn,off:Number(row.Off_RAPM??row.off),def:Number(row.Def_RAPM??row.def),rapm:Number(row.OVR_RAPM??row.rapm??row.net_rapm),possessions:Number(row.possessions??row.Off_Poss??row.sc_POSS??0),"off rk":row.Off_RAPM_rank??row["off rk"],"def rk":row.Def_RAPM_rank??row["def rk"],"tot rk":row.OVR_RAPM_rank??row["tot rk"],"poss rk":row.sc_POSS_rank??row["poss rk"]})}).filter(row=>PURE_RAPM_LENGTHS.includes(String(row.length_of_rapm)))}function cacheScpossRowsForPureRapm(rows,playerName){window.latestScpossRows=Array.isArray(rows)?rows:[];if(window.latestScpossRows.length&&typeof renderPureRapmFromScposs==="function"){renderPureRapmFromScposs(window.latestScpossRows,playerName||window.lastSearchedPlayer)}}function clearPureRapmTables(){window.pureRAPMData=[];PURE_RAPM_LENGTHS.forEach(len=>{if(typeof createpureRAPMTable==="function"){createpureRAPMTable(`pure-rapm-table-${len}y`,[])}});if(typeof updatePureRAPMGraph==="function"){updatePureRAPMGraph("4")}}function renderPureRapmFromScposs(rows,playerName){const normalizedRows=normalizePureRapmRowsFromScposs(rows);window.pureRAPMData=normalizedRows;const nbaId=window.currentPlayerId||window.caseInsensitiveMap&&playerName&&window.caseInsensitiveMap[playerName.toLowerCase()];PURE_RAPM_LENGTHS.forEach(len=>{const filteredRows=normalizedRows.filter(row=>String(row.length_of_rapm)===len);const formattedRows=typeof formatRAPMData==="function"&&nbaId?formatRAPMData(filteredRows,nbaId):filteredRows;if(typeof createpureRAPMTable==="function"){createpureRAPMTable(`pure-rapm-table-${len}y`,formattedRows)}});if(typeof updatePureRAPMGraph==="function"){updatePureRAPMGraph("4")}return normalizedRows}window.renderPureRapmFromScposs=renderPureRapmFromScposs;window.cacheScpossRowsForPureRapm=cacheScpossRowsForPureRapm;function loadPureRAPMData(player_name){return new Promise((resolve,reject)=>{console.log(`[loadPureRAPMData] Loading Pure RAPM from scposs for: ${player_name}`);var playerName=player_name||lastSearchedPlayer;if(!playerName){console.error("[loadPureRAPMData] Error: No player name provided.");return reject(new Error("No player name for PureRAPM"))}
1const cachedScpossRows=pureRapmScpossRowsFromCache();if(cachedScpossRows){resolve(renderPureRapmFromScposs(cachedScpossRows,playerName));return}$.ajax({url:"/scposs",method:"POST",data:{player_name:playerName},dataType:"json",success:function(data2){if(data2.error){console.error("[loadPureRAPMData] Error fetching scposs data:",data2.error);clearPureRapmTables();resolve(null);return}const rows=Array.isArray(data2)?data2:data2.rs||[];resolve(renderPureRapmFromScposs(rows,playerName))},error:function(jqXHR,textStatus,errorThrown){console.error("[loadPureRAPMData] AJAX error fetching scposs data:",textStatus,errorThrown);clearPureRapmTables();reject(new Error(`AJAX Error: ${textStatus} - ${errorThrown}`))}})})}async function fetchTeamData(player_name){var playerName=player_name||lastSearchedPlayer;if(!playerName){console.error("fetchTeamData: No player name provided.");return null}console.log("Fetching team data for",playerName);try{const response=await fetch(`/get_team_data/${encodeURIComponent(playerName)}`);if(!response.ok){throw new Error(`HTTP error! status: ${response.status}`)}const data2=await response.json();console.log("Team data received:",data2);if(data2?.team&&typeof window.setBioTeamMeta==="function"){window.setBioTeamMeta({team:data2.team})}return data2}catch(error){console.error("Error fetching team data:",error);return null}}

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.