window.asf.getDirectorsTimelineData = function()

in content/history/data/directors.js [5:226]


window.asf.getDirectorsTimelineData = function () {
    let data = [];

    const idNames = {
        ben: 'Ben Laurie',
        bayard: 'Henri Yandell',
        bdelacretaz: 'Bertrand Delacretaz',
        bhyde: 'Ben Hyde',
        brett: 'Brett Porter',
        brian: 'Brian Behlendorf',
        brianm: 'Brian McCallister',
        cdutz: 'Christopher Dutz',
        cliffs: 'Cliff Schmidt',
        clr: 'Craig Russell',
        coar: 'Ken Coar',
        curcuru: 'Shane Curcuru',
        cutting: 'Doug Cutting',
        danny: 'Danny Angus',
        dirkx: 'Dirk-Willem van Gulik',
        dkulp: 'Daniel Kulp',
        dougm: 'Doug Maceachern',
        druggeri: 'Daniel Ruggeri',
        farra: 'J Aaron Farr',
        fielding: 'Roy T. Fielding',
        geirm: 'Geir Magnusson, Jr.',
        gstein: 'Greg Stein',
        henning: 'Henning Schmiedehausen',
        isabel: 'Isabel Drost-Fromm',
        jerenkrantz: 'Justin Erenkrantz',
        jim: 'Jim Jagielski',
        jmclean: 'Justin Mclean',
        ke4qqq: 'David Nalley',
        lrosen: 'Larry Rosen',
        markt: 'Mark Thomas',
        marvin: 'Marvin Humphrey',
        mattmann: 'Chris Mattmann',
        mjc: 'Mark Cox',
        myrle: 'Myrle Krantz',
        niclas: 'Niclas Hedhman',
        ningjiang: 'Willem Ning Jiang',
        noirin: 'Noirin Plunkett',
        pats: 'Patricia Shanahan',
        psteitz: 'Phil Steitz',
        randy: 'Randy Terbush',
        rasmus: 'Rasmus Lerdorf',
        rbowen: 'Rich Bowen',
        rgardler: 'Ross Gardler',
        rubys: 'Sam Ruby',
        sameer: 'Sameer Parekh',
        sharan: 'Sharan Foga',
        stefano: 'Stefano Mazzocchi',
        stoddard: 'Bill Stoddard',
        striker: 'Sander Striker',
        rvs: 'Roman Shaposhnik',
        tdunning: 'Ted Dunning',
        wave: 'Dave Fisher',
        wohali: 'Joan Touzet',
        wrowe: 'William Rowe',
        wusheng: 'Sheng Wu',
    }

    function date(y, m, d) {
        // Date's month is [0..11]
        return new Date(y, m - 1, d);
    }

    function add(id, start, end) {
        let existing = data.find(d => d.id == id);
        if(!existing) {
            const fullName = idNames[id];
            existing = {
                id,
                name: fullName ? fullName : id,
                segments: []
            };
            data.push(existing);
        }
        existing.segments.push({
            start,
            end
        })
    }

    // NOTE: these are the dates that election results are announced,
    //   which may be two days after the meeting-start (due to
    //   adjournment for voting). Thus, these dates do not necessarily
    //   align with Annual Meeting dates.
    y1999 = date(1999, 3, 13);  // CHECK
    y2000 = date(2000, 3, 11);  // CHECK
    y2001 = date(2001, 4, 3);  // CHECK
    y2002 = date(2002, 5, 21);  // CHECK
    y2003 = date(2003, 6, 18);  // CHECK
    y2004 = date(2004, 5, 18);  // CHECK
    y2005 = date(2005, 5, 24);  // CHECK
    y2006 = date(2006, 6, 13);  // CHECK
    y2007 = date(2007, 6, 5);  // CHECK
    y2008 = date(2008, 6, 3);  // CHECK
    y2009 = date(2009, 7, 9);
    y2010 = date(2010, 7, 15);
    y2011 = date(2011, 7, 14);
    y2012 = date(2012, 5, 24);
    y2013 = date(2013, 5, 23);
    y2014 = date(2014, 5, 29);
    y2015 = date(2015, 3, 26);
    y2016 = date(2016, 3, 24);
    y2017 = date(2017, 3, 30);
    y2018 = date(2018, 3, 22);
    y2019 = date(2019, 3, 28);
    y2020 = date(2020, 4, 2);
    y2021 = date(2021, 3, 9);
    y2022 = date(2022, 3, 1);
    y2023 = date(2023, 3, 9);

    // Just guessing this date for now
    y2024 = date(2024, 3, 31);

    // Change dates for outgoing/incoming Directors
    // fielding -> striker
    change_2004 = date(2004, 1, 21);
    // bayard -> geirm
    change_2010 = date(2010, 8, 18);
    // lrosen -> dkulp
    change_2012 = date(2012, 3, 21);
    // gstein -> rubys
    change_2016a = date(2016, 9, 21);
    // rubys -> rbowen
    change_2016b = date(2016, 10, 19);
    // psteitz -> danny
    change_2019a = date(2019, 5, 16);
    // jim -> tdunning
    change_2019b = date(2019, 5, 16);
    // wohali -> wave
    change_2019c = date(2019, 9, 26);

    // All Directors over history, with their begin/end timeframes.
    add('sameer', y1999, y2000);
    add('bhyde', y1999, y2000);
    add('randy', y1999, y2003);
    add('fielding', y1999, change_2004);
    add('brian', y1999, y2005);
    add('ben', y1999, y2004);
    add('coar', y1999, y2007);
    add('dirkx', y1999, y2007);
    add('jim', y1999, y2018);
    add('dougm', y2000, y2001);
    add('rasmus', y2000, y2001);
    add('gstein', y2001, change_2016a);
    add('stoddard', y2001, y2002);
    add('rubys', y2002, y2009);
    add('mjc', y2003, y2004);
    add('striker', change_2004, y2007);
    add('stefano', y2004, y2006);
    add('geirm', y2004, y2005);
    add('ben', y2005, y2006);
    add('jerenkrantz', y2005, y2010);
    add('cliffs', y2006, y2007);
    add('bayard', y2006, y2008);
    add('geirm', y2007, y2010);
    add('farra', y2007, y2009);
    add('wrowe', y2007, y2009);
    add('henning', y2007, y2009);
    add('bdelacretaz', y2008, y2009);
    add('fielding', y2009, y2014);
    add('brett', y2009, y2010);
    add('brianm', y2009, y2010);
    add('cutting', y2009, y2015);
    add('curcuru', y2009, y2012);
    add('bdelacretaz', y2010, y2019);
    add('rubys', y2010, y2016);
    add('bayard', y2010, change_2010);
    add('geirm', change_2010, y2011);
    add('noirin', y2010, y2011);
    add('brett', y2011, y2019);
    add('lrosen', y2011, change_2012);
    add('dkulp', change_2012, y2012);
    add('rbowen', y2012, y2013);
    add('rgardler', y2012, y2013);
    add('curcuru', y2013, y2014);
    add('mattmann', y2013, y2018);
    add('rgardler', y2014, y2015);
    add('rbowen', y2014, y2016);
    add('curcuru', y2015, y2021);
    add('ke4qqq', y2015, y2016);
    add('marvin', y2016, y2017);
    add('markt', y2016, y2019);
    add('isabel', y2016, y2017);
    add('rubys', change_2016a, change_2016b);
    add('rbowen', change_2016b, y2020);
    add('tdunning', y2017, y2019);
    add('psteitz', y2017, change_2019a);
    add('danny', change_2019a, y2020);
    add('isabel', y2018, y2019);
    add('rvs', y2018, y2020);
    add('myrle', y2019, y2020);
    add('druggeri', y2019, y2020);
    add('clr', y2019, y2022);
    add('jim', y2019, change_2019b);
    add('tdunning', change_2019b, y2020);
    add('wohali', y2019, change_2019c);
    add('wave', change_2019c, y2020);
    add('fielding', y2020, y2023);
    add('niclas', y2020, y2021);
    add('jmclean', y2020, y2022);
    add('rubys', y2020, y2023);
    add('pats', y2020, y2021);
    add('rvs', y2021, y2023);
    add('wusheng', y2021, y2022);
    // ABOVE: history of begin/end for prior Directors

    // Current set of Directors
    add('rbowen', y2022, y2024);
    add('bdelacretaz', y2020, y2024);
    add('cdutz', y2022, y2024);
    add('sharan', y2021, y2024);
    add('ningjiang', y2022, y2024);
    add('striker', y2020, y2024);
    add('clr', y2023, y2024);
    add('jmclean', y2023, y2024);
    add('curcuru', y2023, y2024);

    return data;
}