Merge pull request #1259 from consul/accessibility

Accessibility
This commit is contained in:
Raimond Garcia
2016-11-15 11:39:40 +01:00
committed by GitHub
28 changed files with 265 additions and 328 deletions

View File

@@ -51,6 +51,7 @@ $base-font-size: rem-calc(17);
$base-line: rem-calc(26); $base-line: rem-calc(26);
$small-font-size: rem-calc(14); $small-font-size: rem-calc(14);
$line-height: rem-calc(24); $line-height: rem-calc(24);
$tiny-font-size: rem-calc(12);
$brand: #004A83; $brand: #004A83;
$dark: darken($brand, 10%); $dark: darken($brand, 10%);
@@ -66,7 +67,6 @@ $link-hover: darken($link, 20%);
$debates: #008CCF; $debates: #008CCF;
$votes: #26AEEE;
$like: #7BD2A8; $like: #7BD2A8;
$unlike: #EF8585; $unlike: #EF8585;
@@ -79,7 +79,7 @@ $budget: #454372;
$budget-hover: #7571BF; $budget-hover: #7571BF;
$highlight: #E7F2FC; $highlight: #E7F2FC;
$featured: #FED900; $featured: #FFDC5C;
$footer-border: #BFC1C3; $footer-border: #BFC1C3;

View File

