extractPlans function

List<StudyTeamEntry> extractPlans(
  1. BeautifulSoup soup
)

Implementation

List<StudyTeamEntry> extractPlans(BeautifulSoup soup) {
  List<StudyTeamEntry> plans = [];
  Bs4Element? table = soup.find('*', id: 's_m_Content_Content_spUge_theTable');
  if (table != null) {
    List<Bs4Element> elementHeaders = table.children[0].children[0].children;
    List<Bs4Element> teamEntriesWithEnds =
        table.children[0].children[1].children;
    if (elementHeaders.isNotEmpty && teamEntriesWithEnds.isNotEmpty) {
      List<Bs4Element> headers =
          elementHeaders.sublist(2, elementHeaders.length - 2);
      List<Bs4Element> teamEntries =
          teamEntriesWithEnds.sublist(2, teamEntriesWithEnds.length - 1);
      List<_HeaderEntry> teams =
          headers.map((header) => _extractHeader(header)).toList();

      for (var header in teams) {
        var elements = teamEntries.sublist(0, header.colSpan);
        teamEntries.removeRange(0, header.colSpan);
        List<StudyPlanRef> refs = [];
        for (var element in elements) {
          List<Bs4Element> phases = element.findAll('*', class_: 'phase');
          for (var phase in phases) {
            refs.add(_extractPlan(phase));
          }
        }
        plans.add(StudyTeamEntry(team: header.team, entries: refs));
      }
    }
  }
  return plans;
}