merge with master
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -29,3 +29,5 @@
|
||||
# Mac finder artifacts
|
||||
.DS_Store
|
||||
.ruby-gemset
|
||||
|
||||
public/sitemap.xml
|
||||
@@ -1,6 +1,6 @@
|
||||
# Personalización
|
||||
|
||||
Puedes modificar consul y ponerle tu propia imagen, para esto debes primero hacer un fork de https://github.com/consul/consul creando un repositorio nuevo en Github. Puedes usar otro servicio como Gitlab, pero no te olvides de poner el enlace en el footer a tu repositorio en cumplimiento con la licencia de este proyecto (GPL Affero 3).
|
||||
Puedes modificar consul y ponerle tu propia imagen, para esto debes primero hacer un fork de [https://github.com/consul/consul](https://github.com/consul/consul) creando un repositorio nuevo en Github. Puedes usar otro servicio como Gitlab, pero no te olvides de poner el enlace en el footer a tu repositorio en cumplimiento con la licencia de este proyecto (GPL Affero 3).
|
||||
|
||||
Hemos creado una estructura específica donde puedes sobreescribir y personalizar la aplicación para que puedas actualizar sin que tengas problemas al hacer merge y se sobreescriban por error tus cambios. Intentamos que Consul sea una aplicación Ruby on Rails lo más plain vanilla posible para facilitar el acceso de nuevas desarrolladoras.
|
||||
|
||||
@@ -8,31 +8,32 @@ Hemos creado una estructura específica donde puedes sobreescribir y personaliza
|
||||
|
||||
Para adaptarlo puedes hacerlo a través de los directorios que están en custom dentro de:
|
||||
|
||||
* config/locales/custom/
|
||||
* app/assets/images/custom/
|
||||
* app/views/custom/
|
||||
* app/controllers/custom/
|
||||
* app/models/custom/
|
||||
* `config/locales/custom/`
|
||||
* `app/assets/images/custom/`
|
||||
* `app/views/custom/`
|
||||
* `app/controllers/custom/`
|
||||
* `app/models/custom/`
|
||||
|
||||
Aparte de estos directorios también cuentas con ciertos ficheros para:
|
||||
|
||||
* app/assets/stylesheets/custom.css
|
||||
* app/assets/javascripts/custom.js
|
||||
* Gemfile_custom
|
||||
* config/application.custom.rb
|
||||
* `app/assets/stylesheets/custom.css`
|
||||
* `app/assets/javascripts/custom.js`
|
||||
* `Gemfile_custom`
|
||||
* `config/application.custom.rb`
|
||||
|
||||
### Internacionalización
|
||||
|
||||
Si quieres modificar algún texto de la web deberías encontrarlos en los ficheros formato YML disponibles en *config/locales/*. Puedes leer la [guía de internacionalización](http://guides.rubyonrails.org/i18n.html) de Ruby on Rails sobre como funciona este sistema.
|
||||
Si quieres modificar algún texto de la web deberías encontrarlos en los ficheros formato YML disponibles en `config/locales/`. Puedes leer la [guía de internacionalización](http://guides.rubyonrails.org/i18n.html) de Ruby on Rails sobre como funciona este sistema.
|
||||
|
||||
Las adaptaciones los debes poner en el directorio *config/locales/custom/*, recomendamos poner solo los textos que quieras personalizar. Por ejemplo si quieres personalizar el texto de "Ayuntamiento de Madrid, 2016" que se encuentra en el footer en todas las páginas, primero debemos ubicar en que plantilla se encuentra (app/views/layouts/_footer.html.erb), vemos que en el código pone lo siguiente:
|
||||
```
|
||||
Las adaptaciones los debes poner en el directorio `config/locales/custom/`, recomendamos poner solo los textos que quieras personalizar. Por ejemplo si quieres personalizar el texto de "Ayuntamiento de Madrid, 2016" que se encuentra en el footer en todas las páginas, primero debemos ubicar en que plantilla se encuentra (`app/views/layouts/_footer.html.erb`), vemos que en el código pone lo siguiente:
|
||||
|
||||
```ruby
|
||||
<%= t("layouts.footer.copyright", year: Time.current.year) %>
|
||||
```
|
||||
|
||||
Y que en el fichero config/locales/es.yml sigue esta estructura (solo ponemos lo relevante para este caso):
|
||||
Y que en el fichero `config/locales/es.yml` sigue esta estructura (solo ponemos lo relevante para este caso):
|
||||
|
||||
```
|
||||
```yml
|
||||
es:
|
||||
layouts:
|
||||
footer:
|
||||
@@ -40,11 +41,11 @@ es:
|
||||
|
||||
```
|
||||
|
||||
Si creamos el fichero config/locales/custom/es.yml y modificamos "Ayuntamiento de Madrid" por el nombre de la organización que se este haciendo la modificación. Recomendamos directamente copiar los ficheros config/locales/ e ir revisando y corrigiendo las que querramos, borrando las líneas que no querramos traducir.
|
||||
Si creamos el fichero `config/locales/custom/es.yml` y modificamos "Ayuntamiento de Madrid" por el nombre de la organización que se este haciendo la modificación. Recomendamos directamente copiar los ficheros `config/locales/` e ir revisando y corrigiendo las que querramos, borrando las líneas que no querramos traducir.
|
||||
|
||||
### Imágenes
|
||||
|
||||
Si quieres sobreescribir alguna imagen debes primero fijarte el nombre que tiene, por defecto se encuentran en *app/assets/images*. Por ejemplo si quieres modificar *app/assets/images/logo_header.png* debes poner otra con ese mismo nombre en el directorio app/assets/images/custom. Los iconos que seguramente quieras modificar son:
|
||||
Si quieres sobreescribir alguna imagen debes primero fijarte el nombre que tiene, por defecto se encuentran en `app/assets/images`. Por ejemplo si quieres modificar `app/assets/images/logo_header.png` debes poner otra con ese mismo nombre en el directorio `app/assets/images/custom`. Los iconos que seguramente quieras modificar son:
|
||||
|
||||
* apple-touch-icon-200.png
|
||||
* icon_home.png
|
||||
@@ -55,13 +56,13 @@ Si quieres sobreescribir alguna imagen debes primero fijarte el nombre que tiene
|
||||
|
||||
### Vistas (HTML)
|
||||
|
||||
Si quieres modificar el HTML de alguna página puedes hacerlo copiando el HTML de *app/views* y poniendolo en *app/views/custom* respetando los subdirectorios que encuentres ahí. Por ejemplo si quieres modificar *app/views/pages/conditions.html* debes copiarlo y modificarla en app/views/custom/pages/conditions.html.erb
|
||||
Si quieres modificar el HTML de alguna página puedes hacerlo copiando el HTML de `app/views` y poniendolo en `app/views/custom` respetando los subdirectorios que encuentres ahí. Por ejemplo si quieres modificar `app/views/pages/conditions.html` debes copiarlo y modificarla en `app/views/custom/pages/conditions.html.erb`
|
||||
|
||||
### CSS
|
||||
|
||||
Si quieres cambiar algun selector CSS (de las hojas de estilo) puedes hacerlo en el fichero *app/assets/stylesheets/custom.scss*. Por ejemplo si quieres cambiar el color del header (.top-links) puedes hacerlo agregando:
|
||||
Si quieres cambiar algun selector CSS (de las hojas de estilo) puedes hacerlo en el fichero `app/assets/stylesheets/custom.scss`. Por ejemplo si quieres cambiar el color del header (`.top-links`) puedes hacerlo agregando:
|
||||
|
||||
```
|
||||
```css
|
||||
.top-links {
|
||||
background: red;
|
||||
}
|
||||
@@ -71,9 +72,9 @@ Usamos un preprocesador de CSS, [SASS, con la sintaxis SCSS](http://sass-lang.co
|
||||
|
||||
### Javascript
|
||||
|
||||
Si quieres agregar código Javascript puedes hacerlo en el fichero *app/assets/javascripts/custom.js". Por ejemplo si quieres que salga una alerta puedes poner lo siguiente:
|
||||
Si quieres agregar código Javascript puedes hacerlo en el fichero `app/assets/javascripts/custom.js`. Por ejemplo si quieres que salga una alerta puedes poner lo siguiente:
|
||||
|
||||
```
|
||||
```js
|
||||
$(function(){
|
||||
alert('foobar');
|
||||
});
|
||||
@@ -81,11 +82,11 @@ $(function(){
|
||||
|
||||
### Modelos
|
||||
|
||||
Si quieres agregar modelos nuevos, o modificar o agregar métodos a uno ya existente puedes hacerlo en *app/models/custom*. En el caso de los modelos antiguos debes primero hacer un require de la dependencia.
|
||||
Si quieres agregar modelos nuevos, o modificar o agregar métodos a uno ya existente puedes hacerlo en `app/models/custom`. En el caso de los modelos antiguos debes primero hacer un require de la dependencia.
|
||||
|
||||
Por ejemplo en el caso del Ayuntamiento de Madrid se requiere comprobar que el código postal durante la verificación sigue un cierto formato (empieza con 280). Esto se realiza creando este fichero en *app/models/custom/verification/residence.rb*:
|
||||
Por ejemplo en el caso del Ayuntamiento de Madrid se requiere comprobar que el código postal durante la verificación sigue un cierto formato (empieza con 280). Esto se realiza creando este fichero en `app/models/custom/verification/residence.rb`:
|
||||
|
||||
```
|
||||
```ruby
|
||||
require_dependency Rails.root.join('app', 'models', 'verification', 'residence').to_s
|
||||
|
||||
class Verification::Residence
|
||||
@@ -116,10 +117,10 @@ class Verification::Residence
|
||||
end
|
||||
```
|
||||
|
||||
No olvides poner los tests relevantes en *spec/models/custom*, siguiendo con el ejemplo pondriamos lo siguiente en *spec/models/custom/residence_spec.rb*:
|
||||
No olvides poner los tests relevantes en `spec/models/custom`, siguiendo con el ejemplo pondriamos lo siguiente en `spec/models/custom/residence_spec.rb`:
|
||||
|
||||
|
||||
```
|
||||
```ruby
|
||||
require 'rails_helper'
|
||||
|
||||
describe Verification::Residence do
|
||||
@@ -162,20 +163,20 @@ TODO
|
||||
|
||||
### Gemfile
|
||||
|
||||
Para agregar librerías (gems) nuevas puedes hacerlo en el fichero *Gemfile_custom*. Por ejemplo si quieres agregar la gema [rails-footnotes](https://github.com/josevalim/rails-footnotes) debes hacerlo agregandole
|
||||
Para agregar librerías (gems) nuevas puedes hacerlo en el fichero `Gemfile_custom`. Por ejemplo si quieres agregar la gema [rails-footnotes](https://github.com/josevalim/rails-footnotes) debes hacerlo agregandole
|
||||
|
||||
```
|
||||
```ruby
|
||||
gem 'rails-footnotes', '~> 4.0'
|
||||
```
|
||||
|
||||
Y siguiendo el flujo clásico en Ruby on Rails (bundle install y seguir con los pasos específicos de la gema en la documentación)
|
||||
Y siguiendo el flujo clásico en Ruby on Rails (`bundle install` y seguir con los pasos específicos de la gema en la documentación)
|
||||
|
||||
### application.rb
|
||||
|
||||
Cuando necesites extender o modificar el *config/application.rb* puedes hacerlo a través del fichero *config/application_custom.rb*. Por ejemplo si quieres modificar el idioma por defecto al inglés pondrías lo siguiente:
|
||||
Cuando necesites extender o modificar el `config/application.rb` puedes hacerlo a través del fichero `config/application_custom.rb`. Por ejemplo si quieres modificar el idioma por defecto al inglés pondrías lo siguiente:
|
||||
|
||||
|
||||
```
|
||||
```ruby
|
||||
module Consul
|
||||
class Application < Rails::Application
|
||||
config.i18n.default_locale = :en
|
||||
|
||||
5
Gemfile
5
Gemfile
@@ -7,7 +7,7 @@ gem 'pg', '~> 0.19.0'
|
||||
# Use SCSS for stylesheets
|
||||
gem 'sass-rails', '~> 5.0', '>= 5.0.4'
|
||||
# Use Uglifier as compressor for JavaScript assets
|
||||
gem 'uglifier', '>= 3.0.3'
|
||||
gem 'uglifier', '>= 3.0.4'
|
||||
# Use CoffeeScript for .coffee assets and views
|
||||
gem 'coffee-rails', '~> 4.2.1'
|
||||
# See https://github.com/rails/execjs#readme for more supported runtimes
|
||||
@@ -52,9 +52,10 @@ gem 'rollbar', '~> 2.13.3'
|
||||
gem 'delayed_job_active_record', '~> 4.1.0'
|
||||
gem 'daemons'
|
||||
gem 'devise-async'
|
||||
gem 'newrelic_rpm', '~> 3.17.0.325'
|
||||
gem 'newrelic_rpm', '~> 3.17.1.326'
|
||||
gem 'whenever', require: false
|
||||
gem 'pg_search'
|
||||
gem 'sitemap_generator'
|
||||
|
||||
gem 'ahoy_matey', '~> 1.4.2'
|
||||
gem 'groupdate', '~> 3.1.0' # group temporary data
|
||||
|
||||
47
Gemfile.lock
47
Gemfile.lock
@@ -67,7 +67,7 @@ GEM
|
||||
bcrypt (3.1.11)
|
||||
browser (2.3.0)
|
||||
builder (3.2.2)
|
||||
bullet (5.2.0)
|
||||
bullet (5.4.2)
|
||||
activesupport (>= 3.0.0)
|
||||
uniform_notifier (~> 1.10.0)
|
||||
byebug (9.0.6)
|
||||
@@ -111,12 +111,12 @@ GEM
|
||||
execjs
|
||||
coffee-script-source (1.10.0)
|
||||
concurrent-ruby (1.0.2)
|
||||
coveralls (0.8.15)
|
||||
coveralls (0.8.17)
|
||||
json (>= 1.8, < 3)
|
||||
simplecov (~> 0.12.0)
|
||||
term-ansicolor (~> 1.3)
|
||||
thor (~> 0.19.1)
|
||||
tins (>= 1.6.0, < 2)
|
||||
tins (~> 1.6)
|
||||
daemons (1.2.4)
|
||||
dalli (2.7.6)
|
||||
database_cleaner (1.5.3)
|
||||
@@ -170,8 +170,8 @@ GEM
|
||||
activesupport (>= 4.1)
|
||||
railties (>= 4.1)
|
||||
tzinfo (~> 1.2, >= 1.2.2)
|
||||
fuubar (2.1.1)
|
||||
rspec (~> 3.0)
|
||||
fuubar (2.2.0)
|
||||
rspec-core (~> 3.0)
|
||||
ruby-progressbar (~> 1.4)
|
||||
geocoder (1.4.0)
|
||||
globalid (0.3.7)
|
||||
@@ -186,7 +186,7 @@ GEM
|
||||
httpi (2.4.1)
|
||||
rack
|
||||
i18n (0.7.0)
|
||||
i18n-tasks (0.9.5)
|
||||
i18n-tasks (0.9.6)
|
||||
activesupport (>= 4.0.2)
|
||||
ast (>= 2.1.0)
|
||||
easy_translate (>= 0.5.0)
|
||||
@@ -212,7 +212,7 @@ GEM
|
||||
actionpack (>= 3.0.0)
|
||||
activesupport (>= 3.0.0)
|
||||
kgio (2.10.0)
|
||||
knapsack (1.13.0)
|
||||
knapsack (1.13.1)
|
||||
rake
|
||||
timecop (>= 0.1.0)
|
||||
launchy (2.4.3)
|
||||
@@ -231,14 +231,14 @@ GEM
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2016.0521)
|
||||
mini_portile2 (2.1.0)
|
||||
minitest (5.9.1)
|
||||
minitest (5.10.1)
|
||||
multi_json (1.12.1)
|
||||
multi_xml (0.5.5)
|
||||
multipart-post (2.0.0)
|
||||
net-scp (1.2.1)
|
||||
net-ssh (>= 2.6.5)
|
||||
net-ssh (3.2.0)
|
||||
newrelic_rpm (3.17.0.325)
|
||||
newrelic_rpm (3.17.1.326)
|
||||
nokogiri (1.6.8.1)
|
||||
mini_portile2 (~> 2.1.0)
|
||||
nori (2.6.0)
|
||||
@@ -271,7 +271,7 @@ GEM
|
||||
orm_adapter (0.5.0)
|
||||
paranoia (2.2.0)
|
||||
activerecord (>= 4.0, < 5.1)
|
||||
parser (2.3.1.4)
|
||||
parser (2.3.3.1)
|
||||
ast (~> 2.2)
|
||||
pg (0.19.0)
|
||||
pg_search (1.0.6)
|
||||
@@ -318,7 +318,7 @@ GEM
|
||||
thor (>= 0.18.1, < 2.0)
|
||||
rainbow (2.1.0)
|
||||
raindrops (0.17.0)
|
||||
rake (11.3.0)
|
||||
rake (12.0.0)
|
||||
redcarpet (3.3.4)
|
||||
referer-parser (0.3.0)
|
||||
request_store (1.3.1)
|
||||
@@ -327,10 +327,6 @@ GEM
|
||||
rinku (2.0.2)
|
||||
rollbar (2.13.3)
|
||||
multi_json
|
||||
rspec (3.5.0)
|
||||
rspec-core (~> 3.5.0)
|
||||
rspec-expectations (~> 3.5.0)
|
||||
rspec-mocks (~> 3.5.0)
|
||||
rspec-core (3.5.4)
|
||||
rspec-support (~> 3.5.0)
|
||||
rspec-expectations (3.5.0)
|
||||
@@ -381,6 +377,8 @@ GEM
|
||||
json (>= 1.8, < 3)
|
||||
simplecov-html (~> 0.10.0)
|
||||
simplecov-html (0.10.0)
|
||||
sitemap_generator (5.2.0)
|
||||
builder (~> 3.0)
|
||||
social-share-button (0.3.1)
|
||||
coffee-rails
|
||||
sass-rails
|
||||
@@ -401,15 +399,16 @@ GEM
|
||||
sshkit (1.11.4)
|
||||
net-scp (>= 1.1.2)
|
||||
net-ssh (>= 2.8.0)
|
||||
term-ansicolor (1.3.2)
|
||||
term-ansicolor (1.4.0)
|
||||
tins (~> 1.0)
|
||||
terminal-table (1.5.2)
|
||||
thor (0.19.1)
|
||||
terminal-table (1.7.3)
|
||||
unicode-display_width (~> 1.1.1)
|
||||
thor (0.19.4)
|
||||
thread (0.2.2)
|
||||
thread_safe (0.3.5)
|
||||
tilt (2.0.5)
|
||||
timecop (0.8.1)
|
||||
tins (1.11.0)
|
||||
tins (1.13.0)
|
||||
tolk (2.0.0)
|
||||
rails (>= 4.0)
|
||||
safe_yaml (>= 0.8.6)
|
||||
@@ -422,7 +421,7 @@ GEM
|
||||
tilt (>= 1.4, < 3)
|
||||
tzinfo (1.2.2)
|
||||
thread_safe (~> 0.1)
|
||||
uglifier (3.0.3)
|
||||
uglifier (3.0.4)
|
||||
execjs (>= 0.3.0, < 3)
|
||||
unicode-display_width (1.1.1)
|
||||
unicorn (5.1.0)
|
||||
@@ -491,7 +490,7 @@ DEPENDENCIES
|
||||
knapsack
|
||||
launchy
|
||||
letter_opener_web (~> 1.3.0)
|
||||
newrelic_rpm (~> 3.17.0.325)
|
||||
newrelic_rpm (~> 3.17.1.326)
|
||||
omniauth
|
||||
omniauth-facebook (~> 3.0.0)
|
||||
omniauth-google-oauth2 (~> 0.4.0)
|
||||
@@ -511,6 +510,7 @@ DEPENDENCIES
|
||||
rvm1-capistrano3
|
||||
sass-rails (~> 5.0, >= 5.0.4)
|
||||
savon
|
||||
sitemap_generator
|
||||
social-share-button
|
||||
spring
|
||||
spring-commands-rspec
|
||||
@@ -518,7 +518,10 @@ DEPENDENCIES
|
||||
tolk (~> 2.0.0)
|
||||
turbolinks
|
||||
turnout (~> 2.4.0)
|
||||
uglifier (>= 3.0.3)
|
||||
uglifier (>= 3.0.4)
|
||||
unicorn (~> 5.1.0)
|
||||
web-console (= 3.3.0)
|
||||
whenever
|
||||
|
||||
BUNDLED WITH
|
||||
1.13.6
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
Citizen Participation and Open Government Application
|
||||
|
||||
[](https://gitter.im/consul/consul?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
[](https://travis-ci.org/consul/consul)
|
||||
[](https://codeclimate.com/github/consul/consul)
|
||||
[](https://gemnasium.com/consul/consul)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
Aplicación de Participación Ciudadana y Gobierno Abierto
|
||||
|
||||
[](https://gitter.im/consul/consul?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
[](https://travis-ci.org/consul/consul)
|
||||
[](https://codeclimate.com/github/consul/consul)
|
||||
[](https://gemnasium.com/consul/consul)
|
||||
|
||||
@@ -52,5 +52,6 @@ App.Comments =
|
||||
children_container_id = "#{$(this).data().id}_children"
|
||||
$("##{children_container_id}").toggle('slow')
|
||||
App.Comments.toggle_arrow(children_container_id)
|
||||
$(this).children('.js-child-toggle').toggle()
|
||||
false
|
||||
)
|
||||
|
||||
@@ -57,15 +57,15 @@ $brand: #004A83;
|
||||
$dark: darken($brand, 10%);
|
||||
|
||||
$text: #222222;
|
||||
$text-medium: #999999;
|
||||
$text-light: #CCCCCC;
|
||||
$text-medium: #515151;
|
||||
$text-light: #BFBFBF;
|
||||
|
||||
$border: #DEE0E3;
|
||||
|
||||
$link: #2895F1;
|
||||
$link: $brand;
|
||||
$link-hover: darken($link, 20%);
|
||||
|
||||
$debates: #008CCF;
|
||||
$debates: $brand;
|
||||
|
||||
$like: #7BD2A8;
|
||||
$unlike: #EF8585;
|
||||
@@ -74,6 +74,7 @@ $delete: #F04124;
|
||||
$check: #46DB91;
|
||||
|
||||
$proposals: #FFA42D;
|
||||
$proposals-dark: #794500;
|
||||
|
||||
$budget: #454372;
|
||||
$budget-hover: #7571BF;
|
||||
|
||||
@@ -56,6 +56,7 @@ a {
|
||||
}
|
||||
|
||||
&:focus {
|
||||
color: $link-hover;
|
||||
outline: 3px solid #ffbf47;
|
||||
}
|
||||
}
|
||||
@@ -263,6 +264,10 @@ a {
|
||||
//>>>>>>> budget
|
||||
//}
|
||||
|
||||
.pagination .current {
|
||||
background: $brand;
|
||||
}
|
||||
|
||||
// 02. Header
|
||||
// ----------
|
||||
|
||||
@@ -371,6 +376,10 @@ header {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.subnavigation {
|
||||
@@ -514,7 +523,7 @@ footer {
|
||||
p {
|
||||
font-size: $small-font-size;
|
||||
|
||||
.info a {
|
||||
&.info a {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
@@ -551,6 +560,7 @@ footer {
|
||||
|
||||
.subfooter {
|
||||
border-top: 1px solid $text-light;
|
||||
font-size: $small-font-size;
|
||||
padding-top: $line-height/2;
|
||||
}
|
||||
|
||||
@@ -582,7 +592,7 @@ footer {
|
||||
}
|
||||
}
|
||||
|
||||
h3.sidebar-title {
|
||||
h2.sidebar-title {
|
||||
border-top: 2px solid $brand;
|
||||
display: inline-block;
|
||||
font-size: rem-calc(16);
|
||||
@@ -1160,7 +1170,7 @@ table {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
&:hover, &:focus {
|
||||
background: white;
|
||||
color: #40A2D1;
|
||||
}
|
||||
@@ -1200,7 +1210,7 @@ table {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
&:hover, &:focus {
|
||||
background: white;
|
||||
color: #354F88;
|
||||
}
|
||||
@@ -1240,7 +1250,7 @@ table {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
&:hover, &:focus {
|
||||
background: white;
|
||||
color: #CE3E26;
|
||||
}
|
||||
@@ -1284,7 +1294,8 @@ table {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
&:hover, &:focus {
|
||||
background: white;
|
||||
color: #40A2D1;
|
||||
}
|
||||
}
|
||||
@@ -1307,7 +1318,8 @@ table {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
&:hover, &:focus {
|
||||
background: white;
|
||||
color: #354F88;
|
||||
}
|
||||
}
|
||||
@@ -1330,7 +1342,8 @@ table {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
&:hover, &:focus {
|
||||
background: white;
|
||||
color: #CE3E26;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,6 +363,13 @@
|
||||
font-size: rem-calc(15);
|
||||
margin-bottom: rem-calc(15);
|
||||
}
|
||||
|
||||
&.tags, &.geozone {
|
||||
|
||||
li {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.author-photo {
|
||||
@@ -386,7 +393,7 @@
|
||||
|
||||
aside {
|
||||
|
||||
h3 {
|
||||
h2 {
|
||||
border-top: 2px solid $brand;
|
||||
display: inline-block;
|
||||
font-size: rem-calc(16);
|
||||
@@ -524,7 +531,7 @@
|
||||
}
|
||||
|
||||
.label-proposal {
|
||||
color: $proposals;
|
||||
color: $proposals-dark;
|
||||
}
|
||||
|
||||
.label-investment-project {
|
||||
@@ -566,7 +573,7 @@
|
||||
}
|
||||
|
||||
.icon-proposals {
|
||||
color: $proposals;
|
||||
color: $proposals-dark;
|
||||
}
|
||||
|
||||
.icon-budget {
|
||||
@@ -1122,11 +1129,15 @@ ul.ballot-list {
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 0;
|
||||
|
||||
&.title {
|
||||
color: #FFD200;
|
||||
}
|
||||
|
||||
&.title-date {
|
||||
font-size: rem-calc(24);
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
.info {
|
||||
|
||||
@@ -75,7 +75,8 @@
|
||||
|
||||
<% if comment.children.size > 0 %>
|
||||
<%= link_to "", class: "js-toggle-children relative", data: {'id': "#{dom_id(comment)}"} do %>
|
||||
<span class="sr-only"><%= t("shared.show") %></span>
|
||||
<span class="sr-only js-child-toggle" style="display: none;"><%= t("shared.show") %></span>
|
||||
<span class="sr-only js-child-toggle"><%= t("shared.hide") %></span>
|
||||
<span id="<%= dom_id(comment) %>_children_arrow" class="icon-arrow-down"></span> <%= t("comments.comment.responses", count: comment.children.size) %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
</p>
|
||||
<div class="debate-description">
|
||||
<%= link_to debate.description, debate %>
|
||||
<%= debate.description %>
|
||||
<div class="truncate"></div>
|
||||
</div>
|
||||
<%= render "shared/tags", taggable: debate, limit: 5 %>
|
||||
|
||||
@@ -1,23 +1,41 @@
|
||||
<% voted_classes = css_classes_for_vote(@debate_votes, debate) %>
|
||||
<div class="votes">
|
||||
<div class="in-favor inline-block">
|
||||
<%= link_to vote_debate_path(debate, value: 'yes'),
|
||||
class: "like #{voted_classes[:in_favor]}", title: t('votes.agree'), method: "post", remote: true do %>
|
||||
<span class="icon-like">
|
||||
<span class="sr-only"><%= t('votes.agree') %></span>
|
||||
</span>
|
||||
<span class="percentage"><%= votes_percentage('likes', debate) %></span>
|
||||
<% if user_signed_in? %>
|
||||
<%= link_to vote_debate_path(debate, value: 'yes'),
|
||||
class: "like #{voted_classes[:in_favor]}", title: t('votes.agree'), method: "post", remote: true do %>
|
||||
<span class="icon-like">
|
||||
<span class="sr-only"><%= t('votes.agree') %></span>
|
||||
</span>
|
||||
<span class="percentage"><%= votes_percentage('likes', debate) %></span>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<div class="like">
|
||||
<span class="icon-like">
|
||||
<span class="sr-only"><%= t('votes.agree') %></span>
|
||||
</span>
|
||||
<span class="percentage"><%= votes_percentage('likes', debate) %></span>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<span class="divider"></span>
|
||||
|
||||
<div class="against inline-block">
|
||||
<%= link_to vote_debate_path(debate, value: 'no'), class: "unlike #{voted_classes[:against]}", title: t('votes.disagree'), method: "post", remote: true do %>
|
||||
<span class="icon-unlike">
|
||||
<span class="sr-only"><%= t('votes.disagree') %></span>
|
||||
</span>
|
||||
<span class="percentage"><%= votes_percentage('dislikes', debate) %></span>
|
||||
<% if user_signed_in? %>
|
||||
<%= link_to vote_debate_path(debate, value: 'no'), class: "unlike #{voted_classes[:against]}", title: t('votes.disagree'), method: "post", remote: true do %>
|
||||
<span class="icon-unlike">
|
||||
<span class="sr-only"><%= t('votes.disagree') %></span>
|
||||
</span>
|
||||
<span class="percentage"><%= votes_percentage('dislikes', debate) %></span>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<div class="unlike">
|
||||
<span class="icon-unlike">
|
||||
<span class="sr-only"><%= t('votes.disagree') %></span>
|
||||
</span>
|
||||
<span class="percentage"><%= votes_percentage('dislikes', debate) %></span>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -39,10 +57,12 @@
|
||||
</p>
|
||||
</div>
|
||||
<% elsif !user_signed_in? %>
|
||||
<div class="participation-not-allowed" style='display:none' aria-hidden="false">
|
||||
<%= t("votes.unauthenticated",
|
||||
signin: link_to(t("votes.signin"), new_user_session_path),
|
||||
signup: link_to(t("votes.signup"), new_user_registration_path)).html_safe %>
|
||||
<div tabindex="0">
|
||||
<div class="participation-not-allowed" style='display:none' aria-hidden="false">
|
||||
<%= t("votes.unauthenticated",
|
||||
signin: link_to(t("votes.signin"), new_user_session_path),
|
||||
signup: link_to(t("votes.signup"), new_user_registration_path)).html_safe %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -44,12 +44,12 @@
|
||||
|
||||
<aside class="small-12 medium-3 column">
|
||||
<div class="sidebar-divider"></div>
|
||||
<h3><%= t("votes.supports") %></h3>
|
||||
<h2><%= t("votes.supports") %></h2>
|
||||
<div id="<%= dom_id(@debate) %>_votes">
|
||||
<%= render 'debates/votes', debate: @debate %>
|
||||
</div>
|
||||
<div class="sidebar-divider"></div>
|
||||
<h3><%= t("debates.show.share") %></h3>
|
||||
<h2><%= t("debates.show.share") %></h2>
|
||||
<div class="social-share-full">
|
||||
<%= social_share_button_tag("#{@debate.title} #{setting['twitter_hashtag']}") %>
|
||||
<% if browser.device.mobile? %>
|
||||
|
||||
@@ -1,22 +1,19 @@
|
||||
<%= paginator.render do -%>
|
||||
<div class="pagination-centered">
|
||||
<nav>
|
||||
<h1 class="sr-only"><%= t("shared.outline.pagination") %></h1>
|
||||
<ul class="pagination text-center margin-top" aria-label="Pagination">
|
||||
<%= first_page_tag unless current_page.first? %>
|
||||
<%= prev_page_tag unless current_page.first? %>
|
||||
<ul class="pagination text-center margin-top" aria-label="Pagination">
|
||||
<%= first_page_tag unless current_page.first? %>
|
||||
<%= prev_page_tag unless current_page.first? %>
|
||||
|
||||
<% each_page do |page| -%>
|
||||
<% if page.left_outer? || page.right_outer? || page.inside_window? -%>
|
||||
<%= page_tag page %>
|
||||
<% elsif !page.was_truncated? -%>
|
||||
<%= gap_tag %>
|
||||
<% end -%>
|
||||
<% each_page do |page| -%>
|
||||
<% if page.left_outer? || page.right_outer? || page.inside_window? -%>
|
||||
<%= page_tag page %>
|
||||
<% elsif !page.was_truncated? -%>
|
||||
<%= gap_tag %>
|
||||
<% end -%>
|
||||
<% end -%>
|
||||
|
||||
<%= next_page_tag unless current_page.last? %>
|
||||
<%= last_page_tag unless current_page.last? %>
|
||||
</ul>
|
||||
</nav>
|
||||
<%= next_page_tag unless current_page.last? %>
|
||||
<%= last_page_tag unless current_page.last? %>
|
||||
</ul>
|
||||
</div>
|
||||
<% end -%>
|
||||
|
||||
@@ -41,13 +41,13 @@
|
||||
|
||||
<div class="subfooter row">
|
||||
<div class="small-12 medium-8 column">
|
||||
<p>
|
||||
<%= t("layouts.footer.copyright", year: Time.current.year) %> |
|
||||
<%= link_to t("layouts.footer.more_info"), page_path('more_information') %> |
|
||||
<%= link_to t("layouts.footer.privacy"), page_path('privacy') %> |
|
||||
<%= link_to t("layouts.footer.conditions"), page_path('conditions') %> |
|
||||
<%= link_to t("layouts.footer.accessibility"), page_path('accessibility') %>
|
||||
</p>
|
||||
<%= t("layouts.footer.copyright", year: Time.current.year) %> |
|
||||
<ul class="no-bullet inline-block">
|
||||
<li class="inline-block"><%= link_to t("layouts.footer.more_info"), page_path('more_information') %> |</li>
|
||||
<li class="inline-block"><%= link_to t("layouts.footer.privacy"), page_path('privacy') %> |</li>
|
||||
<li class="inline-block"><%= link_to t("layouts.footer.conditions"), page_path('conditions') %> |</li>
|
||||
<li class="inline-block"><%= link_to t("layouts.footer.accessibility"), page_path('accessibility') %></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="small-12 medium-4 column social">
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-center">S</td>
|
||||
<td>Presupuestos ciudadanos</td>
|
||||
<td>Presupuestos participativos</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-center">I</td>
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
</div>
|
||||
|
||||
<div class="small-12 medium-9 column">
|
||||
<h1>¿Cómo funcionan los presupuestos ciudadanos?</h1>
|
||||
<h1>¿Cómo funcionan los Presupuestos participativos?</h1>
|
||||
<h2 id="i">Explicación detallada del proceso</h2>
|
||||
<p>Próximamente se podrá encontrar aquí una descripción del proceso de participación ciudadana en los presupuestos.</p>
|
||||
<p>Descripción del proceso de participación ciudadana en los presupuestos.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<% provide :title do %><%= t("proposal_ballots.title") %><% end %>
|
||||
<div class="expanded no-margin-top margin-bottom dark-heading">
|
||||
<div class="row" data-equalizer>
|
||||
<div class="small-12 medium-6 column padding" data-equalizer-watch>
|
||||
@@ -11,7 +12,7 @@
|
||||
|
||||
<div class="small-12 medium-4 column info" data-equalizer-watch>
|
||||
<p class="title"><strong><%= t("proposal_ballots.date_title") %></strong></p>
|
||||
<h3><%= t("proposal_ballots.date") %></h3>
|
||||
<p class="title-date"><%= t("proposal_ballots.date") %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<div class="sidebar-divider"></div>
|
||||
<h3 class="sidebar-title"><%= t("shared.tags_cloud.categories") %></h3>
|
||||
<h2 class="sidebar-title"><%= t("shared.tags_cloud.categories") %></h2>
|
||||
<br>
|
||||
|
||||
<div id="categories" class="categories">
|
||||
<ul id="categories" class="no-bullet categories">
|
||||
<% @categories.each do |category| %>
|
||||
<%= link_to category.name, proposals_path(search: category.name) %>
|
||||
<li class="inline-block"><%= link_to category.name, proposals_path(search: category.name) %></li>
|
||||
<% end %>
|
||||
</div>
|
||||
</ul>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<div class="sidebar-divider"></div>
|
||||
<h3 class="sidebar-title"><%= t("shared.tags_cloud.districts") %></h3>
|
||||
<h2 class="sidebar-title"><%= t("shared.tags_cloud.districts") %></h2>
|
||||
<br>
|
||||
<%= link_to map_proposals_path, id: 'map', title: t("shared.tags_cloud.districts_list") do %>
|
||||
<%= image_tag("map.jpg", alt: t("shared.tags_cloud.districts_list")) %>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<div class="sidebar-divider"></div>
|
||||
<h3 class="sidebar-title"><%= t("proposals.index.top") %></h3>
|
||||
<h2 class="sidebar-title"><%= t("proposals.index.top") %></h2>
|
||||
|
||||
<p>
|
||||
<%= link_to t("proposals.index.top_link_proposals"), summary_proposals_path, class: "small" %><br>
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
<% end %>
|
||||
</p>
|
||||
<div class="proposal-description">
|
||||
<p><%= link_to proposal.summary, namespaced_proposal_path(proposal) %></p>
|
||||
<p><%= proposal.summary %></p>
|
||||
<div class="truncate"></div>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -53,20 +53,22 @@
|
||||
</div>
|
||||
|
||||
<div id="<%= dom_id(proposal) %>_votes" class="small-12 medium-3 column supports-container">
|
||||
<div class="supports text-center">
|
||||
<% if proposal.successfull? %>
|
||||
<% if proposal.successfull? %>
|
||||
<div class="padding text-center">
|
||||
<p>
|
||||
<%= t("proposal_ballots.successfull",
|
||||
voting: link_to(t("proposal_ballots.voting"), proposal_ballots_path)).html_safe %>
|
||||
</p>
|
||||
<% elsif proposal.archived? %>
|
||||
</div>
|
||||
<% elsif proposal.archived? %>
|
||||
<div class="padding text-center">
|
||||
<strong><%= t("proposals.proposal.supports", count: proposal.total_votes) %></strong>
|
||||
<p><%= t("proposals.proposal.archived") %></p>
|
||||
<% else %>
|
||||
<%= render 'votes',
|
||||
{ proposal: proposal, vote_url: vote_proposal_path(proposal, value: 'yes') } %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<% else %>
|
||||
<%= render 'votes',
|
||||
{ proposal: proposal, vote_url: vote_proposal_path(proposal, value: 'yes') } %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<div class="sidebar-divider"></div>
|
||||
<h3 class="sidebar-title"><%= t("proposals.index.retired_proposals") %></h3>
|
||||
<h2 class="sidebar-title"><%= t("proposals.index.retired_proposals") %></h2>
|
||||
|
||||
<% if params[:retired].blank? %>
|
||||
<p><%= link_to t("proposals.index.retired_proposals_link"), proposals_path(retired: 'all'), class: "small" %></p>
|
||||
|
||||
@@ -1,56 +1,66 @@
|
||||
<div class="progress small-12 round">
|
||||
<span class="meter" style="width: <%= progress_bar_percentage(proposal) %>%;"></span>
|
||||
<span class="percentage">
|
||||
<%= supports_percentage(proposal) %> / <%= t("proposals.proposal.total_percent") %>
|
||||
</span>
|
||||
</div>
|
||||
<div class="supports text-center">
|
||||
<div class="progress small-12 round">
|
||||
<span class="meter" style="width: <%= progress_bar_percentage(proposal) %>%;"></span>
|
||||
<span class="percentage">
|
||||
<%= supports_percentage(proposal) %> / <%= t("proposals.proposal.total_percent") %>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<span class="total-supports">
|
||||
<%= t("proposals.proposal.supports", count: proposal.total_votes) %>
|
||||
<span>
|
||||
<abbr title="<%= t("proposals.proposal.reason_for_supports_necessary") %>">
|
||||
<%= t("proposals.proposal.supports_necessary", number: number_with_delimiter(Proposal.votes_needed_for_success)) %>
|
||||
</abbr>
|
||||
<span class="total-supports">
|
||||
<%= t("proposals.proposal.supports", count: proposal.total_votes) %>
|
||||
<span>
|
||||
<abbr title="<%= t("proposals.proposal.reason_for_supports_necessary") %>">
|
||||
<%= t("proposals.proposal.supports_necessary", number: number_with_delimiter(Proposal.votes_needed_for_success)) %>
|
||||
</abbr>
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
|
||||
<div class="in-favor">
|
||||
<% if voted_for?(@proposal_votes, proposal) %>
|
||||
<div class="supported callout success">
|
||||
<%= t("proposals.proposal.already_supported") %>
|
||||
</div>
|
||||
<% else %>
|
||||
<%= link_to vote_url,
|
||||
class: "button button-support small expanded",
|
||||
title: t('proposals.proposal.support_title'), method: "post", remote: true do %>
|
||||
<%= t("proposals.proposal.support") %>
|
||||
<div class="in-favor">
|
||||
<% if voted_for?(@proposal_votes, proposal) %>
|
||||
<div class="supported callout success">
|
||||
<%= t("proposals.proposal.already_supported") %>
|
||||
</div>
|
||||
<% elsif user_signed_in? && proposal.votable_by?(current_user) %>
|
||||
<%= link_to vote_url,
|
||||
class: "button button-support small expanded",
|
||||
title: t('proposals.proposal.support_title'), method: "post", remote: true do %>
|
||||
<%= t("proposals.proposal.support") %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<div class="button button-support small expanded">
|
||||
<%= t("proposals.proposal.support") %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<% if user_signed_in? && current_user.organization? %>
|
||||
<div class="participation-not-allowed" style='display:none' aria-hidden="false">
|
||||
<p>
|
||||
<%= t("votes.organizations") %>
|
||||
</p>
|
||||
</div>
|
||||
<% elsif user_signed_in? && !proposal.votable_by?(current_user) %>
|
||||
<div tabindex="0">
|
||||
<div class="participation-not-allowed" style='display:none' aria-hidden="false">
|
||||
<p>
|
||||
<%= t("votes.verified_only",
|
||||
verify_account: link_to(t("votes.verify_account"), verification_path )).html_safe %>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<% elsif !user_signed_in? %>
|
||||
<div tabindex="0">
|
||||
<div class="participation-not-allowed" style='display:none' aria-hidden="false">
|
||||
<%= t("votes.unauthenticated",
|
||||
signin: link_to(t("votes.signin"), new_user_session_path),
|
||||
signup: link_to(t("votes.signup"), new_user_registration_path)).html_safe %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if voted_for?(@proposal_votes, proposal) && setting['twitter_handle'] %>
|
||||
<div class="share-supported">
|
||||
<%= social_share_button_tag("#{proposal.title} #{setting['twitter_hashtag']}", url: proposal_url(proposal), via: setting['twitter_handle']) %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<% if user_signed_in? && current_user.organization? %>
|
||||
<div class="participation-not-allowed" style='display:none' aria-hidden="false">
|
||||
<p>
|
||||
<%= t("votes.organizations") %>
|
||||
</p>
|
||||
</div>
|
||||
<% elsif user_signed_in? && !proposal.votable_by?(current_user)%>
|
||||
<div class="participation-not-allowed" style='display:none' aria-hidden="false">
|
||||
<p>
|
||||
<%= t("votes.verified_only",
|
||||
verify_account: link_to(t("votes.verify_account"), verification_path )).html_safe %>
|
||||
</p>
|
||||
</div>
|
||||
<% elsif !user_signed_in? %>
|
||||
<div class="participation-not-allowed" style='display:none' aria-hidden="false">
|
||||
<%= t("votes.unauthenticated",
|
||||
signin: link_to(t("votes.signin"), new_user_session_path),
|
||||
signup: link_to(t("votes.signup"), new_user_registration_path)).html_safe %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if voted_for?(@proposal_votes, proposal) && setting['twitter_handle'] %>
|
||||
<div class="share-supported">
|
||||
<%= social_share_button_tag("#{proposal.title} #{setting['twitter_hashtag']}", url: proposal_url(proposal), via: setting['twitter_handle']) %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@@ -101,25 +101,29 @@
|
||||
|
||||
<aside class="small-12 medium-3 column">
|
||||
<div class="sidebar-divider"></div>
|
||||
<h3><%= t("votes.supports") %></h3>
|
||||
<div id="<%= dom_id(@proposal) %>_votes" class="supports text-center">
|
||||
<h2><%= t("votes.supports") %></h2>
|
||||
<div id="<%= dom_id(@proposal) %>_votes">
|
||||
<% if @proposal.successfull? %>
|
||||
<p>
|
||||
<%= t("proposal_ballots.successfull",
|
||||
voting: link_to(t("proposal_ballots.voting"), proposal_ballots_path)).html_safe %>
|
||||
</p>
|
||||
<div class="padding text-center">
|
||||
<p>
|
||||
<%= t("proposal_ballots.successfull",
|
||||
voting: link_to(t("proposal_ballots.voting"), proposal_ballots_path)).html_safe %>
|
||||
</p>
|
||||
</div>
|
||||
<% elsif @proposal.archived? %>
|
||||
<p>
|
||||
<strong><%= t("proposals.proposal.supports", count: @proposal.total_votes) %></strong>
|
||||
</p>
|
||||
<p><%= t("proposals.proposal.archived") %></p>
|
||||
<div class="padding text-center">
|
||||
<p>
|
||||
<strong><%= t("proposals.proposal.supports", count: @proposal.total_votes) %></strong>
|
||||
</p>
|
||||
<p><%= t("proposals.proposal.archived") %></p>
|
||||
</div>
|
||||
<% else %>
|
||||
<%= render 'votes',
|
||||
{ proposal: @proposal, vote_url: vote_proposal_path(@proposal, value: 'yes') } %>
|
||||
<% end %>
|
||||
</div>
|
||||
<div id="social-share" class="sidebar-divider"></div>
|
||||
<h3><%= t("proposals.show.share") %></h3>
|
||||
<h2><%= t("proposals.show.share") %></h2>
|
||||
<div class="social-share-full">
|
||||
<%= social_share_button_tag("#{@proposal.title} #{setting['twitter_hashtag']}") %>
|
||||
<% if browser.device.mobile? %>
|
||||
|
||||
@@ -2,12 +2,14 @@
|
||||
<%= link_to t("shared.advanced_search.title"), "#", id: 'js-advanced-search-title', class: "advanced-search small" %>
|
||||
</div>
|
||||
|
||||
<div class="advanced-search-form clear">
|
||||
<div class="row advanced-search-form">
|
||||
<%= form_tag search_path, method: :get do %>
|
||||
<div id='js-advanced-search' data-advanced-search-terms=<%= @advanced_search_terms.present? %> style="display: none">
|
||||
|
||||
<div class="small-12 column">
|
||||
<label><%= t("shared.advanced_search.general") %></label>
|
||||
<label for="search">
|
||||
<%= t("shared.advanced_search.general") %>
|
||||
</label>
|
||||
<%= text_field_tag "search", params[:search],
|
||||
placeholder: t("shared.advanced_search.general_placeholder") %>
|
||||
</div>
|
||||
@@ -27,19 +29,21 @@
|
||||
</div>
|
||||
|
||||
<div id='js-custom-date' class='small-12 large-8 column' style="display: none">
|
||||
<div class='small-12 large-6 column'>
|
||||
<label><%= t("shared.advanced_search.from") %></label>
|
||||
<%= text_field_tag 'advanced_search[date_min]',
|
||||
params[:advanced_search].try(:[], :date_min),
|
||||
placeholder: t("shared.advanced_search.date_placeholder"),
|
||||
class: 'js-calendar' %>
|
||||
</div>
|
||||
<div class='small-12 large-6 column'>
|
||||
<label><%= t("shared.advanced_search.to") %></label>
|
||||
<%= text_field_tag 'advanced_search[date_max]',
|
||||
params[:advanced_search].try(:[], :date_max),
|
||||
placeholder: t("shared.advanced_search.date_placeholder"),
|
||||
class: 'js-calendar' %>
|
||||
<div class="row">
|
||||
<div class='small-12 large-6 column'>
|
||||
<label><%= t("shared.advanced_search.from") %> (<%= t("shared.advanced_search.date_placeholder") %>)</label>
|
||||
<%= text_field_tag 'advanced_search[date_min]',
|
||||
params[:advanced_search].try(:[], :date_min),
|
||||
placeholder: t("shared.advanced_search.date_placeholder"),
|
||||
class: 'js-calendar' %>
|
||||
</div>
|
||||
<div class='small-12 large-6 column'>
|
||||
<label><%= t("shared.advanced_search.to") %> (<%= t("shared.advanced_search.date_placeholder") %>)</label>
|
||||
<%= text_field_tag 'advanced_search[date_max]',
|
||||
params[:advanced_search].try(:[], :date_max),
|
||||
placeholder: t("shared.advanced_search.date_placeholder"),
|
||||
class: 'js-calendar' %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<span id="geozone" class="geozone">
|
||||
<%= link_to geozone_name(geozonable), proposals_path(search: geozone_name(geozonable)) %>
|
||||
</span>
|
||||
<ul id="geozone" class="no-bullet geozone">
|
||||
<li class="inline-block">
|
||||
<%= link_to geozone_name(geozonable), proposals_path(search: geozone_name(geozonable)) %>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -5,12 +5,14 @@
|
||||
<%= t("layouts.header.locale") %>
|
||||
</label>
|
||||
<select class="js-location-changer locale-switcher inline-block" name="locale-switcher" id="locale-switcher">
|
||||
<% I18n.available_locales.map do |loc| %>
|
||||
<option <%= "selected" if loc == I18n.locale %>
|
||||
value="<%= current_path_with_query_params(locale: loc) %>">
|
||||
<%= name_for_locale(loc) %>
|
||||
</option>
|
||||
<% end %>
|
||||
<optgroup label="<%= t('layouts.header.available_locales') %>">
|
||||
<% I18n.available_locales.map do |loc| %>
|
||||
<option <%= "selected" if loc == I18n.locale %>
|
||||
value="<%= current_path_with_query_params(locale: loc) %>">
|
||||
<%= name_for_locale(loc) %>
|
||||
</option>
|
||||
<% end %>
|
||||
</optgroup>
|
||||
</select>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
<h1 class="sr-only"><%= t("shared.outline.searcher") %></h1>
|
||||
<%= form_tag search_path, method: :get do %>
|
||||
<div class="input-group">
|
||||
<label class="sr-only"><%= t("#{i18n_namespace}.title") %></label>
|
||||
<input type="text" name="search" placeholder="<%= t("#{i18n_namespace}.placeholder") %>" class="input-group-field" value="<%= params[:search] %>">
|
||||
<label for="search_text" class="sr-only"><%= t("#{i18n_namespace}.title") %></label>
|
||||
<input type="text" name="search" placeholder="<%= t("#{i18n_namespace}.placeholder") %>" class="input-group-field" value="<%= params[:search] %>" id="search_text">
|
||||
<div class="input-group-button">
|
||||
<button type="submit" class="button" title="<%= t("#{i18n_namespace}.button") %>">
|
||||
<span class="sr-only"><%= t("#{i18n_namespace}.button") %></span>
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
<div id="tag-cloud" class="tag-cloud">
|
||||
<div id="tag-cloud">
|
||||
<div class="sidebar-divider"></div>
|
||||
<h3 class="sidebar-title"><%= t("shared.tags_cloud.tags") %></h3>
|
||||
<h2 class="sidebar-title"><%= t("shared.tags_cloud.tags") %></h2>
|
||||
<br>
|
||||
|
||||
<% @tag_cloud.tags.each do |tag| %>
|
||||
<%= link_to taggable_path(taggable, tag.name) do %>
|
||||
<span class="tag"><%= tag.name %></span>
|
||||
<ul class="no-bullet tag-cloud">
|
||||
<% @tag_cloud.tags.each do |tag| %>
|
||||
<li class="inline-block">
|
||||
<%= link_to taggable_path(taggable, tag.name) do %>
|
||||
<span class="tag"><%= tag.name %></span>
|
||||
<% end %>
|
||||
</li>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
<%- limit ||= nil %>
|
||||
|
||||
<% if taggable.tags.any? %>
|
||||
<span id="tags" class='tags'>
|
||||
<ul id="tags" class="no-bullet tags">
|
||||
<% taggable.tag_list_with_limit(limit).each do |tag| %>
|
||||
<%= link_to sanitize(tag.name), send("#{taggable.class.name.underscore.pluralize}_path", search: tag.name) %>
|
||||
<li class="inline-block"><%= link_to sanitize(tag.name), send("#{taggable.class.name.underscore.pluralize}_path", search: tag.name) %></li>
|
||||
<% end %>
|
||||
|
||||
<% if taggable.tags_count_out_of_limit(limit) > 0 %>
|
||||
<%= link_to "#{taggable.tags_count_out_of_limit(limit)}+",
|
||||
send("#{taggable.class.name.underscore}_path", taggable) %>
|
||||
<li class="inline-block">
|
||||
<%= link_to "#{taggable.tags_count_out_of_limit(limit)}+",
|
||||
send("#{taggable.class.name.underscore}_path", taggable) %>
|
||||
</li>
|
||||
<% end %>
|
||||
</span>
|
||||
</ul>
|
||||
<% end %>
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
<div class="top-links hide-for-small-only">
|
||||
<div class="row">
|
||||
<%= render "shared/locale_switcher" %>
|
||||
<div class="external-links">
|
||||
<%= link_to t("layouts.header.external_link_transparency"), t("layouts.header.external_link_transparency_url") %> |
|
||||
<%= link_to t("layouts.header.external_link_opendata"), "/opendata", class: ("selected" if current_page?("/opendata")) %>
|
||||
<ul class="no-bullet external-links">
|
||||
<li class="inline-block"><%= link_to t("layouts.header.external_link_transparency"), t("layouts.header.external_link_transparency_url") %> |</li>
|
||||
<li class="inline-block"><%= link_to t("layouts.header.external_link_opendata"), "/opendata", class: ("selected" if current_page?("/opendata")) %></li>
|
||||
<% if setting['blog_url'] %>
|
||||
|
|
||||
<%= link_to setting['blog_url'], title: t('shared.target_blank_html'), target: "_blank" do %>
|
||||
<%= t("layouts.header.external_link_blog") %>
|
||||
<% end %>
|
||||
<li class="inline-block">|
|
||||
<%= link_to setting['blog_url'], title: t('shared.target_blank_html'), target: "_blank" do %>
|
||||
<%= t("layouts.header.external_link_blog") %>
|
||||
<% end %>
|
||||
</li>
|
||||
<% end %>
|
||||
</div>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<div class="sidebar-divider"></div>
|
||||
<h3 class="sidebar-title"><%= t("spending_proposals.index.sidebar.geozones") %></h3>
|
||||
<h2 class="sidebar-title"><%= t("spending_proposals.index.sidebar.geozones") %></h2>
|
||||
<br>
|
||||
<div class="geozone">
|
||||
<%= link_to t('geozones.all'), spending_proposals_path(geozone: nil) %>
|
||||
@@ -10,6 +10,6 @@
|
||||
</div>
|
||||
|
||||
<div class="sidebar-divider"></div>
|
||||
<h3 class="sidebar-title"><%= t("spending_proposals.index.sidebar.feasibility") %></h3>
|
||||
<h2 class="sidebar-title"><%= t("spending_proposals.index.sidebar.feasibility") %></h2>
|
||||
<br>
|
||||
<%= link_to t('spending_proposals.index.sidebar.unfeasible'), spending_proposals_path(unfeasible: '1') %>
|
||||
@@ -38,7 +38,7 @@ set(:config_files, %w(
|
||||
unicorn.rb
|
||||
))
|
||||
|
||||
set :whenever_roles, -> { :cron }
|
||||
set :whenever_roles, -> { :app }
|
||||
|
||||
namespace :deploy do
|
||||
before :starting, 'rvm1:install:rvm' # install/update RVM
|
||||
|
||||
@@ -198,6 +198,7 @@ en:
|
||||
transparency_url: https://transparency.consul
|
||||
header:
|
||||
administration: Administration
|
||||
available_locales: Available languages
|
||||
debates: Debates
|
||||
external_link_blog: Blog
|
||||
external_link_opendata: Open data
|
||||
@@ -439,6 +440,7 @@ en:
|
||||
check_none: None
|
||||
collective: Collective
|
||||
flag: Flag as inappropriate
|
||||
hide: Hide
|
||||
print:
|
||||
print_button: Print this info
|
||||
search: Search
|
||||
@@ -467,7 +469,6 @@ en:
|
||||
debates: Debates
|
||||
proposals: Proposals
|
||||
budget: Participatory budget
|
||||
pagination: Pagination
|
||||
searcher: Searcher
|
||||
social:
|
||||
blog: Blog
|
||||
|
||||
@@ -198,6 +198,7 @@ es:
|
||||
transparency_url: https://transparency.consul
|
||||
header:
|
||||
administration: Administrar
|
||||
available_locales: Idiomas disponibles
|
||||
debates: Debates
|
||||
external_link_blog: Blog
|
||||
external_link_opendata: Datos abiertos
|
||||
@@ -225,6 +226,7 @@ es:
|
||||
proposal_ballot: Votaciones
|
||||
see_all: Ver propuestas
|
||||
budgets: Presupuestos ciudadanos
|
||||
spending_proposals: Presupuestos participativos
|
||||
legislation:
|
||||
help:
|
||||
alt: Selecciona el texto que quieres comentar y pulsa en el botón con el lápiz.
|
||||
@@ -439,6 +441,7 @@ es:
|
||||
check_none: Ninguno
|
||||
collective: Colectivo
|
||||
flag: Denunciar como inapropiado
|
||||
hide: Ocultar
|
||||
print:
|
||||
print_button: Imprimir esta información
|
||||
search: Buscar
|
||||
@@ -466,8 +469,7 @@ es:
|
||||
outline:
|
||||
debates: Debates
|
||||
proposals: Propuestas
|
||||
budget: Presupuestos ciudadanos
|
||||
pagination: Paginación
|
||||
budget: Presupuestos participativos
|
||||
searcher: Buscador
|
||||
social:
|
||||
blog: Blog
|
||||
|
||||
@@ -22,3 +22,7 @@
|
||||
every 1.minute do
|
||||
command "date > ~/cron-test.txt"
|
||||
end
|
||||
|
||||
every 1.day, at: '5:00 am' do
|
||||
rake "-s sitemap:refresh"
|
||||
end
|
||||
|
||||
36
config/sitemap.rb
Normal file
36
config/sitemap.rb
Normal file
@@ -0,0 +1,36 @@
|
||||
# not use compression
|
||||
class SitemapGenerator::FileAdapter
|
||||
def gzip(stream, data); stream.write(data); stream.close end
|
||||
end
|
||||
SitemapGenerator::Sitemap.namer = SitemapGenerator::SimpleNamer.new(:sitemap, extension: '.xml')
|
||||
|
||||
# default host
|
||||
SitemapGenerator::Sitemap.default_host = Setting["url"]
|
||||
|
||||
# sitemap generator
|
||||
SitemapGenerator::Sitemap.create do
|
||||
pages = Dir.entries(File.join(Rails.root,"app","views","pages"))
|
||||
pages.each do |page|
|
||||
page_name = page.split(".").first
|
||||
add page_name if page_name.present?
|
||||
end
|
||||
|
||||
add "help_translate"
|
||||
|
||||
add debates_path, priority: 0.7, changefreq: "daily"
|
||||
Debate.find_each do |debate|
|
||||
add debate_path(debate), lastmod: debate.updated_at
|
||||
end
|
||||
|
||||
add proposals_path, priority: 0.7, changefreq: "daily"
|
||||
Proposal.find_each do |proposal|
|
||||
add proposal_path(proposal), lastmod: proposal.updated_at
|
||||
end
|
||||
|
||||
add proposal_ballots_path
|
||||
|
||||
add spending_proposals_path, priority: 0.7, changefreq: "daily"
|
||||
SpendingProposal.find_each do |spending_proposal|
|
||||
add spending_proposal_path(spending_proposal), lastmod: spending_proposal.updated_at
|
||||
end
|
||||
end
|
||||
@@ -17,7 +17,8 @@ feature 'Debates' do
|
||||
debates.each do |debate|
|
||||
within('#debates') do
|
||||
expect(page).to have_content debate.title
|
||||
expect(page).to have_css("a[href='#{debate_path(debate)}']", text: debate.description)
|
||||
expect(page).to have_content debate.description
|
||||
expect(page).to have_css("a[href='#{debate_path(debate)}']", text: debate.title)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -100,9 +100,9 @@ feature 'Proposals' do
|
||||
within("#proposals") do
|
||||
expect(page).to have_css('.proposal', count: 1)
|
||||
expect(page).to have_content(proposal1.title)
|
||||
expect(page).to have_content(proposal1.summary)
|
||||
expect(page).to_not have_content(proposal2.title)
|
||||
expect(page).to have_css("a[href='#{management_proposal_path(proposal1)}']", text: proposal1.title)
|
||||
expect(page).to have_css("a[href='#{management_proposal_path(proposal1)}']", text: proposal1.summary)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -127,9 +127,9 @@ feature 'Proposals' do
|
||||
within("#proposals") do
|
||||
expect(page).to have_css('.proposal', count: 2)
|
||||
expect(page).to have_css("a[href='#{management_proposal_path(proposal1)}']", text: proposal1.title)
|
||||
expect(page).to have_css("a[href='#{management_proposal_path(proposal1)}']", text: proposal1.summary)
|
||||
expect(page).to have_content(proposal1.summary)
|
||||
expect(page).to have_css("a[href='#{management_proposal_path(proposal2)}']", text: proposal2.title)
|
||||
expect(page).to have_css("a[href='#{management_proposal_path(proposal2)}']", text: proposal2.summary)
|
||||
expect(page).to have_content(proposal2.summary)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -22,8 +22,8 @@ feature 'Proposals' do
|
||||
proposals.each do |proposal|
|
||||
within('#proposals') do
|
||||
expect(page).to have_content proposal.title
|
||||
expect(page).to have_content proposal.summary
|
||||
expect(page).to have_css("a[href='#{proposal_path(proposal)}']", text: proposal.title)
|
||||
expect(page).to have_css("a[href='#{proposal_path(proposal)}']", text: proposal.summary)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -156,7 +156,7 @@ module CommonActions
|
||||
|
||||
def expect_message_you_need_to_sign_in
|
||||
expect(page).to have_content 'You must Sign in or Sign up to continue'
|
||||
expect(page).to have_selector('.in-favor a', visible: false)
|
||||
expect(page).to have_selector('.in-favor', visible: false)
|
||||
end
|
||||
|
||||
def expect_message_you_need_to_sign_in_to_ballot
|
||||
@@ -177,7 +177,7 @@ module CommonActions
|
||||
|
||||
def expect_message_only_verified_can_vote_proposals
|
||||
expect(page).to have_content 'Only verified users can vote on proposals'
|
||||
expect(page).to have_selector('.in-favor a', visible: false)
|
||||
expect(page).to have_selector('.in-favor', visible: false)
|
||||
end
|
||||
|
||||
def expect_message_only_verified_can_vote_investments
|
||||
|
||||
Reference in New Issue
Block a user