#
# List of committees
#

_html do
  _base href: '..'
  _link rel: 'stylesheet', href: "stylesheets/app.css?#{cssmtime}"
  _whimsy_body(
    title: 'ASF PMC Listing',
    subtitle: 'List of all Top Level Projects',
    relatedtitle: 'More Useful Links',
    related: {
      "/committers/tools" => "Whimsy All Tools Listing",
      ASF::SVN.svnpath!('committers') => "Checkout the private 'committers' repo for Committers",
      "https://github.com/apache/whimsy/blob/master/www#{ENV['SCRIPT_NAME']}" => "See This Source Code",
      "mailto:dev@whimsical.apache.org?subject=[FEEDBACK] members/index idea" => "Email Feedback To dev@whimsical"
    },
    helpblock: -> {
      _p do
        _ 'A full list of Apache PMCs; click on the name for a detail page about that PMC. '
        _ 'You can also view (Member-private) '
        _a href: '/roster/nonpmc/' do
          _span.glyphicon.glyphicon_lock :aria_hidden, class: 'text-primary', aria_label: 'ASF Members Private'
          _ 'Non-PMC Committees (Brand, Legal, etc.)'
        end
        _ ' and '
        _a href: '/roster/group/' do
          _span.glyphicon.glyphicon_lock :aria_hidden, class: 'text-primary', aria_label: 'ASF Members Private'
          _ 'Other Groups of various kinds (from LDAP or auth).'
        end
      end
      _p do
        _ 'Chair names in BOLD below are also ASF Members.  Click on column names in table to sort; jump to A-Z project listings here:'
        _br 
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ".each_char do |c|
          _a c, href: "committee/##{c}"
        end
        _ '(note: the links only work properly if the page is sorted by project name ascending)'
      end
    },
    breadcrumbs: {
      roster: '.',
      committee: 'committee/'
    }
  ) do

    _table.table.table_hover do
      _thead do
        _tr do
          _th.sorting_asc 'Name', data_sort: 'string-ins'
          _th 'Chair(s)', data_sort: 'string'
          _th 'Established', data_sort: 'string'
          _th 'Description', data_sort: 'string'
        end
      end
      _tbody do
        prev_letter=nil
        @committees.sort_by {|pmc| pmc.display_name.downcase}.each do |pmc|
          letter = pmc.display_name.upcase[0]
          if letter != prev_letter
            options = {id: letter}
          else
            options = {}
          end
          prev_letter = letter
          _tr_ options do
            _td do
              _a pmc.display_name, href: "committee/#{pmc.name}"
            end
  
            _td do
              pmc.chairs.each_with_index do |chair, index|
                _span ', ' unless index == 0
  
                if @members.include? chair[:id]
                  _b! {_a chair[:name], href: "committer/#{chair[:id]}"}
                else
                  _a chair[:name], href: "committer/#{chair[:id]}"
                end
              end
            end
  
            if not pmc.established
              _td ''
              _td.issue 'Not in committee-info.txt'
            else
              if pmc.established =~ /^(\d\d)\/(\d{4})(.*)$/
                est = "#{$2}-#{$1}#{$3}"
              else
                est = pmc.established
              end
              _td est
              _td pmc.description
            end
          end
        end
      end
    end
  end
  _script %{
    $(".table").stupidtable();
  }
end
