Commit Graph

326 Commits

Author SHA1 Message Date
Javi Martín
c3e60ff514 Add cards to SDG homepage 2021-01-14 17:47:21 +01:00
Javi Martín
3e74f4ab67 Remove unused card styles
There are no links inside a figure-card, so these styles didn't affect
any elements.

There are also no elements with `.title`, and the h3 inherits the white
color automatically form the figcaption.

On the other hand, the .see-all link is not inside an element with a
`card` class since commit fae52274a.
2021-01-14 17:45:14 +01:00
Javi Martín
9913b6a0c6 Simplify hovering color styles for headings
The default behavior for headings is to inherit the color, even in the
`:hover` style, and IMHO we can keep it this way, particularly in the
cards, which is the main place where we use headings inside links.
2021-01-14 17:45:14 +01:00
Javi Martín
99fe792e11 Group figure-card styles together
This way rules are a bit easier to follow.
2021-01-14 17:45:14 +01:00
Javi Martín
739236d585 Extract placeholder selector for button styles
So we can reuse it.
2021-01-14 17:38:01 +01:00
Javi Martín
2faf99c54b Extract advanced search into a component 2021-01-10 15:54:23 +01:00
Javi Martín
ceed3c18d3 Display SDG icons alongside tags
We're using the translation fallbacks for the icons, just like we do for
texts.

Note we use the `render?` method provided by view_component to make sure
the component will not be rendered when certain features are disabled.

Also note the `find_asset` method works differently in development and
production, and so we use different approaches here.
2021-01-09 14:53:54 +01:00
Javi Martín
73e605232e Merge pull request #4292 from consul/sdg_view
Add SDG view with related content
2020-12-28 21:01:14 +01:00
Javi Martín
327fe72835 Fix advanced search filter button position
This bug was introduced when foundation changed some of its rules
regarding when to clear floats, probably in commit 58071fd66.
2020-12-28 13:33:37 +01:00
Javi Martín
13fbf4e4b3 Use h2 tags in feed headers
We were jumping from h1 to h3 and some of these sections (cards and
processes) had h3 tags inside them.

My best guess is we were using h3 so the titles were smaller. So I'm
adding a CSS mixin to easily use a font size of a different heading tag.
2020-12-27 21:42:42 +01:00
Javi Martín
2fcfa7ebd7 Render participation feeds per SDG 2020-12-27 21:42:42 +01:00
Javi Martín
fae52274a4 Reuse code between feed components
They were all following the same format.

