]> projects.mako.cc - selectricity/commitdiff
A series of cosmetic improvements to quickvoting and to the general
author<mako@atdot.cc> <>
Mon, 16 Oct 2006 17:36:51 +0000 (13:36 -0400)
committer<mako@atdot.cc> <>
Mon, 16 Oct 2006 17:36:51 +0000 (13:36 -0400)
layout.

app/views/quickvote/_candidate_list.rhtml
app/views/quickvote/index.rhtml
app/views/quickvote/results.rhtml
app/views/quickvote/success.rhtml
app/views/quickvote/thanks.rhtml
public/stylesheets/hc.css

index 5c76d62d8c3bd380cf39b254c0b423109270fc4f..f4f1c0628c06d91139300d38a0338cbfa3b02611 100644 (file)
@@ -9,7 +9,8 @@
 <% end %>
 
 <%= form_remote_tag :update => 'candlist',
 <% end %>
 
 <%= form_remote_tag :update => 'candlist',
-                    :url => { :action => 'add_candidate' } %>
+                    :url => { :action => 'add_candidate' },
+                   :complete => "Field.focus('ajax_newcandidate')" %>
 <p>
   <%= text_field "ajax", "newcandidate", :size => 40 %>
   <%= submit_tag "Add(+)" %>
 <p>
   <%= text_field "ajax", "newcandidate", :size => 40 %>
   <%= submit_tag "Add(+)" %>
index bb0b5a4705623d91e2cc7a5bb29ab4d771c07831..eb378456c3def1c16b3ef2b2a4e85e5940755552 100644 (file)
@@ -24,7 +24,7 @@
 <% else %>
 
 <p>Drag and drop the items on the following list until they are in order
 <% else %>
 
 <p>Drag and drop the items on the following list until they are in order
-<em>from most preferred at the top to least preferred at the
+from <em>most preferred at the top</em> to <em>least preferred at the
 bottom</em>. When you are done, press confirm to record your vote.</p>
 
 <div id="sortable_list">
 bottom</em>. When you are done, press confirm to record your vote.</p>
 
 <div id="sortable_list">
index e3644c87c2b7627c88398d5c8e45b23119789d63..fe2b09a0ad94921bf2cf7ff778afdb7e99a66c58 100644 (file)
 <h2>Winners</h2>
 
 <div class="mainresultbox">
 <h2>Winners</h2>
 
 <div class="mainresultbox">
-<center><h3>Condorcet (w/ Cloneproof SSD) Results</h3></center>
+<h3>Schulze Method Results</h3>
 <%= render :partial => 'result', :object => @ssd_result %>
 <%= render :partial => 'result', :object => @ssd_result %>
+
+<div class="rbmoreinfo"
+<h4>About the Schulze Method</h4>
+
+<p>The <%= link_to "Schulze method",
+"http://en.wikipedia.org/wiki/Schulze_method" %> is a preferential
+voting system. It is based on the Condorcet method but includes a set of
+methods for resolving "circular" defeats.</p>
+
+<p>The Schulze method is also known as Schwartz Sequential Dropping
+(SSD), Cloneproof Schwartz Sequential Dropping (CSSD), Beatpath Method,
+Beatpath Winner, Path Voting, and Path Winner.</p>
+</div>
+
 </div>
 
 <div class="resultbox">
 <h3>Plurality Results</h3>
 <%= render :partial => 'result', :object => @plurality_result %>
 </div>
 
 <div class="resultbox">
 <h3>Plurality Results</h3>
 <%= render :partial => 'result', :object => @plurality_result %>
+
+<div class="rbmoreinfo"
+<h4>About Plurality Voting</h4>
+
+<p><%= link_to "Plurality voting",
+"http://en.wikipedia.org/wiki/Plurality_electoral_system" %> selects the
+winner who has received the most "number one" votes, regardless of
+whether or not he or she has a majority of votes.</p>
+
+<p>Plurality voting is also variously referred to as, "first past the
+post," "winner-take-all," "majoritarian" or "simple majority"
+voting.</p>
+
+</div>
 </div>
 
 <div class="resultbox">
 <h3>Approval Result</h3>
 </div>
 
 <div class="resultbox">
 <h3>Approval Result</h3>
