Merge branch 'master' into polls

This commit is contained in:
Alberto
2017-04-06 14:16:49 +02:00
committed by GitHub
118 changed files with 1294 additions and 748 deletions

View File

@@ -12,6 +12,10 @@ require 'capistrano/delayed_job'
require 'whenever/capistrano'
require 'rvm1/capistrano3'
#SCM: Git
require "capistrano/scm/git"
install_plugin Capistrano::SCM::Git
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }

54
Gemfile
View File

@@ -1,20 +1,20 @@
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'
gem 'pg', '~> 0.20.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.9'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2.1'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
# Use jquery as the JavaScript library
gem 'jquery-rails', '~> 4.2.2'
gem 'jquery-rails', '~> 4.3.1'
gem 'jquery-ui-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
@@ -28,10 +28,10 @@ gem 'devise_security_extension'
# gem 'bcrypt', '~> 3.1.7'
gem 'omniauth'
gem 'omniauth-twitter'
gem 'omniauth-facebook', '~> 3.0.0'
gem 'omniauth-facebook', '~> 4.0.0'
gem 'omniauth-google-oauth2', '~> 0.4.0'
gem 'kaminari'
gem 'kaminari', '~> 1.0.1'
gem 'ancestry', '~> 2.2.2'
gem 'acts-as-taggable-on'
gem 'responders', '~> 2.3.0'
@@ -40,30 +40,30 @@ 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 'social-share-button'
gem 'cancancan', '~> 1.16.0'
gem 'social-share-button', '~> 0.10'
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'
gem 'rollbar', '~> 2.14.0'
gem 'rollbar', '~> 2.14.1'
gem 'delayed_job_active_record', '~> 4.1.0'
gem 'daemons'
gem 'devise-async'
gem 'newrelic_rpm', '~> 3.17.2.327'
gem 'newrelic_rpm', '~> 4.0.0.332'
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 'ahoy_matey', '~> 1.5.5'
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'
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
@@ -72,28 +72,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.13.0'
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.8.0', 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.14.0'
gem 'coveralls', '~> 0.8.19', require: false
gem 'email_spec'
end

View File

@@ -1,46 +1,46 @@
GEM
remote: https://rubygems.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-taggable-on (4.0.0)
activerecord (>= 4.0)
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.5)
addressable
browser (~> 2.0)
geocoder
@@ -51,14 +51,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)
@@ -66,28 +66,27 @@ 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.8.0)
airbrussh (>= 1.0.0)
capistrano-harrow
i18n
rake (>= 10.0.0)
sshkit (>= 1.9.0)
capistrano-bundler (1.2.0)
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.13.0)
addressable
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
@@ -109,9 +108,9 @@ GEM
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.10.0)
concurrent-ruby (1.0.4)
coveralls (0.8.17)
coffee-script-source (1.12.2)
concurrent-ruby (1.0.5)
coveralls (0.8.19)
json (>= 1.8, < 3)
simplecov (~> 0.12.0)
term-ansicolor (~> 1.3)
@@ -151,14 +150,14 @@ 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)
faraday (0.11.0)
multipart-post (>= 1.2, < 3)
foundation-rails (6.2.4.0)
railties (>= 3.1.0)
@@ -173,20 +172,20 @@ 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)
hashie (3.4.6)
hashie (3.5.5)
highline (1.7.8)
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)
@@ -200,26 +199,35 @@ GEM
railties (>= 3.1, < 6.0)
invisible_captcha (0.9.2)
rails (>= 3.2.0)
jquery-rails (4.2.2)
jquery-rails (4.3.1)
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
jquery-ui-rails (5.0.5)
jquery-ui-rails (6.0.1)
railties (>= 3.2.16)
json (1.8.3)
jwt (1.5.4)
kaminari (0.17.0)
actionpack (>= 3.0.0)
activesupport (>= 3.0.0)
json (2.0.3)
jwt (1.5.6)
kaminari (1.0.1)
activesupport (>= 4.1.0)
kaminari-actionview (= 1.0.1)
kaminari-activerecord (= 1.0.1)
kaminari-core (= 1.0.1)
kaminari-actionview (1.0.1)
actionview
kaminari-core (= 1.0.1)
kaminari-activerecord (1.0.1)
activerecord
kaminari-core (= 1.0.1)
kaminari-core (1.0.1)
kgio (2.11.0)
knapsack (1.13.1)
knapsack (1.13.2)
rake
timecop (>= 0.1.0)
launchy (2.4.3)
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)
@@ -233,26 +241,26 @@ GEM
mini_portile2 (2.1.0)
minitest (5.10.1)
multi_json (1.12.1)
multi_xml (0.5.5)
multi_xml (0.6.0)
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 (4.0.0.332)
nokogiri (1.7.1)
mini_portile2 (~> 2.1.0)
nori (2.6.0)
oauth (0.5.0)
oauth2 (1.0.0)
faraday (>= 0.8, < 0.10)
oauth (0.5.1)
oauth2 (1.3.1)
faraday (>= 0.8, < 0.12)
jwt (~> 1.0)
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (~> 1.2)
omniauth (1.3.1)
hashie (>= 1.2, < 4)
rack (>= 1.0, < 3)
omniauth-facebook (3.0.0)
rack (>= 1.2, < 3)
omniauth (1.6.1)
hashie (>= 3.4.6, < 3.6.0)
rack (>= 1.6.2, < 3)
omniauth-facebook (4.0.0)
omniauth-oauth2 (~> 1.2)
omniauth-google-oauth2 (0.4.1)
jwt (~> 1.5.2)
@@ -265,24 +273,25 @@ GEM
omniauth-oauth2 (1.4.0)
oauth2 (~> 1.0)
omniauth (~> 1.2)
omniauth-twitter (1.2.1)
json (~> 1.3)
omniauth-twitter (1.4.0)
omniauth-oauth (~> 1.1)
rack
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)
pg (0.20.0)
pg_search (2.0.1)
activerecord (>= 4.2)
activesupport (>= 4.2)
arel (>= 6)
poltergeist (1.14.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)
@@ -292,40 +301,40 @@ 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-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)
rollbar (2.14.0)
rollbar (2.14.1)
multi_json
rspec-core (3.5.4)
rspec-support (~> 3.5.0)
@@ -344,8 +353,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)
@@ -355,9 +364,9 @@ 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 (3.4.23)
sass-rails (5.0.6)
railties (>= 4.0.0, < 6)
sass (~> 3.1)
@@ -377,12 +386,12 @@ 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)
social-share-button (0.10.0)
coffee-rails
sass-rails
spring (1.7.2)
spring (2.0.1)
activesupport (>= 4.2)
spring-commands-rspec (1.0.4)
spring (>= 0.9.1)
sprockets (3.7.1)
@@ -396,7 +405,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)
@@ -405,10 +414,10 @@ GEM
unicode-display_width (~> 1.1.1)
thor (0.19.4)
thread (0.2.2)
thread_safe (0.3.5)
tilt (2.0.5)
thread_safe (0.3.6)
tilt (2.0.7)
timecop (0.8.1)
tins (1.13.0)
tins (1.13.2)
tolk (2.0.0)
rails (>= 4.0)
safe_yaml (>= 0.8.6)
@@ -421,9 +430,9 @@ GEM
tilt (>= 1.4, < 3)
tzinfo (1.2.2)
thread_safe (~> 0.1)
uglifier (3.0.4)
uglifier (3.1.9)
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)
@@ -439,7 +448,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)
@@ -453,20 +462,20 @@ PLATFORMS
DEPENDENCIES
acts-as-taggable-on
acts_as_votable
ahoy_matey (~> 1.5.3)
ahoy_matey (~> 1.5.5)
ancestry (~> 2.2.2)
browser
bullet
bullet (~> 5.5.1)
byebug
cancancan
capistrano (= 3.5.0)
cancancan (~> 1.16.0)
capistrano (~> 3.8.0)
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.13.0)
ckeditor (~> 4.2.2)
coffee-rails (~> 4.2.1)
coveralls
coveralls (~> 0.8.19)
daemons
dalli
database_cleaner
@@ -475,50 +484,53 @@ 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)
jquery-rails (~> 4.3.1)
jquery-ui-rails
kaminari
kaminari (~> 1.0.1)
knapsack
launchy
letter_opener_web (~> 1.3.0)
newrelic_rpm (~> 3.17.2.327)
letter_opener_web (~> 1.3.1)
newrelic_rpm (~> 4.0.0.332)
omniauth
omniauth-facebook (~> 3.0.0)
omniauth-facebook (~> 4.0.0)
omniauth-google-oauth2 (~> 0.4.0)
omniauth-twitter
paranoia (~> 2.2.0)
pg (~> 0.19.0)
paranoia (~> 2.2.1)
pg (~> 0.20.0)
pg_search
poltergeist
poltergeist (~> 1.14.0)
quiet_assets
rails (= 4.2.7.1)
redcarpet
rails (= 4.2.8)
redcarpet (~> 3.4.0)
responders (~> 2.3.0)
rinku (~> 2.0.2)
rollbar (~> 2.14.0)
rollbar (~> 2.14.1)
rspec-rails (~> 3.5)
rubocop (~> 0.45.0)
rubocop (~> 0.47.1)
rvm1-capistrano3
sass-rails (~> 5.0, >= 5.0.4)
savon
sitemap_generator
social-share-button
sitemap_generator (~> 5.3.1)
social-share-button (~> 0.10)
spring
spring-commands-rspec
sprockets (~> 3.7.1)
tolk (~> 2.0.0)
turbolinks
turnout (~> 2.4.0)
uglifier (>= 3.0.4)
uglifier (~> 3.1.9)
unicorn (~> 5.2.0)
web-console (= 3.3.0)
whenever
BUNDLED WITH
1.13.7

View File

