Commit Graph

601 Commits

Author SHA1 Message Date
Javier Martín
2e4ff552c6 Merge pull request #3977 from consul/fix_ckeditor_drag_drop
Fix attaching images in CKEditor via drag and drop
2020-04-23 13:03:48 +02:00
Senén Rodero Rodríguez
9fd9ef8a54 Explicitly disable not used ckeditor plugins
All of these plugins are not used anywhere.

Change introduced at ckeditor initializer will ommit unneeded
precompilation of plugins assets on production environments.

Change introduced at ckeditor config file adresses the problem with assets
pipeline fallback on testing environments described here: #2711. Now plugins
that are explicitly disabled will not be precomiled when running ckeditor
javascript enabled feature specs.
2020-04-23 10:37:26 +02:00
Senén Rodero Rodríguez
1e3f7e0062 Allow to paste formatted content into ckeditors 2020-04-20 20:27:00 +02:00
Javi Martín
8e4f9d5173 Fix attaching images in CKEditor via drag and drop
The URL used for the generated request was
`/ckeditor/pictures&responseType=json`. This is a known issue in the
ckeditor gem, and it's suggested to add a `?` at the end of the URL in
order to fix it.

I haven't added a test for this case since simulating dropping a file in
the browser with Selenium/Capybara seems to be quite tricky and I
haven't found a solution guaranteed to correctly emulate what users do.
2020-04-18 12:39:30 +02:00
Javier Martín
56bc0c6e41 Merge pull request #3976 from rockandror/deactivate-ckeditor-file-attachment
Deactivate ckeditor file attachments feature
2020-04-18 12:38:31 +02:00
Senén Rodero Rodríguez
7466148408 Deactivate ckeditor file uploads feature
This feature was not working so its better to disable it completely.

By removing attachment_files endpoints related buttons and tabs from ckeditor UI are not shown to users anymore.
2020-04-18 09:21:25 +02:00
decabeza
111e3d3083 Replaces icons of expand/collapse comments 2020-04-16 23:22:14 +02:00
taitus
162462fc32 Use en-GB locale when current locale is not include in application.js
When a current locale is not defined on applicaton.js, datepicker load
the last jquery-ui/i18n/datepicker-xx defined.
Add 'jquery-ui/i18n/datepicker-en-GB' as last "require" to use when a current locale is not defined.
2020-02-19 15:58:55 +01:00
taitus
11cdcb72ef Add the rest of the languages available in "available_locales"
Of all the available locales on application.rb, the only ones that do not
have a correspondence with:
https://github.com/jquery/jquery-ui/tree/master/ui/i18n are [:so, :val]
2020-02-18 17:57:21 +01:00
Alceu Medeiros
6c3509fbf5 Add datepicker translations to available locales 2020-02-18 17:42:46 +01:00
taitus
14c38a2615 Force dateFormat to dd/mm/yyyy for all locales
To maintain consistency and the use of advanced search in the frontend,
we forced the expected date format for all languages. This is a temporary
solution that we should analyze in depth to allow different date formats
depending on the language in the filters.
2020-02-05 09:27:10 +01:00
Javi Martín
d19abd7ddb Fix uploading images through CKEditor's upload tab
The bug was introduced when we upgraded the ckeditor gem in commit
f240e007.
2020-01-17 21:52:21 +01:00
Javi Martín
6cb3047da2 Reuse partial to render a banner 2019-11-13 19:52:15 +01:00
Javi Martín
953fc7ddb0 Update deprecated jQuery syntax
These methods had already been superseeded by other methods since jQuery
1.7 or 1.8, and jQuery 3.0 will deprecate them.
2019-11-07 15:58:49 +01:00
Javi Martín
82b0a6a92d Remove new CSV report generation
The new CSV report was more configurable and could work on proposals,
processes and comments. However, it had several issues.

In the public area, by default it generated a blank file.

In the admin section, the report was hard to configure and it generated
a file with less quality than the old system.

So until we improve this system, we're bringing back the old investment
CSV exporter.

This commit reverts most of commit 9d1ca3bf.
2019-11-06 00:04:02 +01:00
Javi Martín
edf3ec8c2e Fix typo in selectable columns 2019-11-05 16:23:08 +01:00
Javi Martín
ed88105598 Remove unneeded variable declaration
It was generated by CoffeeScript, but in JavaScript we use `var` to
declare it.
2019-11-05 15:43:27 +01:00
Javi Martín
ac6d50e06b Remove tracker role
The current tracking section had a few issues:

* When browsing as an admin, this section becomes useless since no
investments are shown
* Browsing investments in the admin section, you're suddenly redirected
to the tracking section, making navigation confusing
* One test related to the officing dashboard failed due to these changes
and had been commented
* Several views and controller methods were copied from other sections,
leading to duplication and making the code harder to maintain
* Tracking routes were defined for proposals and legislation processes,
but in the tracking section only investments were shown
* Probably many more things, since these issues were detected after only
an hour reviewing and testing the code

So we're removing this untested section before releasing version 1.1. We
might add it back afterwards.
2019-11-01 20:08:46 +01:00
Javi Martín
ac1dd79f95 Fix unselecting all staff for a budget
We need to add a hidden field for each group of check boxes, so if we
don't check anything, the hidden field is sent to the server, indicating
nothing was selected. Without the hidden field, the server will not know
anything has been done to the check boxes.

The easiest way to do it is using `collection_check_boxes`, which also
adds labels to every check box.
2019-11-01 16:49:14 +01:00
Javi Martín
6c323eaf3e Use JavaScript pluralize for budget staff
We were using two different systems to set translations in JavaScript:
to set the text for languages, we were using data attributes, and to set
the text for staff members, we were using AJAX calls.

I find data attributes keep the code more simple, since there's no need
to define an extra route and controller action. Furthermore, the user
experience is better because response times are faster.

So now both places use data attributes.
2019-10-31 16:21:39 +01:00
Javi Martín
7b89dd6a5f Refactor links to show staff members 2019-10-31 16:21:39 +01:00
Javi Martín
9e74ebccb6 Store texts data in the element using them
This way we can have a generic function we can apply in other places.
2019-10-31 15:07:08 +01:00
Javi Martín
e314701d49 Extract method to pluralize text in JavaScript
This way we can reuse it in other places.
2019-10-31 15:03:57 +01:00
Javi Martín
b15ae77ddc Simplify Javascript to pluralize translations
We can pass the whole translation hash instead of passing descriptions
individually, and we can replace `%{count}` so we don't need any <span>
tags.
2019-10-31 14:49:46 +01:00
Javi Martín
af7c37634d Remove poll votation types
Unfortunately this feature wasn't properly reviewed and tested, and it
had many bugs, some of them critical and hard to fix, like validations
being skipped in concurrent requests.

So we're removing it before releasing version 1.1. We might add it back
in the future if we manage to solve the critical issues.

This commit reverts commit 836f9ba7.
2019-10-30 18:48:55 +01:00
Javi Martín
6ef07f8a54 Use text_area instead of cktext_area
We're going to change CKEditor to an inline editor, and the "ckeditor"
gem doesn't provide an option to do so.

Since using `cktext_area` would automatically generate a "classic"
iframe CKEditor, we need to use `text_area` and load the editor using
JavaScript. Personally I prefer this option anyway.

Note in the jQuery selector we need to use `textarea.html-area`; using
just `.html-area` would fail if there's an error message associated to
the textarea, since Rails will add the `.html-area` class to the error
message.
2019-10-25 16:34:25 +02:00
Javi Martín
7f1bfc6bd7 Avoid using html() to set languages description
The jQuery html() function does not filter <script> tags, so if somehow
an attacker introduced a <script> in the translation, we would be
vulnerable to a XSS attack.

Note using $.parseHTML wouldn't solve the problem, since it doesn't
filter attributes in image tags.

Since changing the text of the part which doesn't have the count wasn't
very clean, I've added another <span> tag for the part with the
description, and so we can use jQuery's text() function to replace it.
2019-10-21 20:24:50 +02:00
Javi Martín
d61e8cb6a6 Use text() instead of html()
Using html() makes it possible to insert <script> tags in the DOM, and
in this case we aren't supposed to be inserting any HTML.