@@ -475,8 +475,16 @@ header {
&.active { &.active {
border-bottom: 2px solid $brand; border-bottom: 2px solid $brand;
color: $brand; color: $brand;
&:hover {
text-decoration: none;
}
} }
} }
h2 {
font-size: $base-font-size;
}
} }
.search-form-header input[type=text] { .search-form-header input[type=text] {
@@ -1247,13 +1255,14 @@ table {
} }
.share-supported { .share-supported {
text-align: center;
.social-share-button { .social-share-button {
display: inline-block; display: inline-block;
} }
.ssb-twitter { .ssb-twitter {
background: none; background: #45B0E3;
color: white; color: white;
height: $line-height; height: $line-height;
position: relative; position: relative;
@@ -1276,7 +1285,7 @@ table {
} }
.ssb-facebook { .ssb-facebook {
background: none; background: #3B5998;
color: white; color: white;
height: rem-calc(24); height: rem-calc(24);
position: relative; position: relative;
@@ -1299,7 +1308,7 @@ table {
} }
.ssb-google_plus { .ssb-google_plus {
background: none; background: #DE4C34;
color: white; color: white;
height: rem-calc(24); height: rem-calc(24);
position: relative; position: relative;
@@ -1550,7 +1559,7 @@ table {
.comment-votes { .comment-votes {
color: $text-medium; color: $text-medium;
font-size: rem-calc(14); font-size: $small-font-size;
line-height: $line-height; line-height: $line-height;
a { a {
@@ -1560,12 +1569,21 @@ table {
&:hover { &:hover {
color: $text-medium; color: $text-medium;
text-decoration: none;
.icon-like {
color: $like;
}
.icon-unlike {
color: $unlike;
}
} }
} }
[class^="icon-"] { [class^="icon-"] {
font-size: rem-calc(20); font-size: $base-font-size;
vertical-align: middle; vertical-align: sub;
} }
} }
@@ -1685,7 +1703,8 @@ table {
} }
.flag-disable, .flag-active { .flag-disable, .flag-active {
vertical-align: middle; line-height: 0;
vertical-align: sub;
} }
.flag-disable { .flag-disable {

View File

@@ -12,14 +12,21 @@
// ---------------------- // ----------------------
@mixin votes { @mixin votes {
background: $votes; border-top: 1px solid $border;
margin: 0 rem-calc(-12); margin-top: $line-height;
padding: rem-calc(14) rem-calc(12); padding: $line-height 0;
position: relative; position: relative;
@include breakpoint(medium) {
border-left: 1px solid $border;
border-top: 0;
margin-top: 0;
padding-top: $line-height*2;
}
.icon-like, .icon-unlike { .icon-like, .icon-unlike {
background: white; background: white;
border: 2px solid $votes; border: 2px solid $text-light;
border-radius: rem-calc(3); border-radius: rem-calc(3);
color: $text-light; color: $text-light;
display: inline-block; display: inline-block;
@@ -29,7 +36,6 @@
position: relative; position: relative;
&:hover, &:active { &:hover, &:active {
border-color: white;
color: white; color: white;
cursor: pointer; cursor: pointer;
opacity: 1 !important; opacity: 1 !important;
@@ -40,6 +46,7 @@
&:hover, &:active { &:hover, &:active {
background: $like; background: $like;
border: 2px solid $like;
} }
} }
@@ -47,50 +54,64 @@
&:hover, &:active { &:hover, &:active {
background: $unlike; background: $unlike;
border: 2px solid $unlike;
} }
} }
.like, .unlike { .like, .unlike {
line-height: rem-calc(48); line-height: rem-calc(48);
vertical-align: super; vertical-align: super;
text-decoration: none;
span.percentage { span.percentage {
color: white; color: $text;
display: inline-block; display: inline-block;
font-size: rem-calc(16); font-size: $small-font-size;
line-height: $line-height*2; line-height: $line-height*2;
padding-left: rem-calc(8); padding-right: $line-height/2;
vertical-align: top; vertical-align: top;
@include breakpoint(medium) {
display: block;
line-height: $line-height;
padding-right: 0;
}
} }
} }
.voted { .voted {
.icon-like, .icon-unlike { .icon-like, .icon-unlike {
border-color: white;
color: white; color: white;
} }
.icon-like { .icon-like {
background: $like; background: $like;
border: 2px solid $like;
} }
.icon-unlike { .icon-unlike {
background: $unlike; background: $unlike;
border: 2px solid $unlike;
} }
} }
.no-voted { .no-voted {
.icon-like, .icon-unlike { .icon-like, .icon-unlike {
opacity: .5; opacity: .3;
} }
} }
.total-votes { .total-votes {
color: white; font-weight: bold;
float: right; float: right;
line-height: $line-height*2; line-height: $line-height*2;
@include breakpoint(medium) {
display: block;
float: none;
}
} }
.divider { .divider {
@@ -99,64 +120,65 @@
} }
@mixin supports { @mixin supports {
background: $proposals; padding: $line-height 0;
margin: 0 rem-calc(-12);
padding: rem-calc(14) rem-calc(12);
position: relative; position: relative;
.progress { .progress {
background-color: rgba(255,255,255,.8); background: lighten($proposals, 35%);
height: $line-height/2; border: 1px solid lighten($proposals, 35%);
height: rem-calc(14);
position: relative;
.meter { .meter {
background: $like; background: $proposals;
border-radius: 0;
border-bottom-right-radius: rem-calc(3);
border-top-right-radius: rem-calc(3);
display: block; display: block;
height: $line-height/2; height: $line-height/2;
} }
} }
.percentage { .percentage {
font-size: rem-calc(10); color: $text;
color: $brand; font-size: $tiny-font-size;
vertical-align: top;
position: absolute; position: absolute;
top: 13px; right: 6px;
right: 20px; top: -2px;
vertical-align: top;
} }
abbr { abbr {
color: white; color: $text-medium;
&[title] { &[title] {
border-bottom: 1px dotted white; border-bottom: 1px dotted $text-medium;
} }
} }
.button-support { .button-support {
background: white; background: $proposals;
color: $text; color: $text;
display: inline-block; display: inline-block;
font-size: $small-font-size; font-size: $small-font-size;
margin-top: rem-calc(12); margin-top: rem-calc(12);
&:hover { &:hover, &:active {
background: darken($proposals, 35%); background: lighten($proposals, 25%);
color: white;
cursor: pointer; cursor: pointer;
} }
&:active {
opacity: .75;
}
} }
.total-supports { .total-supports {
color: white; color: $text;
display: block;
font-weight: bold;
text-align: center; text-align: center;
font-size: $small-font-size;
span { span {
display: block; display: block;
font-size: $small-font-size;
font-weight: normal;
} }
} }
@@ -165,23 +187,17 @@
} }
.supported { .supported {
color: white; color: $text;
margin-top: rem-calc(12); margin-top: rem-calc(12);
} }
} }
.message { .supports-container {
@include supports; border-top: 1px solid $border;
background: none;
border-top: 0;
@include breakpoint(medium) { @include breakpoint(medium) {
border-left: 1px solid $border; border-left: 1px solid $border;
margin: $line-height rem-calc(-25) 0 rem-calc(12); border-top: 0;
}
p {
font-size: $small-font-size;
} }
} }
@@ -276,7 +292,9 @@
// 03. Show participation // 03. Show participation
// ---------------------- // ----------------------
.debate-show, .proposal-show, .investment-project-show { .debate-show,
.proposal-show,
.investment-project-show {
p { p {
word-wrap: break-word; word-wrap: break-word;
@@ -413,47 +431,8 @@
} }
} }
.votes {
@include votes;
border: 0;
border-radius: 0;
margin: 0;
.total-votes {
display: block;
float: none;
line-height: $line-height;
}
@include breakpoint(small + rem-calc(1) and medium down) {
.in-favor, .against {
text-align: left;
width: rem-calc(100);
}
}
.divider {
display: none;
}
@include breakpoint(medium) {
.divider {
display: inline-block;
}
}
}
.supports { .supports {
@include supports; @include supports;
border: 0;
border-radius: 0;
margin: 0;
.total-supports {
display: block;
float: none;
line-height: $line-height;
}
} }
.leave-comment { .leave-comment {
@@ -478,6 +457,17 @@
word-break: break-word; word-break: break-word;
} }
.proposal-show, .investment-project-show {
.supports {
padding: $line-height/2 0 0;
}
.share-supported {
display: none;
}
}
// 04. List participation // 04. List participation
// ---------------------- // ----------------------
@@ -496,8 +486,7 @@
} }
.debate, .proposal, .investment-project { .debate, .proposal, .investment-project {
margin-bottom: 0; margin: $line-height/4 0;
margin-top: 0;
.panel { .panel {
background: white; background: white;
@@ -651,107 +640,30 @@
} }
} }
.debate { .debate, .debate-show {
.votes { .votes {
@include votes; @include votes;
border: 1px solid $votes;
margin: 0 rem-calc(-12);
@include breakpoint(medium) { .against {
border-top-left-radius: 3px; margin-left: $line-height/4;
border-bottom-left-radius: 3px;
margin: 0 rem-calc(-25) 0 rem-calc(12);
}
&:after {
content: none;
position: absolute;
display: block;
border-style: solid;
border-color: #166387 transparent transparent transparent;
bottom: -14px;
border-left-width: 0;
border-right-color: transparent;
right: -1px;
border-width: 13px 13px 0 0;
@include breakpoint(medium) {
content: "";
}
}
.total-votes {
display: inline-block;
line-height: $line-height;
margin-left: rem-calc(24);
padding-top: rem-calc(12);
vertical-align: top;
@include breakpoint(medium) {
display: block;
float: none;
line-height: $line-height*2;
margin-left: 0;
padding-top: 0;
}
} }
@include breakpoint(medium) { @include breakpoint(medium) {
.like, .unlike { text-align: center;
span.percentage {
display: block;
line-height: $line-height/2;
}
}
} }
} }
} }
.debate-show .votes {
border: 0;
padding: $line-height/2 0;
}
.proposal { .proposal {
.supports { .supports {
@include supports; @include supports;
border: 1px solid $proposals;
margin: 0 rem-calc(-12);
@include breakpoint(medium) {
border-top-left-radius: 3px;
border-bottom-left-radius: 3px;
margin: 0 rem-calc(-25) 0 rem-calc(12);
}
&:after {
content: none;
position: absolute;
display: block;
border-style: solid;
border-color: #664212 transparent transparent transparent;
bottom: -14px;
border-left-width: 0;
border-right-color: transparent;
right: -1px;
border-width: 13px 13px 0 0;
@include breakpoint(medium) {
content: "";
}
}
.total-supports {
display: inline-block;
line-height: $line-height;
padding-top: rem-calc(12);
vertical-align: top;
@include breakpoint(medium) {
display: block;
float: none;
margin-left: 0;
padding-top: 0;
}
}
} }
} }
@@ -759,20 +671,6 @@
.supports { .supports {
@include supports; @include supports;
background: none;
border: 0;
border-left: 1px solid $border;
margin: 0 rem-calc(-12);
min-height: rem-calc(180);
padding-top: 0;
@include breakpoint(medium) {
padding-top: $line-height*1.5;
}
&:after {
content: none;
}
.investment-project-amount { .investment-project-amount {
color: $budget; color: $budget;
@@ -802,33 +700,14 @@
font-weight: bold; font-weight: bold;
} }
.supported {
color: $budget;
margin-top: 0;
width: 100%;
}
.remove .icon-check-circle { .remove .icon-check-circle {
display: block; display: block;
font-size: rem-calc(70); font-size: rem-calc(70);
line-height: rem-calc(70); line-height: rem-calc(70);
} }
.share-supported {
.ssb-twitter,
.ssb-facebook,
.ssb-google_plus {
color: $budget;
}
}
} }
} }
.investment-project-show .supports {
border: 0;
}
.proposals-summary { .proposals-summary {
.panel { .panel {
@@ -903,7 +782,14 @@
} }
.button-support { .button-support {
background: $text;
color: $featured;
margin-top: 0; margin-top: 0;
&:hover {
background: white;
color: $text;
}
} }
.participation-not-allowed { .participation-not-allowed {
@@ -924,6 +810,7 @@
.supported { .supported {
margin-top: 0; margin-top: 0;
font-size: $small-font-size;
} }
.share-supported { .share-supported {
@@ -931,7 +818,10 @@
.ssb-twitter, .ssb-twitter,
.ssb-facebook, .ssb-facebook,
.ssb-google_plus { .ssb-google_plus {
height: rem-calc(33); background: none;
color: $text;
height: rem-calc(33) !important;
&:before { &:before {
font-size: rem-calc(18); font-size: rem-calc(18);

View File

@@ -6,13 +6,17 @@
<span class="in_favor"> <span class="in_favor">
<% if can?(:vote, comment) %> <% if can?(:vote, comment) %>
<%= link_to vote_comment_path(comment, value: 'yes'), <%= link_to vote_comment_path(comment, value: 'yes'),
method: "post", remote: true do %> method: "post", remote: true, title: t('votes.agree') do %>
<span class="icon-angle-up"> <span class="icon-like">
<span class="sr-only"><%= t('votes.agree') %></span> <span class="sr-only"><%= t('votes.agree') %></span>
</span> </span>
<% end %> <% end %>
<% else %> <% else %>
<span class="icon-angle-up"></span> <%= link_to new_user_session_path do %>
<span class="icon-like">
<span class="sr-only"><%= t('votes.agree') %></span>
</span>
<% end %>
<% end %> <% end %>
<%= comment.total_likes %> <%= comment.total_likes %>
</span> </span>
@@ -20,13 +24,15 @@
<span class="against"> <span class="against">
<% if can?(:vote, comment) %> <% if can?(:vote, comment) %>
<%= link_to vote_comment_path(comment, value: 'no'), <%= link_to vote_comment_path(comment, value: 'no'),
method: "post", remote: true do %> method: "post", remote: true, title: t('votes.disagree') do %>
<span class="icon-angle-down"> <span class="icon-unlike">
<span class="sr-only"><%= t('votes.disagree') %></span> <span class="sr-only"><%= t('votes.disagree') %></span>
</span> </span>
<% end %> <% end %>
<% else %> <% else %>
<span class="icon-angle-down"></span> <span class="icon-unlike">
<span class="sr-only"><%= t('votes.disagree') %></span>
</span>
<% end %> <% end %>
<%= comment.total_dislikes %> <%= comment.total_dislikes %>
</span> </span>
@@ -40,26 +46,40 @@
<span class="in_favor"> <span class="in_favor">
<% if can?(:vote, comment) %> <% if can?(:vote, comment) %>
<%= link_to vote_comment_path(comment, value: 'yes'), <%= link_to vote_comment_path(comment, value: 'yes'),
method: "post", remote: true do %> method: "post", remote: true, title: t('votes.agree') do %>
<span class="icon-angle-up"></span> <span class="icon-like">
<span class="sr-only"><%= t('votes.agree') %></span>
</span>
<% end %> <% end %>
<% else %> <% else %>
<span class="icon-angle-up"></span> <%= link_to new_user_session_path do %>
<span class="icon-like">
<span class="sr-only"><%= t('votes.agree') %></span>
</span>
<% end %>
<% end %> <% end %>
<%= comment.total_likes %> <%= comment.total_likes %>
</span> </span>
<span class="against"> <span class="against">
<% if can?(:vote, comment) %> <% if can?(:vote, comment) %>
<%= link_to vote_comment_path(comment, value: 'no'), <%= link_to vote_comment_path(comment, value: 'no'),
method: "post", remote: true do %> method: "post", remote: true, title: t('votes.disagree') do %>
<span class="icon-angle-down"></span> <span class="icon-unlike">
<span class="sr-only"><%= t('votes.disagree') %></span>
</span>
<% end %> <% end %>
<% else %> <% else %>
<span class="icon-angle-down"></span> <%= link_to new_user_session_path do %>
<span class="icon-unlike">
<span class="sr-only"><%= t('votes.disagree') %></span>
</span>
<% end %>
<% end %> <% end %>
<%= comment.total_dislikes %> <%= comment.total_dislikes %>
</span> </span>
</div> </div>
<div class="participation-not-allowed" style='display:none' aria-hidden="false"> <div class="participation-not-allowed" style='display:none' aria-hidden="false">
<%= t("votes.comment_unauthenticated", <%= t("votes.comment_unauthenticated",
signin: link_to(t("votes.signin"), new_user_session_path), signin: link_to(t("votes.signin"), new_user_session_path),

View File

@@ -48,7 +48,7 @@
</div> </div>
</div> </div>
<div id="<%= dom_id(debate) %>_votes" class="small-12 medium-3 column text-center"> <div id="<%= dom_id(debate) %>_votes" class="small-12 medium-3 column">
<%= render 'debates/votes', debate: debate %> <%= render 'debates/votes', debate: debate %>
</div> </div>

View File

@@ -6,6 +6,8 @@
<% end %> <% end %>
<main> <main>
<h1 class="sr-only"><%= t("shared.outline.debates") %></h1>
<div class="row"> <div class="row">
<div id="debates" class="debates-list small-12 medium-9 column"> <div id="debates" class="debates-list small-12 medium-9 column">

View File

@@ -45,10 +45,8 @@
<aside class="small-12 medium-3 column"> <aside class="small-12 medium-3 column">
<div class="sidebar-divider"></div> <div class="sidebar-divider"></div>
<h3><%= t("votes.supports") %></h3> <h3><%= t("votes.supports") %></h3>
<div class="text-center"> <div id="<%= dom_id(@debate) %>_votes">
<div id="<%= dom_id(@debate) %>_votes"> <%= render 'debates/votes', debate: @debate %>
<%= render 'debates/votes', debate: @debate %>
</div>
</div> </div>
<div class="sidebar-divider"></div> <div class="sidebar-divider"></div>
<h3><%= t("debates.show.share") %></h3> <h3><%= t("debates.show.share") %></h3>

View File

@@ -1,6 +1,7 @@
<%= paginator.render do -%> <%= paginator.render do -%>
<div class="pagination-centered"> <div class="pagination-centered">
<nav> <nav>
<h1 class="sr-only"><%= t("shared.outline.pagination") %></h1>
<ul class="pagination text-center margin-top" aria-label="Pagination"> <ul class="pagination text-center margin-top" aria-label="Pagination">
<%= first_page_tag unless current_page.first? %> <%= first_page_tag unless current_page.first? %>
<%= prev_page_tag unless current_page.first? %> <%= prev_page_tag unless current_page.first? %>

View File

@@ -22,6 +22,8 @@
<%= setting['per_page_code'].try(:html_safe) %> <%= setting['per_page_code'].try(:html_safe) %>
</head> </head>
<body> <body>
<h1 class="sr-only"><%= setting['org_name'] %></h1>
<div class="wrapper"> <div class="wrapper">
<%= render 'layouts/header' %> <%= render 'layouts/header' %>

View File

@@ -1,4 +1,4 @@
<div class="supports"> <div class="supports text-center">
<div class="in-favor"> <div class="in-favor">
<% if voted_for?(@featured_proposals_votes, proposal) %> <% if voted_for?(@featured_proposals_votes, proposal) %>
<div class="supported"> <div class="supported">

View File

@@ -52,25 +52,21 @@
</div> </div>
</div> </div>
<div id="<%= dom_id(proposal) %>_votes" class="small-12 medium-3 column"> <div id="<%= dom_id(proposal) %>_votes" class="small-12 medium-3 column supports-container">
<% if proposal.successfull? %> <div class="supports text-center">
<div class="message"> <% if proposal.successfull? %>
<p> <p>
<%= t("proposal_ballots.successfull", <%= t("proposal_ballots.successfull",
voting: link_to(t("proposal_ballots.voting"), proposal_ballots_path)).html_safe %> voting: link_to(t("proposal_ballots.voting"), proposal_ballots_path)).html_safe %>
</p> </p>
</div> <% elsif proposal.archived? %>
<% elsif proposal.archived? %>
<div class="message">
<strong><%= t("proposals.proposal.supports", count: proposal.total_votes) %></strong> <strong><%= t("proposals.proposal.supports", count: proposal.total_votes) %></strong>
<p><%= t("proposals.proposal.archived") %></p> <p><%= t("proposals.proposal.archived") %></p>
</div> <% else %>
<% else %>
<div class="text-center">
<%= render 'votes', <%= render 'votes',
{ proposal: proposal, vote_url: vote_proposal_path(proposal, value: 'yes') } %> { proposal: proposal, vote_url: vote_proposal_path(proposal, value: 'yes') } %>
</div> <% end %>
<% end %> </div>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,59 +1,56 @@
<div class="supports"> <div class="progress small-12 round">
<span class="meter" style="width: <%= progress_bar_percentage(proposal) %>%;"></span>
<div class="progress small-12 round"> <span class="percentage">
<span class="meter" style="width: <%= progress_bar_percentage(proposal) %>%;"></span> <%= supports_percentage(proposal) %>&nbsp;/&nbsp;<%= t("proposals.proposal.total_percent") %>
<span class="percentage">
<%= supports_percentage(proposal) %>&nbsp;/&nbsp;<%= t("proposals.proposal.total_percent") %>
</span>
</div>
<span class="total-supports">
<%= t("proposals.proposal.supports", count: proposal.total_votes) %>&nbsp;
<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>
<div class="in-favor"> <span class="total-supports">
<% if voted_for?(@proposal_votes, proposal) %> <%= t("proposals.proposal.supports", count: proposal.total_votes) %>&nbsp;
<div class="supported"> <span>
<%= t("proposals.proposal.already_supported") %> <abbr title="<%= t("proposals.proposal.reason_for_supports_necessary") %>">
</div> <%= t("proposals.proposal.supports_necessary", number: number_with_delimiter(Proposal.votes_needed_for_success)) %>
<% else %> </abbr>
<%= link_to vote_url, </span>
class: "button button-support small expanded", </span>
title: t('proposals.proposal.support_title'), method: "post", remote: true do %>
<%= t("proposals.proposal.support") %> <div class="in-favor">
<% end %> <% 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") %>
<% end %> <% 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 %> <% end %>
</div> </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 %>

View File

@@ -6,6 +6,8 @@
<% end %> <% end %>
<main> <main>
<h1 class="sr-only"><%= t("shared.outline.proposals") %></h1>
<div class="row"> <div class="row">
<div id="proposals" class="proposals-list small-12 medium-9 column"> <div id="proposals" class="proposals-list small-12 medium-9 column">

View File

@@ -102,22 +102,20 @@
<aside class="small-12 medium-3 column"> <aside class="small-12 medium-3 column">
<div class="sidebar-divider"></div> <div class="sidebar-divider"></div>
<h3><%= t("votes.supports") %></h3> <h3><%= t("votes.supports") %></h3>
<div id="<%= dom_id(@proposal) %>_votes"> <div id="<%= dom_id(@proposal) %>_votes" class="supports text-center">
<% if @proposal.successfull? %> <% if @proposal.successfull? %>
<p> <p>
<%= t("proposal_ballots.successfull", <%= t("proposal_ballots.successfull",
voting: link_to(t("proposal_ballots.voting"), proposal_ballots_path)).html_safe %> voting: link_to(t("proposal_ballots.voting"), proposal_ballots_path)).html_safe %>
</p> </p>
<% elsif @proposal.archived? %> <% elsif @proposal.archived? %>
<p class="text-center"> <p>
<strong><%= t("proposals.proposal.supports", count: @proposal.total_votes) %></strong> <strong><%= t("proposals.proposal.supports", count: @proposal.total_votes) %></strong>
</p> </p>
<p><%= t("proposals.proposal.archived") %></p> <p><%= t("proposals.proposal.archived") %></p>
<% else %> <% else %>
<div class="text-center"> <%= render 'votes',
<%= render 'votes', { proposal: @proposal, vote_url: vote_proposal_path(@proposal, value: 'yes') } %>
{ proposal: @proposal, vote_url: vote_proposal_path(@proposal, value: 'yes') } %>
</div>
<% end %> <% end %>
</div> </div>
<div id="social-share" class="sidebar-divider"></div> <div id="social-share" class="sidebar-divider"></div>

View File

@@ -1,7 +1,9 @@
<section class="submenu"> <div class="submenu">
<% valid_orders.each do |order| %> <% valid_orders.each do |order| %>
<%= link_to t("#{i18n_namespace}.orders.#{order}"), <%= link_to current_path_with_query_params(order: order, page: 1), class: order == @current_order ? 'active' : '' do %>
current_path_with_query_params(order: order, page: 1), <%= content_tag(order == @current_order ? :h2 : :span) do %>
class: order == @current_order ? 'active' : '' %> <%= t("#{i18n_namespace}.orders.#{order}") %>
<% end %>
<% end %>
<% end %> <% end %>
</section> </div>

View File

@@ -1,4 +1,5 @@
<div id="search_form" class="search-form-header"> <div id="search_form" class="search-form-header">
<h1 class="sr-only"><%= t("shared.outline.searcher") %></h1>
<%= form_tag search_path, method: :get do %> <%= form_tag search_path, method: :get do %>
<div class="input-group"> <div class="input-group">
<label class="sr-only"><%= t("#{i18n_namespace}.title") %></label> <label class="sr-only"><%= t("#{i18n_namespace}.title") %></label>

View File

@@ -1,8 +1,7 @@
<section class="top-links hide-for-small-only"> <div class="top-links hide-for-small-only">
<div class="row"> <div class="row">
<%= render "shared/locale_switcher" %> <%= render "shared/locale_switcher" %>
<div class="external-links"> <div class="external-links">
<%= link_to setting['org_name'], root_path, class: ("selected" unless current_page?("/opendata")) %>&nbsp;|
<%= link_to t("layouts.header.external_link_transparency"), t("layouts.header.external_link_transparency_url") %>&nbsp;| <%= link_to t("layouts.header.external_link_transparency"), t("layouts.header.external_link_transparency_url") %>&nbsp;|
<%= link_to t("layouts.header.external_link_opendata"), "/opendata", class: ("selected" if current_page?("/opendata")) %> <%= link_to t("layouts.header.external_link_opendata"), "/opendata", class: ("selected" if current_page?("/opendata")) %>
<% if setting['blog_url'] %> <% if setting['blog_url'] %>
@@ -13,4 +12,4 @@
<% end %> <% end %>
</div> </div>
</div> </div>
</section> </div>

View File

@@ -49,7 +49,7 @@
</div> </div>
</div> </div>
<div id="<%= dom_id(spending_proposal) %>_votes" class="small-12 medium-3 column text-center"> <div id="<%= dom_id(spending_proposal) %>_votes" class="small-12 medium-3 column supports-container">
<%= render 'votes', <%= render 'votes',
{ spending_proposal: spending_proposal, vote_url: vote_spending_proposal_path(spending_proposal, value: 'yes') } %> { spending_proposal: spending_proposal, vote_url: vote_spending_proposal_path(spending_proposal, value: 'yes') } %>
</div> </div>

View File

@@ -1,4 +1,4 @@
<div class="supports"> <div class="supports text-center">
<% reason = spending_proposal.reason_for_not_being_votable_by(current_user) %> <% reason = spending_proposal.reason_for_not_being_votable_by(current_user) %>
<% voting_allowed = true unless reason.presence == :not_voting_allowed %> <% voting_allowed = true unless reason.presence == :not_voting_allowed %>
@@ -10,7 +10,7 @@
<div class="in-favor"> <div class="in-favor">
<% if user_voted_for %> <% if user_voted_for %>
<div class="supported"> <div class="supported callout success">
<%= t("spending_proposals.spending_proposal.already_supported") %> <%= t("spending_proposals.spending_proposal.already_supported") %>
</div> </div>
<% elsif voting_allowed %> <% elsif voting_allowed %>

View File

@@ -6,6 +6,8 @@
<% end %> <% end %>
<main> <main>
<h1 class="sr-only"><%= t("shared.outline.budget") %></h1>
<div class="row"> <div class="row">
<div id="investment-projects" class="investment-projects-list small-12 medium-9 column"> <div id="investment-projects" class="investment-projects-list small-12 medium-9 column">

View File

@@ -343,7 +343,7 @@ en:
other: "%{count} comments" other: "%{count} comments"
zero: No comments zero: No comments
proposal: Proposal proposal: Proposal
reason_for_supports_necessary: 2% of Census reason_for_supports_necessary: 1% of Census
support: Support support: Support
support_title: Support this proposal support_title: Support this proposal
supports: supports:
@@ -449,6 +449,12 @@ en:
categories: "Categories" categories: "Categories"
target_blank_html: " (link opens in new window)" target_blank_html: " (link opens in new window)"
unflag: Unflag unflag: Unflag
outline:
debates: Debates
proposals: Proposals
budget: Participatory budget
pagination: Pagination
searcher: Searcher
social: social:
blog: Blog blog: Blog
facebook: Facebook facebook: Facebook

View File

@@ -343,7 +343,7 @@ es:
other: "%{count} Comentarios" other: "%{count} Comentarios"
zero: Sin comentarios zero: Sin comentarios
proposal: Propuesta proposal: Propuesta
reason_for_supports_necessary: 2% del Censo reason_for_supports_necessary: 1% del Censo
support: Apoyar support: Apoyar
support_title: Apoyar esta propuesta support_title: Apoyar esta propuesta
supports: supports:
@@ -449,6 +449,12 @@ es:
categories: "Categorías" categories: "Categorías"
target_blank_html: " (se abre en ventana nueva)" target_blank_html: " (se abre en ventana nueva)"
unflag: Deshacer denuncia unflag: Deshacer denuncia
outline:
debates: Debates
proposals: Propuestas
budget: Presupuestos ciudadanos
pagination: Paginación
searcher: Buscador
social: social:
blog: Blog blog: Blog
facebook: Facebook facebook: Facebook

View File

@@ -1316,7 +1316,7 @@ fr:
other: "%{count} commentaires" other: "%{count} commentaires"
zero: Aucun commentaire zero: Aucun commentaire
proposal: Proposition proposal: Proposition
reason_for_supports_necessary: 2% du Recensement reason_for_supports_necessary: 1% du Recensement
support: Soutenir support: Soutenir
supports: supports:
one: 1 soutien one: 1 soutien

View File

@@ -39,7 +39,7 @@ en:
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. 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 2% 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. 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.
how_to_use: how_to_use:
text: |- text: |-
Use it in your local government or help us to improve it, it is free software. Use it in your local government or help us to improve it, it is free software.

View File

@@ -39,7 +39,7 @@ es:
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. 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 2% 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. 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.
how_to_use: how_to_use:
text: |- text: |-
Utilízalo en tu municipio libremente o ayúdanos a mejorarlo, es software libre. Utilízalo en tu municipio libremente o ayúdanos a mejorarlo, es software libre.

View File

@@ -1214,8 +1214,8 @@ pt-BR:
podem ser apoiadas por todos os cidadãos registrados em Madrid que verificaram podem ser apoiadas por todos os cidadãos registrados em Madrid que verificaram
a sua conta na plataforma de participação. Desta forma, a cidadania e não a sua conta na plataforma de participação. Desta forma, a cidadania e não
alguém em seu nome, irá decidir quais são as propostas que valem a pena alguém em seu nome, irá decidir quais são as propostas que valem a pena
levar a cabo.\r\n\r\nAssim que a proposta atingir o apoio de 2% Madrid recenseada levar a cabo.\r\n\r\nAssim que a proposta atingir o apoio de 1% Madrid recenseada
(cerca de 53.000 pessoas), será estudado por um grupo conselheiro da cidade, (cerca de 28.000 pessoas), será estudado por um grupo conselheiro da cidade,
avançar além da fase de consulta popular, em que a cidadania de Madrid vai avançar além da fase de consulta popular, em que a cidadania de Madrid vai
votar se a proposta será realizada ou não. O prazo máximo para obter apoio votar se a proposta será realizada ou não. O prazo máximo para obter apoio
suficiente é de 12 meses." suficiente é de 12 meses."
@@ -1339,7 +1339,7 @@ pt-BR:
other: "%{count} comentários" other: "%{count} comentários"
zero: Nenhum comentário zero: Nenhum comentário
proposal: Proposta proposal: Proposta
reason_for_supports_necessary: 2% do Censo reason_for_supports_necessary: 1% do Censo
support: Apoiar support: Apoiar
supports: supports:
one: 1 apoio one: 1 apoio

View File

@@ -25,7 +25,6 @@ feature 'Proposal ballots' do
successfull_proposals.each do |proposal| successfull_proposals.each do |proposal|
within("#proposal_#{proposal.id}_votes") do within("#proposal_#{proposal.id}_votes") do
expect(page).to_not have_css(".supports")
expect(page).to have_content "This proposal has reached the required supports" expect(page).to have_content "This proposal has reached the required supports"
end end
end end
@@ -37,7 +36,6 @@ feature 'Proposal ballots' do
successfull_proposals.each do |proposal| successfull_proposals.each do |proposal|
visit proposal_path(proposal) visit proposal_path(proposal)
within("#proposal_#{proposal.id}_votes") do within("#proposal_#{proposal.id}_votes") do
expect(page).to_not have_css(".supports")
expect(page).to have_content "This proposal has reached the required supports" expect(page).to have_content "This proposal has reached the required supports"
end end
end end

View File

@@ -723,7 +723,6 @@ feature 'Proposals' do
within("#proposals-list") do within("#proposals-list") do
archived_proposals.each do |proposal| archived_proposals.each do |proposal|
within("#proposal_#{proposal.id}_votes") do within("#proposal_#{proposal.id}_votes") do
expect(page).to_not have_css(".supports")
expect(page).to have_content "This proposal has been archived and can't collect supports" expect(page).to have_content "This proposal has been archived and can't collect supports"
end end
end end
@@ -734,7 +733,6 @@ feature 'Proposals' do
archived_proposal = create(:proposal, :archived) archived_proposal = create(:proposal, :archived)
visit proposal_path(archived_proposal) visit proposal_path(archived_proposal)
expect(page).to_not have_css(".supports")
expect(page).to have_content "This proposal has been archived and can't collect supports" expect(page).to have_content "This proposal has been archived and can't collect supports"
end end