There was a problem with a Velocity script | |
Page | sports/wten/2024-25/conf/Kansas_Collegiate_Athletic_Conference/Players/bio-network-template |
Error | Invocation of method 'getOverall' in class com.prestosports.content.sport.stats.StatsSplitter threw exception java.lang.NullPointerException at kw0m010krkax1jwssports/wten/2024-25/conf/Kansas_Collegiate_Athletic_Conference/Players/bio-network-template[line 40, column 24] |
Page source: |
1: ## PICK UP OPTIONS 2: $website.include("options") 3: #set ($options = $request.getAttribute("options")) 4: #set ($locale = "en_us") 5: #set ($locale = $options.get("locale")) 6: 7: #set ($showconf = true) 8: #if ($options.get("stats_hide_conference") and $options.get("stats_hide_conference").equalsIgnoreCase("hide")) 9: #set ($showconf = false) 10: #end 11: 12: #set ($showCareer = $wiki.valid() && $seasons) 13: #if ("yes" == $options.get("stats_show_career") && $seasons) 14: #set ($showCareer = "yes") 15: #end 16: 17: #if ($locale == "en_us") 18: #set ($defLabel = "Defense") 19: #elseif ($locale == "en_gb") 20: #set ($defLabel = "Defence") 21: #end 22: 23: #set ($pos = "") 24: #if($attributes.get("position_stat")) 25: #set ($pos = $attributes.get("position_stat")) 26: #else 27: #set ($pos = $attributes.get("position")) 28: #set ($pos = $statPosition) 29: #set ($posVec = $pos.split("/")) 30: #set ($pos = $posVec[0]) 31: #end 32: #set ($pos = $pos.toLowerCase()) 33: #set ($statPos = $positions.get($pos)) 34: #set ($paramPos = $request.getParameter("pos")) 35: 36: #set ($highlights = $highlights.get($statPos)) 37: 38: #set ($url = ${page.url}) 39: #set ($playerId = $attributes.get("playerId")) 40: #set ($stats = $splits.overall) 41: 42: #set ($hasEvents = $events.size() > 0) 43: #set ($hasSynopsis = $synopsis.length() > 1 && $synopsis.indexOf("<center>") == -1) 44: #set ($htmlStatsURL = "${page.url}-stats") 45: #set ($hasHTMLStats = $website.exists($htmlStatsURL)) 46: #set ($bioBriefURL = "${page.url}-brief") 47: #set ($hasBioBrief = $website.exists("$bioBriefURL")) 48: 49: $request.setAttribute("careerTotals", $career) 50: ## We track a map of the careers to see if we are missing any seasons 51: #if(!$rosterTransactions) 52: #set ($careerMap = {}) 53: $request.setAttribute("careerMap", $careerMap) 54: #foreach ($season in $seasons) 55: ## We need to include this season stats. 56: ## we anticipate the player file being within a normal season structure. 57: #set ($path = "${season.path}?tmpl=bio-career-template&name=${season.seasonName}&pos=${statPos}&print=no") 58: 59: ## naiastats.com uses a unique foler structure that needs to be accounted for. 60: ## seasons have conference folders within NAIA to reduce query response times for massive season data. 61: #if($page.url.contains("/conf")) 62: #set ($tempPath = $page.sectionPage.sectionPage.sectionPage.sectionPage.sectionPage.url) 63: #else 64: #set ($tempPath = $page.sectionPage.sectionPage.sectionPage.url) 65: #end 66: #set ($path = $path.replace("../..", $tempPath)) 67: 68: $website.includeAgain($path) 69: #end 70: #end 71: #set ($view = "profile") 72: #if ($request.getParameter("view")) 73: #set ($view = $request.getParameter("view")) 74: #end 75: 76: $website.include("${page.sectionPage.url}/roster?tmpl=roster-headshots-template") 77: #set ($rosterHeadshots = $!request.getAttribute("roster_headshots")) 78: 79: #################################### MACROS #################################################### 80: #macro (printTableHeader $label $class) 81: ## Hack for now 82: #set ($labels = $labels.get($p)) 83: <th class="text-uppercase $class" data-p="$!{p}" data-bs-toggle="tooltip" data-bs-placement="top" title="$!{labels.get($label)}">$label</th> 84: #end 85: 86: #macro (printCellClass) 87: class="text-nowrap text-center" 88: #end 89: 90: #macro (printImage $src $alt $class) 91: #set ($src = "${src}?max_height=576&max_width=576&crop=1") 92: <div class="ratio ratio-1x1 rounded-circle overflow-hidden img-thumbnail"> 93: <span class="align-content-center"> 94: <img src="${src}" alt="${alt}" class="${class}" /> 95: </span> 96: </div> 97: #end 98: 99: #macro (printTab $viewParam $label) 100: #set ($classAttr = "nav-link text-nowrap") 101: #if ($viewParam == $view) 102: #set ($classAttr = "${classAttr} active") 103: #end 104: <li class="nav-item"> 105: <a href="${page.url}?view=${viewParam}" class="$classAttr" role="tab" data-bs-toggle="tab" data-bs-target="#${viewParam}" aria-selected="true" aria-controls="$viewParam">$label</a> 106: </li> 107: #end 108: 109: #macro (printPaneAttrs $viewParam) 110: #set ($classAttr = "tab-pane") 111: #if ($viewParam == $view) 112: #set ($classAttr = "tab-pane active") 113: #else 114: #set ($classAttr = "${classAttr} fade") 115: #end 116: 117: class="$classAttr" role="tabpanel" id="$viewParam" 118: #end 119: 120: #macro (printResultAriaLabel $event) 121: #set ($ariaLabel = "${event.sport} event: ${formatter.formatDate($event.date, 'MMMM d hh:mm a:')}") 122: #if ($event.neutralSite.length() > 0 || $event.home) 123: #set ($ariaLabel = "${ariaLabel} vs.") 124: #else 125: #set ($ariaLabel = "${ariaLabel} at") 126: #end 127: #set ($ariaLabel = "${ariaLabel} ${event.opponent.name}:") 128: #if ($event.neutralSite.length() > 0) 129: #set ($ariaLabel = "${ariaLabel} @ ${event.neutralSite}:") 130: #end 131: #set ($ariaLabel = "${ariaLabel} Box Score") 132: aria-label="$ariaLabel" 133: #end 134: 135: #macro (printHighlights) 136: #if ($highlights) 137: <div class="d-flex flex-wrap bg-light"> 138: #foreach ($highlight in $highlights.keySet()) 139: #set ($value = "-") 140: #set ($value = $formatter.formatNumber($stats.get($highlight), $formats.get($highlight))) 141: #set ($classAttr = "flex-fill border p-3 text-center") 142: #if ($velocityCount > 1) 143: ## #set ($classAttr = "nav-item border-left") 144: #end 145: <div class="$classAttr" style="min-width:100px"> 146: <div class="text-uppercase fw-normal small text-muted">$!highlights.get($highlight)</div> 147: <div class="p-0 m-0 fs-5 fw-bold lh-1">$!value</div> 148: </div> 149: #end 150: </div> 151: #end 152: #end ## macro printHighlights 153: 154: #macro (splitBioNetwork $statPosBriefs $label $stats) 155: <tr> 156: <th class="text-nowrap text-end fw-bold">${label}</th> 157: #if($rosterTransactions && $stats.class.simpleName == "JSONObject") 158: #set($keys = $stats.names()) 159: #set($array = $keys.toString().replace('"','').split(",")) 160: #foreach ($brief in $statPosBriefs.keySet()) 161: #set ($value = "-") 162: #if($array.contains($brief)) 163: #set ($value = $!formatter.formatNumber($tool.math.toDouble($stats.get($brief)), $formats.get($brief))) 164: #end 165: <td>#if ($value.length() > 0) $value #else - #end</td> 166: #end 167: #else 168: #foreach ($brief in $statPosBriefs.keySet()) 169: #set ($value = "-") 170: #set ($value = $!formatter.formatNumber($stats.get($brief), $formats.get($brief))) 171: <td #printCellClass>#if ($value.length() > 0) $value #else - #end</td> 172: #end 173: #end 174: </tr> 175: #end ## marco split 176: 177: #macro (printCategories $briefCategoryLabels $viewParam) 178: #printSubTabs($briefCategoryLabels.entrySet(), $viewParam) 179: 180: <div class="tab-content py-3"> 181: #foreach ($briefCat in $briefCategoryLabels.entrySet()) 182: #set ($briefCatLabel = $briefCat.value) 183: #set ($class = "tab-pane") 184: #if ($briefCat.key == $activePos) 185: #set ($class = "tab-pane active") 186: #end 187: <div id="${viewParam}-${briefCat.key}" class="$class" role="tabpanel"> 188: <div class="stats-wrap clearfix"> 189: #if ($viewParam == "splits") 190: #splitsBioNetworkData($briefCat.key) 191: #elseif ($viewParam == "career") 192: #careerData($briefCat.key) 193: #end 194: </div> 195: </div> 196: #end 197: </div> 198: #end ## macro printCategories 199: 200: #macro (splitsBioNetworkData $p) 201: #set ($p = $positions.get($p)) 202: #set ($statPosBriefs = $briefs.get($p)) 203: #set ($colspan = $statPosBriefs.size()) 204: 205: <div class="stats-container table-responsive-via-datatables"> 206: <table class="table table-hover nowrap w-100" data-searching="false" data-ordering="false" data-paging="false" data-info="false" data-filtering="false" data-module="https://theme-assets.prestosports.com/theme-assets/generic/assets/js/table-sort-bs.js"> 207: <thead class="thead-dark"> 208: <tr> 209: <th> </th> 210: #foreach ($brief in $statPosBriefs) 211: #printTableHeader($brief, "text-center") 212: #end 213: </tr> 214: </thead> 215: #splitBioNetwork($statPosBriefs, "Total", $splits.overall) 216: #if ($showconf) 217: #splitBioNetwork($statPosBriefs, "Conference", $splits.conference) 218: #end 219: #splitBioNetwork($statPosBriefs, "Exhibition", $splits.exhibition) 220: 221: 222: <tr class="group"> 223: #foreach ( $i in [0..$colspan]) 224: <td class="text-center"> </td> 225: #end 226: </tr> 227: 228: #splitBioNetwork($statPosBriefs, "Home", $splits.home) 229: #splitBioNetwork($statPosBriefs, "Away", $splits.away) 230: #splitBioNetwork($statPosBriefs, "Neutral", $splits.neutral) 231: 232: <tr class="group"> 233: #foreach ( $i in [0..$colspan]) 234: <td class="text-center"> </td> 235: #end 236: </tr> 237: 238: #foreach($gameResult in $gamesResults.entrySet()) 239: #if ($gameResult.key == "wins") 240: #set ($splitGameResult = $splits.inWins) 241: #elseif ($gameResult.key == "losses") 242: #set ($splitGameResult = $splits.inLosses) 243: #elseif ($gameResult.key == "ties") 244: #set ($splitGameResult = $splits.inTies) 245: #end 246: 247: #splitBioNetwork($statPosBriefs, $gameResult.value, $splitGameResult) 248: #end 249: 250: <tr class="group"> 251: #foreach ( $i in [0..$colspan]) 252: <td class="text-center"> </td> 253: #end 254: </tr> 255: 256: #if ($monthsPlayed and $monthsPlayed.size() > 0) 257: #foreach($month in $monthsPlayed) 258: #if ($month == 'January') 259: #set ($splitMonth = $splits.january) 260: #elseif ($month == 'February') 261: #set ($splitMonth = $splits.february) 262: #elseif ($month == 'March') 263: #set($splitMonth = $splits.march) 264: #elseif ($month == 'April') 265: #set($splitMonth = $splits.april) 266: #elseif ($month == 'May') 267: #set ($splitMonth = $splits.may) 268: #elseif ($month == 'June') 269: #set ($splitMonth = $splits.june) 270: #elseif ($month == 'July') 271: #set($splitMonth = $splits.july) 272: #elseif ($month == 'August') 273: #set ($splitMonth = $splits.august) 274: #elseif ($month == 'September') 275: #set($splitMonth = $splits.september) 276: #elseif ($month == 'October') 277: #set($splitMonth = $splits.october) 278: #elseif ($month == 'November') 279: #set ($splitMonth = $splits.november) 280: #elseif ($month == 'December') 281: #set($splitMonth = $splits.december) 282: #end 283: #splitBioNetwork($statPosBriefs, $month, $splitMonth) 284: #end 285: #end 286: </table> 287: </div> 288: #end ## macro splitsBioNetworkData 289: 290: #macro (printRecentGames) 291: <div class="stats-container table-responsive-via-datatables"> 292: <table class="table table-hover nowrap w-100" data-searching="false" data-ordering="false" data-paging="false" data-info="false" data-filtering="false" data-module="https://theme-assets.prestosports.com/theme-assets/generic/assets/js/table-sort-bs.js"> 293: <thead class="thead-dark"> 294: <tr> 295: <th class="text-uppercase w-1">Date</th> 296: <th class="text-uppercase text-start">Opponent</th> 297: <th scope="col" class="text-center text-uppercase">Result</th> 298: </tr> 299: </thead> 300: #set ($eventEnd = -1) 301: #foreach ($event in $events) 302: #if ($event.event.result.resolved) 303: #set ($eventEnd = $velocityCount) 304: #end 305: #end 306: 307: #set ($eventStart = $eventEnd - 5) 308: #if ($eventStart < 0) #set ($eventStart = 0) #end 309: 310: #foreach ($event in $events) 311: #if ($velocityCount >= $eventStart and $velocityCount <= $eventEnd) 312: <tr> 313: <td class="text-nowrap text-start">$formatter.formatDate($event.event.date, "MMM d")</td> 314: <td class="text-nowrap text-start"> 315: #if ($event.event.neutralSite.length() > 0) vs. 316: #elseif (!$event.event.home) at 317: #end 318: $event.event.opponent.name 319: </td> 320: <td class="text-nowrap text-center"> 321: #if ($event.event.statusCode >= 0) 322: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0) 323: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a> 324: #else 325: ${event.event.APResult} 326: #end 327: #end 328: </td> 329: </tr> 330: #end 331: #end 332: </table> 333: </div> 334: #end ## macro printRecentGames 335: 336: #macro (gamelogData $p) 337: #set ($p = $positions.get($p)) 338: #set ($gamelogs = $gamelogs.get($p)) 339: #set ($atLeastOneNotOverall = false) 340: 341: <div class="stats-container table-responsive-via-datatables"> 342: <table class="table table-hover nowrap w-100" data-searching="false" data-ordering="false" data-filtering="false" data-module="https://theme-assets.prestosports.com/theme-assets/generic/assets/js/table-sort-bs.js"> 343: <thead class="thead-dark"> 344: <tr> 345: #printTableHeader("Date", "w-1") 346: #printTableHeader("Opponent", "") 347: #printTableHeader("Score", "text-center") 348: 349: #set ($colspan = 3) 350: #if ($p == 'goalie' && ($sport.enumCode == 9 || $sport.enumCode == 3)) ## field hockey: 9 soccer:3 351: #printTableHeader("Dec", "text-center") 352: #end 353: #foreach ($gamelog in $gamelogs) 354: #printTableHeader($gamelog, "text-center") 355: #end 356: </tr> 357: </thead> 358: #foreach ($event in $events) 359: <tr> 360: <td class="text-nowrap">$formatter.formatDate($event.event.date, "MMM d") #if (!$event.event.overall) #set ($atLeastOneNotOverall = true) # #end</</td> 361: <td class="text-nowrap"> 362: #if ($event.event.neutralSite.length() > 0) vs. #elseif (!$event.event.home) at #end 363: $event.event.opponent.name 364: </td> 365: <td #printCellClass> 366: #if ($event.event.statusCode >= 0) 367: #if ($event.event.eventId.length() > 0 && $event.stats.size() > 0) 368: <a #printResultAriaLabel($event.event) href="../boxscores/${formatter.formatBoxScoreLink($event.event)}">${event.event.APResult}</a> 369: #else 370: ${event.event.APResult} 371: #end 372: #else #end 373: </td> 374: #if ($p == 'goalie' && ($sport.enumCode == 9 || $sport.enumCode == 3)) ## field hockey: 9 soccer:3 375: <td #printCellClass> 376: #if ($event.stats.get('gow') == 1) 377: W 378: #elseif ($event.stats.get('gol') == 1) 379: L 380: #elseif ($event.stats.get('got') == 1) 381: T< 382: #else 383: - 384: #end 385: </td> 386: #end 387: #foreach ($gamelog in $gamelogs.keySet()) 388: #set ($value = "-") 389: #set ($value = $formatter.formatNumber($event.stats.get($gamelog), $formats.get($gamelog))) 390: <td #printCellClass>$value</td> 391: #end 392: </tr> 393: #end 394: </table> 395: 396: #if ($atLeastOneNotOverall) 397: <p class="my-3"># Stats don't count towards season totals</p> 398: #end 399: </div> 400: #end ## macro gamelogData 401: 402: #macro (careerData $p) 403: #set ($p = $positions.get($p)) 404: #set ($statPosBriefs = $briefs.get($p)) 405: 406: <div class="stats-container table-responsive-via-datatables"> 407: <table class="table table-hover nowrap w-100" data-searching="false" data-ordering="false" data-paging="false" data-info="false" data-filtering="false" data-module="https://theme-assets.prestosports.com/theme-assets/generic/assets/js/table-sort-bs.js"> 408: <thead class="thead-dark"> 409: <tr> 410: <th class=""> </th> 411: #foreach ($brief in $statPosBriefs) 412: #printTableHeader($brief, "text-center") 413: #end 414: </tr> 415: </thead> 416: #if($rosterTransactions) 417: #set ($seasonLength = $career.seasons.length()) 418: #foreach ($index in [0..$tool.math.sub($seasonLength, 1)]) 419: #set($season = $career.seasons[$index]) 420: #if($season.seasonStatsURL != "null") 421: #set ($label = "<a href='${season.seasonStatsURL}?view=profile'>$season.seasonName.replaceAll('^[^0-9-]*','') - $season.team.teamName</a>") 422: #else 423: #set ($label = "$season.seasonName.replaceAll('^[^0-9-]*','') - $season.team.teamName") 424: #end 425: #splitBioNetwork($statPosBriefs, $label, $season.player.stats) 426: #end 427: #splitBioNetwork($statPosBriefs, "Total", $career.totals) 428: 429: #else 430: #foreach ($season in $seasons) 431: #if ($careerMap.get($season.seasonName)) 432: ## naiastats.com uses a unique foler structure that needs to be accounted for. 433: ## seasons have conference folders within NAIA to reduce query response times for massive season data. 434: #if($page.url.contains("/conf")) 435: #set ($tempPath = $page.sectionPage.sectionPage.sectionPage.sectionPage.sectionPage.url) 436: #else 437: #set ($tempPath = $page.sectionPage.sectionPage.sectionPage.url) 438: #end 439: #set ($path = $season.path.replace("../..", $tempPath)) 440: 441: #set ($label = "<a href='${path}?view=profile'>$season.seasonName</a>") 442: #splitBioNetwork($statPosBriefs, $label, $careerMap[$season.seasonName]) 443: #elseif ($wiki.valid()) 444: <tr> 445: <td class="text-nowrap text-end text-muted fst-italic">${season.seasonName}</td> 446: #foreach ($i in [1..$statPosBriefs.size()]) 447: #if ($statPosBriefs.size() > 1) 448: #if ($foreach.first) 449: <td class="text-nowrap text-center text-muted"> 450: <a href="#" data-bs-toggle="tooltip" title="We could not find the 'players' page in the ${season.seasonName} section."><span class="fa fa-light fa-circle-info"></span></a> 451: </td> 452: #else 453: <td class="text-nowrap text-center text-muted"></td> 454: #end 455: #end 456: #end 457: </tr> 458: #end 459: #end 460: #splitBioNetwork($statPosBriefs, "Total", $request.getAttribute("careerTotals").overall) 461: #end 462: 463: 464: </table> 465: </div> 466: #end ## macro careerData 467: 468: #macro (printTabs) 469: $request.setAttribute("icl-responsive-tabs-script", true) 470: <div class="tab-nav"> 471: <ul class="nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-center gap-3" id="bio-network-tabs" role="tablist"> 472: #printTab("profile", "Player Profile") 473: #printTab("gamelog", "Game Log") 474: #if ($showCareer) 475: #printTab("career", "Career Stats") 476: #end 477: #printTab("splits", "Split Stats") 478: </ul> 479: </div> 480: #end ## printTabs 481: 482: #macro (printLabel $label) 483: #if ($locale == "en_gb" && $label == "Defense") 484: Defence 485: #else 486: $label 487: #end 488: #end 489: 490: #macro (printSubTabs $entries $viewParam) 491: #set ($activeLabel = "") 492: #foreach ($entry in $entries) 493: #if ($entry.key == $activePos) 494: #set ($activeLabel = $entry.value) 495: #end 496: #end 497: 498: <div class="d-flex flex-row text-nowrap align-items-center justify-content-center"> 499: <div class="secondary-tab-select-container flex-fill"> 500: <select class="tab-nav-select-helper form-select" id="${viewParam}-subtabs-select" aria-label="Choose a stat group"> 501: #foreach($entry in $entries) 502: <option value="#${viewParam}-${entry.key}" #if ($entry.value == $activeLabel || $foreach.first) selected #end>#printLabel($entry.value)</option> 503: #end 504: </select> 505: <script> 506: $('.tab-nav-select-helper').on('change', function(e) { 507: var id = $(this).val(); 508: $('a[data-bs-target="' + id + '"]').tab('show'); 509: }); 510: </script> 511: </div> 512: </div> 513: 514: <ul class="d-none nav nav-tabs nav-tabs-responsive d-flex with-arrow lined flex-row text-nowrap justify-content-start gap-3" role="tablist" id="${viewParam}-subtabs"> 515: #foreach($entry in $entries) 516: #set ($class = "nav-link") 517: #if ($entry.value == $activeLabel) 518: #set ($class = "${class} active") 519: #end 520: <li class="nav-item"> 521: <a href="#${viewParam}-${entry.key}" class="${class}" id="${viewParam}-${entry.key}-tab" data-bs-target="#${viewParam}-${entry.key}" role="tab" data-bs-toggle="tab">#printLabel($entry.value)</a> 522: </li> 523: #end 524: </ul> 525: #end 526: ################################################## END MACROS ############################################################# 527: 528: <head> 529: <title> 530: $!attributes.get("first_name") $!attributes.get("last_name") | #if ($attributes.get("number"))#$!attributes.get("number") | #end #if($attributes.get("position_abbr") && !$attributes.get("position_abbr").empty)$!attributes.get("position_abbr") | #elseif ($attributes.get("position"))$!attributes.get("position") | #end $attributes.get("team") 531: </title> 532: </head> 533: 534: $request.setAttribute("icl-responsive-tabs-script", true) 535: $request.setAttribute("icl-dataTables-script", true) 536: 537: <div class="page-content player-stats"> 538: <div class="d-flex flex-column justify-content-between gap-3"> 539: <div class="bnt-heading"> 540: <div class="bnt-main d-flex flex-column flex-grow-1 gap-3"> 541: <div class="bnt-name-info"> 542: <div class="d-flex align-items-center justify-content-between gap-3"> 543: <div class="bnt-left"> 544: <div class="bnt-headshot position-relative" style="width:5rem;"> 545: #set ($playerName = $!attributes.get("first_name") + ' '+ $!attributes.get("last_name")) 546: #set ($src = "/info/images/default-headshot.png") 547: #if ($rosterHeadshots.size() > 0) 548: #foreach ($rosterPlayer in $rosterHeadshots) 549: #if ($playerName == $rosterPlayer.name) 550: #if ($rosterPlayer.headshot.length() > 0) 551: #set ($src = $rosterPlayer.headshot) 552: #elseif ($website.exists("/images/setup/default-headshot.png")) 553: #set ($src = "/images/setup/default-headshot.png") 554: #elseif ($website.exists("/images/setup/headshot_default.jpg")) 555: #set ($src = "/images/setup/headshot_default.jpg") 556: #end 557: #end 558: #end 559: #printImage($src, $playerName, "img-fluid h-auto") 560: #else 561: #printImage($website.teamLogo($!{attributes.get("teamId")}), ${attributes.get("team")}, "img-fluid h-auto") 562: #end 563: #if (!$attributes.get("number").empty) 564: <div class="jersey-number-overlay d-inline-block position-absolute bottom-0 end-0 lh-1"> 565: <span class="number d-inline-block small text-center bg-primary text-white rounded-circle lh-1 overflow-hidden p-2" style="width:2rem; height:2rem;"> 566: $!attributes.get("number") 567: </span> 568: </div> 569: #end 570: </div> 571: </div> 572: <div class="bnt-name-info-main flex-grow-1"> 573: <div class="d-flex flex-column aling-items-center justify-content-between gap-3"> 574: <div class="player-attributes"> 575: <h1 class="m-0 p-0"> 576: $!attributes.get("first_name") $!attributes.get("last_name") 577: </h1> 578: <ul class="list-unstyled list-inline-pipes d-flex align-items-center justify-content-start gap-2 m-0 w-100"> 579: #if($attributes.get("position_abbr") && !$attributes.get("position_abbr").empty) 580: <li><span>$!attributes.get("position_abbr")</span></li> 581: #elseif ($attributes.get("position")) 582: <li><span>$!attributes.get("position")</span></li> 583: #end 584: <li><a href="../teams?id=$!{attributes.get("teamId")}" aria-label="Team Stats - ${attributes.get("team")}">$attributes.get("team")</a></li> 585: </ul> 586: </div> 587: </div> 588: </div> 589: #if ($rosterHeadshots.size() > 0) 590: ## do nothing 591: #else 592: #set ($teamId = $attributes.get("teamId")) 593: #if ($teamId.length() > 0) 594: <div class="bnt-team-logo"> 595: <span class="bnt-team-logo ps-2"> 596: <img class="img-mh-3" src="${website.teamLogo($teamId)}" alt="" /> 597: </span> 598: </div> 599: #end 600: #end 601: </div> 602: </div> 603: <div class="bnt-highlights mx-3"> 604: #printHighlights 605: </div> 606: </div> 607: </div> 608: </div> 609: 610: 611: <div class="tabs-container my-3"> 612: 613: #printTabs 614: 615: <div class="tab-content p-3 border"> 616: 617: ## PROFILE 618: <div #printPaneAttrs("profile")> 619: <div class="row"> 620: <div class="col-lg"> 621: <h5>Player Stats</h5> 622: $website.include("${page.sectionPage.url}/players?tmpl=stats-bios-rank-template&rank=${playerId}&pos=${statPos}") 623: </div> 624: <div class="mt-3 col-lg mt-lg-0"> 625: <h5>Recent Results</h5> 626: #printRecentGames 627: 628: #if($website.ads.isMediaInternalSectionsAdsEnabled()) 629: <!-- Individual Player Page, ad unit is placed below recent results on Desktop and Mobile --> 630: <div id="waldo-tag-25894" class="p-3 text-center"></div> 631: #end 632: </div> 633: </div> 634: 635: #if ($hasSynopsis) 636: <div class="my-3">$!synopsis</div> 637: #end 638: 639: #if ($hasBioBrief) 640: <div class="my-3">$website.include($bioBriefURL)</div> 641: #end 642: 643: #if ($htmlStatsURL) 644: <div class="my-3">$website.include($htmlStatsURL)</div> 645: #end 646: </div> ## PROFILE 647: 648: ## GAMELOG 649: #set ($activePos = $statPos) 650: #if ($view == "gamelog" && $paramPos.length() > 0) 651: #if ($positions.get($paramPos).length() > 0) 652: #set ($activePos = $positions.get($paramPos)) 653: #end 654: #end 655: 656: <div #printPaneAttrs("gamelog")> 657: #if ($gamelogsCategoriesLabels.size() > 0) 658: #printSubTabs($gamelogsCategoriesLabels.entrySet(), "gamelog") 659: 660: <div class="tab-content py-3"> 661: #foreach($entry in $gamelogsCategoriesLabels.entrySet()) 662: #set ($class = "tab-pane") 663: #if ($entry.key == $activePos) 664: #set ($class = "tab-pane active") 665: #end 666: <div class="${class}" role="tabpanel" id="gamelog-${entry.key}"> 667: #gamelogData($entry.key) 668: </div> 669: #end 670: </div> 671: #else 672: #gamelogData($pos) 673: #end 674: </div> ## tab-pane 675: ## GAMELOG 676: 677: ## CAREER 678: #if ($showCareer) 679: #set ($activePos = $statPos) 680: #if ($view == "career" && $paramPos.length() > 0) 681: #if ($positions.get($paramPos).length() > 0) 682: #set ($activePos = $positions.get($paramPos)) 683: #end 684: #end 685: <div #printPaneAttrs("career")> 686: #if ($briefsCategoriesLabels) 687: #printCategories($briefsCategoriesLabels "career") 688: #else 689: #careerData($activePos) 690: #end 691: </div> 692: #end 693: ## CAREER 694: 695: ## SPLITS 696: #set ($activePos = $statPos) 697: #if ($view == "splits" && $paramPos.length() > 0) 698: #if ($positions.get($paramPos).length() > 0) 699: #set ($activePos = $positions.get($paramPos)) 700: #end 701: #end 702: 703: <div #printPaneAttrs("splits")> 704: #if ($briefsCategoriesLabels) 705: #printCategories($briefsCategoriesLabels "splits") 706: #else 707: #splitsBioNetworkData($pos) 708: #end 709: </div> 710: ## SPLITS 711: 712: </div> ## tab-content 713: </div> ## tabs-container 714: </div> ## bio-wrapper 715: $wiki.su |