I haven't found a way to focus on a field with Capybara, then add a
character, and focus on another field. So I've manually triggered the
change event in the test.
2019-10-21 20:24:50 +02:00
cyrillefr
44b2a07878 Moderate legislation proposals (#3602)
Moderate legislation proposals

- added a controller for moderation/legislation
- updated view to appropriate link + added route
- added a spec
- Feature test
- test for faded
- javascripts for visual effects
2019-10-05 04:02:39 +02:00
Javi Martín
9d6ed7a085 Show only defined columns on inserted rows
When we were inserting a row or replacing an existing one (just like we
do when we click the link to select an investment), we were entering a
row containing all columns, and all of them were displayed even if they
had been excluded using the column selector.

This caused the table to move in a strange way, which sometimes made the
investment selection tests fail.
2019-09-11 19:38:34 +02:00
Javi Martín
c6fc0062d7 Fix typo 2019-09-11 18:49:59 +02:00
Javi Martín
af6a494344 Apply JavaScript rule to use the dot notation
We were using the dot notation in most places, but not everywhere.
2019-09-11 14:03:24 +02:00
Javi Martín
044da18af1 Apply JavaScript rules to prevent shadowing
Using the same variable name makes the code more difficult to read.

We're also enabling the `no-param-reassing` rule since we accidentally
reassigned params in commit 824dd26d, and this rule will prevent us from
doing so in the future.
2019-09-11 14:03:24 +02:00
Javi Martín
86c9f53c2d Use undefined instead of void
We originally wrote `undefined` in CoffeeScript.

CoffeeScript compiled it to `void 0` when generating the JavaScript
files. However, the reason to do so was the `undefined` variable was
mutable before ECMAScript 5. Using `undefined` is more intuitive, and
nowadays there's no reason to use `void 0`.
2019-09-11 14:03:24 +02:00
Javi Martín
5211f47842 Add and apply ESLint spacing rules
For now we're only adding rules related to spacing and double quotes,
following the same rules we use in Ruby, which are the same rules
CoffeeScript followed when compiling these files.

We're also using the recommended ESLint rules, which will warn us about
many JavaScript common pitfalls, the `strict` rule which enforces using
strict mode, and the `no-console` rule, which will prevent us from
shipping code meant for debugging.

Although it's arguably more common to use the JSON format to define
these rules, I've chosen YAML because it's the format we use in all our
linters.
2019-09-11 14:03:24 +02:00
Javi Martín
ec5af1f1bc Remove unnecessary return statements
These statements were automatically added by CoffeeScript.

I'm only removing the obvious cases; there might be more cases where the
`return` statement isn't necessary.
2019-09-11 14:03:24 +02:00
Javi Martín
d93a029ce5 Convert CofeeScript to JavaScript
Compiled using `coffee -c` with CoffeeScript 1.12.6.
2019-09-11 14:03:24 +02:00
Javi Martín
d8be18d6a9 Use double quotes in CoffeeScript
We accidentally added some single quotes recently.
2019-09-11 03:14:17 +02:00
Javi Martín
f83f0f08be Fix typo 2019-09-11 03:14:17 +02:00
Javi Martín
cc7e0d586b Reduce local variables usage in CoffeeScript
Local variables are one of the things CoffeeScript doesn't compile to
modern JavaScript automatically: it uses `var` instead of `const` or
`let`.

Besides, using `$this = $(this)` is usually done to reference the
current object in another function where the current object is a
different one. Here we were using it with no clear purpose.
2019-09-11 03:14:17 +02:00
Javi Martín
ba325526ae Use Array.apply to repeat a loop
In JavaScript we cannot easily repeat something N times, and
CoffeeScript's range loop compiles into complex JavaScript.

We could also use `Array.from({ length: N })`, but that's not supported
by old browsers like Internet Explorer 11.
2019-09-11 03:14:17 +02:00
Javi Martín
00d7c92e86 Don't assign in conditionals
The assignment operator can easily be mistaken with the equality
operator when used in a condition, making the code more difficult to
read.
2019-09-11 03:14:17 +02:00
Javi Martín
86e704d8a4 Use strict mode in JavaScript
Strict mode is supported by 98% of the browsers, including Internet
Explorer 10, and it helps developers avoid common JavaScript pitfalls.
2019-09-11 03:14:17 +02:00
Javi Martín
747767386a Use this instead of @ in CoffeeScript
We're using `this` most of the time, and it's what's used in JavaScript.
2019-09-11 03:14:17 +02:00
Javi Martín
aa458b8c87 Extract functions in foundation extras
In foundation extras we were assigning functions to local variables, but
in the rest of the CoffeeScript files we use them as object properties.
2019-09-11 03:14:17 +02:00
Javi Martín
dcc838b3d8 Make conditions easier to read
Combining both the inline and "traditional" `if` styles made the code
difficult to read, particularly when compiled to JavaScript.
2019-09-11 03:14:17 +02:00
Javi Martín
1634cd5263 Use each instead of $.each
Iterating through the jQuery elements with `each` is more similar to
other iterators we use. Furthermore, we avoid declaring the `index`
variable we don't use.
2019-09-11 03:14:17 +02:00
Javi Martín
3b5d295cdc Simplify function call 2019-09-11 03:14:17 +02:00
Javi Martín
879cc2571f Use different names for variable and parameter
Using the same name means from that point the name doesn't refer to the
original parameter, which might be confusing when reading the method.
2019-09-11 03:14:17 +02:00
Javi Martín
c55a1a9faf Simplify finding rows for sortable tables
Including the table body is more intuitive than excluding the first row
and the table foot.
2019-09-11 03:14:17 +02:00