-<p><font size="-1">(Assuming top two choices are "approved.")</font></p>
+<p><font size="-1">(This algorithm assumes that top two choices are "approved.")</font></p>
 <%= render :partial => 'result', :object => @approval_result %>
 <%= render :partial => 'result', :object => @approval_result %>
+
+<div class="rbmoreinfo"
+<h4>About Approval Voting</h4>
+
+<p><%= link_to "Approval voting",
+"http://en.wikipedia.org/wiki/Approval_voting" %> is a voting system in
+which each voter can vote for as many or as few candidates as the voter
+chooses.  Approval voting is a limited form of range voting, where the
+range that voters are allowed to express is extremely constrained:
+accept or not.</p>
+
+</div>
+
 </div>
 
 <div class="resultbox">
 <h3>Simple Condorcet Results</h3>
 <%= render :partial => 'result', :object => @condorcet_result %>
 </div>
 
 <div class="resultbox">
 <h3>Simple Condorcet Results</h3>
 <%= render :partial => 'result', :object => @condorcet_result %>
+
+<div class="rbmoreinfo"
+<h4>About Simple Cordorcet Voting</h4>
+
+<p><%= link_to "Condorcet",
+"http://en.wikipedia.org/wiki/Condorcet_method" %> allows voters to rank
+candidates in order of preference.  If there is a choice whom voters
+prefer to each other choice when compared to one at a time, that choice
+will be the winner.</p>
+
+<p>There is a family of Condorcet methods. This method is referred to as
+"Simple Condorcet" to distinguish it from the Schulze method which is
+another Condorcet system.</p>
+
+</div>
 </div>
 
 <div class="resultbox">
 <h3>Borda Count Results</h3>
 <%= render :partial => 'result', :object => @borda_result %>
 </div>
 
 <div class="resultbox">
 <h3>Borda Count Results</h3>
 <%= render :partial => 'result', :object => @borda_result %>
+
+<div class="rbmoreinfo"
+<h4>About Borda Count</h4>
+
+<p><%= link_to "Borda count",
+"http://en.wikipedia.org/wiki/Borda_count" %> 
+is an election method in which voters rank
+candidates in order of preference. The Borda count determines the winner
+of an election by giving each candidate a certain number of points
+corresponding to the position in which he or she is ranked by each
+voter. Once all votes have been counted the candidate with the most
+points is the winner.</p>
+</div>
 </div>
 
 <div class="resultbox">
 <h3>Instant Runoff (IRV) Results</h3>
 <%= render :partial => 'result', :object => @runoff_result %>
 </div>
 
 <div class="resultbox">
 <h3>Instant Runoff (IRV) Results</h3>
 <%= render :partial => 'result', :object => @runoff_result %>
+
+<div class="rbmoreinfo"
+<h4>About Instant Runoff Voting</h4>
+
+<p><%= link_to "Instant runoff voting",
+"http://en.wikipedia.org/wiki/Instant_Runoff_Voting" %> is an electoral
+system in which voters rank candidates in order of preference. In an IRV
+election, if no candidate receives an overall majority of first
+preferences the candidates with fewest votes are eliminated one by one,
+and their votes transferred according to their second and third
+preferences (and so on), until one candidate achieves a majority.</p>
+
+<p>Instant-runoff voting (IRV) is also known as the Alternative Vote (AV) and
+by several other names.</p>
+
+</div>
+
 </div>
 
 <div class="clearbox"></div>
 
 <h2>Voters</h2>
 
 </div>
 
 <div class="clearbox"></div>
 
 <h2>Voters</h2>
 
-<table border="1">
+<table class="voterbox">
 <tr>
 <th>IP Address</th>
 <th>DNS/Host</th>
 <tr>
 <th>IP Address</th>
 <th>DNS/Host</th>
index 93d688208b212d7a87f51aff22c5b72feec65a6b..d793a7ab6f089be0a4e380f452dfbc15ab5f7c89 100644 (file)
@@ -1,5 +1,5 @@
 <% -%>
 <% -%>
