app.html 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <title>119th Congress — Member Voting Dashboard</title>
  7. <link rel="stylesheet" href="app.css">
  8. <script src="vendor/chart.umd.min.js" defer></script>
  9. <script src="vendor/sortable.min.js" defer></script>
  10. <script src="app.js" defer></script>
  11. </head>
  12. <body>
  13. <noscript>This dashboard requires JavaScript.</noscript>
  14. <div id="polisci-root" data-base="./data/">
  15. <!-- Header -->
  16. <header class="ps-header">
  17. <h1>119th Congress — Member Voting Dashboard</h1>
  18. <nav class="ps-nav"><a href="app.html" aria-current="page">Member</a> · <a href="compare.html">Compare</a> · <a href="ranking.html">Rankings</a></nav>
  19. <p class="ps-subtitle">Roll-call voting record, alignment, and blocking activity for any member of the 119th Congress.</p>
  20. <div id="member-note" class="member-note is-hidden" role="status"></div>
  21. </header>
  22. <div class="ps-layout">
  23. <!-- Sidebar -->
  24. <aside class="sidebar" id="sidebar">
  25. <button type="button" class="sidebar-toggle" id="sidebar-toggle" aria-expanded="true" aria-controls="sidebar-body">Filters</button>
  26. <div class="sidebar-body" id="sidebar-body">
  27. <fieldset class="filter-group" id="filter-chamber">
  28. <legend>Chamber</legend>
  29. <label><input type="checkbox" name="chamber" value="H" checked> House</label>
  30. <label><input type="checkbox" name="chamber" value="S" checked> Senate</label>
  31. </fieldset>
  32. <fieldset class="filter-group" id="filter-party">
  33. <legend>Party</legend>
  34. <label><input type="checkbox" name="party" value="R" checked> Republican</label>
  35. <label><input type="checkbox" name="party" value="D" checked> Democrat</label>
  36. <label><input type="checkbox" name="party" value="I" checked> Independent</label>
  37. </fieldset>
  38. <fieldset class="filter-group" id="filter-state">
  39. <legend>State</legend>
  40. <select multiple id="filter-state-select" size="8" aria-label="State filter"></select>
  41. </fieldset>
  42. <button type="button" id="filter-reset" class="btn-reset">Reset filters</button>
  43. <p class="hint">Filters apply to the member dropdown.</p>
  44. </div>
  45. </aside>
  46. <!-- Main -->
  47. <main class="ps-main">
  48. <div class="search-wrap">
  49. <label for="member-search" class="visually-hidden">Search members</label>
  50. <input type="search" id="member-search" placeholder="Search by name or initials (e.g., AOC)…" autocomplete="off" role="combobox" aria-controls="member-results" aria-expanded="false">
  51. <ul id="member-results" role="listbox" class="member-results is-hidden"></ul>
  52. </div>
  53. <section id="member-summary" class="member-summary"></section>
  54. <section id="kpi-cards" class="kpi-cards">
  55. <div class="kpi-card"><div class="kpi-label"></div><div class="kpi-value"></div></div>
  56. <div class="kpi-card"><div class="kpi-label"></div><div class="kpi-value"></div></div>
  57. <div class="kpi-card"><div class="kpi-label"></div><div class="kpi-value"></div></div>
  58. <div class="kpi-card"><div class="kpi-label"></div><div class="kpi-value"></div></div>
  59. <div class="kpi-card"><div class="kpi-label"></div><div class="kpi-value"></div></div>
  60. <div class="kpi-card"><div class="kpi-label"></div><div class="kpi-value"></div></div>
  61. <div class="kpi-card"><div class="kpi-label"></div><div class="kpi-value"></div></div>
  62. <div class="kpi-card"><div class="kpi-label"></div><div class="kpi-value"></div></div>
  63. </section>
  64. <!-- Charts grid -->
  65. <section class="charts-grid">
  66. <figure class="chart-frame">
  67. <figcaption>Vote distribution</figcaption>
  68. <div class="chart-canvas-wrap"><canvas id="chart-vote-dist"></canvas></div>
  69. </figure>
  70. <figure class="chart-frame">
  71. <figcaption>Party alignment</figcaption>
  72. <div class="chart-canvas-wrap"><canvas id="chart-alignment"></canvas></div>
  73. </figure>
  74. <figure class="chart-frame">
  75. <figcaption>Blocked measures</figcaption>
  76. <div class="chart-canvas-wrap"><canvas id="chart-blocked"></canvas></div>
  77. </figure>
  78. <figure class="chart-frame chart-wide">
  79. <figcaption>Alignment over time</figcaption>
  80. <div class="chart-canvas-wrap"><canvas id="chart-alignment-time"></canvas></div>
  81. </figure>
  82. <figure class="chart-frame chart-wide">
  83. <figcaption>With / Against own party</figcaption>
  84. <div class="chart-canvas-wrap"><canvas id="chart-with-against"></canvas></div>
  85. </figure>
  86. </section>
  87. <!-- Vote table -->
  88. <section id="vote-table-section" class="vote-table-section">
  89. <h2>Roll-call votes</h2>
  90. <div class="table-scroll">
  91. <table id="vote-table">
  92. <thead>
  93. <tr>
  94. <th>Year</th>
  95. <th>Roll</th>
  96. <th>Date</th>
  97. <th>Bill</th>
  98. <th>Question</th>
  99. <th>Description</th>
  100. <th>Result</th>
  101. <th>Member Vote</th>
  102. <th>R Yea/Nay</th>
  103. <th>D Yea/Nay</th>
  104. <th>Alignment</th>
  105. <th>Blocked</th>
  106. </tr>
  107. </thead>
  108. <tbody></tbody>
  109. </table>
  110. </div>
  111. </section>
  112. <footer class="ps-footer">
  113. <p>Source data:
  114. <a href="https://clerk.house.gov/Votes" target="_blank" rel="noopener noreferrer">House Clerk roll-call XML</a> ·
  115. <a href="https://www.senate.gov/legislative/votes_new.htm" target="_blank" rel="noopener noreferrer">Senate roll-call XML</a> ·
  116. <a href="Methodology.md" target="_blank" rel="noopener">Methodology</a>
  117. </p>
  118. <p>Last regenerated: <span id="last-generated">(populated)</span></p>
  119. </footer>
  120. </main>
  121. </div>
  122. </div>
  123. </body>
  124. </html>