Note we need to group the `see_all` translation keys together (the same
way it's done with the `most_active` keys) so we don't have an unused
translation warning.

We're also moving the "see all" link in processes outside the feed
content; the same way it's done in debates and proposals and removing
unnecessary classes in the processes feed: the column class is causing
the processes not to be aligned with the debates above them, and the
margin bottom is not needed because the margin of the footer is already
enough.
2020-12-27 21:42:40 +01:00
Javi Martín
330efe5a41 Extract components for feeds 2020-12-27 16:44:51 +01:00
Javi Martín
18813c8f2a Specify styles are meant for the main header
The <header> tag is a standard HTML tag which can be used in any section
of the page. We were adding the main header styles to all <header> tags
because in the past it was in only <header> tag we used.

That's not the case anymore, so instead of overwriting these styles on
every other <header> tag, modifying the rule so it only selects the main
header makes the code easier to maintain.
2020-11-23 18:05:43 +01:00
Javi Martín
d4a360c7fb Simplify main layout styles
We were using a "push" div in order to force the footer to the bottom,
and were using a wrapper with a minimum height and negative margins.

The same thing can be accomplished using flex and making the wrapper
fill the empty space, which in my humble opinion simplifies the code and
makes it easier to follow.

We could further simplify the code by removing the wrapper div or the
footer wrapper, although I'm not sure the benefits overcome potential
inconveniences caused to other institutions who might have custom styles
based on the existence of these wrappers.
2020-11-23 18:04:55 +01:00
Javi Martín
64205ab15f Merge pull request #4238 from consul/footer_links
Use CSS to style footer links
2020-11-19 17:19:04 +01:00
Javi Martín
d0cb26c086 Use CSS to style footer links
This way additional elements added through the "footer" content block
will also have the same styles.
2020-11-08 14:02:12 +01:00
Javi Martín
09a7724307 Remove blank space after footer
In commit a8537f7e1 we added a `height: 100%` rule on links inside
cards, which is great for cards in the "Featured" section of the
homepage. However, the card in the "Open processes" section of the
homepage has as many links inside as open processes, causing its height
to be 300% if there are three processes and so expanding below the
footer.
2020-11-07 12:02:45 +01:00
Javi Martín
925f04e3f3 Allow loading icons from SVG files
There are a dozen ways to add an icon used for decoration. Each of them
offers advantages and disadvantages regarding these topics:

* Accessibility
* Ease of use for developers
* Ease of customization for CONSUL installations
* Maintainability
* Resulting file size
* Number of HTTP requests
* Browser support
* Robustness

We were using one of the most common ones: icon fonts. This technique
shines in many of these aspects. However, it misses the most important
one: accessibility. Users who configure their browser to display a
custom font would see "missing character" icons where our icons should
be displayed. Some users have pointed out they use a custom font because
they're dyslexic and webs using icon fonts make it extremely painful for
them [1].

Screen reader users might also be affected, since screen readers might
try to read the UTF-8 character used by the icon (even if it uses a UTF
Private Use Area) and will react to it in inconsistent ways. Since right
now browser support for different techniques to prevent it with CSS
ranges from non-existant (CSS speech module) to limited (use an
alternative text in the `content` property [2]), we've been adding an
HTML element with an `aria-hidden` attribute. However, by doing so the
ease of customizations for CONSUL installations is reduced, since
customizing ERB files is harder than customizing CSS.

Finally, font icons are infamous for not being that robust and
conflicting with UTF settings in certain browsers/devices. Recently Font
Awesome had a bug [3] because they added icons out of the Private Use
Area, and those icons could conflict with other UTF characters.

So, instead of loading Font Awesome icons with a font, we can add them
using their SVG files. There are several ways to do so, and all of them
solve the accessibility and robustness issues we've mentioned, so that
point won't be mentioned from now on.

All these techniques imply having to manually download Font Awesome
icons every time we upgrade Font Awesome, since the `font-awesome-sass`
gem doesn't include the `sprites/` and `svgs/` folders Font Awesome
includes in every release. So, from the maintenance poing of view,
they're all pretty lacking.

Method 1: SVG sprites with inline HTML

We can use SVG files where template icons are defined, like so:

<svg>
  <use xlink:href="solid.svg#search"></use>
</svg>

This technique has great browser support and it only generates one HTTP
request for all icons. However, it requires adding <svg> tags in many
views, making it harder to customize for CONSUL installations. For
developers we could reduce the burden by adding a helper for these
icons.

Downloading all the icons just to use one (or a few) might also be
inconvenient, since the total file size of these icons will be up to a
megabyte. To reduce the impact of this issue, we could either minimize
the SVG file, compress it, or generate a file with just the icons we
use. However, generating that custom file would be harder to maintain.

Method 2: CSS with one SVG icon per file

We can use the separate SVG files provided by Font Awesome, like so:

background: url("solid/search.svg");

Or, if we want to add a color to the icon:

backgound: blue;
mask-image: url("solid/search.svg");

Using this technique will result in one HTTP request per icon, which
might affect performance. Browser support is also limited to browsers
supporting mask-image, which at the time of writing is 95% of the
browsers, with the notable exception of Internet Explorer 11.

On the plus side, using CSS makes it easy to customize and (IMHO) easy
to work with on a daily basis.

Method 3: CSS with SVG sprites

We can use the aforementioned sprites provided by Font Awesome and use
them with CSS:

backgound: blue;
mask-image: url("solid.svg#search");

The number of HTTP requests and file size are similar to Method 1, while
browser support, ease of customization and ease of use are similar to
Method 2.

There's one extra gotcha: this method requires doing minor changes to
the files provided by Font Awesome, which means this solution is harder
to maintain, since we'll have to do the same changes every time we
upgrade Font Awesome. Mainly we need to add these changes to every
sprite file:

- <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+<!--
+This is a modified version of Font Awesome Free regular sprite file.
The icons are exactly as they originally were; the only changes are:
+
+* <symbol> tags have been replaced with <svg> tags and a <style> tag
has been added
+* A <style> tag has been added
+* The style="display:none" attribute of the main <svg> tag has been
removed
+-->
+<svg xmlns="http://www.w3.org/2000/svg">
+  <style>
+    svg svg { display: none }
+    svg svg:target { display: inline }
+  </style>

And then replace every <symbol> tag with a <svg> tag.

Method 4: CSS with Data URI

Finally, we can write the icons directly in the CSS:

backgound: blue;
mask-image: url('data:image/svg+xml;utf8,<svg...');

This method does not generate any extra HTTP requests and only downloads
the icons we need. However, maintaining it is really hard, since we need
to manually copy all the <svg> code for every icon we use, and do it
again every time we upgrade Font Awesome.

In this commit, we implement Method 2. To improve browser support, we're
falling back to font icons on browsers which don't support mask images.
So 5% of the browsers might still conflict with users changing the fonts
or with screen readers trying to announce the icon character. We believe
this is acceptable; the other option for these browsers would be to show
those icons as a background image, meaning the icons would always be
black, meaning users of these browsers would have trouble to distinguish
them if the background was dark as well.

Since we aren't sure whether the performance hit of having one HTTP
request per icon is overcome by only requesting the icons we actually
use, we aren't taking this factor into account when choosing between
methods 2 and 3. We believe this method will be the less painful one to
maintain and customize. Generating SVG sprites with just the icons we
use would increase performance, but it would make it harder for existing
CONSUL installations to use icons we haven't included in the sprites.

[1] https://speakerdeck.com/ninjanails/death-to-icon-fonts
[2] https://developer.mozilla.org/en-US/docs/Web/CSS/content#Browser_compatibility
[3] https://blog.fontawesome.com/fixing-a-unicode-bug-in-5-14-0/
2020-10-26 16:26:21 +01:00
Javi Martín
0824b64d4b Simplify display rules for show-children icon
We were using `display: inline` assuming that's the way elements will be
displayed by default when shown. However, those elements could be
displayed in a different way (inline-flex, for instance). So we avoid
any possible conflicts by using the `display: none` rule when we want to
hide the elements.

Besides, the code is now symmetrical and IMHO easier to follow.
2020-10-26 16:26:21 +01:00
Javi Martín
74e819e4e7 Use "regular" instead of "r" as parameter
Even if "r" is shorter, "regular" is easier to understand, and we're
going to store these icons in a folder named "regular", which is the
convention Font Awesome uses.
2020-10-26 16:26:21 +01:00
decabeza
732ad7fd6b Improve styles for admin sidebar
Also add a little animation on arrow when menu opens
2020-09-21 16:04:56 +02:00
Javi Martín
125106f9c0 Simplify code to have an off-canvas menu
While Foundations's off-canvas menu allows us to forget about writing
CSS, it also leads to complicated HTML.

Ideally Foundation would provide an easy way to simplify what we're
doing, but I haven't found anything in the documentation.

We could simplify the HTML a bit more if we used a CSS grid layout
instead of a flex one, but old browsers have better support for the
latter.

Note we're using `breakpoint(medium)` so we can group the CSS for small
screens and follow SCSS-Lint rules at the same time.

Also note behavior of the main area when the menu appears on small
screens is slightly different: it doesn't move the main content to the
right. I've done it this way so we don't have any overflow issues,
unlike the previous version.

There's a small issue using a label and a checkbox to enable/disable the
menu: sighted keyboard users with a small screen might not be able to
enable the menu. So we're adding the `:focus-within` pseudoclass so the
menu can be normally navigated using the keyboard. Even if old browsers
don't support this pseudoclass, we believe the probability of a sighted
user using a small screen, navigating with the keyboard and using an old
browser is really low, particularly in the admin area.

We're also adding the `aria-hidden` attribute on the label, since the
menu is never hidden for screen readers and so having a control to show
it could be confusing. Since the label is not focusable, we're complying
with the fourth ARIA rule:

> Do not use role="presentation" or aria-hidden="true" on a focusable
> element .
>
> Using either of these on a focusable element will result in some users
> focusing on 'nothing'.
2020-09-21 15:14:20 +02:00
decabeza
2363aa4c76 Avoid using a mixin for side menu and content styles 2020-09-21 15:14:20 +02:00
Javi Martín
a8a79fe97f Extract mixin to add font awesome icons
This way we can simplify the HTML and easily apply font awesome icons to
any element.

Note the mixin uses `extend`, which we generally try to avoid. It's OK
in this case, since `fa-` classes only have one rule, affecting the
content of its `::before` pseudo-element. Unfortunately we can't use
`include fa-content($fa-var-#{$icon})` because it's not valid SCSS. We
could make the mixin accept an icon instead of an icon name, and call it
using `has-fa-icon(r, $fa-var-plus-square)`. However, IMHO that would
make the code a bit more complex with no real benefit.
2020-09-08 13:32:08 +02:00
Javi Martín
1e70a3db02 Disable phase date fields when a phase is disabled
The JavaScript involved wasn't working since we removed the disable-date
attribute in commit 73ff6881.

We're also improving the JavaScript in two ways:

First, we trigger the `change` event immediately, so when the page loads
date fields are disabled when phases are disabled.

And second, we don't remove the selected dates when disabling a phase,
so disabling it and enabling it again will keep the selected values.
2020-08-15 13:31:32 +02:00
Javi Martín
0b83be6837 Apply banner default colors to dev seeds
Banners created through the admin form were getting the default color.
However, banners created by other means (like the `db:dev_seed` rake
task) were not getting these default values.

This feature was originally implemented when we were using Rails 4.
With Rails 5, we can provide default values to all new banners and
simplify the code at the same time thanks to its `attribute` method.

Now, when creating a new banner, instead of getting a blank space, we
get an empty line with the banner's default background color, which most
users won't know what it's about until they fill in the banner's title.
So we're not displaying the content of the banner when it's empty,
thanks to the `:empty` CSS pseudoclass.
2020-08-12 17:16:11 +02:00
Javi Martín
361b7ee09d Fix banner text alignment
Unlike the rest of the page, it had no left margin nor padding
whatsoever.
2020-08-12 17:01:40 +02:00
Javi Martín
14a5d82377 Fix banner overlapping with other content
In some sections we had negative top margins to compensate the header
bottom margin. However, when adding a banner between the header and
those sections, the negative margin caused the content of those sections
to overlap with the content of the banner.

Removing the negative margins when a banner is present solves the issue.
2020-08-12 17:01:40 +02:00
Javi Martín
1b21171602 Remove duplication in CSS for omniauth buttons
We were adding the same styles five times.
2020-07-27 14:47:42 +02:00
decabeza
e3539544a8 Remove google plus share button 2020-07-17 16:24:20 +02:00
Senén Rodero Rodríguez
31c0b4360d Improve the way to toggle comment responses
Co-Authored-By: Javi Martín <javim@elretirao.net>
2020-05-26 13:20:26 +02:00
Javi Martín
ae41becd3a Use CSS to hide reply forms
We were using inline styles and passing local variables around, while
the rule we were following is very simple: it's only hidden if it's a
form to reply to a comment.
2020-05-12 23:57:57 +02:00
Javi Martín
4627372a62 Use a <ul> tag for a list of comments
We were using a <ul> tag for a single comment, where the first element
of the list was the comment itself and the second element was the list
of replies.

IMHO it makes more sense to have a list of all comments, where every
element is a comment and inside it there's a list of replies.

We're also rendering the list even if it has no children so it's easier
to add comments through JavaScript. Then we use the :empty CSS selector
to hide the list if it's empty. However, since ERB adds whitespace if we
structure our code the usual way and current browsers don't recognize
elements with whitespace as empty, we have to use the `tag` helper so no
whitespace is added.
2020-05-12 23:57:16 +02:00
Javier Martín
5a80548fc8 Merge pull request #3973 from consul/cards-height
Replace equalizer to display flex on cards
2020-04-21 14:00:02 +02:00
decabeza
111e3d3083 Replaces icons of expand/collapse comments 2020-04-16 23:22:14 +02:00
decabeza
a8537f7e19 Replace equalizer to display flex on cards 2020-04-14 17:14:52 +02:00
Eduardo Moreira
9f948c150b Fix card description overflow 2020-02-18 09:36:19 -03:00
Julian Herrero
193e51d42f Enable Wordpress Oauth login and registration 2020-02-07 12:23:41 +07:00
decabeza
d163dee242 Fix menu styles 2020-01-18 11:10:11 +01:00
Alberto
34c75fec4b Merge pull request #3606 from consul/fontawesome
Add Font Awesome icons
2020-01-18 11:07:03 +01:00
Javier Martín
bae999299a Merge pull request #3900 from consul/fix_ckeditor_validation_error
Fix style for validation errors in HTML areas
2020-01-17 16:41:41 +01:00
Javier Martín
50c830a55f Merge pull request #3830 from PierreMesure/fixes-pagination-bug-on-mobile
Fix pagination problem on mobile
2020-01-17 16:12:21 +01:00
Javi Martín
dc485b0ac6 Fix style for validation errors in HTML areas
Rails automatically adds the field class to the validation error
message, and so it had an unusual height.
2020-01-09 20:33:11 +01:00
Pierre Mesure
1431a8379c Fix a CSS leak 2019-12-19 23:34:31 +01:00
Pierre Mesure
d32f9aca90 Backport AyuntamientoMadrid/consul/pull/248 2019-11-08 16:22:24 +01:00
Javi Martín
4ab3498892 Avoid jumping CKEditor
This is a hack: we're making the textarea have the same size as CKEditor
so when it's replaced the page won't jump.

A very similar hack was removed in commit e844b0b2. Back then I thought
this was a small issue we could live with, but the user experience turns
out to be a bit annoying, and it makes tests fail sometimes because
Capybara is trying to click something when the page jumps, and so it
misses the click.
2019-11-06 20:26:26 +01:00
Javi Martín
e844b0b2db Remove CKEditor divs
This way the HTML does not depend on CKEditor, and changing the editor
we use in textareas will require very few changes.
2019-10-25 17:00:18 +02:00
decabeza
974064a742 Update icons scss to use fontawesome icons 2019-10-23 15:49:15 +02:00
Senén Rodero Rodríguez
fd7cc624db Add new and create actions 2019-07-29 13:07:24 +02:00