Jump to content

User:Habst/makeTeam.js

From Wikipedia, the free encyclopedia
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
//<nowiki>
(async () => {
  if (typeof nameFixer === 'undefined') {
    const script = Object.assign(document.createElement('script'), { src: 'https://unpkg.com/name-fixer@1.0.0' });
    document.body.appendChild(script);
    await new Promise(res => script.addEventListener('load', res));
  }
  const collegeName = 'Rutgers University';
  const teamKey = 'Rutgers';
  const teamName = 'Rutgers Scarlet Knights';
  const nickname = 'Scarlet Knights';
  const conference = 'Big Ten Conference';
  const confAbbr = 'Big Ten';
  const coach = '[[Bobby Farrell]]';
  const location = 'Piscataway, New Jersey';
  const stateabb = 'NJ';
  const track = 'Bauer Track & Field Complex';
  const mediaGuide = 'https://s3.us-east-2.amazonaws.com/sidearm.nextgen.sites/scarletknights.com/documents/2019/9/19/2019_20_Men_s_Track_and_Field_Fact_Book.pdf';
  const coachRef = 'https://scarletknights.com/sports/mens-track-and-field/roster/coaches/bobby-farrell/5561';
  const website = 'https://scarletknights.com/sports/track';

  const dom = async url => new DOMParser().parseFromString(await (await fetch(url)).text(), 'text/html');
  const uniq = arr => arr.filter(x => !x.isRelay).reduce((acc, x) => acc.find(ath => ath.names[0] === x.names[0]) ? acc : [...acc, x], []);
  const fixName = fullName => {
    fullName = fullName.split(' ').filter(x => [...x].some(c => !'0123456789.:'.includes(c))).join(' ');
    const fname = fullName?.split(' ').filter(n => n !== n.toUpperCase()).join(' ');
    const lname = nameFixer.nameFixer(fullName.split(' ').filter(n => n === n.toUpperCase()).join(' '));
    const fixedName = `${fname} ${lname}`.trim();
    return fixedName ? `[[${fixedName}]]` : '';
  }
  const getRelay = s => {
    const members = s ? s.replaceAll(/\(.+?(,|$)/g, ',').split(',').map(n => fixName(n.trim())).filter(x => x) : [];
    while (members.length < 4) members.push('');
    return members;
  }
  const refCache = {};
  const getRef = (path, title) => {
    if (refCache[title]) return `<ref name="${title}" />`;
    let suffix = '';
    if (title.includes('relay') && title.includes('Outdoor')) {
      const evtAbbr = title.includes('110') || title.includes('100') ? '4x1' : '4x4';
      const evtGen = title.toLowerCase().includes('women') ? 'w' : 'm';
			suffix = ` {{Cite web |url=https://trackandfieldnews.com/wp-content/uploads/2025/04/ncaa${evtGen}${evtAbbr}.pdf |title=Track and Field News NCAA Outdoor ${evtGen}${evtAbbr} |website=[[Track and Field News]] |access-date=28 December 2024}}`;
    }
    refCache[title] = `<ref name="${title}">{{cite web |url=${'https://www.ustfccca.org' + path} |title=${title} |website=[[USTFCCCA]] |access-date=28 December 2024}}${suffix}</ref>`;
    return refCache[title];
  }
  const state = location.split(', ').at(-1);
  window.trpc ??= await dom('/team-rankings-polls-central/polls-and-rankings-week-by-week?pritype=468&tm=0');
  const teams = Object.fromEntries([...trpc.querySelectorAll('div.menu')[3].querySelectorAll('a.item')].map(a => [a.innerText, a.href.split('&tm=')[1].split('&')[0]]));  const id = teams[teamKey];
  window.mhbe ??= await dom('/records-lists/meet-history-by-event?series=3369');
  window.res ??= {};
  const exclude = {
    3369: ['55 meters', '55 meters hurdles', '60 meters', '60 meters hurdles', 'Distance medley relay', 'Shuttle hurdle relay', 'Weight throw', '3000m race walk', '5000m race walk'],
    3368: ['100 meters', '100 meters hurdles', '110 meters hurdles', '300 meters hurdles', '400 meters hurdles', '2000 meters steeplechase', '3000 meters steeplechase', '10,000 meters', '3000m race walk', '5000m race walk', '4 × 100 meters relay', 'Shuttle hurdle relay', 'Discus throw', 'Hammer throw', 'Javelin throw', 'Decathlon', 'Sprint medley relay'],
  };
  const fixEvt = e => (e[0] + e.slice(1).replace('Meter ', 'Meters ').replace('Yard ', 'Yards ').toLowerCase().replace('2000m', '2000 meters')).replace(/^Steeplechase$/, '3000 meters steeplechase').replace(/^Mile$/, 'Mile run').replace(/^(Discus|Hammer|Javelin)$/, '$1 throw').replace('4x', '4 × ').replace('0 relay', '0 meters relay').split(' (')[0].split(', ')[0];
  const evts = Object.fromEntries([...mhbe.querySelectorAll('select[name=events] option')].slice(1).map(o => [fixEvt(o.innerText), o.value]));
  let allAm = `{| class="wikitable sortable"
! colspan="6" style="{{CollegePrimaryStyle|${teamName}|border=0|color=white}}" | First team NCAA All-Americans
|-
! scope="col" style="{{CollegeSecondaryStyle|${teamName}|border=0}}" | Team
! scope="col" style="{{CollegeSecondaryStyle|${teamName}|border=0}}" | Championships
! scope="col" style="{{CollegeSecondaryStyle|${teamName}|border=0}}" | Name
! scope="col" style="{{CollegeSecondaryStyle|${teamName}|border=0}}" | Event
! scope="col" style="{{CollegeSecondaryStyle|${teamName}|border=0}}" | Place
! scope="col" style="{{CollegeSecondaryStyle|${teamName}|border=0}}" class="unsortable" | {{Abbr|Ref.|References}}
|-\n`;
  let allAths = [];
  for (const gen of [1, 2]) {
    res[gen] ??= {};
    for (const meet of [3368, 3369]) {
      const env = meet === 3368 ? 'Indoor' : 'Outdoor';
      res[gen][meet] ??= {};
      for (const evt in evts) {
        const isRelay = evt.includes('relay');
        if (exclude[meet].includes(evt)) continue;
        const eid = evts[evt];
        const url = `/records-lists/meet-history-by-event?gender=${gen}&series=${meet}&event=${eid}`;
        console.log(gen, meet, evt, eid, url);
        res[gen][meet][evt] ??= await dom(url);
        const aths = [...res[gen][meet][evt].querySelectorAll(isRelay ? `img[title="${teamKey}"]` : `a[href$="=${id}"]`)].map(a => {
          let row = a.parentElement.parentElement;
          if (isRelay) row = row.parentElement;
          const [pl, fullName] = row.querySelector('td span').innerText.slice(1).split(') ');
          const names = isRelay ? getRelay(row.parentElement.querySelector('td[colspan]')?.innerText) : [fixName(fullName)];
          const athLink = row.querySelector('td a')?.href;
          const tbl = row.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement;
          const year = tbl.querySelector('td').innerText.split(' ')[0];
          return { pl, athLink, names, year, gen: gen === 1 ? "Men's" : "Women's", env, evt, isRelay, url };
        });
        allAths.push(...aths);
      }
    }
  }
  allAths = allAths.filter(a => +a.pl <= 8);
  allAm += allAths.sort((a, b) => `${a.year} ${a.env}`.localeCompare(`${b.year} ${b.env}`)).map(a => {
    const rs = a.isRelay ? 'rowspan=4|' : '';
    const ref = getRef(a.url, `${a.evt} at the NCAA Division I ${a.gen} ${a.env} Track and Field Championships`);
    let row = `|${rs} ${a.gen} ||${rs} {{tfch|NCAA|${a.year}|${a.env}}} || ${a.names[0]} ||${rs} [[${a.evt} at the NCAA Division I ${a.env} Track and Field Championships|${a.evt}]] ||${rs} ${+a.pl < 999 ? `{{ord|${a.pl}}}` : `{{AthAbbr|DNF}}`} ||${rs}${ref}`;
    if (a.isRelay) row += '\n|-\n' + a.names.slice(1).map(n => `| ${n}`).join('\n|-\n');
    return row;
  }).join('\n|-\n') + '\n';
  allAm += '|}';

  const out = `{{Short description|College track and field team}}
{{for|information on all ${collegeName} sports|${teamName}}}
{{use dmy dates|date=December 2024}}
{{Infobox college track and field team
|name=${teamName} track and field
|nickname=[[${teamName}|${nickname}]]
|conference_indoor=
|NCAAindoortourneys=
|NCAAoutdoortourneys=
|NCAAindoorchampion=<!--<ref>{{cite web |title=NCAA Division I Indoor Championships ::: USTFCCCA InfoZone: Meet History ::: USTFCCCA |url=https://www.ustfccca.org/meets-results/meet-history?series=3368 |website=[[USTFCCCA]] |access-date=29 December 2024}}</ref>-->
|NCAAoutdoorchampion=<!--<ref>{{cite web |title=NCAA Division I Outdoor Championships ::: USTFCCCA InfoZone: Meet History ::: USTFCCCA |url=https://www.ustfccca.org/meets-results/meet-history?series=3369 |website=[[USTFCCCA]] |access-date=29 December 2024}}</ref>-->
|outdoortrack=[[${track}]]
|logo=${teamName} logo.svg
|indoortrack=
|stateabb=${stateabb}
|state=${state}
|location=[[${location}]]
|division=
|conference_short=${confAbbr}
|conference=${conference}
|tenure=
|coach=${coach}
|athletic_director=
|university=${collegeName}
|founded=
|logo_size=200
|conference_outdoor=
}}

The '''${teamName} track and field''' team is the [[track and field]] program that represents [[${collegeName}]]. The ${nickname} compete in [[NCAA Division I]] as a member of the [[${conference}]]. The team is based in [[${location}]], at the [[${track}]].<ref name=mg>{{Cite web |title=${teamName} Media Guide |url=${mediaGuide} |access-date=27 December 2024 |website=${collegeName} Athletics |language=en}}</ref>

The program is coached by ${coach.split('<br>').join(' and ')}.${coachRef ? `<ref>{{Cite web|url=${coachRef}|title=${teamName} Track and Field Coach|website=${collegeName} Athletics|access-date=27 December 2024}}</ref>` : '<ref name=mg />'} The track and field program officially encompasses four teams because the NCAA considers men's and women's indoor track and field and outdoor track and field as separate sports.<ref>{{Cite web|url=https://www.ncaa.com/news/trackfield-outdoor-women/article/2024-12-05/here-are-differences-between-indoor-and-outdoor-track-seasons|title=Here are the differences between the indoor and outdoor track seasons|website=ncaa.com|access-date=27 December 2024}}</ref>

==Postseason==
{{As of|April 2025}}, a total of ${uniq(allAths.filter(a => a.gen === "Men's")).length} men and ${uniq(allAths.filter(a => a.gen === "Women's")).length} women have achieved individual first-team [[All-America#Track and field|All-America]]n status at the Division I [[NCAA Division I Men's Outdoor Track and Field Championships|men's outdoor]], [[NCAA Division I Women's Outdoor Track and Field Championships|women's outdoor]], [[NCAA Division I Men's Indoor Track and Field Championships|men's indoor]], or [[NCAA Division I Women's Indoor Track and Field Championships|women's indoor]] national championships (using the modern criteria of top-8 placing regardless of athlete nationality).<ref>{{Cite web|url=https://www.ustfccca.org/records-lists/meet-history-by-event?series=3368|title=USTFCCCA InfoZone: Meet History by Event: NCAA Division I Indoor Championships|website=[[USTFCCCA]]|access-date=27 December 2024}}</ref><ref>{{Cite web|url=https://www.ustfccca.org/records-lists/meet-history-by-event?series=3369|title=USTFCCCA InfoZone: Meet History by Event: NCAA Division I Outdoor Championships|website=[[USTFCCCA]]|access-date=27 December 2024}}</ref>

${allAm}

==See also==
* {{clc|${teamName} men's track and field athletes}}
* {{clc|${teamName} women's track and field athletes}}

==References==
{{reflist}}

==External links==
${website.includes('/mens') || website.includes('/m-') ? `* [${website} Men's official website]\n* [${website.replace('/mens', '/womens').replace('/m-', '/w-')} Women's official website]` : `* {{official website|${website}}}`}

{{${collegeName}}}

{{DEFAULTSORT:${teamName} track and field}}
[[Category:${teamName} track and field| ]]
[[Category:${conference} track and field]]
[[Category:College track and field teams in the United States]]
[[Category:Women's sports in ${state}]]
`
  console.log(out);
  out;
})();
//</nowiki>