From: John Dong Date: Thu, 30 Aug 2007 15:20:52 +0000 (-0400) Subject: Merge from head X-Git-Url: https://projects.mako.cc/source/selectricity/commitdiff_plain/2857ac6197adfe972a5e6129a3f26af9e148edb1?hp=df770407edbb2ed9f55b0a3b557f3b51a9e9f4e3 Merge from head --- diff --git a/app/controllers/graph_controller.rb b/app/controllers/graph_controller.rb index b80b5d3..b019aeb 100644 --- a/app/controllers/graph_controller.rb +++ b/app/controllers/graph_controller.rb @@ -1,18 +1,36 @@ require 'date' class GraphController < ApplicationController class GruffGraff - + + COLORS = ['#74CE00', '#005CD9', '#DC0D13', '#131313', '#990033'] + BACKGROUND_COLORS = ['#74CE00', '#FFFFFF'] #for green and white background + def initialize(options) size = options[:size] ? options[:size] : "400x300" #allow custom sizing @graph = options[:graph_type].new(size) @graph.no_data_message = "No Voters" - @graph.theme = { :colors => ['#005CD9', '#DC0D13', '#131313', '#990033'], - :background_colors => ['#74CE00', '#FFFFFF'] } + @graph.theme = { :colors => COLORS, + :background_colors => ['#e5e5e5', '#FFFFFF'] } @graph.font = File.expand_path('/usr/X11R6/lib/X11/fonts/TTF/Vera.ttf', RAILS_ROOT) + if options[:legend_font_size] + @graph.legend_font_size = options[:legend_font_size] + end + + if options[:title_font_size] + @graph.title_font_size = options[:title_font_size] + end + + #marker count doesn't include minimum value line, default is 4 + @graph.marker_count = options[:marker_count] if options[:marker_count] + + @graph.marker_font_size = options[:marker_font_size] if options[:marker_font_size] + + @graph.marker_color = options[:marker_color] if options[:marker_color] + # fill in the data with the optional data name #Check to see if multiple datasets, if so, fill them all! #Sort by biggest first piece of data. @@ -74,7 +92,12 @@ class GraphController < ApplicationController :data => data, :interval_labels => labels, :title => "Voters Over Time", - :size => "270x230", + :size => "330x232", + :legend_font_size => 40, + :title_font_size => 50, + :marker_count => 2, + :marker_font_size => 30, + :marker_color => '#999999', :x_axis_label => scale, :y_axis_label => "Number of Votes") send_data(*graph.output) @@ -90,6 +113,7 @@ class GraphController < ApplicationController :data => data, :interval_labels => labels, :title => "Points Per Candidate", + :marker_color => '#999999', :y_axis_label => "Points", :x_axis_label => "Candidate") send_data(*graph.output) @@ -258,15 +282,15 @@ class GraphController < ApplicationController # Create the hash for the labels. Each graph has ten columns, and three # will be labeled if timedelta < 2.hours #under two hours use minutes for labels - labels_hash[0] = starttime.min.to_s - labels_hash[(numcols/2)-1] = (starttime + (timedelta/2)).min.to_s - labels_hash[numcols-1] = Time.now.min.to_s - interval_type = "Minute of the Hour" + labels_hash[0] = "Start" + labels_hash[(numcols/2)-1] = fmt_decimal((timedelta/120)) #halfway + labels_hash[numcols-1] = fmt_decimal((timedelta/60)) + interval_type = "Minutes After Start" elsif timedelta < 2.days #more than 2 hours means use hours for labels - labels_hash[0] = starttime.hour.to_s - labels_hash[(numcols/2)-1] = (starttime + (timedelta/2)).hour.to_s - labels_hash[numcols-1] = Time.now.hour.to_s - interval_type = "Hour of the Day on 24 hour scale" + labels_hash[0] = "Start" + labels_hash[(numcols/2)-1] = fmt_decimal((timedelta/7200)) + labels_hash[numcols-1] = fmt_decimal((timedelta/3600)) + interval_type = "Hours After Start (Up to 48)" else #more than 2 days means use dates for labels labels_hash[0] = (Date.parse(starttime.to_s)).to_s labels_hash[(numcols/2)-1] = (Date.parse((starttime + (timedelta/2)).to_s)).to_s @@ -278,6 +302,10 @@ class GraphController < ApplicationController return total_per_interval, labels_hash, interval_type end + def fmt_decimal(number) + sprintf( "%0.1f", number) + end + def get_borda_points(result) points = Array.new labels = Hash.new @@ -306,5 +334,4 @@ class GraphController < ApplicationController end return preference_tally end - end diff --git a/app/models/vote.rb b/app/models/vote.rb index dcadcac..8852fa5 100644 --- a/app/models/vote.rb +++ b/app/models/vote.rb @@ -95,7 +95,7 @@ class Vote < ActiveRecord::Base # the following subroutine is used for quickvotes, but need for elections now # too. It creates a vote with the candidates listed in order of preference - # based on alphabetical order. It is meant to be manipulated and then confirmed + # based on alphabetical order. Meant to be manipulated and then confirmed def set_defaults! self.votes = voter.election.candidates.sort.collect {|c| c.id } self.save diff --git a/app/views/quickvote/_pref_tables.rhtml b/app/views/quickvote/_pref_tables.rhtml index 0d2b020..18e5aa3 100644 --- a/app/views/quickvote/_pref_tables.rhtml +++ b/app/views/quickvote/_pref_tables.rhtml @@ -6,9 +6,9 @@ - +
- + <% candidates.each do |candidate| -%> <% end -%> @@ -33,7 +33,7 @@
<%=h names[candidate] -%>
- +
<% candidates.each do |victor| %> diff --git a/app/views/quickvote/index.rhtml b/app/views/quickvote/index.rhtml index a96fc41..e13ea94 100644 --- a/app/views/quickvote/index.rhtml +++ b/app/views/quickvote/index.rhtml @@ -20,22 +20,10 @@ from most preferred at the top to least preferred at the bottom. When you are done, press confirm to record your vote.

-
-
    - <% for ranking in @voter.vote.rankings %> -
  1. - <%=h ranking.candidate.name.capitalize %>
  2. - <% end %> -
-
- -
+<%= render :partial => 'voter/sortable_vote' %> <%= button_to "Confirm Vote", quickaction_url( :action => 'confirm', :ident => @voter.election.name) %> -<%= sortable_element 'rankings-list', - :url => { :action => "sort_candidates" , :id => @voter.vote.id }, - :complete => visual_effect(:highlight, 'rankings-list') %> <% end %> diff --git a/app/views/quickvote/results.rhtml b/app/views/quickvote/results.rhtml index a2da83d..c45fd2a 100644 --- a/app/views/quickvote/results.rhtml +++ b/app/views/quickvote/results.rhtml @@ -30,7 +30,8 @@
Winner - + The chosen method is: + <%= @election.election_method.capitalize %>
diff --git a/app/views/voter/_sortable_vote.rhtml b/app/views/voter/_sortable_vote.rhtml index 4154482..79e95b5 100644 --- a/app/views/voter/_sortable_vote.rhtml +++ b/app/views/voter/_sortable_vote.rhtml @@ -1,4 +1,3 @@ -<% %>
    <% for ranking in @voter.vote.rankings %> diff --git a/app/views/voter/full_vote.rhtml b/app/views/voter/full_vote.rhtml index e6ccb26..cfc20e3 100644 --- a/app/views/voter/full_vote.rhtml +++ b/app/views/voter/full_vote.rhtml @@ -5,9 +5,6 @@

    Description:

    <%= @voter.election.description %>
    -<%= render :partial => 'vote' %> - <%= render :partial => 'sortable_vote' %> <%= button_to "Submit Vote", :action => 'review', :id => @voter.password %> - diff --git a/db/schema.rb b/db/schema.rb index 590425d..6c038de 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -74,10 +74,11 @@ ActiveRecord::Schema.define() do create_table "voters", :force => true do |t| t.column "email", :string, :limit => 100 t.column "password", :string, :limit => 100 - t.column "contacted", :integer, :limit => 4, :default => 0, :null => false - t.column "election_id", :integer, :null => false + t.column "contacted", :integer, :limit => 4, :default => 0, :null => false + t.column "election_id", :integer, :null => false t.column "session_id", :string, :limit => 32 t.column "ipaddress", :string, :limit => 32 + t.column "type", :string, :limit => 100, :default => "", :null => false end add_index "voters", ["election_id"], :name => "fk_election_voter" diff --git a/public/stylesheets/main.css b/public/stylesheets/main.css index 4e84579..acdff30 100644 --- a/public/stylesheets/main.css +++ b/public/stylesheets/main.css @@ -265,6 +265,35 @@ li.moveable { float: left; } +.preftable { + border-spacing: 0px; + border-width: 2px; + border-color: #999999; + border-style: solid; +} + +.preftable th { + border-width: 2px; + border-color: #999999; + border-style: solid; + text-align: center; + font-weight: bold; + padding: 5px 5px 5px 15px; + background-color: #999999; + color: #fff; +} + +.preftable td { + border-collapse: collapse; + border-width: 1px; + border-color: #999999; + border-style: solid; + + text-align: right; + padding-right: 5px; + padding-left: 5px; +} + .voterbox { border-spacing: 0px; border-width: 2px;
<%=h names[victor] %>