Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion static/css/base.css
Original file line number Diff line number Diff line change
Expand Up @@ -573,7 +573,17 @@ span.party_header { padding-right: 20px; }
.roster_header h4 { display:inline; }
#memberList { columns: auto 4; list-style-type: none; overflow: auto; width: 100%; margin-bottom: 60px; }
#memberTextList { margin-bottom: 40px; overflow-x: auto; }
.save_icon { margin-left: 5px; font-size: 22px; vertical-align: middle; cursor: pointer; }
.save_icon { margin-left: 5px; font-size: 22px; vertical-align: middle; cursor: pointer; }

/* Only touch devices need a "select region" toggle -- mouse/trackpad
users already draw a selection box by dragging. */
.touch-only-control { display: none; }
@media (pointer: coarse) {
.touch-only-control { display: inline-block; }
}
#regionSelectToggle { margin-left: 10px; font-size: 14px; }
#regionSelectToggle[aria-pressed="true"] { font-weight: bold; text-decoration: underline; }

#scatter-container { margin: 0 auto 10px auto; }
#filterName { float: right; }
.column1 { columns: 1 !important; width: 25% !important; }
Expand Down
40 changes: 39 additions & 1 deletion static/js/congress.js
Original file line number Diff line number Diff line change
Expand Up @@ -173,12 +173,50 @@ function nomPlot()
decorateNominate(nominateScatterChart, resultCache);
setScatterViewBox(nominateScatterChart);

// "Select region" mode for touch: tap two opposite corners to draw
// a selection rectangle, since there's no reliable drag gesture on
// touch to draw one directly (tap-to-select-one-point below
// already works fine on touch, since a tap synthesizes a click
// event same as a mouse would produce).
var regionSelectMode = false;
var regionSelectFirstCorner = null;
var regionSelectToggle = document.getElementById("regionSelectToggle");
function setRegionSelectMode(on) {
regionSelectMode = on;
regionSelectFirstCorner = null;
if (regionSelectToggle) {
regionSelectToggle.setAttribute("aria-pressed", on ? "true" : "false");
regionSelectToggle.textContent = on ? "Tap first corner…" : "Select region";
}
}
if (regionSelectToggle) {
regionSelectToggle.addEventListener("click", function() {
setRegionSelectMode(!regionSelectMode);
});
}

// Make brush box appear on click
var scb = nominateScatterChart.select(".brush");
scb.on('click', function(){
var extent = nominateScatterChart.brush().extent();
var x = nominateScatterChart.x().invert(d3.mouse(this)[0]),
y = nominateScatterChart.y().invert(d3.mouse(this)[1]);

if (regionSelectMode) {
if (!regionSelectFirstCorner) {
regionSelectFirstCorner = [x, y];
regionSelectToggle.textContent = "Tap opposite corner…";
return;
}
var x1 = regionSelectFirstCorner[0], y1 = regionSelectFirstCorner[1];
nominateScatterChart.brush().extent([
[Math.min(x1, x), Math.min(y1, y)],
[Math.max(x1, x), Math.max(y1, y)]
]).event(scb);
setRegionSelectMode(false);
return;
}

var extent = nominateScatterChart.brush().extent();
// Only draw box if there isn't one already there...
if (extent[0][0]==extent[1][0] & extent[0][1]==extent[1][1]) {
if (x*x + y*y <= 1) {
Expand Down
40 changes: 39 additions & 1 deletion static/js/voteCharts.js
Original file line number Diff line number Diff line change
Expand Up @@ -638,13 +638,51 @@ function drawWidgets(error, data, geodata, usaboundaries)
nominateScatterChart.on("filtered", pollFilters);
outVotes();

// "Select region" mode for touch: tap two opposite corners to draw
// a selection rectangle, since there's no reliable drag gesture on
// touch to draw one directly (tap-to-select-one-point below
// already works fine on touch, since a tap synthesizes a click
// event same as a mouse would produce).
var regionSelectMode = false;
var regionSelectFirstCorner = null;
var regionSelectToggle = document.getElementById("regionSelectToggle");
function setRegionSelectMode(on) {
regionSelectMode = on;
regionSelectFirstCorner = null;
if (regionSelectToggle) {
regionSelectToggle.setAttribute("aria-pressed", on ? "true" : "false");
regionSelectToggle.textContent = on ? "Tap first corner…" : "Select region";
}
}
if (regionSelectToggle) {
regionSelectToggle.addEventListener("click", function() {
setRegionSelectMode(!regionSelectMode);
});
}

// Make brush box appear on click
var scb = nominateScatterChart.select(".brush");
scb.on('click', function(){
var sizeOfBox = 0.03/2;
var extent = nominateScatterChart.brush().extent();
var x = nominateScatterChart.x().invert(d3.mouse(this)[0]),
y = nominateScatterChart.y().invert(d3.mouse(this)[1]);

if (regionSelectMode) {
if (!regionSelectFirstCorner) {
regionSelectFirstCorner = [x, y];
regionSelectToggle.textContent = "Tap opposite corner…";
return;
}
var x1 = regionSelectFirstCorner[0], y1 = regionSelectFirstCorner[1];
nominateScatterChart.brush().extent([
[Math.min(x1, x), Math.min(y1, y)],
[Math.max(x1, x), Math.max(y1, y)]
]).event(scb);
setRegionSelectMode(false);
return;
}

var extent = nominateScatterChart.brush().extent();
// Only draw box if there isn't one already there...
if (extent[0][0]==extent[1][0] & extent[0][1]==extent[1][1]) {
if (x*x + y*y <= 1) {
Expand Down
1 change: 1 addition & 0 deletions views/congress.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
data-toggle="tooltip" data-position="bottom" data-html="true" title="Save Plot as PNG"
onclick="javascript:saveSvgAsPng($('#scatter-chart > svg')[0],'plot_{{member_label}}_{{congress}}.png', {backgroundColor: 'white'}); return false;"
></span>
<button type="button" id="regionSelectToggle" class="link-button touch-only-control" aria-pressed="false">Select region</button>
</h4>

<div id="scatter-container">
Expand Down
1 change: 1 addition & 0 deletions views/vote.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
data-toggle="tooltip" data-position="bottom" data-html="true" title="Save Plot as PNG">
</button>
<img src="/static/img/help.png" alt="Help: click and drag on the plot to focus on selected members." class="noteText left-tooltip noprint" style="width:16px;vertical-align:middle;cursor:default;" data-toggle="tooltip" data-position="bottom" data-html="true" title="Click and drag on the plot to draw a box around the members you want to focus on. Once the box is established, you can drag it around to explore different subsets of members. By drawing a very small box and dragging it across the plot, you can identify individual members one at a time. To clear the selection, click the &times; at the bottom of the page.">
<button type="button" id="regionSelectToggle" class="link-button touch-only-control" aria-pressed="false">Select region</button>
</h4>

<div id="scatter-container">
Expand Down