Compare commits
10 commits
582562dae0
...
3b2cf657b5
| Author | SHA1 | Date | |
|---|---|---|---|
| 3b2cf657b5 | |||
| b4a328554c | |||
| dc01cb61ad | |||
| 440013890e | |||
| b7bcd661b8 | |||
| cef9c51835 | |||
| 4faa4fd555 | |||
| 069d565ba9 | |||
| 058b512b7d | |||
| c4ebe12408 |
15 changed files with 26814 additions and 91 deletions
1
Gemfile
1
Gemfile
|
|
@ -8,3 +8,4 @@ gem 'puma'
|
|||
gem 'sqlite3'
|
||||
gem 'bcrypt'
|
||||
gem 'gettext'
|
||||
gem 'chartkick'
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ GEM
|
|||
bcrypt (3.1.20)
|
||||
benchmark (0.4.0)
|
||||
bigdecimal (3.1.9)
|
||||
chartkick (5.1.4)
|
||||
concurrent-ruby (1.3.5)
|
||||
connection_pool (2.5.0)
|
||||
drb (2.2.1)
|
||||
|
|
@ -91,6 +92,7 @@ PLATFORMS
|
|||
|
||||
DEPENDENCIES
|
||||
bcrypt
|
||||
chartkick
|
||||
gettext
|
||||
puma
|
||||
rackup
|
||||
|
|
|
|||
2
Rakefile
2
Rakefile
|
|
@ -1,4 +1,4 @@
|
|||
require_relative 'vote'
|
||||
require_relative 'vedia'
|
||||
require 'sinatra/activerecord/rake'
|
||||
|
||||
desc "Update PO files"
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-03-30 12:01-0600\n"
|
||||
"POT-Creation-Date: 2025-04-06 16:13-0600\n"
|
||||
"PO-Revision-Date: 2025-03-29 20:41-0600\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
|
@ -17,7 +17,7 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
||||
|
||||
#: ../views/home.erb:1 ../views/layout.erb:10
|
||||
#: ../views/home.erb:1 ../views/layout.erb:13
|
||||
msgid "Home"
|
||||
msgstr "Inici"
|
||||
|
||||
|
|
@ -57,31 +57,43 @@ msgstr "Crear una nova votació"
|
|||
msgid "Vote"
|
||||
msgstr "Votació"
|
||||
|
||||
#: ../views/layout.erb:9
|
||||
#: ../views/layout.erb:12
|
||||
msgid "Logged in as %{email}."
|
||||
msgstr "Estàs connectada com a %{email}."
|
||||
|
||||
#: ../views/layout.erb:9
|
||||
#: ../views/layout.erb:12
|
||||
msgid "Logout"
|
||||
msgstr "Desconnexió"
|
||||
|
||||
#: ../views/layout.erb:12 ../views/login.erb:1 ../views/login.erb:14
|
||||
#: ../views/layout.erb:15 ../views/login.erb:1 ../views/login.erb:16
|
||||
msgid "Login"
|
||||
msgstr "Connexió"
|
||||
|
||||
#: ../views/login.erb:7 ../views/signup.erb:5 ../views/votes_edit.erb:51
|
||||
#: ../views/votes_show_closed.erb:69 ../views/votes_show_open.erb:58
|
||||
#: ../views/login.erb:9 ../views/signup.erb:24 ../views/votes_edit.erb:51
|
||||
#: ../views/votes_show_closed.erb:85 ../views/votes_show_open.erb:58
|
||||
msgid "Email"
|
||||
msgstr "Correu"
|
||||
|
||||
#: ../views/login.erb:11 ../views/signup.erb:9
|
||||
#: ../views/login.erb:13 ../views/signup.erb:28
|
||||
msgid "Password"
|
||||
msgstr "Contrasenya"
|
||||
|
||||
#: ../views/login.erb:16 ../views/signup.erb:1 ../views/signup.erb:12
|
||||
#: ../views/login.erb:18 ../views/signup.erb:1 ../views/signup.erb:31
|
||||
msgid "Create account"
|
||||
msgstr "Crear un compte"
|
||||
|
||||
#: ../views/signup.erb:6
|
||||
msgid "Specify a password."
|
||||
msgstr "Entra una contrasenya."
|
||||
|
||||
#: ../views/signup.erb:14
|
||||
msgid "Email is not a valid email address."
|
||||
msgstr "El correu no és una direcció de correu vàlida."
|
||||
|
||||
#: ../views/signup.erb:17
|
||||
msgid "An account already exists for %{email}."
|
||||
msgstr "Un compte ja existeix pel correu %{email}."
|
||||
|
||||
#: ../views/votes_edit.erb:1
|
||||
msgid "Edit draft vote"
|
||||
msgstr "Editar un esborrany de votació"
|
||||
|
|
@ -116,30 +128,34 @@ msgid "Name"
|
|||
msgstr "Nom"
|
||||
|
||||
#: ../views/votes_edit.erb:36 ../views/votes_edit.erb:54
|
||||
#: ../views/votes_show_closed.erb:72 ../views/votes_show_open.erb:61
|
||||
#: ../views/votes_show_closed.erb:81 ../views/votes_show_closed.erb:88
|
||||
#: ../views/votes_show_open.erb:61
|
||||
msgid "Add"
|
||||
msgstr "Afegir"
|
||||
|
||||
#: ../views/votes_edit.erb:39 ../views/votes_show_closed.erb:49
|
||||
#: ../views/votes_edit.erb:39 ../views/votes_show_closed.erb:65
|
||||
#: ../views/votes_show_draft.erb:5 ../views/votes_show_open.erb:34
|
||||
msgid "Organizers"
|
||||
msgstr "Organitzadores"
|
||||
|
||||
#: ../views/votes_edit.erb:47 ../views/votes_show_closed.erb:65
|
||||
#: ../views/votes_show_open.erb:54
|
||||
#: ../views/votes_edit.erb:47 ../views/votes_show_open.erb:54
|
||||
msgid "Add organizer"
|
||||
msgstr "Afegeix organitzadora"
|
||||
|
||||
#: ../views/votes_edit.erb:57 ../views/votes_show_closed.erb:59
|
||||
#: ../views/votes_edit.erb:57 ../views/votes_show_closed.erb:75
|
||||
#: ../views/votes_show_open.erb:44
|
||||
msgid "Actions for organizers"
|
||||
msgstr "Accions per les organitzadores"
|
||||
|
||||
#: ../views/votes_edit.erb:60
|
||||
#: ../views/votes_edit.erb:61 ../views/votes_edit.erb:64
|
||||
msgid "Open vote to participants"
|
||||
msgstr "Obrir la votació als participants"
|
||||
|
||||
#: ../views/votes_edit.erb:63
|
||||
#: ../views/votes_edit.erb:62
|
||||
msgid "Add at least 2 candidates before opening the vote to participants."
|
||||
msgstr "Afegeix com a mínim 2 candidats abans d'obrir la votació als participants"
|
||||
|
||||
#: ../views/votes_edit.erb:68
|
||||
msgid "Delete vote"
|
||||
msgstr "Suprimir la votació"
|
||||
|
||||
|
|
@ -155,31 +171,31 @@ msgstr "Totes les valoracions"
|
|||
msgid "Participant"
|
||||
msgstr "Participant"
|
||||
|
||||
#: ../views/votes_show_closed.erb:26
|
||||
#: ../views/votes_show_closed.erb:27
|
||||
msgid "Results"
|
||||
msgstr "Resultats"
|
||||
|
||||
#: ../views/votes_show_closed.erb:30
|
||||
#: ../views/votes_show_closed.erb:31
|
||||
msgid "Rank"
|
||||
msgstr "Rang"
|
||||
|
||||
#: ../views/votes_show_closed.erb:31
|
||||
#: ../views/votes_show_closed.erb:32
|
||||
msgid "Candidate"
|
||||
msgstr "Candidat"
|
||||
|
||||
#: ../views/votes_show_closed.erb:32
|
||||
#: ../views/votes_show_closed.erb:33
|
||||
msgid "Majority Judgment"
|
||||
msgstr "Judici majoritari"
|
||||
|
||||
#: ../views/votes_show_closed.erb:33
|
||||
#: ../views/votes_show_closed.erb:34
|
||||
msgid "Proponents"
|
||||
msgstr "Defensores"
|
||||
|
||||
#: ../views/votes_show_closed.erb:34
|
||||
#: ../views/votes_show_closed.erb:35
|
||||
msgid "Opponents"
|
||||
msgstr "Detractores"
|
||||
|
||||
#: ../views/votes_show_closed.erb:62
|
||||
#: ../views/votes_show_closed.erb:78
|
||||
msgid "Reopen voting period"
|
||||
msgstr "Reobrir el període de votació"
|
||||
|
||||
|
|
@ -199,30 +215,30 @@ msgstr "Tornar a l'esborrany de votació"
|
|||
msgid "Close votes and show results"
|
||||
msgstr "Tancar la votació i veure els resultats"
|
||||
|
||||
#: ../vote.rb:59
|
||||
#: ../vote.rb:62
|
||||
msgid "Awful"
|
||||
msgstr "Molt malament"
|
||||
|
||||
#: ../vote.rb:60
|
||||
#: ../vote.rb:63
|
||||
msgid "Very bad"
|
||||
msgstr "Malament"
|
||||
|
||||
#: ../vote.rb:61
|
||||
#: ../vote.rb:64
|
||||
msgid "Bad"
|
||||
msgstr "Poc bé"
|
||||
|
||||
#: ../vote.rb:62
|
||||
#: ../vote.rb:65
|
||||
msgid "Mediocre"
|
||||
msgstr "Mig bé"
|
||||
|
||||
#: ../vote.rb:63
|
||||
#: ../vote.rb:66
|
||||
msgid "Good"
|
||||
msgstr "Bé"
|
||||
|
||||
#: ../vote.rb:64
|
||||
#: ../vote.rb:67
|
||||
msgid "Very good"
|
||||
msgstr "Molt bé"
|
||||
|
||||
#: ../vote.rb:65
|
||||
msgid "Excellent"
|
||||
msgstr "Excel·lent"
|
||||
#: ../vote.rb:114
|
||||
msgid "Incorrect email or password."
|
||||
msgstr "Correu o contrasenya incorrecte."
|
||||
|
|
@ -8,8 +8,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-03-30 12:01-0600\n"
|
||||
"PO-Revision-Date: 2025-03-30 12:01-0600\n"
|
||||
"POT-Creation-Date: 2025-04-06 16:13-0600\n"
|
||||
"PO-Revision-Date: 2025-04-06 16:13-0600\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
|
|
@ -18,7 +18,7 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
||||
|
||||
#: ../views/home.erb:1 ../views/layout.erb:10
|
||||
#: ../views/home.erb:1 ../views/layout.erb:13
|
||||
msgid "Home"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -58,31 +58,43 @@ msgstr ""
|
|||
msgid "Vote"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/layout.erb:9
|
||||
#: ../views/layout.erb:12
|
||||
msgid "Logged in as %{email}."
|
||||
msgstr ""
|
||||
|
||||
#: ../views/layout.erb:9
|
||||
#: ../views/layout.erb:12
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/layout.erb:12 ../views/login.erb:1 ../views/login.erb:14
|
||||
#: ../views/layout.erb:15 ../views/login.erb:1 ../views/login.erb:16
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/login.erb:7 ../views/signup.erb:5 ../views/votes_edit.erb:51
|
||||
#: ../views/votes_show_closed.erb:69 ../views/votes_show_open.erb:58
|
||||
#: ../views/login.erb:9 ../views/signup.erb:24 ../views/votes_edit.erb:51
|
||||
#: ../views/votes_show_closed.erb:85 ../views/votes_show_open.erb:58
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/login.erb:11 ../views/signup.erb:9
|
||||
#: ../views/login.erb:13 ../views/signup.erb:28
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/login.erb:16 ../views/signup.erb:1 ../views/signup.erb:12
|
||||
#: ../views/login.erb:18 ../views/signup.erb:1 ../views/signup.erb:31
|
||||
msgid "Create account"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/signup.erb:6
|
||||
msgid "Specify a password."
|
||||
msgstr ""
|
||||
|
||||
#: ../views/signup.erb:14
|
||||
msgid "Email is not a valid email address."
|
||||
msgstr ""
|
||||
|
||||
#: ../views/signup.erb:17
|
||||
msgid "An account already exists for %{email}."
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_edit.erb:1
|
||||
msgid "Edit draft vote"
|
||||
msgstr ""
|
||||
|
|
@ -117,30 +129,34 @@ msgid "Name"
|
|||
msgstr ""
|
||||
|
||||
#: ../views/votes_edit.erb:36 ../views/votes_edit.erb:54
|
||||
#: ../views/votes_show_closed.erb:72 ../views/votes_show_open.erb:61
|
||||
#: ../views/votes_show_closed.erb:81 ../views/votes_show_closed.erb:88
|
||||
#: ../views/votes_show_open.erb:61
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_edit.erb:39 ../views/votes_show_closed.erb:49
|
||||
#: ../views/votes_edit.erb:39 ../views/votes_show_closed.erb:65
|
||||
#: ../views/votes_show_draft.erb:5 ../views/votes_show_open.erb:34
|
||||
msgid "Organizers"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_edit.erb:47 ../views/votes_show_closed.erb:65
|
||||
#: ../views/votes_show_open.erb:54
|
||||
#: ../views/votes_edit.erb:47 ../views/votes_show_open.erb:54
|
||||
msgid "Add organizer"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_edit.erb:57 ../views/votes_show_closed.erb:59
|
||||
#: ../views/votes_edit.erb:57 ../views/votes_show_closed.erb:75
|
||||
#: ../views/votes_show_open.erb:44
|
||||
msgid "Actions for organizers"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_edit.erb:60
|
||||
#: ../views/votes_edit.erb:61 ../views/votes_edit.erb:64
|
||||
msgid "Open vote to participants"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_edit.erb:63
|
||||
#: ../views/votes_edit.erb:62
|
||||
msgid "Add at least 2 candidates before opening the vote to participants."
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_edit.erb:68
|
||||
msgid "Delete vote"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -156,31 +172,31 @@ msgstr ""
|
|||
msgid "Participant"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_show_closed.erb:26
|
||||
#: ../views/votes_show_closed.erb:27
|
||||
msgid "Results"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_show_closed.erb:30
|
||||
#: ../views/votes_show_closed.erb:31
|
||||
msgid "Rank"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_show_closed.erb:31
|
||||
#: ../views/votes_show_closed.erb:32
|
||||
msgid "Candidate"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_show_closed.erb:32
|
||||
#: ../views/votes_show_closed.erb:33
|
||||
msgid "Majority Judgment"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_show_closed.erb:33
|
||||
#: ../views/votes_show_closed.erb:34
|
||||
msgid "Proponents"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_show_closed.erb:34
|
||||
#: ../views/votes_show_closed.erb:35
|
||||
msgid "Opponents"
|
||||
msgstr ""
|
||||
|
||||
#: ../views/votes_show_closed.erb:62
|
||||
#: ../views/votes_show_closed.erb:78
|
||||
msgid "Reopen voting period"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -200,30 +216,30 @@ msgstr ""
|
|||
msgid "Close votes and show results"
|
||||
msgstr ""
|
||||
|
||||
#: ../vote.rb:59
|
||||
#: ../vote.rb:62
|
||||
msgid "Awful"
|
||||
msgstr ""
|
||||
|
||||
#: ../vote.rb:60
|
||||
#: ../vote.rb:63
|
||||
msgid "Very bad"
|
||||
msgstr ""
|
||||
|
||||
#: ../vote.rb:61
|
||||
#: ../vote.rb:64
|
||||
msgid "Bad"
|
||||
msgstr ""
|
||||
|
||||
#: ../vote.rb:62
|
||||
#: ../vote.rb:65
|
||||
msgid "Mediocre"
|
||||
msgstr ""
|
||||
|
||||
#: ../vote.rb:63
|
||||
#: ../vote.rb:66
|
||||
msgid "Good"
|
||||
msgstr ""
|
||||
|
||||
#: ../vote.rb:64
|
||||
#: ../vote.rb:67
|
||||
msgid "Very good"
|
||||
msgstr ""
|
||||
|
||||
#: ../vote.rb:65
|
||||
msgid "Excellent"
|
||||
#: ../vote.rb:114
|
||||
msgid "Incorrect email or password."
|
||||
msgstr ""
|
||||
24043
public/Chart.bundle.js
Normal file
24043
public/Chart.bundle.js
Normal file
File diff suppressed because it is too large
Load diff
2570
public/chartkick.js
Normal file
2570
public/chartkick.js
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -3,6 +3,7 @@ require 'sinatra/activerecord'
|
|||
require 'bcrypt'
|
||||
require 'gettext'
|
||||
require 'securerandom'
|
||||
require 'chartkick'
|
||||
require_relative 'mj'
|
||||
|
||||
class Vote < ActiveRecord::Base
|
||||
|
|
@ -27,6 +28,8 @@ class User < ActiveRecord::Base
|
|||
has_many :ratings
|
||||
has_many :organizers
|
||||
has_many :votes, through: :organizers
|
||||
validates :email, uniqueness: true
|
||||
validates :email, format: URI::MailTo::EMAIL_REGEXP
|
||||
end
|
||||
|
||||
class Organizer < ActiveRecord::Base
|
||||
|
|
@ -52,17 +55,16 @@ end
|
|||
|
||||
include GetText
|
||||
set_output_charset('UTF-8')
|
||||
bindtextdomain('vote', 'locale')
|
||||
bindtextdomain('vedia', 'locale')
|
||||
set_locale('ca')
|
||||
|
||||
enable :sessions
|
||||
set :values, [ { :id => 1, :label => _("Awful") },
|
||||
{ :id => 2, :label => _("Very bad") },
|
||||
{ :id => 3, :label => _("Bad") },
|
||||
{ :id => 4, :label => _("Mediocre") },
|
||||
{ :id => 5, :label => _("Good") },
|
||||
{ :id => 6, :label => _("Very good") },
|
||||
{ :id => 7, :label => _("Excellent") } ]
|
||||
set :values, [ { :id => 1, :label => _("Awful"), :color => '#ff4500' },
|
||||
{ :id => 2, :label => _("Very bad"), :color => '#ffa500' },
|
||||
{ :id => 3, :label => _("Bad"), :color => '#ffff00' },
|
||||
{ :id => 4, :label => _("Mediocre"), :color => '#9acd32' },
|
||||
{ :id => 5, :label => _("Good"), :color => '#228b22' },
|
||||
{ :id => 6, :label => _("Very good"), :color => '#006400' } ]
|
||||
MajorityJudgment.values = settings.values
|
||||
|
||||
get '/' do
|
||||
|
|
@ -71,14 +73,31 @@ get '/' do
|
|||
erb :home
|
||||
end
|
||||
|
||||
get '/style.css' do
|
||||
content_type 'text/css'
|
||||
erb :style, :layout => false
|
||||
end
|
||||
|
||||
get '/signup' do
|
||||
erb :signup
|
||||
end
|
||||
|
||||
post '/signup' do
|
||||
@user = User.create(email: params[:email],
|
||||
password: hash_password(params[:password]))
|
||||
@user = User.create(email: params[:email])
|
||||
@errors = []
|
||||
if params[:password].empty?
|
||||
@errors << OpenStruct.new(:attribute => :password, :type => :blank)
|
||||
else
|
||||
@user.password = hash_password(params[:password])
|
||||
end
|
||||
if @errors.empty? and @user.valid?
|
||||
@user.save
|
||||
session.clear
|
||||
session[:user_id] = @user.id
|
||||
redirect '/'
|
||||
else
|
||||
erb :signup
|
||||
end
|
||||
end
|
||||
|
||||
get '/login' do
|
||||
|
|
@ -92,7 +111,7 @@ post '/login' do
|
|||
session[:user_id] = user.id
|
||||
redirect '/'
|
||||
else
|
||||
@error = 'Username or password was incorrect'
|
||||
@error = _("Incorrect email or password.")
|
||||
erb :login
|
||||
end
|
||||
end
|
||||
|
|
@ -181,8 +200,10 @@ post '/votes/:id/open' do
|
|||
find_vote
|
||||
require_organizer
|
||||
require_draft_vote
|
||||
if not @vote.candidates.length < 2
|
||||
@vote.state = 'open'
|
||||
@vote.save
|
||||
end
|
||||
redirect '/votes/' + @vote.secure_id
|
||||
end
|
||||
|
||||
|
|
@ -3,6 +3,9 @@
|
|||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title><%= _("Vote") %></title>
|
||||
<script src="/chartkick.js"></script>
|
||||
<script src="/Chart.bundle.js"></script>
|
||||
<link rel="stylesheet" href="/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<% if current_user %>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
<h1><%= _("Login") %></h1>
|
||||
|
||||
<% if @error %>
|
||||
<p class="error"><%= @error %></p>
|
||||
<% end %>
|
||||
|
||||
<form action="/login" method="POST">
|
||||
<p>
|
||||
<label for="email"><%= _("Email") %></label>
|
||||
|
|
|
|||
|
|
@ -1,13 +1,32 @@
|
|||
<h1><%= _("Create account") %></h1>
|
||||
|
||||
<% if @errors %>
|
||||
<% @errors.each do |error| %>
|
||||
<% if error.attribute == :password and error.type == :blank %>
|
||||
<p class="error"><%= _("Specify a password.") %></p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<% if @user and @user.errors.any? %>
|
||||
<% @user.errors.each do |error| %>
|
||||
<% if error.attribute == :email and error.type == :invalid %>
|
||||
<p class="error"><%= _("Email is not a valid email address.") %></p>
|
||||
<% end %>
|
||||
<% if error.attribute == :email and error.type == :taken %>
|
||||
<p class="error"><%= _("An account already exists for %{email}.") % { email: @user.email } %></p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<form action="/signup" method="post">
|
||||
<p>
|
||||
<label for="email"><%= _("Email") %></label>
|
||||
<input type="text" name="email">
|
||||
<input type="text" name="email" value="<%= params[:email] %>">
|
||||
</p>
|
||||
<p>
|
||||
<label for="password"><%= _("Password") %></label>
|
||||
<input type="password" name="password">
|
||||
<input type="password" name="password" value="<%= params[:password] %>">
|
||||
</p>
|
||||
<button type="submit"><%= _("Create account") %></button>
|
||||
</form>
|
||||
|
|
|
|||
9
views/style.erb
Normal file
9
views/style.erb
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
.error {
|
||||
color: red;
|
||||
}
|
||||
|
||||
<% settings.values.each do |v| %>
|
||||
.value-<%= v[:id] %> {
|
||||
background: <%= v[:color] %>;
|
||||
}
|
||||
<% end %>
|
||||
|
|
@ -57,7 +57,12 @@
|
|||
<h3><%= _("Actions for organizers") %></h2>
|
||||
|
||||
<form action="/votes/<%= @vote.secure_id %>/open" method="post">
|
||||
<% if @vote.candidates.length < 2 %>
|
||||
<button type="submit" disabled><%= _("Open vote to participants") %></button>
|
||||
<p><%= _("Add at least 2 candidates before opening the vote to participants.") %></p>
|
||||
<% else %>
|
||||
<button type="submit"><%= _("Open vote to participants") %></button>
|
||||
<% end %>
|
||||
</form>
|
||||
<form action="/votes/<%= @vote.secure_id %>/delete" method="post">
|
||||
<button type="submit"><%= _("Delete vote") %></button>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,8 @@
|
|||
<td><%= user.email %></td>
|
||||
<% @vote.candidates.each do |candidate| %>
|
||||
<% if rating = @vote.ratings.find { |rating| rating.user == user and rating.candidate == candidate } %>
|
||||
<td><%= settings.values.select { |e| e[:id] == rating.value }.first[:label] %></td>
|
||||
<% value = settings.values.select { |e| e[:id] == rating.value }.first %>
|
||||
<td class="value-<%= value[:id] %>"><%= value[:label] %></td>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</tr>
|
||||
|
|
@ -27,11 +28,11 @@
|
|||
|
||||
<table>
|
||||
<tr>
|
||||
<td><%= _("Rank") %></td>
|
||||
<td><%= _("Candidate") %></td>
|
||||
<td><%= _("Majority Judgment") %></td>
|
||||
<td><%= _("Proponents") %></td>
|
||||
<td><%= _("Opponents") %></td>
|
||||
<th><%= _("Rank") %></th>
|
||||
<th><%= _("Candidate") %></th>
|
||||
<th><%= _("Majority Judgment") %></th>
|
||||
<th><%= _("Proponents") %></th>
|
||||
<th><%= _("Opponents") %></th>
|
||||
</tr>
|
||||
<% i = 0 %>
|
||||
<% @vote.candidates.sort { |a, b| a.mj <=> b.mj }.reverse.each do |candidate| %>
|
||||
|
|
@ -39,13 +40,28 @@
|
|||
<tr>
|
||||
<td><%= i %></td>
|
||||
<td><%= candidate.name %></td>
|
||||
<td><%= settings.values.select { |e| e[:id] == candidate.mj.mj }.first[:label] %></td>
|
||||
<% value = settings.values.select { |e| e[:id] == candidate.mj.mj }.first %>
|
||||
<td class="value-<%= value[:id] %>"><%= value[:label] %></td>
|
||||
<td><%= candidate.mj.proponents %></td>
|
||||
<td><%= candidate.mj.opponents %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
|
||||
<%
|
||||
data = []
|
||||
colors = []
|
||||
settings.values.reverse.each do |v|
|
||||
d = { name: v[:label], data: [] }
|
||||
@vote.candidates.each do |c|
|
||||
d[:data] << [c.name, c.mj.count[v[:id]]]
|
||||
end
|
||||
data << d
|
||||
colors << v[:color]
|
||||
end
|
||||
%>
|
||||
<%= bar_chart data, colors: colors, stacked: true, legend: 'bottom' %>
|
||||
|
||||
<h2><%= _("Organizers") %></h2>
|
||||
|
||||
<ul>
|
||||
|
|
|
|||
|
|
@ -12,11 +12,11 @@
|
|||
<li>
|
||||
<p><%= candidate.name %></p>
|
||||
<p><%= candidate.description %></p>
|
||||
<ol>
|
||||
<ul>
|
||||
<% settings.values.reverse.each do |v| %>
|
||||
<input type="radio" name="<%= candidate.id %>" id="<%= candidate.id %>-<%= v[:id] %>" value="<%= v[:id] %>" <% if value == v[:id] %>checked<% end %>><label for="<%= candidate.id %>-<%= v[:id] %>"><%= v[:label] %></label>
|
||||
<li><input type="radio" name="<%= candidate.id %>" id="<%= candidate.id %>-<%= v[:id] %>" value="<%= v[:id] %>" <% if value == v[:id] %>checked<% end %>><label for="<%= candidate.id %>-<%= v[:id] %>" class="value-<%= v[:id] %>"><%= v[:label] %></label></li>
|
||||
<% end %>
|
||||
</ol>
|
||||
</ul>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue