Merge branch 'master' into legislation-module-stable

This commit is contained in:
Amaia Castro
2017-03-17 18:08:22 +01:00
24 changed files with 271 additions and 179 deletions

40
Gemfile
View File

@@ -1,13 +1,13 @@
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.7.1'
gem 'rails', '4.2.8'
# Use PostgreSQL
gem 'pg', '~> 0.19.0'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0', '>= 5.0.4'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 3.0.4'
gem 'uglifier', '~> 3.1.6'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2.1'
# See https://github.com/rails/execjs#readme for more supported runtimes
@@ -40,11 +40,11 @@ gem 'foundation_rails_helper', '~> 2.0.0'
gem 'acts_as_votable'
gem 'ckeditor', '~> 4.2.2'
gem 'invisible_captcha', '~> 0.9.2'
gem 'cancancan'
gem 'cancancan', '~> 1.16.0'
gem 'social-share-button'
gem 'initialjs-rails', '0.2.0.4'
gem 'unicorn', '~> 5.2.0'
gem 'paranoia', '~> 2.2.0'
gem 'paranoia', '~> 2.2.1'
gem 'rinku', '~> 2.0.2', require: 'rails_rinku'
gem 'savon'
gem 'dalli'
@@ -52,18 +52,18 @@ gem 'rollbar', '~> 2.14.0'
gem 'delayed_job_active_record', '~> 4.1.0'
gem 'daemons'
gem 'devise-async'
gem 'newrelic_rpm', '~> 3.17.2.327'
gem 'newrelic_rpm', '~> 3.18.1.330'
gem 'whenever', require: false
gem 'pg_search'
gem 'sitemap_generator'
gem 'sitemap_generator', '~> 5.3.1'
gem 'ahoy_matey', '~> 1.5.3'
gem 'groupdate', '~> 3.1.0' # group temporary data
gem 'groupdate', '~> 3.2.0' # group temporary data
gem 'tolk', '~> 2.0.0' # Web interface for translations
gem 'browser'
gem 'turnout', '~> 2.4.0'
gem 'redcarpet'
gem 'redcarpet', '~> 3.4.0'
gem 'rails-assets-markdown-it', source: 'https://rails-assets.org'
@@ -76,28 +76,28 @@ group :development, :test do
gem 'spring'
gem 'spring-commands-rspec'
gem 'rspec-rails', '~> 3.5'
gem 'capybara'
gem 'factory_girl_rails'
gem 'capybara', '~> 2.12.1'
gem 'factory_girl_rails', '~> 4.8.0'
gem 'fuubar'
gem 'launchy'
gem 'quiet_assets'
gem 'letter_opener_web', '~> 1.3.0'
gem 'i18n-tasks'
gem 'capistrano', '3.5.0', require: false
gem 'letter_opener_web', '~> 1.3.1'
gem 'i18n-tasks', '~> 0.9.12'
gem 'capistrano', '~> 3.7.2', require: false
gem 'capistrano-bundler', '~> 1.2', require: false
gem "capistrano-rails", '1.1.8', require: false
gem "capistrano-rails", '~> 1.2.3', require: false
gem 'rvm1-capistrano3', require: false
gem 'capistrano3-delayed-job', '~> 1.0'
gem "bullet"
gem "faker"
gem 'rubocop', '~> 0.45.0', require: false
gem 'capistrano3-delayed-job', '~> 1.7.3'
gem "bullet", '~> 5.5.1'
gem "faker", '~> 1.7.3'
gem 'rubocop', '~> 0.47.1', require: false
gem 'knapsack'
end
group :test do
gem 'database_cleaner'
gem 'poltergeist'
gem 'coveralls', require: false
gem 'poltergeist', '~> 1.13.0'
gem 'coveralls', '~> 0.8.19', require: false
gem 'email_spec'
end

View File

@@ -2,46 +2,46 @@ GEM
remote: https://rubygems.org/
remote: https://rails-assets.org/
specs:
actionmailer (4.2.7.1)
actionpack (= 4.2.7.1)
actionview (= 4.2.7.1)
activejob (= 4.2.7.1)
actionmailer (4.2.8)
actionpack (= 4.2.8)
actionview (= 4.2.8)
activejob (= 4.2.8)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 1.0, >= 1.0.5)
actionpack (4.2.7.1)
actionview (= 4.2.7.1)
activesupport (= 4.2.7.1)
actionpack (4.2.8)
actionview (= 4.2.8)
activesupport (= 4.2.8)
rack (~> 1.6)
rack-test (~> 0.6.2)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (4.2.7.1)
activesupport (= 4.2.7.1)
actionview (4.2.8)
activesupport (= 4.2.8)
builder (~> 3.1)
erubis (~> 2.7.0)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
activejob (4.2.7.1)
activesupport (= 4.2.7.1)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
activejob (4.2.8)
activesupport (= 4.2.8)
globalid (>= 0.3.0)
activemodel (4.2.7.1)
activesupport (= 4.2.7.1)
activemodel (4.2.8)
activesupport (= 4.2.8)
builder (~> 3.1)
activerecord (4.2.7.1)
activemodel (= 4.2.7.1)
activesupport (= 4.2.7.1)
activerecord (4.2.8)
activemodel (= 4.2.8)
activesupport (= 4.2.8)
arel (~> 6.0)
activesupport (4.2.7.1)
activesupport (4.2.8)
i18n (~> 0.7)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
acts-as-taggable-on (3.5.0)
activerecord (>= 3.2, < 5)
acts_as_votable (0.10.0)
addressable (2.4.0)
ahoy_matey (1.5.3)
addressable (2.5.0)
public_suffix (~> 2.0, >= 2.0.2)
ahoy_matey (1.5.4)
addressable
browser (~> 2.0)
geocoder
@@ -52,14 +52,14 @@ GEM
safely_block (>= 0.1.1)
user_agent_parser
uuidtools
airbrussh (1.1.1)
airbrussh (1.1.2)
sshkit (>= 1.6.1, != 1.7.0)
akami (1.3.1)
gyoku (>= 0.4.0)
nokogiri
ancestry (2.2.2)
activerecord (>= 3.0.0)
arel (6.0.3)
arel (6.0.4)
ast (2.3.0)
babel-source (5.8.35)
babel-transpiler (0.7.0)
@@ -67,13 +67,13 @@ GEM
execjs (~> 2.0)
bcrypt (3.1.11)
browser (2.3.0)
builder (3.2.2)
bullet (5.4.2)
builder (3.2.3)
bullet (5.5.1)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.10.0)
byebug (9.0.6)
cancancan (1.15.0)
capistrano (3.5.0)
cancancan (1.16.0)
capistrano (3.7.2)
airbrussh (>= 1.0.0)
capistrano-harrow
i18n
@@ -83,12 +83,13 @@ GEM
capistrano (~> 3.1)
sshkit (~> 1.2)
capistrano-harrow (0.5.3)
capistrano-rails (1.1.8)
capistrano-rails (1.2.3)
capistrano (~> 3.1)
capistrano-bundler (~> 1.1)
capistrano3-delayed-job (1.7.2)
capistrano3-delayed-job (1.7.3)
capistrano (~> 3.0, >= 3.0.0)
capybara (2.7.1)
daemons (~> 1.2.4)
capybara (2.12.1)
addressable
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
@@ -113,7 +114,7 @@ GEM
execjs
coffee-script-source (1.10.0)
concurrent-ruby (1.0.4)
coveralls (0.8.17)
coveralls (0.8.19)
json (>= 1.8, < 3)
simplecov (~> 0.12.0)
term-ansicolor (~> 1.3)
@@ -153,12 +154,12 @@ GEM
errbase (0.0.3)
erubis (2.7.0)
execjs (2.7.0)
factory_girl (4.7.0)
factory_girl (4.8.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.7.0)
factory_girl (~> 4.7.0)
factory_girl_rails (4.8.0)
factory_girl (~> 4.8.0)
railties (>= 3.0.0)
faker (1.6.6)
faker (1.7.3)
i18n (~> 0.5)
faraday (0.9.2)
multipart-post (>= 1.2, < 3)
@@ -175,10 +176,10 @@ GEM
fuubar (2.2.0)
rspec-core (~> 3.0)
ruby-progressbar (~> 1.4)
geocoder (1.4.1)
geocoder (1.4.3)
globalid (0.3.7)
activesupport (>= 4.1.0)
groupdate (3.1.1)
groupdate (3.2.0)
activesupport (>= 3)
gyoku (1.3.1)
builder (>= 2.1.2)
@@ -187,8 +188,8 @@ GEM
htmlentities (4.3.4)
httpi (2.4.1)
rack
i18n (0.7.0)
i18n-tasks (0.9.6)
i18n (0.8.1)
i18n-tasks (0.9.12)
activesupport (>= 4.0.2)
ast (>= 2.1.0)
easy_translate (>= 0.5.0)
@@ -208,7 +209,7 @@ GEM
thor (>= 0.14, < 2.0)
jquery-ui-rails (5.0.5)
railties (>= 3.2.16)
json (1.8.3)
json (1.8.6)
jwt (1.5.4)
kaminari (0.17.0)
actionpack (>= 3.0.0)
@@ -221,7 +222,7 @@ GEM
addressable (~> 2.3)
letter_opener (1.4.1)
launchy (~> 2.2)
letter_opener_web (1.3.0)
letter_opener_web (1.3.1)
actionmailer (>= 3.2)
letter_opener (~> 1.0)
railties (>= 3.2)
@@ -239,9 +240,9 @@ GEM
multipart-post (2.0.0)
net-scp (1.2.1)
net-ssh (>= 2.6.5)
net-ssh (3.2.0)
newrelic_rpm (3.17.2.327)
nokogiri (1.6.8.1)
net-ssh (4.1.0)
newrelic_rpm (3.18.1.330)
nokogiri (1.7.0.1)
mini_portile2 (~> 2.1.0)
nori (2.6.0)
oauth (0.5.0)
@@ -271,20 +272,21 @@ GEM
json (~> 1.3)
omniauth-oauth (~> 1.1)
orm_adapter (0.5.0)
paranoia (2.2.0)
paranoia (2.2.1)
activerecord (>= 4.0, < 5.1)
parser (2.3.3.1)
parser (2.4.0.0)
ast (~> 2.2)
pg (0.19.0)
pg_search (1.0.6)
activerecord (>= 3.1)
activesupport (>= 3.1)
arel
poltergeist (1.10.0)
poltergeist (1.13.0)
capybara (~> 2.1)
cliver (~> 0.3.1)
websocket-driver (>= 0.2.0)
powerpack (0.1.1)
public_suffix (2.0.5)
quiet_assets (1.1.0)
railties (>= 3.1, < 5.0)
rack (1.6.5)
@@ -294,37 +296,37 @@ GEM
rack
rack-test (0.6.3)
rack (>= 1.0)
rails (4.2.7.1)
actionmailer (= 4.2.7.1)
actionpack (= 4.2.7.1)
actionview (= 4.2.7.1)
activejob (= 4.2.7.1)
activemodel (= 4.2.7.1)
activerecord (= 4.2.7.1)
activesupport (= 4.2.7.1)
rails (4.2.8)
actionmailer (= 4.2.8)
actionpack (= 4.2.8)
actionview (= 4.2.8)
activejob (= 4.2.8)
activemodel (= 4.2.8)
activerecord (= 4.2.8)
activesupport (= 4.2.8)
bundler (>= 1.3.0, < 2.0)
railties (= 4.2.7.1)
railties (= 4.2.8)
sprockets-rails
rails-assets-markdown-it (8.2.1)
rails-deprecated_sanitizer (1.0.3)
activesupport (>= 4.2.0.alpha)
rails-dom-testing (1.0.7)
rails-dom-testing (1.0.8)
activesupport (>= 4.2.0.beta, < 5.0)
nokogiri (~> 1.6.0)
nokogiri (~> 1.6)
rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.3)
loofah (~> 2.0)
railties (4.2.7.1)
actionpack (= 4.2.7.1)
activesupport (= 4.2.7.1)
railties (4.2.8)
actionpack (= 4.2.8)
activesupport (= 4.2.8)
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rainbow (2.1.0)
rainbow (2.2.1)
raindrops (0.17.0)
rake (12.0.0)
redcarpet (3.3.4)
redcarpet (3.4.0)
referer-parser (0.3.0)
request_store (1.3.1)
request_store (1.3.2)
responders (2.3.0)
railties (>= 4.2.0, < 5.1)
rinku (2.0.2)
@@ -347,8 +349,8 @@ GEM
rspec-mocks (~> 3.5.0)
rspec-support (~> 3.5.0)
rspec-support (3.5.0)
rubocop (0.45.0)
parser (>= 2.3.1.1, < 3.0)
rubocop (0.47.1)
parser (>= 2.3.3.1, < 3.0)
powerpack (~> 0.1)
rainbow (>= 1.99.1, < 3.0)
ruby-progressbar (~> 1.7)
@@ -358,7 +360,7 @@ GEM
capistrano (~> 3.0)
sshkit (>= 1.2)
safe_yaml (1.0.4)
safely_block (0.1.1)
safely_block (0.2.0)
errbase
sass (3.4.22)
sass-rails (5.0.6)
@@ -380,7 +382,7 @@ GEM
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.0)
sitemap_generator (5.2.0)
sitemap_generator (5.3.1)
builder (~> 3.0)
social-share-button (0.3.1)
coffee-rails
@@ -399,7 +401,7 @@ GEM
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
sshkit (1.11.4)
sshkit (1.12.0)
net-scp (>= 1.1.2)
net-ssh (>= 2.8.0)
term-ansicolor (1.4.0)
@@ -408,10 +410,10 @@ GEM
unicode-display_width (~> 1.1.1)
thor (0.19.4)
thread (0.2.2)
thread_safe (0.3.5)
thread_safe (0.3.6)
tilt (2.0.5)
timecop (0.8.1)
tins (1.13.0)
tins (1.13.2)
tolk (2.0.0)
rails (>= 4.0)
safe_yaml (>= 0.8.6)
@@ -424,9 +426,9 @@ GEM
tilt (>= 1.4, < 3)
tzinfo (1.2.2)
thread_safe (~> 0.1)
uglifier (3.0.4)
uglifier (3.1.6)
execjs (>= 0.3.0, < 3)
unicode-display_width (1.1.1)
unicode-display_width (1.1.3)
unicorn (5.2.0)
kgio (~> 2.6)
raindrops (~> 0.7)
@@ -442,7 +444,7 @@ GEM
activemodel (>= 4.2)
debug_inspector
railties (>= 4.2)
websocket-driver (0.6.4)
websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.2)
whenever (0.9.7)
@@ -459,18 +461,18 @@ DEPENDENCIES
ahoy_matey (~> 1.5.3)
ancestry (~> 2.2.2)
browser
bullet
bullet (~> 5.5.1)
byebug
cancancan
capistrano (= 3.5.0)
cancancan (~> 1.16.0)
capistrano (~> 3.7.2)
capistrano-bundler (~> 1.2)
capistrano-rails (= 1.1.8)
capistrano3-delayed-job (~> 1.0)
capybara
capistrano-rails (~> 1.2.3)
capistrano3-delayed-job (~> 1.7.3)
capybara (~> 2.12.1)
ckeditor (~> 4.2.2)
cocoon
coffee-rails (~> 4.2.1)
coveralls
coveralls (~> 0.8.19)
daemons
dalli
database_cleaner
@@ -479,13 +481,13 @@ DEPENDENCIES
devise-async
devise_security_extension
email_spec
factory_girl_rails
faker
factory_girl_rails (~> 4.8.0)
faker (~> 1.7.3)
foundation-rails (~> 6.2.4.0)
foundation_rails_helper (~> 2.0.0)
fuubar
groupdate (~> 3.1.0)
i18n-tasks
groupdate (~> 3.2.0)
i18n-tasks (~> 0.9.12)
initialjs-rails (= 0.2.0.4)
invisible_captcha (~> 0.9.2)
jquery-rails (~> 4.2.2)
@@ -493,29 +495,29 @@ DEPENDENCIES
kaminari
knapsack
launchy
letter_opener_web (~> 1.3.0)
newrelic_rpm (~> 3.17.2.327)
letter_opener_web (~> 1.3.1)
newrelic_rpm (~> 3.18.1.330)
omniauth
omniauth-facebook (~> 3.0.0)
omniauth-google-oauth2 (~> 0.4.0)
omniauth-twitter
paranoia (~> 2.2.0)
paranoia (~> 2.2.1)
pg (~> 0.19.0)
pg_search
poltergeist
poltergeist (~> 1.13.0)
quiet_assets
rails (= 4.2.7.1)
rails (= 4.2.8)
rails-assets-markdown-it!
redcarpet
redcarpet (~> 3.4.0)
responders (~> 2.3.0)
rinku (~> 2.0.2)
rollbar (~> 2.14.0)
rspec-rails (~> 3.5)
rubocop (~> 0.45.0)
rubocop (~> 0.47.1)
rvm1-capistrano3
sass-rails (~> 5.0, >= 5.0.4)
savon
sitemap_generator
sitemap_generator (~> 5.3.1)
social-share-button
spring
spring-commands-rspec
@@ -523,7 +525,10 @@ DEPENDENCIES
tolk (~> 2.0.0)
turbolinks
turnout (~> 2.4.0)
uglifier (>= 3.0.4)
uglifier (~> 3.1.6)
unicorn (~> 5.2.0)
web-console (= 3.3.0)
whenever
BUNDLED WITH
1.13.7

View File

@@ -1104,11 +1104,12 @@ img.avatar, img.admin-avatar, img.moderator-avatar, img.initialjs-avatar {
// --------------------
[class^="level-"] {
color: white;
color: black;
}
.is-author {
background: #008CCF;
background: #00A5F1;
color: black;
}
.is-association {
@@ -1167,6 +1168,9 @@ table {
.button.button-twitter,
.button.button-facebook,
.button.button-google {
background: white;
color: $text;
font-weight: bold;
height: $line-height*2;
line-height: $line-height*2;
padding: 0;
@@ -1174,9 +1178,11 @@ table {
}
.button.button-twitter {
background: #45B0E3;
background: #ECF7FC;
border-left: 3px solid #45B0E3;
&:before {
color: #45B0E3;
content: "f";
font-family: "icons" !important;
font-size: rem-calc(24);
@@ -1214,9 +1220,11 @@ table {
}
.button.button-facebook {
background: #3B5998;
background: #EBEEF4;
border-left: 3px solid #3B5998;
&:before {
color: #3B5998;
content: "A";
font-family: "icons" !important;
font-size: rem-calc(24);
@@ -1254,9 +1262,11 @@ table {
}
.button.button-google {
background: #DE4C34;
background: #FCEDEA;
border-left: 3px solid #DE4C34;
&:before {
color: #DE4C34;
content: "B";
font-family: "icons" !important;
font-size: rem-calc(24);

View File

@@ -457,7 +457,7 @@
}
.bullet {
color: $border;
color: $text;
}
.investment-project-show p, .budget-investment-show p {

View File

@@ -7,6 +7,11 @@ class Management::BudgetsController < Management::BaseController
def create_investments
@budgets = Budget.accepting.order(created_at: :desc).page(params[:page])
if current_manager_administrator?
@budgets += Budget.reviewing.order(created_at: :desc) +
Budget.selecting.order(created_at: :desc)
end
end
def support_investments
@@ -23,4 +28,8 @@ class Management::BudgetsController < Management::BaseController
check_verified_user t("management.budget_investments.alert.unverified_user")
end
def current_manager_administrator?
session[:manager]["login"].match("admin")
end
end

View File

@@ -259,7 +259,7 @@ class Budget
private
def set_denormalized_ids
self.group_id ||= self.heading.try(:group_id)
self.group_id = self.heading.try(:group_id) if self.heading_id_changed?
self.budget_id ||= self.heading.try(:group).try(:budget_id)
end
end

View File

@@ -1,6 +1,6 @@
<% if user_signed_in? %>
<li>
<%= link_to notifications_path, class: "notifications", accesskey: "n" do %>
<%= link_to notifications_path, class: "notifications" do %>
<span class="sr-only"><%= t("layouts.header.notifications") %></span>
<% if current_user.notifications_count > 0 %>
<span class="icon-circle" aria-hidden="true"></span>
@@ -12,19 +12,19 @@
<% end %>
</li>
<li>
<%= link_to(t("layouts.header.my_activity_link"), user_path(current_user), accesskey: "a") %>
<%= link_to t("layouts.header.my_activity_link"), user_path(current_user) %>
</li>
<li>
<%= link_to(t("layouts.header.my_account_link"), account_path, accesskey: "m") %>
<%= link_to t("layouts.header.my_account_link"), account_path %>
</li>
<li>
<%= link_to(t("devise_views.menu.login_items.logout"), destroy_user_session_path, method: :delete) %>
<%= link_to t("devise_views.menu.login_items.logout"), destroy_user_session_path, method: :delete %>
</li>
<% else %>
<li>
<%= link_to(t("devise_views.menu.login_items.login"), new_user_session_path) %>
<%= link_to t("devise_views.menu.login_items.login"), new_user_session_path %>
</li>
<li>
<%= link_to(t("devise_views.menu.login_items.signup"), new_user_registration_path, class: "button") %>
<%= link_to t("devise_views.menu.login_items.signup"), new_user_registration_path, class: "button" %>
</li>
<% end %>

View File

@@ -11,18 +11,18 @@
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<div class="row">
<div class="small-12 column">
<%= f.email_field :email, autofocus: true, placeholder: t("devise_views.sessions.new.email_label"), tabindex: "1" %>
<%= f.email_field :email, autofocus: true, placeholder: t("devise_views.sessions.new.email_label") %>
</div>
<div class="small-12 column">
<%= link_to t("devise_views.shared.links.new_password"), new_password_path(resource_name), class: "float-right", tabindex: "3" %>
<%= f.password_field :password, autocomplete: "off", placeholder: t("devise_views.sessions.new.password_label"), tabindex: "2" %>
<%= f.password_field :password, autocomplete: "off", placeholder: t("devise_views.sessions.new.password_label") %>
<%= link_to t("devise_views.shared.links.new_password"), new_password_path(resource_name), class: "float-right" %>
</div>
<% if devise_mapping.rememberable? -%>
<div class="small-12 column">
<%= f.label :remember_me do %>
<%= f.check_box :remember_me, title: t('devise_views.sessions.new.remember_me'), label: false, tabindex: "4" %>
<%= f.check_box :remember_me, title: t('devise_views.sessions.new.remember_me'), label: false %>
<span class="checkbox"><%= t("devise_views.sessions.new.remember_me") %></span>
<% end %>
</div>
@@ -35,5 +35,3 @@
<% end %>
<%= render "devise/shared/links" %>

View File

@@ -21,7 +21,7 @@
<div id="responsive-menu">
<div class="top-bar-title">
<%= link_to root_path, class: "hide-for-small-only", accesskey: "/" do %>
<%= link_to root_path, class: "hide-for-small-only", accesskey: "0" do %>
<%= image_tag('logo_header.png', class: 'hide-for-small-only float-left', size: '80x80', alt: t("layouts.header.logo")) %>
<%= setting['org_name'] %>
<% end %>

View File

@@ -20,9 +20,11 @@
type: "image/png" %>
<%= content_for :social_media_meta_tags %>
<%= setting['per_page_code'].try(:html_safe) %>
<%= setting['per_page_code_head'].try(:html_safe) %>
</head>
<body>
<%= setting['per_page_code_body'].try(:html_safe) %>
<h1 class="sr-only"><%= setting['org_name'] %></h1>
<div class="wrapper">

View File

@@ -19,48 +19,37 @@
<div class="small-12 medium-6">
<table>
<caption class="sr-only">Atajos de teclado para el menú de navegación</caption>
<thead>
<tr>
<th class="text-center">Tecla</th>
<th>Página</th>
<th scope="col" class="text-center">Tecla</th>
<th scope="col">Página</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-center">/</td>
<td class="text-center">0</td>
<td>Inicio</td>
</tr>
<tr>
<td class="text-center">D</td>
<td class="text-center">1</td>
<td>Debates</td>
</tr>
<tr>
<td class="text-center">P</td>
<td class="text-center">2</td>
<td>Propuestas</td>
</tr>
<tr>
<td class="text-center">L</td>
<td>Procesos legislativos</td>
<td class="text-center">3</td>
<td>Votaciones</td>
</tr>
<tr>
<td class="text-center">S</td>
<td class="text-center">4</td>
<td>Presupuestos participativos</td>
</tr>
<tr>
<td class="text-center">I</td>
<td>Más información</td>
</tr>
<tr>
<td class="text-center">N</td>
<td>Notificaciones</td>
</tr>
<tr>
<td class="text-center">A</td>
<td>Mi actividad</td>
</tr>
<tr>
<td class="text-center">M</td>
<td>Mi cuenta</td>
<td class="text-center">5</td>
<td>Procesos legislativos</td>
</tr>
</tbody>
</table>
@@ -70,10 +59,11 @@
<div class="small-12 medium-6">
<table>
<caption class="sr-only">Combinación de teclas dependiendo del sistema operativo y navegador</caption>
<thead>
<tr>
<th>Navegador</th>
<th>Combinación de teclas</th>
<th scope="col">Navegador</th>
<th scope="col">Combinación de teclas</th>
</tr>
</thead>
<tbody>
@@ -108,8 +98,8 @@
<table>
<thead>
<tr>
<th>Navegador</th>
<th>Acción a realizar </th>
<th scope="col">Navegador</th>
<th scope="col">Acción a realizar </th>
</tr>
</thead>
<tbody>

View File

@@ -37,7 +37,6 @@
<%= text_field_tag 'advanced_search[date_min]',
params[:advanced_search].try(:[], :date_min),
type: "date",
placeholder: t("shared.advanced_search.date_placeholder"),
class: 'js-calendar' %>
</div>
<div class='small-12 large-6 column'>
@@ -47,7 +46,6 @@
<%= text_field_tag 'advanced_search[date_max]',
params[:advanced_search].try(:[], :date_max),
type: "date",
placeholder: t("shared.advanced_search.date_placeholder"),
class: 'js-calendar' %>
</div>
</div>

View File

@@ -5,20 +5,20 @@
<%= layout_menu_link_to t("layouts.header.debates"),
debates_path,
controller_name == 'debates',
accesskey: "d" %>
accesskey: "1" %>
</li>
<% end %>
<li>
<%= layout_menu_link_to t("layouts.header.proposals"),
proposals_path,
controller_name == 'proposals',
accesskey: "p" %>
accesskey: "2" %>
</li>
<li>
<%= layout_menu_link_to t("layouts.header.proposal_ballot"),
proposal_ballots_path,
controller_name == 'proposal_ballots',
accesskey: "v" %>
accesskey: "3" %>
</li>
<% if feature?(:legislation) %>
<li>
@@ -41,7 +41,7 @@
<%= layout_menu_link_to t("layouts.header.budgets"),
budgets_path,
controller_name == "budgets" || controller_name == "investments",
accesskey: "b" %>
accesskey: "4" %>
</li>
<% end %>
</ul>

View File

@@ -5,8 +5,7 @@
<% taggable.tag_list_with_limit(limit).each do |tag| %>
<li class="inline-block">
<%= link_to sanitize(tag.name),
taggables_path(taggable.class.name.underscore, tag.name),
search: tag.name %></li>
taggables_path(taggable.class.name.underscore, tag.name) %></li>
<% end %>
<% if taggable.tags_count_out_of_limit(limit) > 0 %>

View File

@@ -2,8 +2,7 @@
<li>
<%= link_to t("layouts.header.more_information"),
page_path('more_information'),
class: ("selected" if current_page?("/more_information")),
accesskey: "i" %>
class: ("selected" if current_page?("/more_information")) %>
</li>
<li>
<%= link_to t("layouts.header.external_link_transparency"),

View File

@@ -19,7 +19,7 @@
<%= f.label :username %>
<p class="note"><%= t("devise_views.users.registrations.new.username_note") %></p>
<%= f.text_field :username, maxlength: User.username_max_length, placeholder: t("devise_views.users.registrations.new.username_label"), label: false %>
<%= f.text_field :username, autofocus: true, maxlength: User.username_max_length, placeholder: t("devise_views.users.registrations.new.username_label"), label: false %>
<%= f.invisible_captcha :family_name %>

View File

@@ -1354,7 +1354,8 @@ fr:
official_level_3_name: Niveau 3 personne officielle
official_level_4_name: Niveau 4 personne officielle
official_level_5_name: Niveau 5 personne officielle
per_page_code: Code à inclure dans chaque page
per_page_code_head: "Code à inclure dans chaque page (<head>)"
per_page_code_body: "Code à inclure dans chaque page (<body>)"
proposal_code_prefix: Préfixe pour les codes de propositions
votes_for_proposal_success: Nombre de votes nécessaires pour l'approbation d'une
proposition

View File

@@ -1370,7 +1370,8 @@ pt-BR:
official_level_3_name: Nível 3 coordenador público
official_level_4_name: Nível 4 coordenador público
official_level_5_name: Nível 5 coordenador público
per_page_code: Código a ser incluído em cada página
per_page_code_head: "Código a ser incluído em cada página (<head>)"
per_page_code_body: "Código a ser incluído em cada página (<body>)"
proposal_code_prefix: Prefixo para códigos de Proposta
votes_for_proposal_success: Número de votos necessários para aprovar uma Proposta
shared:

View File

@@ -13,7 +13,8 @@ en:
votes_for_proposal_success: "Number of votes necessary for approval of a Proposal"
months_to_archive_proposals: "Months to archive Proposals"
email_domain_for_officials: "Email domain for public officials"
per_page_code: "Code to be included on every page"
per_page_code_head: "Code to be included on every page (<head>)"
per_page_code_body: "Code to be included on every page (<body>)"
twitter_handle: "Twitter handle"
twitter_hashtag: "Twitter hashtag"
facebook_handle: "Facebook handle"

View File

@@ -13,7 +13,8 @@ es:
votes_for_proposal_success: "Número de votos necesarios para aprobar una Propuesta"
months_to_archive_proposals: "Meses para archivar las Propuestas"
email_domain_for_officials: "Dominio de email para cargos públicos"
per_page_code: "Código a incluir en cada página"
per_page_code_head: "Código a incluir en cada página (<head>)"
per_page_code_body: "Código a incluir en cada página (<body>)"
twitter_handle: "Usuario de Twitter"
twitter_hashtag: "Hashtag para Twitter"
facebook_handle: "Identificador de Facebook"

View File

@@ -33,7 +33,8 @@ Setting.create(key: 'feature.facebook_login', value: "true")
Setting.create(key: 'feature.google_login', value: "true")
Setting.create(key: 'feature.signature_sheets', value: "true")
Setting.create(key: 'feature.legislation', value: "true")
Setting.create(key: 'per_page_code', value: "")
Setting.create(key: 'per_page_code_head', value: "")
Setting.create(key: 'per_page_code_body', value: "")
Setting.create(key: 'comments_body_max_length', value: '1000')
Setting.create(key: 'mailer_from_name', value: 'Consul')
Setting.create(key: 'mailer_from_address', value: 'noreply@consul.dev')

View File

@@ -38,8 +38,11 @@ Setting["months_to_archive_proposals"] = 12
# Emails under the domain's subdomains will also be included
Setting["email_domain_for_officials"] = ''
# Code to be included at the top (header) of every page (useful for tracking)
Setting['per_page_code'] = ''
# Code to be included at the top (inside <head>) of every page (useful for tracking)
Setting['per_page_code_head'] = ''
# Code to be included at the top (inside <body>) of every page
Setting['per_page_code_body'] = ''
# Social settings
Setting["twitter_handle"] = nil

View File

@@ -137,6 +137,61 @@ feature 'Budget Investments' do
end
end
scenario "Listing - managers can see budgets in accepting phase" do
accepting_budget = create(:budget, phase: "accepting")
reviewing_budget = create(:budget, phase: "reviewing")
selecting_budget = create(:budget, phase: "selecting")
valuating_budget = create(:budget, phase: "valuating")
balloting_budget = create(:budget, phase: "balloting")
reviewing_ballots_budget = create(:budget, phase: "reviewing_ballots")
finished = create(:budget, phase: "finished")
user = create(:user, :level_two)
login_managed_user(user)
click_link "Create budget investment"
expect(page).to have_content(accepting_budget.name)
expect(page).to_not have_content(reviewing_budget.name)
expect(page).to_not have_content(selecting_budget.name)
expect(page).to_not have_content(valuating_budget.name)
expect(page).to_not have_content(balloting_budget.name)
expect(page).to_not have_content(reviewing_ballots_budget.name)
expect(page).to_not have_content(finished.name)
end
scenario "Listing - admins can see budgets in accepting, reviewing and selecting phases" do
accepting_budget = create(:budget, phase: "accepting")
reviewing_budget = create(:budget, phase: "reviewing")
selecting_budget = create(:budget, phase: "selecting")
valuating_budget = create(:budget, phase: "valuating")
balloting_budget = create(:budget, phase: "balloting")
reviewing_ballots_budget = create(:budget, phase: "reviewing_ballots")
finished = create(:budget, phase: "finished")
visit root_path
click_link "Sign out"
admin = create(:administrator)
login_as(admin.user)
user = create(:user, :level_two)
login_managed_user(user)
visit management_sign_in_path
click_link "Create budget investment"
expect(page).to have_content(accepting_budget.name)
expect(page).to have_content(reviewing_budget.name)
expect(page).to have_content(selecting_budget.name)
expect(page).to_not have_content(valuating_budget.name)
expect(page).to_not have_content(balloting_budget.name)
expect(page).to_not have_content(reviewing_ballots_budget.name)
expect(page).to_not have_content(finished.name)
end
context "Supporting" do
scenario 'Supporting budget investments on behalf of someone in index view', :js do

View File

@@ -35,6 +35,25 @@ describe Budget::Investment do
expect(investment.description).to eq("alert('danger');")
end
it "set correct group and budget ids" do
budget = create(:budget)
group_1 = create(:budget_group, budget: budget)
group_2 = create(:budget_group, budget: budget)
heading_1 = create(:budget_heading, group: group_1)
heading_2 = create(:budget_heading, group: group_2)
investment = create(:budget_investment, heading: heading_1)
expect(investment.budget_id).to eq budget.id
expect(investment.group_id).to eq group_1.id
investment.update(heading: heading_2)
expect(investment.budget_id).to eq budget.id
expect(investment.group_id).to eq group_2.id
end
describe "#unfeasibility_explanation" do
it "should be valid if valuation not finished" do
investment.unfeasibility_explanation = ""