-<h2>Your QuickVote Was Created</h2>
+<h2>QuickVote Created</h2>
 
 <p>Please direct voters to:</p>
 
 
 <p>Please direct voters to:</p>
 
@@ -7,10 +7,10 @@
   <%= quickvote_url( :votename => @quickvote.name ) -%>
 </strong></blockquote>
 
   <%= quickvote_url( :votename => @quickvote.name ) -%>
 </strong></blockquote>
 
-<p>This vote will close on <em><%= @quickvote.enddate %></em></p>
+<p>This vote will end on <em><%= @quickvote.enddate.strftime('%A, %B %d, %Y') %></em></p>
 
 <p>QuickVotes are open to the public but are not publicly listed on the
 HyperChad site. Voters do not need to log in or authenticate to
 participate in this election.</p>
 
 
 <p>QuickVotes are open to the public but are not publicly listed on the
 HyperChad site. Voters do not need to log in or authenticate to
 participate in this election.</p>
 
-<p><%= link_to "Jump to your QuickVote.", quickvote_url( :votename => @quickvote.name ) %></p>
+<p><%= link_to "Jump to QuickVote", quickvote_url( :votename => @quickvote.name ) %></p>
index 4104612c9761dee799102911465e9c496e199a76..72cfe61fa490af535a5e59bea65f487cd1b7f931 100644 (file)
@@ -12,9 +12,9 @@ preferences:</p>
 <p>Thanks you voting! You can:</p>
 
 <ul>
 <p>Thanks you voting! You can:</p>
 
 <ul>
-  <li><%= link_to "Change your vote.", quickaction_url( :votename => @voter.election.name, :action => 'change' ) %></li>
+  <li><%= link_to "Change Your Vote", quickaction_url( :votename => @voter.election.name, :action => 'change' ) %></li>
 
 
-  <li><%= link_to "View election results.", quickaction_url( :votename => @voter.election.name, :action => 'results' ) %></li>
+  <li><%= link_to "View Current Results", quickaction_url( :votename => @voter.election.name, :action => 'results' ) %></li>
 </ul>
 
 
 </ul>
 
 