@@ -1,15 +1,19 @@
![Logo of Consul]
(https://raw.githubusercontent.com/consul/consul/master/public/consul_logo.png)
![Logo of Consul](https://raw.githubusercontent.com/consul/consul/master/public/consul_logo.png)
# Consul
Citizen Participation and Open Government Application
[![Join the chat at https://gitter.im/consul/consul](https://badges.gitter.im/consul/consul.svg)](https://gitter.im/consul/consul?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Build Status](https://travis-ci.org/consul/consul.svg?branch=master)](https://travis-ci.org/consul/consul)
[![Code Climate](https://codeclimate.com/github/consul/consul/badges/gpa.svg)](https://codeclimate.com/github/consul/consul)
[![Dependency Status](https://gemnasium.com/consul/consul.svg)](https://gemnasium.com/consul/consul)
[![Coverage Status](https://coveralls.io/repos/github/consul/consul/badge.svg?branch=master)](https://coveralls.io/github/consul/consul?branch=master)
[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](http://www.gnu.org/licenses/agpl-3.0)
[![Accessibility conformance](https://img.shields.io/badge/accessibility-WAI:AA-green.svg)](https://www.w3.org/WAI/eval/Overview)
[![A11y issues checked with Rocket Validator](https://rocketvalidator.com/badges/checked_with_rocket_validator.svg?url=https://rocketvalidator.com)](https://rocketvalidator.com/opensource)
[![Join the chat at https://gitter.im/consul/consul](https://badges.gitter.im/consul/consul.svg)](https://gitter.im/consul/consul?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
This is the opensource code repository of the eParticipation website originally developed for the Madrid City government eParticipation website

View File

@@ -1,15 +1,20 @@
![Logotipo de Consul]
(https://raw.githubusercontent.com/consul/consul/master/public/consul_logo.png)
![Logotipo de Consul](https://raw.githubusercontent.com/consul/consul/master/public/consul_logo.png)
# Consul
Aplicación de Participación Ciudadana y Gobierno Abierto
[![Join the chat at https://gitter.im/consul/consul](https://badges.gitter.im/consul/consul.svg)](https://gitter.im/consul/consul?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Build Status](https://travis-ci.org/consul/consul.svg?branch=master)](https://travis-ci.org/consul/consul)
[![Code Climate](https://codeclimate.com/github/consul/consul/badges/gpa.svg)](https://codeclimate.com/github/consul/consul)
[![Dependency Status](https://gemnasium.com/consul/consul.svg)](https://gemnasium.com/consul/consul)
[![Coverage Status](https://coveralls.io/repos/github/consul/consul/badge.svg?branch=master)](https://coveralls.io/github/consul/consul?branch=master)
[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](http://www.gnu.org/licenses/agpl-3.0)
[![Accessibility conformance](https://img.shields.io/badge/accessibility-WAI:AA-green.svg)](https://www.w3.org/WAI/eval/Overview)
[![A11y issues checked with Rocket Validator](https://rocketvalidator.com/badges/checked_with_rocket_validator.svg?url=https://rocketvalidator.com)](https://rocketvalidator.com/opensource)
[![Join the chat at https://gitter.im/consul/consul](https://badges.gitter.im/consul/consul.svg)](https://gitter.im/consul/consul?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
Este es el repositorio de código abierto de la Aplicación de Participación Ciudadana Consul, creada originariamente por el Ayuntamiento de Madrid.

Binary file not shown.

View File

@@ -56,6 +56,9 @@
<glyph glyph-name="arrow-right" unicode="&#85;" d="M329 256c0-5-2-9-5-13l-128-128c-4-3-8-5-13-5-5 0-9 2-13 5-4 4-5 8-5 13l0 256c0 5 1 9 5 13 4 3 8 5 13 5 5 0 9-2 13-5l128-128c3-4 5-8 5-13z"/>
<glyph glyph-name="check-circle" unicode="&#86;" d="M256 480c-124 0-224-100-224-224 0-124 100-224 224-224 124 0 224 100 224 224 0 124-100 224-224 224z m115-149l-139-179c-1-1-3-3-5-3-3 0-4 1-5 3-2 1-79 76-79 76l-2 1c0 1-1 2-1 3 0 2 1 3 1 4 1 0 1 0 1 1 8 8 24 24 25 25 1 2 2 3 4 3 3 0 5-2 6-3 1-1 45-43 45-43l111 143c1 0 2 1 4 1 1 0 2 0 3-1l31-24c0-1 1-3 1-4 0-1 0-2-1-3z"/>
<glyph glyph-name="arrow-top" unicode="&#87;" d="M402 165c0-5-2-10-5-13-4-4-8-6-13-6l-256 0c-5 0-9 2-13 6-3 3-5 8-5 13 0 5 2 9 5 12l128 128c4 4 8 6 13 6 5 0 9-2 13-6l128-128c3-3 5-7 5-12z"/>
<glyph glyph-name="help-1" unicode="&#88;" d="M345 435c-27 21-58 28-98 28-29 0-55-6-75-20-30-20-44-54-44-108l77 0c0 14-2 30 7 43 8 13 20 24 40 24 20 0 31-6 41-18 8-11 11-23 11-36 0-12-5-22-12-32-4-5-9-10-15-15 0 0-42-25-56-48-11-18-15-40-16-66 0-2 0-5 7-5 7 0 56 0 62 0 6 0 7 4 7 6 0 9 2 24 3 29 4 11 10 20 20 28l21 14c18 15 33 26 40 36 11 15 19 34 19 57 0 36-13 64-39 83z m-103-293c-26 1-47-17-48-46-1-28 19-46 45-47 27-1 48 17 49 45 1 28-19 47-46 48z"/>
<glyph glyph-name="checkmark-circle" unicode="&#89;" d="M171 296l-29-30 93-93 208 208-29 29-179-178z m251-40c0-92-74-166-166-166-92 0-166 74-166 166 0 92 74 166 166 166 16 0 31-2 46-6l32 32c-24 11-50 16-78 16-114 0-208-94-208-208 0-114 94-208 208-208 114 0 208 94 208 208z"/>
<glyph glyph-name="minus-square" unicode="&#88;" d="M357 402c17 0 32-6 45-18 12-13 19-28 19-46l0-201c0-17-7-32-19-45-13-13-28-19-45-19l-202 0c-17 0-32 6-45 19-12 13-19 28-19 45l0 201c0 18 7 33 19 46 13 12 28 18 45 18z m27-265l0 201c0 8-3 14-8 20-5 5-12 8-19 8l-202 0c-7 0-14-3-19-8-5-6-8-12-8-20l0-201c0-7 3-14 8-19 5-6 12-8 19-8l202 0c7 0 14 2 19 8 5 5 8 12 8 19z m-46 119c3 0 5-1 7-3 2-1 2-3 2-6l0-18c0-3 0-5-2-7-2-2-4-3-7-3l-164 0c-3 0-5 1-7 3-2 2-2 4-2 7l0 18c0 3 0 5 2 6 2 2 4 3 7 3z"/>
<glyph glyph-name="plus-square" unicode="&#90;" d="M347 247l0-18c0-3 0-5-2-7-2-2-4-3-7-3l-64 0 0-64c0-2-1-4-2-6-2-2-4-3-7-3l-18 0c-3 0-5 1-7 3-1 2-2 4-2 6l0 64-64 0c-3 0-5 1-7 3-2 2-2 4-2 7l0 18c0 3 0 5 2 6 2 2 4 3 7 3l64 0 0 64c0 3 1 5 2 7 2 1 4 2 7 2l18 0c3 0 5-1 7-2 1-2 2-4 2-7l0-64 64 0c3 0 5-1 7-3 2-1 2-3 2-6z m37-110l0 201c0 8-3 14-8 20-5 5-12 8-19 8l-202 0c-7 0-14-3-19-8-5-6-8-12-8-20l0-201c0-7 3-14 8-19 5-6 12-8 19-8l202 0c7 0 14 2 19 8 5 5 8 12 8 19z m37 201l0-201c0-17-7-32-19-45-13-13-28-19-45-19l-202 0c-17 0-32 6-45 19-12 13-19 28-19 45l0 201c0 18 7 33 19 46 13 12 28 18 45 18l202 0c17 0 32-6 45-18 12-13 19-28 19-46z"/>
<glyph glyph-name="expand" unicode="&#48;" d="M26 168l-26-158c0-2 1-5 3-7 0 0 0 0 0 0 2-2 5-3 7-3l158 27c3 0 6 3 7 6 1 3 0 7-3 9l-30 31 82 82c4 4 4 9 0 13l-57 57c-3 3-9 3-12 0l-83-83-31 31c-2 2-5 3-9 2-3-1-5-4-6-7z m460 176l26 158c0 2-1 5-3 7 0 0 0 0 0 0-2 2-5 3-7 3l-158-27c-3 0-6-3-7-6-1-3 0-7 3-9l30-31-82-82c-4-4-4-9 0-13l57-57c3-3 9-3 12 0l83 83 31-31c2-2 5-3 9-2 3 1 5 4 6 7z"/>
<glyph glyph-name="telegram" unicode="&#49;" d="M504 509c6-5 9-11 8-18l-73-439c-1-6-4-10-10-13-2-2-5-2-8-2-3 0-5 0-7 1l-130 53-69-84c-3-5-8-7-14-7-2 0-4 0-6 1-4 1-7 4-9 7-2 3-3 6-3 10l0 100 247 303-306-265-113 47c-7 2-10 7-11 15 0 8 3 14 9 17l476 274c2 2 5 3 9 3 4 0 7-1 10-3z"/>
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -12,8 +12,8 @@
//
//= require jquery
//= require jquery_ujs
//= require jquery-ui/datepicker
//= require jquery-ui/datepicker-es
//= require jquery-ui/widgets/datepicker
//= require jquery-ui/i18n/datepicker-es
//= require foundation
//= require turbolinks
//= require ckeditor/loader

View File

@@ -6,6 +6,7 @@
@import "admin";
@import "layout";
@import "participation";
@import "pages";
@import "custom";
@import "c3";
@import "annotator.min";

View File

@@ -190,3 +190,6 @@
.icon-checkmark-circle:before {
content: "\59";
}
.icon-telegram:before {
content: "\31";
}

View File

@@ -70,6 +70,11 @@ a {
}
}
.button.hollow {
border: 1px solid $link;
color: $link;
}
.postfix.button {
padding: 0;
}
@@ -1128,11 +1133,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 {
@@ -1190,7 +1196,11 @@ table {
.button.button-twitter,
.button.button-facebook,
.button.button-google {
.button.button-google,
.button.button-telegram {
background: white;
color: $text;
font-weight: bold;
height: $line-height*2;
line-height: $line-height*2;
padding: 0;
@@ -1198,9 +1208,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);
@@ -1238,9 +1250,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);
@@ -1278,9 +1292,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);
@@ -1317,6 +1333,48 @@ table {
}
}
.button.button-telegram {
background: #ECF7FC;
border-left: 3px solid #0088cc;
&:before {
color: #0088cc;
content: "1";
font-family: "icons" !important;
font-size: rem-calc(24);
left: 0;
line-height: $line-height*2;
padding: 0 rem-calc(20);
position: absolute;
top: 0;
}
}
.ssb-telegram {
background: #0088cc;
background-image: none !important;
color: white;
height: $line-height*2 !important;
position: relative;
width: $line-height*2 !important;
&:before {
content: "1";
font-family: "icons" !important;
font-size: rem-calc(24);
left: 50%;
line-height: $line-height*2;
margin-left: rem-calc(-11);
position: absolute;
top: 0;
}
&:hover, &:focus {
background: white;
color: #40A2D1;
}
}
.social {
a {
@@ -1408,6 +1466,30 @@ table {
color: #CE3E26;
}
}
.ssb-telegram {
background: #0088cc;
color: white;
height: $line-height;
position: relative;
width: $line-height*2;
&:before {
content: "A";
font-family: "icons" !important;
font-size: rem-calc(24);
left: 50%;
line-height: $line-height*2;
margin-left: rem-calc(-11);
position: absolute;
top: 0;
}
&:hover, &:focus {
background: white;
color: #40A2D1;
}
}
}
// 13. Pages

View File

@@ -0,0 +1,111 @@
// Table of Contents
//
// 01. Header
// 02. Navigation
// 03. Content
// 04. Sidebar
//
// 01. Header
// ----------------------
.jumbo {
margin-bottom: $line-height;
margin-top: rem-calc(-24);
padding-bottom: $line-height;
padding-top: $line-height;
&.light {
background: #ECF0F1;
}
}
.lead {
font-size: rem-calc(24);
}
// 03. Navigation
// ----------------------
.menu-pages {
list-style-type: none;
margin: 0;
li {
display: block;
@include breakpoint(medium) {
display: inline-block;
margin-right: $line-height/2;
}
}
}
// 03. Content
// ----------------------
.more-info-content {
h3 {
color: $brand;
}
.additional-info {
margin-bottom: $line-height;
}
a:not(.button) {
text-decoration: underline;
}
figure {
margin: 0;
text-align: center;
figcaption {
font-size: $small-font-size;
font-style: italic;
}
}
ul.features {
list-style-type: circle;
margin-left: $line-height;
@include breakpoint(medium) {
margin: $line-height 0 $line-height $line-height*2.5;
}
li {
margin-bottom: $line-height
}
}
.section-content {
border-top: 1px solid $medium-gray;
padding-bottom: $line-height*2;
padding-top: $line-height*2;
&:first-child {
border-top: 0;
padding-top: 0;
}
}
}
// 04. Sidebar
// ----------------------
.more-info-sidebar {
.sidebar-card {
border: 1px solid $border;
margin-bottom: $line-height;
padding: $line-height/2;
&.light {
background: #ECF0F1;
border: 0;
}
}
}

View File

@@ -457,7 +457,7 @@
}
.bullet {
color: $border;
color: $text;
}
.investment-project-show p, .budget-investment-show p {
@@ -976,6 +976,10 @@
&.social-share-button-google_plus:hover {
color: #CE3E26;
}
&.social-share-button-telegram:hover {
color: #CE3E26;
}
}
}

View File

@@ -55,7 +55,7 @@ module Budgets
end
def destroy
investment.destroy
@investment.destroy
redirect_to user_path(current_user, filter: 'budget_investments'), notice: t('flash.actions.destroy.budget_investment')
end

View File

@@ -129,16 +129,16 @@ module CommentableActions
when '4'
1.year.ago
else
Date.parse(params[:advanced_search][:date_min]) rescue nil
Date.parse(params[:advanced_search][:date_min]) rescue 100.years.ago
end
end
def search_finish_date
params[:advanced_search][:date_max].try(:to_date) || Date.today
(params[:advanced_search][:date_max].to_date rescue Date.today) || Date.today
end
def search_date_range
search_start_date.beginning_of_day..search_finish_date.end_of_day
[100.years.ago, search_start_date].max.beginning_of_day..[search_finish_date, Date.today].min.end_of_day
end
def set_search_order

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

@@ -32,7 +32,7 @@ class Management::UsersController < Management::BaseController
private
def user_params
params.require(:user).permit(:document_type, :document_number, :username, :email)
params.require(:user).permit(:document_type, :document_number, :username, :email, :date_of_birth)
end
def destroy_session

View File

@@ -38,4 +38,8 @@ module BudgetsHelper
def current_ballot
Budget::Ballot.where(user: current_user, budget: @budget).first
end
def investment_tags_select_options
Budget::Investment.tags_on(:valuation).order(:name).select(:name).distinct
end
end

View File

@@ -2,6 +2,7 @@ module EmbedVideosHelper
def embedded_video_code
link = @proposal.video_url
title = t('proposals.show.embed_video_title', proposal: @proposal.title)
if link.match(/vimeo.*/)
server = "Vimeo"
elsif link.match(/youtu*.*/)
@@ -21,7 +22,7 @@ module EmbedVideosHelper
end
if match and match[2]
'<iframe src="' + src + match[2] + '" frameborder="0" allowfullscreen></iframe>'
'<iframe src="' + src + match[2] + '" style="border:0;" allowfullscreen title="' + title + '"></iframe>'
else
''
end

View File

@@ -2,7 +2,7 @@ module SignatureSheetsHelper
def signable_options
[[t("activerecord.models.proposal", count: 1), Proposal],
[t("activerecord.models.spending_proposal", count: 1), SpendingProposal]]
[t("activerecord.models.budget/investment", count: 1), Budget::Investment]]
end
end

View File

@@ -46,6 +46,7 @@ module Abilities
can :create, SpendingProposal
can :create, Budget::Investment, budget: { phase: "accepting" }
can :destroy, Budget::Investment, budget: { phase: ["accepting", "reviewing"] }, author_id: user.id
can :vote, Budget::Investment, budget: { phase: "selecting" }
can [:show, :create], Budget::Ballot, budget: { phase: "balloting" }
can [:create, :destroy], Budget::Ballot::Line, budget: { phase: "balloting" }

View File

@@ -25,6 +25,7 @@ class Budget
validates :description, presence: true
validates :heading_id, presence: true
validates_presence_of :unfeasibility_explanation, if: :unfeasibility_explanation_required?
validates_presence_of :price, if: :price_required?
validates :title, length: { in: 4..Budget::Investment.title_max_length }
validates :description, length: { maximum: Budget::Investment.description_max_length }
@@ -136,6 +137,10 @@ class Budget
unfeasible? && valuation_finished?
end
def price_required?
feasible? && valuation_finished?
end
def unfeasible_email_pending?
unfeasible_email_sent_at.blank? && unfeasible? && valuation_finished?
end
@@ -225,7 +230,7 @@ class Budget
def should_show_aside?
(budget.selecting? && !unfeasible?) ||
(budget.balloting? && feasible?) ||
(budget.valuating? && feasible?)
(budget.valuating? && !unfeasible?)
end
def should_show_votes?
@@ -259,7 +264,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

@@ -12,35 +12,30 @@ class Signature < ActiveRecord::Base
before_validation :clean_document_number
def verified?
user_exists? || in_census?
end
def verify
if verified?
assign_vote
mark_as_verified
end
end
def assign_vote
if user_exists?
assign_vote_to_user
else
mark_as_verified
elsif in_census?
create_user
assign_vote_to_user
mark_as_verified
end
end
def assign_vote_to_user
set_user
if signable.is_a? Budget::Investment
signable.vote_by(voter: user, vote: 'yes') if [nil, :no_selecting_allowed].include?(signable.reason_for_not_being_selectable_by(user))
else
signable.register_vote(user, "yes")
end
assign_signature_to_vote
end
def assign_signature_to_vote
vote = Vote.where(votable: signable, voter: user).first
vote.update(signature: self)
vote.update(signature: self) if vote
end
def user_exists?
@@ -55,7 +50,10 @@ class Signature < ActiveRecord::Base
erased_at: Time.current,
password: random_password,
terms_of_service: '1',
email: nil
email: nil,
date_of_birth: @census_api_response.date_of_birth,
gender: @census_api_response.gender,
geozone: Geozone.where(census_code: @census_api_response.district_code).first
}
User.create!(user_params)
end
@@ -70,10 +68,17 @@ class Signature < ActiveRecord::Base
end
def in_census?
response = document_types.detect do |document_type|
CensusApi.new.call(document_type, document_number).valid?
document_types.detect do |document_type|
response = CensusApi.new.call(document_type, document_number)
if response.valid?
@census_api_response = response
true
else
false
end
response.present?
end
@census_api_response.present?
end
def set_user

View File

@@ -2,7 +2,7 @@ class SignatureSheet < ActiveRecord::Base
belongs_to :signable, polymorphic: true
belongs_to :author, class_name: 'User', foreign_key: 'author_id'
VALID_SIGNABLES = %w( Proposal SpendingProposal )
VALID_SIGNABLES = %w( Proposal Budget::Investment SpendingProposal )
has_many :signatures

View File

@@ -28,7 +28,7 @@
<div class="small-12 medium-3 column">
<%= select_tag :tag_name,
options_for_select(spending_proposal_tags_select_options, params[:tag_name]),
options_for_select(investment_tags_select_options, params[:tag_name]),
{ prompt: t("admin.budget_investments.index.tags_filter_all"),
label: false,
class: "js-submit-on-change" } %>

View File

@@ -8,6 +8,7 @@
</tr>
<% if headings.blank? %>
</thead>
<tbody>
<tr>
<td colspan="3">
@@ -63,5 +64,4 @@
<% end %>
<!-- /. headings list -->
</tbody>
</table>
</div>
</table>

View File

@@ -10,8 +10,10 @@
<div class="small-12 medium-9 column">
<table>
<thead>
<th><%= Budget.human_attribute_name(:name) %></th>
<th><%= Budget.human_attribute_name(:phase) %></th>
<tr>
<th scope="col"><%= Budget.human_attribute_name(:name) %></th>
<th scope="col"><%= Budget.human_attribute_name(:phase) %></th>
</tr>
</thead>
<tbody>
<% @budgets.each do |budget| %>

View File

@@ -103,8 +103,9 @@
<div class="social-share-full">
<%= social_share_button_tag("#{investment.title} #{setting['twitter_hashtag']}") %>
<% if browser.device.mobile? %>
<a href="whatsapp://send?text=<%= investment.title %> <%= budget_investment_url(budget_id: investment.budget_id, id: investment.id) %>" data-action="share/whatsapp/share">
<a href="whatsapp://send?text=<%= investment.title.gsub(/\s/, '&nbsp;') %>&nbsp;<%= budget_investment_url(budget_id: investment.budget_id, id: investment.id) %>" data-action="share/whatsapp/share">
<span class="icon-whatsapp whatsapp"></span>
<span class="sr-only"><%= t("social.whatsapp") %></span>
</a>
<% end %>
</div>

View File

@@ -7,7 +7,7 @@
<div data-alert class="callout primary">
<%= t("debates.new.info",
info_link: link_to(t("debates.new.info_link"), new_proposal_path )).html_safe %>
<%= link_to "/more_information", title: t('shared.target_blank_html'), target: "_blank" do %>
<%= link_to more_info_path, title: t('shared.target_blank_html'), target: "_blank" do %>
<strong><%= t("debates.new.more_info") %></strong>
<% end %>
</div>

View File

@@ -53,8 +53,9 @@
<div class="social-share-full">
<%= social_share_button_tag("#{@debate.title} #{setting['twitter_hashtag']}") %>
<% if browser.device.mobile? %>
<a href="whatsapp://send?text=<%= @debate.title %> <%= debate_url(@debate) %>" data-action="share/whatsapp/share">
<a href="whatsapp://send?text=<%= @debate.title.gsub(/\s/, '&nbsp;') %>&nbsp;<%= debate_url(@debate) %>" data-action="share/whatsapp/share">
<span class="icon-whatsapp whatsapp"></span>
<span class="sr-only"><%= t("social.whatsapp") %></span>
</a>
<% end %>
</div>

View File

@@ -19,6 +19,7 @@
<%= f.submit(t("devise_views.confirmations.new.submit"), class: "button expanded") %>
</div>
</div>
</div>
<% end %>
<%= render "devise/shared/links" %>

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,6 +11,7 @@
<%= f.submit t("devise_views.passwords.new.send_submit"), class: "button expanded" %>
</div>
</div>
</div>
<% end %>
<%= render "devise/shared/links" %>

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

@@ -43,7 +43,6 @@
<div class="small-12 medium-8 column">
<%= t("layouts.footer.copyright", year: Time.current.year) %>&nbsp;|
<ul class="no-bullet inline-block">
<li class="inline-block"><%= link_to t("layouts.footer.more_info"), page_path('more_information') %>&nbsp;|</li>
<li class="inline-block"><%= link_to t("layouts.footer.privacy"), page_path('privacy') %>&nbsp;|</li>
<li class="inline-block"><%= link_to t("layouts.footer.conditions"), page_path('conditions') %>&nbsp;|</li>
<li class="inline-block"><%= link_to t("layouts.footer.accessibility"), page_path('accessibility') %></li>
@@ -85,6 +84,14 @@
<% end %>
</li>
<% end %>
<% if setting['telegram_handle'] %>
<li class="inline-block">
<%= link_to "https://www.telegram.me/#{setting['telegram_handle']}", target: "_blank", title: t("social.telegram") + t('shared.target_blank_html') do %>
<span class="sr-only"><%= t("social.telegram") %></span>
<span class="icon-telegram" aria-hidden="true"></span>
<% end %>
</li>
<% end %>
</ul>
</div>
</div>

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 <%= yield (:wrapper_class) %>">

View File

@@ -4,7 +4,7 @@
message: t("management.document_verifications.in_census_has_following_permissions"),
permissions: [:debates, :create_proposals, :support_proposals, :vote_proposals] %>
<div class="row">
<div class="row verification account">
<div class="small-12 medium-6 column">
<%= form_for @user, url: management_users_path do |f| %>
<%= f.hidden_field :document_type %>
@@ -15,7 +15,13 @@
<%= f.text_field :email,
label: t('management.email_label'),
placeholder: t('management.email_label') %>
<div class="date-of-birth">
<%= f.label t("management.date_of_birth") %>
<%= f.date_select :date_of_birth,
prompt: true,
start_year: 1900, end_year: 16.years.ago.year,
label: false %>
</div>
<%= f.submit t("management.users.create_user_submit"), class: "button success" %>
<% end %>
</div>

View File

@@ -19,45 +19,34 @@
<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">S</td>
<td class="text-center">3</td>
<td>Votaciones</td>
</tr>
<tr>
<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>
</tr>
</tbody>
</table>
</div>
@@ -66,10 +55,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>
@@ -104,8 +94,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

@@ -1,20 +0,0 @@
<div class="row margin-top">
<div class="small-12 medium-3 column">
<%= render "shared/back_link" %>
<ul class="menu vertical margin-top">
<li>
<a href="#i"><strong>I. <%= t('pages.more_information.how_it_works.i') %></strong></a>
<ul class="nested vertical menu">
<li><a href="#i1"><strong>I.1. <%= t('pages.more_information.how_it_works.i1') %></strong></a></li>
<li><a href="#i2"><strong>I.2. <%= t('pages.more_information.how_it_works.i2') %></strong></a></li>
</ul>
</li>
</ul>
</div>
<div class="small-12 medium-9 column">
<h1><%= t('pages.more_information.titles.how_it_works') %></h1>
<%= markdown t('pages.more_information.how_it_works.text') %>
</div>
</div>

View File

@@ -1,9 +0,0 @@
<div class="row margin-top">
<div class="text small-12 column">
<%= render "shared/back_link" %>
<h1><%= t('pages.more_information.titles.how_to_use') %></h1>
<%= markdown t('pages.more_information.how_to_use.text') %>
</div>
</div>

View File

@@ -0,0 +1,26 @@
<div class="row section-content">
<div class="small-12 column">
<h3 id="budgets" data-magellan-target="budgets">
<%= t("pages.more_info.budgets.title") %>
</h3>
<p>
<%= link_to t("pages.more_info.budgets.detail"), more_info_budgets_path, class: "small" %>
</p>
<p><%= t("pages.more_info.budgets.description") %></p>
<ul class="features">
<li>
<%= t("pages.more_info.budgets.feature_1",
link: link_to(t("pages.more_info.budgets.feature_1_link", org_name: setting['org_name']),
new_user_registration_path)).html_safe %>
</li>
<li><%= t("pages.more_info.budgets.feature_2_html") %></li>
<li><%= t("pages.more_info.budgets.feature_3_html") %></li>
<li><%= t("pages.more_info.budgets.feature_4_html") %></li>
</ul>
<figure>
<%= image_tag "more_info/budgets_#{I18n.locale}.png", alt: t("pages.more_info.budgets.image_alt") %>
<figcaption><%= t("pages.more_info.budgets.figcaption_html") %></figcaption>
</figure>
</div>
</div>

View File

@@ -0,0 +1,21 @@
<div class="row section-content">
<div class="small-12 column">
<h3 id="debates" data-magellan-target="debates">
<%= t("pages.more_info.debates.title") %>
</h3>
<p><%= t("pages.more_info.debates.description") %></p>
<ul class="features">
<li>
<%= t("pages.more_info.debates.feature_1",
link: link_to(t("pages.more_info.debates.feature_1_link", org_name: setting['org_name']),
new_user_registration_path)).html_safe %>
</li>
<li><%= t("pages.more_info.debates.feature_2_html") %></li>
</ul>
<figure>
<%= image_tag "more_info/debates.png", alt: t("pages.more_info.debates.image_alt") %>
<figcaption><%= t("pages.more_info.debates.figcaption") %></figcaption>
</figure>
</div>
</div>

View File

@@ -0,0 +1,22 @@
<div class="row">
<div class="small-12 column">
<ul class="menu-pages" data-magellan>
<% if feature?(:debates) %>
<li>
<%= link_to t("pages.more_info.menu.debates"), "#debates", class: "button hollow expanded" %>
</li>
<% end %>
<li>
<%= link_to t("pages.more_info.menu.proposals"), "#proposals", class: "button hollow expanded" %>
</li>
<% if feature?(:budgets) %>
<li>
<%= link_to t("pages.more_info.menu.budgets"), "#budgets", class: "button hollow expanded" %>
</li>
<% end %>
<li>
<%= link_to t("pages.more_info.menu.other"), "#other", class: "button hollow expanded" %>
</li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,7 @@
<h3 id="other" data-magellan-target="other">Otra información de interés</h3>
<ul class="features">
<li><%= link_to t("pages.more_info.other.how_to_use", org_name: setting['org_name']), faq_path %></li>
<li><%= link_to t("pages.more_info.other.facts"), participation_facts_path %></li>
<li><%= link_to t("pages.more_info.other.world"), participation_world_path %></li>
</ul>

View File

@@ -0,0 +1,25 @@
<div class="row section-content">
<div class="small-12 column">
<h3 id="proposals" data-magellan-target="proposals">
<%= t("pages.more_info.proposals.title") %>
</h3>
<p>
<%= link_to t("pages.more_info.proposals.detail"), more_info_proposals_path, class: "small" %>
</p>
<p><%= t("pages.more_info.proposals.description") %></p>
<ul class="features">
<li>
<%= t("pages.more_info.proposals.feature_1",
link: link_to(t("pages.more_info.proposals.feature_1_link", org_name: setting['org_name']),
new_user_registration_path)).html_safe %>
</li>
<li><%= t("pages.more_info.proposals.feature_2_html") %></li>
<li><%= t("pages.more_info.proposals.feature_3_html") %></li>
</ul>
<figure>
<%= image_tag "more_info/proposals_#{I18n.locale}.png", alt: t("pages.more_info.proposals.image_alt") %>
<figcaption><%= t("pages.more_info.proposals.figcaption_html") %></figcaption>
</figure>
</div>
</div>

View File

@@ -0,0 +1,5 @@
<div class="sidebar-card">
<h3><%= t("pages.more_info.faq.title") %></h3>
<p><%= t("pages.more_info.faq.description") %></p>
<%= link_to t("pages.more_info.faq.button"), faq_path, class: "button expanded" %>
</div>

View File

@@ -0,0 +1,9 @@
<div class="row margin-top">
<div class="text small-12 column">
<%= render "shared/back_link" %>
<h1><%= t('pages.more_info.titles.how_to_use') %></h1>
<%= markdown t('pages.more_info.how_to_use.text') %>
</div>
</div>

View File

@@ -0,0 +1,39 @@
<% provide :title do %><%= t("pages.titles.more_info", org_name: setting['org_name']) %><% end %>
<div class="jumbo light">
<div class="row">
<div class="small-12 column">
<h2><%= t("pages.more_info.title", org_name: setting['org_name']) %></h2>
<p class="lead"><%= t("pages.more_info.subtitle") %></p>
<p><%= t("pages.more_info.guide", org_name: setting['org_name']) %></p>
</div>
</div>
<%= render "pages/more_info/menu" %>
</div>
<div id="more-info" class="more-info-content">
<div class="row">
<div class="small-12 medium-7 large-8 column">
<% if feature?(:debates) %>
<%= render "pages/more_info/debates" %>
<% end %>
<%= render "pages/more_info/proposals" %>
<% if feature?(:budgets) %>
<%= render "pages/more_info/budgets" %>
<% end %>
</div>
<div class="small-12 medium-4 large-3 column more-info-sidebar">
<%= render "pages/more_info/sidebar" %>
</div>
</div>
<div class="row">
<hr>
<div class="small-12 column">
<%= render "pages/more_info/other" %>
</div>
</div>
</div>

View File

@@ -1,71 +0,0 @@
<% provide :title do %><%= t('pages.titles.more_information') %><% end %>
<div class="row">
<div class="more-information small-12 medium-9 large-7 column">
<h1><%= t('pages.titles.more_information') %></h1>
<ul class="no-bullet">
<li>
<%= link_to page_path('how_it_works') do %>
<%= t('pages.more_information.titles.how_it_works') %>
<br>
<span><%= t('pages.more_information.description.how_it_works') %></span>
<% end %>
</li>
<li>
<%= link_to page_path('how_to_use') do %>
<%= t('pages.more_information.titles.how_to_use') %>
<br>
<span><%= t('pages.more_information.description.how_to_use') %></span>
<% end %>
</li>
<li>
<%= link_to page_path('participation') do %>
<%= t('pages.more_information.titles.participation') %>
<br>
<span><%= t('pages.more_information.description.participation') %></span>
<% end %>
</li>
<li>
<%= link_to page_path('proposals_info') do %>
<%= t('pages.more_information.titles.proposals_info') %>
<br>
<span><%= t('pages.more_information.description.proposals_info') %></span>
<% end %>
</li>
<li>
<%= link_to page_path('spending_proposals_info') do %>
<%= t('pages.more_information.titles.spending_proposals_info') %>
<br>
<span><%= t('pages.more_information.description.spending_proposals_info') %></span>
<% end %>
</li>
<li>
<%= link_to page_path('participation_world') do %>
<%= t('pages.more_information.titles.participation_world') %>
<br>
<span><%= t('pages.more_information.description.participation_world') %></span>
<% end %>
</li>
<li>
<%= link_to page_path('participation_facts') do %>
<%= t('pages.more_information.titles.participation_facts') %>
<br>
<span><%= t('pages.more_information.description.participation_facts') %></span>
<% end %>
</li>
<li>
<%= link_to page_path('faq') do %>
<%= t('pages.more_information.titles.faq') %>
<br>
<span><%= t('pages.more_information.description.faq') %></span>
<% end %>
</li>
<li>
<%= link_to page_path('proposals_info', :anchor => "iii") do %>
<%= t('pages.more_information.titles.signature_sheet') %>
<br>
<span><%= t('pages.more_information.description.signature_sheet') %></span>
<% end %>
</li>
</ul>
</div>
</div>

View File

@@ -1,14 +0,0 @@
<% provide :title do %><%= t('pages.titles.opendata') %><% end %>
<div class="expanded highlight no-margin-top">
<div class="row padding margin">
<div class="small-12 medium-7 column">
<h1><%= t("pages.opendata.title") %></h1>
<p><%= t("pages.opendata.slogan") %></p>
</div>
<div class="show-for-medium small-12 medium-5 column text-center">
<%= image_tag("icon_home.png", size: "330x240", alt:"") %>
</div>
</div>
</div>

View File

@@ -1,46 +0,0 @@
<div class="row margin-top">
<div class="small-12 medium-3 column">
<%= render "shared/back_link" %>
<ul class="menu vertical margin-top hide-for-small-only">
<li>
<a href="#i"><strong>I. Participación</strong></a>
<ul class="nested vertical menu">
<li><a href="#i1"><strong>I.1. Participación</strong></a></li>
<li><a href="#i2"><strong>I.2. Participación</strong></a></li>
<li><a href="#i3"><strong>I.3. Participación</strong></a></li>
</ul>
</li>
<li>
<a href="#ii"><strong>II. Transparencia</strong></a>
<ul class="nested vertical menu">
<li><a href="#ii1"><strong>II.1. Transparencia</strong></a></li>
<li><a href="#ii2"><strong>II.2. Transparencia</strong></a></li>
<li><a href="#ii3"><strong>II.3. Transparencia</strong></a></li>
</ul>
</li>
</ul>
</div>
<div class="small-12 medium-9 column">
<h1>Participación y Transparencia</h1>
<p>Página de información sobre Participación y Transparencia.</p>
<h3 id="i">I. Participación.</h3>
<ul>
<li id="i1"><strong>I.1. Participación.</strong> Información sobre Participación</li>
<li id="i2"><strong>I.1. Participación.</strong> Información sobre Participación</li>
<li id="i3"><strong>I.1. Participación.</strong> Información sobre Participación</li>
</ul>
<h3 id="ii">II. Transparencia</h3>
<ul>
<li id="ii1"><strong>II.1. Transparencia</strong> Información sobre Transparencia</li>
<li id="ii2"><strong>II.1. Transparencia</strong> Información sobre Transparencia</li>
<li id="ii3"><strong>II.1. Transparencia</strong> Información sobre Transparencia</li>
</ul>
</div>
</div>

View File

@@ -1,6 +1,6 @@
<div class="row">
<div class="small-12 column">
<ul class="tabs" data-tabs id="example-tabs">
<ul class="tabs" data-tabs id="proposals-tabs">
<li class="tabs-title is-active">
<%= link_to "#tab-comments" do %>
<h3>

View File

@@ -132,8 +132,9 @@
<div class="social-share-full">
<%= social_share_button_tag("#{@proposal.title} #{setting['twitter_hashtag']}") %>
<% if browser.device.mobile? %>
<a href="whatsapp://send?text=<%= @proposal.title %> <%= proposal_url(@proposal) %>" data-action="share/whatsapp/share">
<a href="whatsapp://send?text=<%= @proposal.title.gsub(/\s/, '&nbsp;') %>&nbsp;<%= proposal_url(@proposal) %>" data-action="share/whatsapp/share">
<span class="icon-whatsapp whatsapp"></span>
<span class="sr-only"><%= t("social.whatsapp") %></span>
</a>
<% end %>
</div>
@@ -142,7 +143,7 @@
</div>
<% end %>
<div class="tabs-content" data-tabs-content="example-tabs">
<div class="tabs-content" data-tabs-content="proposals-tabs" role="tablist">
<%= render "proposals/filter_subnav" %>
<%= render "proposals/notifications" %>

View File

@@ -11,7 +11,8 @@
</li>
<% end %>
<% if feature?(:spending_proposals) && (current_user.administrator? || current_user.valuator?) %>
<% if (feature?(:spending_proposals) || feature?(:budgets)) &&
(current_user.administrator? || current_user.valuator?) %>
<li>
<%= link_to t("layouts.header.valuation"), valuation_root_path %>
</li>

View File

@@ -36,8 +36,6 @@
</label>
<%= 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'>
@@ -46,8 +44,6 @@
</label>
<%= 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,21 +5,21 @@
<%= 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>
<% if feature?(:polls) %>
<li>
<%= layout_menu_link_to t("layouts.header.poll_questions"),
polls_path,
controller_name == "polls",
accesskey: "v" %>
accesskey: "3" %>
</li>
<% end %>
<% if feature?(:spending_proposals) %>
@@ -35,8 +35,14 @@
<%= layout_menu_link_to t("layouts.header.budgets"),
budgets_path,
controller_name == "budgets" || controller_name == "investments",
accesskey: "b" %>
accesskey: "4" %>
</li>
<% end %>
<li>
<%= link_to t("layouts.header.more_info"),
more_info_path,
accesskey: "5",
class: ("active" if current_page?(more_info_path)) %>
</li>
</ul>
</div>

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

@@ -1,10 +1,4 @@
<ul class="no-bullet external-links">
<li>
<%= link_to t("layouts.header.more_information"),
page_path('more_information'),
class: ("selected" if current_page?("/more_information")),
accesskey: "i" %>
</li>
<li>
<%= link_to t("layouts.header.external_link_transparency"),
t("layouts.header.external_link_transparency_url"),

View File

@@ -45,8 +45,9 @@
<div class="social-share-full">
<%= social_share_button_tag("#{@spending_proposal.title} #{setting['twitter_hashtag']}") %>
<% if browser.device.mobile? %>
<a href="whatsapp://send?text=<%= @spending_proposal.title %> <%= spending_proposal_url(@spending_proposal) %>" data-action="share/whatsapp/share">
<a href="whatsapp://send?text=<%= @spending_proposal.title.gsub(/\s/, '&nbsp;') %>&nbsp;<%= spending_proposal_url(@spending_proposal) %>" data-action="share/whatsapp/share">
<span class="icon-whatsapp whatsapp"></span>
<span class="sr-only"><%= t("social.whatsapp") %></span>
</a>
<% end %>
</div>

View File

@@ -4,6 +4,12 @@
<td>
<%= link_to budget_investment.title, budget_investment_path(budget_investment.budget, budget_investment) %>
</td>
<td class="text-right">
<% if can? :destroy, budget_investment %>
<%= link_to t('shared.delete'), budget_investment_path(budget_investment.budget, budget_investment),
method: :delete, class: "button hollow alert" %>
<% end %>
</td>
</tr>
<% end %>
</table>

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

@@ -4,7 +4,7 @@
<h1><%= t("layouts.header.open_city_title") %></h1>
<p>
<%= t("layouts.header.open_city_slogan_html") %>&nbsp;
<%= link_to t("layouts.header.more_information"), page_path('more_information') %>
<%= link_to t("layouts.header.more_info"), more_info_path %>
</p>
<div class="small-12 medium-6">
<%= link_to t("layouts.header.see_all"), proposals_path, class: "button see-more expanded" %>

View File

@@ -1,5 +1,5 @@
# config valid only for current version of Capistrano
lock '3.5.0'
lock '3.8.0'
def deploysecret(key)
@deploy_secrets_yml ||= YAML.load_file('config/deploy-secrets.yml')[fetch(:stage).to_s]
@@ -15,7 +15,6 @@ set :full_app_name, deploysecret(:full_app_name)
set :server_name, deploysecret(:server_name)
set :repo_url, 'https://github.com/consul/consul.git'
set :scm, :git
set :revision, `git rev-parse --short #{fetch(:branch)}`.strip
set :log_level, :info

View File

@@ -22,6 +22,8 @@ data:
## Another gem (replace %#= with %=):
# - "<%#= %x[bundle show vagrant].chomp %>/templates/locales/%{locale}.yml"
- config/locales/%{locale}.yml
- config/locales/activerecord.%{locale}.yml
- config/locales/activemodel.%{locale}.yml
- config/locales/admin.%{locale}.yml
- config/locales/moderation.%{locale}.yml
- config/locales/valuation.%{locale}.yml

View File

@@ -8,50 +8,3 @@ Kaminari.configure do |config|
# config.page_method_name = :page
# config.param_name = :page
end
# Overrides for making Kaminari handle i18n pluralization correctly
#
# Remove everything below once https://github.com/amatsuda/kaminari/pull/694 is
# merged in Kaminari and we have updated
module Kaminari
module ActionViewExtension
def page_entries_info(collection, options = {})
entry_name = if options[:entry_name]
options[:entry_name].pluralize(collection.size)
else
collection.entry_name(:count => collection.size).downcase
end
if collection.total_pages < 2
t('helpers.page_entries_info.one_page.display_entries', entry_name: entry_name, count: collection.total_count)
else
first = collection.offset_value + 1
last = collection.last_page? ? collection.total_count : collection.offset_value + collection.limit_value
t('helpers.page_entries_info.more_pages.display_entries', entry_name: entry_name, first: first, last: last, total: collection.total_count)
end.html_safe
end
end
module ActiveRecordRelationMethods
def entry_name(options = {})
model_name.human(options.reverse_merge(default: model_name.human.pluralize(options[:count])))
end
end
module MongoidCriteriaMethods
def entry_name(options = {})
model_name.human(options.reverse_merge(default: model_name.human.pluralize(options[:count])))
end
end
class PaginatableArray < Array
ENTRY = 'entry'.freeze
def entry_name(options = {})
I18n.t('helpers.page_entries_info.entry', options.reverse_merge(default: ENTRY.pluralize(options[:count])))
end
end
end

View File

@@ -1,3 +1,3 @@
SocialShareButton.configure do |config|
config.allow_sites = %w(twitter facebook google_plus)
config.allow_sites = %w(twitter facebook google_plus telegram)
end

View File

@@ -8,8 +8,8 @@ es:
one: "Presupuesto participativo"
other: "Presupuestos participativos"
budget/investment:
one: "Propuesta de inversión"
other: "Propuestas de inversión"
one: "Proyecto de inversión"
other: "Proyectos de inversión"
comment:
one: "Comentario"
other: "Comentarios"
@@ -49,13 +49,13 @@ es:
attributes:
budget:
name: "Nombre"
description_accepting: "Descripción durante la fase de aceptación"
description_reviewing: "Descripción durante la fase de revisión"
description_selecting: "Descripción durante la fase de selección"
description_accepting: "Descripción durante la fase de presentación de proyectos"
description_reviewing: "Descripción durante la fase de revisión interna"
description_selecting: "Descripción durante la fase de apoyos"
description_valuating: "Descripción durante la fase de evaluación"
description_balloting: "Descripción durante la fase de votación"
description_reviewing_ballots: "Descripción durante la fase de revisión de votos"
description_finished: "Descripción cuando el presupuesto ha finalizado"
description_finished: "Descripción cuando el presupuesto ha finalizado / Resultados"
phase: "Fase"
currency_symbol: "Divisa"
budget/investment:
@@ -138,6 +138,10 @@ es:
attributes:
tag_list:
less_than_or_equal_to: "los temas deben ser menor o igual que %{count}"
budget/investment:
attributes:
tag_list:
less_than_or_equal_to: "los temas deben ser menor o igual que %{count}"
proposal_notification:
attributes:
minimum_interval:

View File

@@ -25,11 +25,11 @@ en:
unfeasible_title: Unfeasible investments
unfeasible: See unfeasible investments
phase:
accepting: Accepting proposals
reviewing: Reviewing proposals
selecting: Selecting proposals
valuating: Valuating proposals
balloting: Balloting proposals
accepting: Accepting projects
reviewing: Reviewing projects
selecting: Selecting projects
valuating: Valuating projects
balloting: Balloting projects
reviewing_ballots: Reviewing Ballots
finished: Finished budget
index:

View File

@@ -25,13 +25,13 @@ es:
unfeasible_title: Propuestas inviables
unfeasible: Ver propuestas inviables
phase:
accepting: Aceptando propuestas
reviewing: Revisando propuestas
selecting: Selección de propuestas
valuating: Evaluación de propuestas
balloting: Votación de propuestas
reviewing_ballots: Contando resultados
finished: Presupuesto terminado
accepting: Presentación de proyectos
reviewing: Revisión interna de proyectos
selecting: Fase de apoyos
valuating: Evaluación de proyectos
balloting: Votación final
reviewing_ballots: Votación finalizada
finished: Resultados
index:
title: Presupuestos participativos
investments:

View File

@@ -175,7 +175,6 @@ en:
copyright: Consul, %{year}
description: This portal uses the %{consul} which is %{open_source}.
faq: technical assistance
more_info: More information
open_data_text: Every detail about the City Council is yours to access.
open_data_title: Open data
open_source: open-source software
@@ -192,16 +191,16 @@ en:
debates: Debates
external_link_blog: Blog
external_link_opendata: Open data
external_link_opendata_url: "/opendata"
external_link_opendata_url: https://opendata.consul
external_link_transparency: Transparency
external_link_transparency_url: https://transparency.consul
locale: 'Language:'
logo: Consul
logo: Consul logo
management: Management
moderation: Moderation
valuation: Valuation
officing: Polling officers
more_information: More information
more_info: More information
my_account_link: My account
my_activity_link: My activity
notifications: Notifications
@@ -388,6 +387,7 @@ en:
share: Share
send_notification: Send notification
no_notifications: "This proposal has any notifications."
embed_video_title: "Video on %{proposal}"
update:
form:
submit_button: Save changes
@@ -481,6 +481,7 @@ en:
search: 'Filter'
title: 'Advanced search'
to: 'To'
delete: Delete
author_info:
author_deleted: User deleted
back: Go back
@@ -525,6 +526,8 @@ en:
facebook: Facebook
twitter: Twitter
youtube: YouTube
whatsapp: WhatsApp
telegram: Telegram
spending_proposals:
form:
association_name_label: 'If you propose in name of an assocation or collective add the name here'

View File

@@ -175,7 +175,6 @@ es:
copyright: Consul, %{year}
description: Este portal usa la %{consul} que es %{open_source}.
faq: Asistencia técnica
more_info: Más información
open_data_text: Todos los datos del Ayuntamiento son tuyos.
open_data_title: Datos Abiertos
open_source: software libre
@@ -192,16 +191,16 @@ es:
debates: Debates
external_link_blog: Blog
external_link_opendata: Datos abiertos
external_link_opendata_url: "/opendata"
external_link_opendata_url: https://opendata.consul
external_link_transparency: Transparencia
external_link_transparency_url: https://transparency.consul
locale: 'Idioma:'
logo: Consul
logo: Consul logo
management: Gestión
moderation: Moderar
valuation: Evaluación
officing: Presidentes de mesa
more_information: Más información
more_info: Más información
my_account_link: Mi cuenta
my_activity_link: Mi actividad
notifications: Notificaciones
@@ -388,6 +387,7 @@ es:
send_notification: Enviar notificación
share: Compartir
no_notifications: "Esta propuesta no tiene notificaciones."
embed_video_title: "Vídeo en %{proposal}"
update:
form:
submit_button: Guardar cambios
@@ -481,6 +481,7 @@ es:
search: 'Filtrar'
title: 'Búsqueda avanzada'
to: 'Hasta'
delete: 'Borrar'
author_info:
author_deleted: Usuario eliminado
back: Volver
@@ -525,6 +526,8 @@ es:
facebook: Facebook
twitter: Twitter
youtube: YouTube
whatsapp: WhatsApp
telegram: Telegram
spending_proposals:
form:
association_name_label: 'Si propones en nombre de una asociación o colectivo añade el nombre aquí'
@@ -620,8 +623,8 @@ es:
one: 1 Propuesta
other: "%{count} Propuestas"
budget_investments:
one: 1 Propuesta de inversión
other: "%{count} Propuestas de inversión"
one: 1 Proyecto de presupuestos participativos
other: "%{count} Proyectos de presupuestos participativos"
no_activity: Usuario sin actividad pública
no_private_messages: "Este usuario no acepta mensajes privados."
private_activity: Este usuario ha decidido mantener en privado su lista de actividades

View File

@@ -854,7 +854,6 @@ fr:
description: Ce portail utiliser %{consul} qui est %{open_source}. De Madrid
ouvert sur le monde.
faq: assistance technique
more_info: Plus d'information
open_data_text: Tout les détails de la Mairie sont vôtre pour accès
open_data_title: Open data
open_source: logiciel libre
@@ -874,9 +873,9 @@ fr:
external_link_transparency: Transparence
external_link_transparency_url: https://transparency.consul
locale: 'Langue :'
logo: Consul
logo: Consul logo
moderation: Modération
more_information: Plus d'information
more_info: Plus d'information
my_account_link: Mon compte
my_activity_link: Mon activité
new_notifications:
@@ -1167,7 +1166,7 @@ fr:
mentionnées dans les conditions d'utilisation de ce portail."
conditions: Conditions d'utilisation
general_terms: Conditions d'utilisation
more_information:
more_info:
description:
faq: Questions fréquentes sur les problèmes techniques
how_it_works: Découvrez tout ce qui est possible de faire avec ce site
@@ -1232,7 +1231,7 @@ fr:
titles:
accessibility: Accessibilité
conditions: Conditions d'utilisation
more_information: Plus d'informations
more_info: Plus d'informations
opendata: Open Data
privacy: Vie privée
verify:
@@ -1354,7 +1353,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
@@ -1395,6 +1395,8 @@ fr:
facebook: Facebook
twitter: Twitter
youtube: YouTube
whatsapp: WhatsApp
telegram: Telegram
social_share_button:
baidu: Baidu.com
delicious: Delicious
@@ -1413,6 +1415,7 @@ fr:
tumblr: Tumblr
twitter: Twitter
weibo: Sina Weibo
telegram: Telegram
spending_proposals:
form:
description: Description
@@ -1629,7 +1632,7 @@ fr:
link: Voir les propositions
text: Créez vos propres propositions et soutenez celles d'autres citoyens.
title: Propositions citoyennes
more_information: Plus d'information sur cette page
more_info: Plus d'information sur cette page
proposal:
alt: Icône Proposez
description: Espace ouvert aux propositions sur le type de ville que nous voulons

View File

@@ -32,6 +32,7 @@ en:
under_age: "You don't have the required age to verify your account."
verify: Verify
email_label: Email
date_of_birth: Date of birth
email_verifications:
already_verified: This user account is already verified.
choose_options: 'Please choose one of the following options:'

View File

@@ -32,6 +32,7 @@ es:
under_age: No tienes edad suficiente para verificar tu cuenta.
verify: Verificar usuario
email_label: Email
date_of_birth: Fecha de nacimiento
email_verifications:
already_verified: Esta cuenta de usuario ya está verificada.
choose_options: 'Elige una de las opciones siguientes:'

View File

@@ -4,42 +4,52 @@ en:
census_terms: To confirm the account, you must be 16 or older and be registered, having provided the information requested previously, will verify. By accepting the verification process, you also consent to the verification of this information, as well as the contact methods featuring in said files. The data provided will be acquired and processed in a file mentioned previously in the terms and conditions of use for the Portal.
conditions: Terms and conditions of use
general_terms: Terms and Conditions
more_information:
description:
faq: Frecuently asked question about tecnical problems
how_it_works: Find out all you can do with this web site
how_to_use: Use it freely or help us to improve it, it is free software
participation: Citizen participation, transparency and open government
participation_facts: To lose your fear
participation_world: Systems of citizen participation that exist in the world
proposals_info: Create your own proposals
signature_sheet: Sheet collecting signatures for support
spending_proposals_info: Create your own spending proposals
how_it_works:
i: Participation
i1: Debates area
i2: Proposals area
text: |-
The new Open Government Portal is divided in three parts: Participation, Transparency and Open Data (you can see the links in the upper right-hand part).
>**I. Participation:** In this part we can decide which city we want (using citizen proposals, debate areas, participatory budgets , collaborative legislation, and many others we will implement).
**II. Transparency:** In this part information about how the city is managed will be published every day: name, position, salary, contracts, agenda,... of the persons in charge. It is also the place where exercise your right to access information, having the chance to request any information about City Council easily and rapidly.
**III. Open data:** In this part the city council databases are posted, so that anyone can use information directly, without having to ask. It can also be requested the publication of more databases.
We have opened the new Participation portal and we will open the new Transparency and Open Data seccion shortly (meanwhile the links to existing sites are kept).
## <a id='i'></a> I. Participation
The participation section will have different ways to participate: citizen proposals, debate areas, participatory budgets , collaborative legislation, and many others. You can currently visit the debate area and the citizen proposals will be ready very soon.
## <a id='i1'></a>I.I. Debates area
In the debates area everyone can open a discussion thread about any topic, creating an independent space where people could debate about the proposed topic. In this way, in this digital space there will be hundreds of different debate spaces which citizens could see, joining the ones they find more interesting.
Both threads and comments could be valued by anyone, so the citizenship, and not someone in its name, will decide which are the most important issues in every moment. These will be showed in the main page of the space, being able to access also the rest of issues in following pages, or using others order criteria (the most commented, the newst, the most controversial, etc.).
Every city council employee has its own user, which will be designated as such, allowing them to participate in debates at the same level than the rest of citizens. That will allow creating direct communication spaces between them, avoiding the problems that implies the measured communication, and following clear approach of the new City Council by virtue of which the city council works for the citizenship.
## <a id='i2'></a> I.I. Proposals area
In the proposals area everyone can propose an initiative with the intention of collecting support enough for the idea being consulting to the whole citizenship with binding effect.
The proposals can be supported by every citizen registered that has verified their account in the participation platform. In this way, the citizenship, and not someone in its name, will decide which are the proposals that are worthwhile to carry out.
One that the proposal has achive support of 1% census, it will be studied by a city council group and to move beyond the popular referendum phase, in which citizenship will vote if it is carried out or not. The maximum period to obtain support enough is 12 months.
more_info:
title: "Discover %{org_name}"
subtitle: "Learn everything you can do on this website."
guide: 'This guide explains each section of %{org_name}. You can expand the information on "Detailed information" links.'
menu:
debates: "Debates"
proposals: "Proposals"
budgets: "Participatory budgets"
other: "Other information of interest"
debates:
title: "Debates"
description: "Create a thread where you can discuss any topic you want to share with other people in your city."
feature_1: "To create a debate you have to %{link}"
feature_1_link: "sign up on %{org_name}"
feature_2_html: "Debates can be rated using the <strong>I agree</strong> or <strong>I disagree</strong> buttons you'll find on each of them."
image_alt: "Buttons to rate the debates"
figcaption: '"I agree" and "I disagree" buttons to rate the debates.'
proposals:
title: "Proposals"
description: "Propose what you want the City Council to carry out and support proposals from other people."
detail: "Detailed information of proposals"
feature_1: "To create a proposal you have to %{link}, in addition to support you must verify your account."
feature_1_link: "sign up on %{org_name}"
feature_2_html: "Proposals that get <strong>support from 1% of people</strong> will be voted on."
feature_3_html: "If there are more people in favor of against, <strong>the City Council assumes the proposal and it is done</strong>."
image_alt: "Button to support a proposal"
figcaption_html: 'Button to "Support" a proposal.<br>When it reaches the number of supports will go to vote.'
budgets:
title: "Participatory Budgeting"
description: "The first six months of each year you can decide how to spend part of the budget."
detail: "Detailed information of Participatory Budgeting"
feature_1: "To create an investment project you have to %{link} and verify your account."
feature_1_link: "sign up on %{org_name}"
feature_2_html: "The first is the <strong>accepting phase</strong> of investment projects."
feature_3_html: "Then there is a <strong>support phase</strong> to prioritize the most interesting, the most supported are evaluated by the City to see if they are viable and how much they are worth."
feature_4_html: "At the end there is a <strong>voting phase </strong> where it is decided on which part of the budget is spent."
image_alt: "Different phases of a participatory budget"
figcaption_html: '"Support phase" and "Voting" phase of participatory budgets.'
faq:
title: "Technical problems?"
description: "Read the FAQs and solve your questions."
button: "View frequently asked questions"
other:
how_to_use: "Use %{org_name} in your city"
world: "Citizen participation in the world"
facts: "Facts about citizen participation and direct democracy"
how_to_use:
text: |-
Use it in your local government or help us to improve it, it is free software.
@@ -48,24 +58,12 @@ en:
If you are a programmer, you can see the code and help us to improve it at [Consul app](https://github.com/ayuntamientomadrid 'consul github').
titles:
faq: Solution to tecnical problemas (FAQ)
how_it_works: How does this Open Government Portal work?
how_to_use: Use it in your local government
participation: Participation and Transparency y Transparencia - coming news
participation_facts: Facts about citizen participation and direct democracy
participation_world: Direct citizen participation in the world
proposals_info: How does citizen proposals work?
signature_sheet: Signature sheet
spending_proposals_info: How does participatory budgeting work?
opendata:
slogan: "Information about Open Data."
title: Open Data
privacy: Privacy Policy
titles:
accessibility: Accessibility
conditions: Terms of use
more_information: More information
opendata: Open Data
more_info: "More information about %{org_name}"
privacy: Privacy Policy
verify:
code: Code you received in letter

View File

@@ -4,42 +4,52 @@ es:
census_terms: Para verificar la cuenta hay que tener 16 años o más y estar empadronado aportando los datos indicados anteriormente, los cuales serán contrastados. Aceptando el proceso de verificación acepta dar su consentimiento para contrastar dicha información, así como medios de contacto que figuren en dichos ficheros. Los datos aportados serán incorporados y tratados en un fichero indicado anteriormente en las condiciones de uso del portal.
conditions: Condiciones de uso
general_terms: Términos y Condiciones
more_information:
description:
faq: Preguntas frecuentes sobre problemas técnicos
how_it_works: Descubre todo lo que puedes hacer en esta web
how_to_use: Utilízalo libremente o ayúdanos a mejorarlo, es software libre
participation: Participación Ciudadana, Transparencia y Gobierno Abierto
participation_facts: Para perderle el miedo
participation_world: Sistemas de participación ciudadana que ya existen en el mundo
proposals_info: Crea tus propias propuestas
signature_sheet: Hojas de firmas para recoger apoyos
spending_proposals_info: Envía tus propuestas de gasto
how_it_works:
i: Participación
i1: Espacio de debate
i2: Espacio de propuestas
text: |-
El nuevo Portal de Gobierno Abierto está dividido en tres partes: Participación, Transparencia y Datos Abiertos (verás los enlaces en la parte superior derecha).
>**I. Participación:** Donde poder decidir qué ciudad queremos tener (a través de propuestas ciudadanas, espacios de debate, presupuestos participativos, legislación colaborativa, y muchos otros procesos que iremos implementando).
**II. Transparencia:** En este espacio se publicarán todos los datos relativos a quién y cómo se gestiona la ciudad (nombres de los responsables, cargos, sueldos, planes de gobierno, contratos, agendas de los responsables...). Además es el espacio donde ejercer el derecho de acceso a la información, pudiendo solicitar cualquier información sobre el Ayuntamiento de manera fácil y rápida.
**III. Datos Abiertos:** En este espacio se cuelgan las bases de datos que tiene el Ayuntamiento, para que cualquiera pueda usar toda la información directamente, sin necesidad ni siquiera de preguntar. También se puede solicitar la publicación de más bases de datos.
Inauguramos el nuevo portal con la nueva sección de Participación, y en breve añadiremos las nuevas secciones de Transparencia y Datos Abiertos (así que mantenemos por el momento los enlaces a las páginas al respecto que ya existían).
## <a id='i'></a> I. Participación
El apartado de participación comprenderá diferentes mecanismos de participación: propuestas ciudadanas, espacios de debate, presupuestos participativos, legislación colaborativa, entre muchos otros. Por el momento presentamos el espacio de debate, y muy pronto las propuestas ciudadanas.
## <a id='i1'></a>I.I. Espacio de debate
En este espacio, cualquier persona puede abrir un hilo de discusión sobre cualquier tema, creando un espacio independiente donde la gente podrá debatir sobre el tema propuesto. De esta manera, en este espacio digital convivirán cada día cientos de espacios de debate distintos entre los que la ciudadanía podrá pasearse, sumándose a los que más les interese.
Tanto los hilos, como los comentarios podrán ser valorados por cualquiera, de tal manera que será la propia ciudadanía, y nadie en su nombre, la que decida cuáles son los temas más importantes en cada momento. Estos serán presentados en la portada del espacio, pudiendo por supuesto accederse a todos los demás temas en páginas posteriores, o usando otros criterios de ordenación (los temas con más comentarios, los más nuevos, los más controvertidos, etc.).
Cada uno de los trabajadores del Ayuntamiento tiene un usuario propio, que será resaltado como tal, permitiendo que participen en los debates al mismo nivel que todos los demás ciudadanos. Esto permitirá crear espacios de comunicación directos entre unos y otros, evitando los inconvenientes que implica la comunicación mediada, y respondiendo a un planteamiento claro por parte del nuevo gobierno por el cual el Ayuntamiento trabaja para la ciudadanía, y ante ella debe responder.
## <a id='i2'></a> I.I. Espacio de propuestas
En este espacio, cualquier persona puede proponer una iniciativa con la intención de recabar los suficientes apoyos como para que la idea pase a ser consultada a toda la ciudadanía con carácter vinculante.
Las propuestas pueden ser apoyadas por ciudadanos empadronados que hayan verificado su cuenta en la plataforma de participación, de tal manera que será la propia ciudadanía, y nadie en su nombre, la que decida cuáles son las propuestas que merecen la pena ser llevadas a cabo.
Una vez que una propuesta alcance una cantidad de apoyos equivalente al 1% del censo, automáticamente pasa a ser estudiada por un grupo de trabajo del Ayuntamiento y pasará a la siguiente fase de consulta popular, en la que la ciudadanía votará si se lleva a cabo o no. El plazo máximo para recabar los apoyos necesarios será de 12 meses.
more_info:
title: "Descubre %{org_name}"
subtitle: "Aprende todo lo que puedes hacer en esta web."
guide: 'Esta guía explica cada una de las secciones de %{org_name}. Puedes ampliar la información en los enlaces de "Información detallada".'
menu:
debates: "Debates"
proposals: "Propuestas"
budgets: "Presupuestos participativos"
other: "Otra información de interés"
debates:
title: "Debates"
description: "Crea un hilo en el que debatir sobre cualquier tema que quieras compartir con el resto de gente de tu ciudad."
feature_1: "Para crear un debate tienes que %{link}"
feature_1_link: "registrarte en %{org_name}"
feature_2_html: "Los debates pueden ser valorados utilizando los botones de <strong>Estoy de acuerdo</strong> o <strong>No estoy de acuerdo</strong> que encontrarás en cada uno de ellos."
image_alt: "Botones para valorar los debates"
figcaption: 'Botones "Estoy de acuerdo" y "No estoy de acuerdo" para valorar los debates.'
proposals:
title: "Propuestas"
description: "Propón lo que quieres que el Ayuntamiento lleve a cabo y apoya propuestas de otras personas."
detail: "Información detallada de Propuestas"
feature_1: "Para crear una propuesta tienes que %{link}, además para apoyarlas debes verificar tu cuenta."
feature_1_link: "registrarte en %{org_name}"
feature_2_html: "Las propuestas que consigan <strong>el apoyo del 1% de la gente</strong> (mayor de 16 años empadronada en Madrid; 27.064 apoyos) pasan a votación."
feature_3_html: "Si hay más gente a favor que en contra en la votación, <strong>el Ayuntamiento asume la propuesta y se hace</strong>."
image_alt: "Botón para apoyar una propuesta"
figcaption_html: 'Botón para "Apoyar" una propuesta.<br>Cuando alcance el número de apoyos pasará a votación.'
budgets:
title: "Presupuestos participativos"
description: "Los primeros seis meses de cada año puedes decidir cómo gastar parte del presupuesto."
detail: "Información detallada de Presupuestos participativos"
feature_1: "Para crear un proyecto de gasto tienes que %{link} y verificar tu cuenta."
feature_1_link: "registrarte en %{org_name}"
feature_2_html: "En primer lugar empieza la <strong>fase de aceptación</strong> de proyectos de gasto."
feature_3_html: "Después hay una <strong>fase de apoyos</strong> para priorizar lo más interesante, las más apoyadas son evaluadas por el Ayuntamiento para ver si son viables y cuánto valen."
feature_4_html: "Al final hay una <strong>fase de votación</strong> donde se decide en cuáles se gasta esa parte del presupuesto."
image_alt: "Diferentes fases de un presupuesto participativo"
figcaption_html: 'Fase de "Apoyos" y fase de "Votación" de los presupuestos participativos.'
faq:
title: "¿Problemas técnicos?"
description: "Lee las preguntas frecuentes y resuelve tus dudas."
button: "Ver preguntas frecuentes"
other:
how_to_use: "Utiliza %{org_name} en tu municipio"
world: "Participación ciudadana directa en el mundo"
facts: "Hechos sobre participación ciudadana y democracia directa"
how_to_use:
text: |-
Utilízalo en tu municipio libremente o ayúdanos a mejorarlo, es software libre.
@@ -48,24 +58,12 @@ es:
Si eres programador, puedes ver el código y ayudarnos a mejorarlo en [aplicación Consul](https://github.com/ayuntamientomadrid 'github consul').
titles:
faq: Soluciones a problemas técnicos (FAQ)
how_it_works: "¿Cómo funciona este Portal de Gobierno Abierto?"
how_to_use: Utilízalo en tu municipio
participation: Participación y Transparencia - Próximas novedades
participation_facts: Hechos sobre participación ciudadana y democracia directa
participation_world: Participación ciudadana directa en el mundo
proposals_info: "¿Cómo funcionan las propuestas ciudadanas?"
signature_sheet: Hojas de firmas
spending_proposals_info: "¿Cómo funcionan los presupuestos participativos?"
opendata:
slogan: "Información sobre Datos abiertos."
title: Datos abiertos
privacy: Política de Privacidad
titles:
accessibility: Accesibilidad
conditions: Condiciones de uso
more_information: Más información
opendata: Datos abiertos
more_info: "Más información sobre %{org_name}"
privacy: Política de Privacidad
verify:
code: Código que has recibido en tu carta

View File

@@ -841,7 +841,6 @@ pt-BR:
description: Este portal usa o %{consul} que é %{open_source}. De Madrid para
o mundo.
faq: suporte técnico
more_info: Mais informações
open_data_text: Todos os detalhes sobre a Câmara estão disponíveis para acesso.
open_data_title: Dados abertos
open_source: programa de código aberto
@@ -860,9 +859,9 @@ pt-BR:
external_link_transparency: Transparência
external_link_transparency_url: https://transparency.consul
locale: 'Idioma:'
logo: Consul
logo: Consul logotipo
moderation: Moderação
more_information: Mais informações
more_info: Mais informações
my_account_link: Minha conta
my_activity_link: Minha atividade
new_notifications:
@@ -1149,7 +1148,7 @@ pt-BR:
mencionado previamente nos termos e condições de uso deste Portal.
conditions: Termos e condições de uso
general_terms: Termos e condições
more_information:
more_info:
description:
faq: Perguntas frequentes feitas sobre problemas técnicos
how_it_works: Descubra tudo que você pode fazer com este website.
@@ -1248,7 +1247,7 @@ pt-BR:
titles:
accessibility: Acessibilidade
conditions: Termos de uso
more_information: Mais informações
more_info: Mais informações
opendata: Dados abertos
privacy: Política de privacidade
verify:
@@ -1370,7 +1369,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:
@@ -1640,7 +1640,7 @@ pt-BR:
link: Mostrar propostas
text: Criar suas próprias propostas e apoiar aquelas de outros cidadãos
title: Propostas cidadãs
more_information: Mais informações sobre esta página
more_info: Mais informações sobre esta página
proposal:
alt: "Ícone proposta"
description: Espaço aberto para propostas cidadãs sobre o tipo de cidade dentro da qual nós queremos viver.

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

@@ -17,3 +17,4 @@ en:
plurk: "Plurk"
pinterest: "Pinterest"
email: "Email"
telegram: "Telegram"

View File

@@ -17,3 +17,4 @@ es:
plurk: "Plurk"
pinterest: "Pinterest"
email: "Correo electrónico"
telegram: "Telegram"

View File

@@ -329,7 +329,7 @@ Rails.application.routes.draw do
get :support_investments
get :print_investments
end
resources :investments, only: [:index, :new, :create, :show], controller: 'budgets/investments' do
resources :investments, only: [:index, :new, :create, :show, :destroy], controller: 'budgets/investments' do
post :vote, on: :member
get :print, on: :collection
end
@@ -355,6 +355,15 @@ Rails.application.routes.draw do
mount Tolk::Engine => '/translate', :as => 'tolk'
# more info pages
get 'more-information', to: 'pages#show', id: 'more_info/index', as: 'more_info'
get 'more-information/how-to-use', to: 'pages#show', id: 'more_info/how_to_use/index', as: 'how_to_use'
get 'more-information/faq', to: 'pages#show', id: 'more_info/faq/index', as: 'faq'
get 'more-information/proposals', to: 'pages#show', id: 'more_info/proposals/index', as: 'more_info_proposals'
get 'more-information/budgets', to: 'pages#show', id: 'more_info/budgets/index', as: 'more_info_budgets'
get 'more-information/participation/facts', to: 'pages#show', id: 'more_info/participation/facts', as: 'participation_facts'
get 'more-information/participation/world', to: 'pages#show', id: 'more_info/participation/world', as: 'participation_world'
# static pages
get '/blog' => redirect("http://blog.consul/")
resources :pages, path: '/', only: [:show]

View File

@@ -33,7 +33,8 @@ Setting.create(key: 'feature.twitter_login', value: "true")
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: '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')
@@ -422,7 +423,7 @@ end
puts ""
print "Creating Valuation Assignments"
(1..17).to_a.sample.times do
(1..50).to_a.sample.times do
Budget::Investment.reorder("RANDOM()").first.valuators << valuator.valuator
end

Some files were not shown because too many files have changed in this diff Show More