index 4056f8ef0a2c6b526714aaa87d52c8c4c1faa538..a26157363e02f6c7972776e7d0e1cd8123042a0f 100644 (file)
@@ -10,13 +10,13 @@ body        {
 p, blockquote, ul, ol, dl, dd, li, dir, menu {}
 
 h1, h2, h3, h4 {
 p, blockquote, ul, ol, dl, dd, li, dir, menu {}
 
 h1, h2, h3, h4 {
-    border-bottom: 1px solid #BD7589;
-    text-shadow: #999999 0.2em 0.2em 3px;
+    border-bottom: 1px solid #4D801A;
+    text-shadow: #4D801A 0.2em 0.2em 3px;
 
 }
 
 
 }
 
-a:link { font-weight: bold; color: #BD7589; text-decoration: underline; } 
-a:visited { font-weight: bold; color: #BD7589; text-decoration: underline; }
+a:link { font-weight: bold; color: #4D801A; text-decoration: underline; } 
+a:visited { font-weight: bold; color: #4D801A; text-decoration: underline; }
 a:hover { color: #FFFFFF; text-decoration: none; background: #0063DC; }
 a:active { color: #FFFFFF; text-decoration: none; background: #0259C4; }
 
 a:hover { color: #FFFFFF; text-decoration: none; background: #0063DC; }
 a:active { color: #FFFFFF; text-decoration: none; background: #0259C4; }
 
@@ -62,11 +62,14 @@ a:active { color: #FFFFFF; text-decoration: none; background: #0259C4; }
        padding-top: 5px;
        padding-bottom: 5px;
        font-weight: normal;
        padding-top: 5px;
        padding-bottom: 5px;
        font-weight: normal;
-       background: #BD7589;
+       background: #73BF26;
        color: #FFFFFF;
 }
 
        color: #FFFFFF;
 }
 
-#top h3 { font-size: 30px; }
+#top h3 {
+  border-bottom: 0px;
+  font-size: 30px; }
+
 #links { text-align : right; }
 #links a { color: #FFF; font-weight: bold; }
 #links a:visited { color: #FFF; font-weight: bold; }
 #links { text-align : right; }
 #links a { color: #FFF; font-weight: bold; }
 #links a:visited { color: #FFF; font-weight: bold; }
@@ -120,36 +123,78 @@ a:active { color: #FFFFFF; text-decoration: none; background: #0259C4; }
     background-color: #ffdfdf;
 }
 
     background-color: #ffdfdf;
 }
 
+
+
+#xxErrorExplanation h2 {
+  text-align: left;
+  font-weight: bold;
+  padding: 5px 5px 5px 15px;
+  font-size: 12px;
+  margin: -7px;
+  background-color: #c00;
+  color: #fff;
+}
+
+#xxErrorExplanation p {
+  color: #333;
+  margin-bottom: 0;
+  padding: 5px;
+}
+
+#xxErrorExplanation ul li {
+  font-size: 12px;
+  list-style: square;
+}
+
 .mainresultbox {
 .mainresultbox {
-    width: 100%;
-    padding: 7px;
-    margin-right: 30px;
-    margin-bottom: 30px;
-    border-style: dotted;
-    border-width: 1px;
+  text-align: center;
+  width: 850px;
+  border-width: 2px;
+  border-style: solid;
+  border-color: #4D801A;
+  padding: 7px;
+  margin-right: 30px;
+  margin-bottom: 30px;
 }
 
 }
 
-.mainresultbox h1 {
-    text-align: center;
+.mainresultbox h3 {
+  text-align: center;
+  font-weight: bold;
+  padding: 5px 5px 5px 15px;
+  margin: -7px;
+  background-color: #73BF26;
+  color: #fff;
+  border-bottom: 0px;
 }
 .resultbox {
 }
 .resultbox {
-    width:47%;
-    float: left;
-    padding: 7px;
-    margin-right: 10px;
-    margin-bottom: 10px;
-    border-style: dotted;
-    border-width: 1px;
+  text-align: center;
+  width: 400px;
+  float: left;
+  border-width: 2px;
+  border-style: solid;
+  border-color: #4D801A;
+  padding: 7px;
+  margin-right: 30px;
+  margin-bottom: 30px;
 }
 
 }
 
+.resultbox h3 {
+  text-align: center;
+  font-weight: bold;
+  padding: 5px 5px 5px 15px;
+  margin: -7px;
+  background-color: #73BF26;
+  color: #fff;
+  border-bottom: 0px;
+}
 .clearbox {
    clear: both;
    margin: 30px;
 }
 
 li.moveable {
 .clearbox {
    clear: both;
    margin: 30px;
 }
 
 li.moveable {
-  background-color: #EEDCE1;
-  border:1px solid #BD7589;
+  background-color: #E5FFCC;
+  border:1px solid #4D801A;
   cursor: move;
   padding: 4px;
   margin: 4px;
   cursor: move;
   padding: 4px;
   margin: 4px;
@@ -160,3 +205,51 @@ li.moveable {
   display: float;
   float: left;
 }
   display: float;
   float: left;
 }
+
+.voterbox {
+  border-spacing: 0px;
+  border-width: 2px;
+  border-color: #4D801A;
+  border-style: solid;
+}
+
+.voterbox th {
+  border-width: 2px;
+  border-color: #73BF26;
+  border-style: solid;
+  text-align: center;
+  font-weight: bold;
+  padding: 5px 5px 5px 15px;
+  background-color: #73BF26;
+  color: #fff;
+}
+
+.voterbox td {
+  border-collapse: collapse;
+  border-width: 1px;
+  border-color: #4D801A;
+  border-style: solid;
+
+  text-align: right;
+  padding-right: 5px;
+  padding-left: 5px;
+}
+
+.rbmoreinfo hr {
+  width: 100%;
+  height: 10px;
+  color: #4D801A;
+}
+.rbmoreinfo h4 {
+  border: 0px;
+  font-style: italic;
+  text-align: center;
+  font-size: 0.9em;
+}
+
+.rbmoreinfo p {
+  font-size: 0.8em;
+  padding-left: 30px;
+  padding-right: 30px;
+  text-align: left;
+}

Benjamin Mako Hill || Want to submit a patch?