Commit Graph

76 Commits

Author SHA1 Message Date
Andrew Nicols
e1b9d5f3cd MDL-73915 js: Drop support for IE and android
Moodle announced that support for IE would be dropped back in August
2020 with Moodle 3.9 but not active steps were taken at that time. That
decision was made in MDLSITE-6109 and this particular step was meant to
be taken in Moodle 3.10.

This is the first step taken to actively drop support for IE.

This commit also bumps the browser support pattern from 0.25% to 0.3%.
The percentage here includes any browser where at least this percentage
of users worldwide may be using a browser. In this case it causes
support for Android 4.3-4.4 to be dropped, which relate to Android
KitKat (released 2013).

This combination of changes means that all of the supported browsers in
our compatibility list support modern features including async,
for...of, classes, native Promises, and more which has a huge impact on
the ease of debugging code, and drastically reduces the minified file
size because a number of native Polyfills included by Babel are no
longer included.
2022-02-23 08:55:20 +08:00
Andrew Nicols
0a4047ab31 MDL-73915 js: Switch amd minification to terser
Unfortunately the babel minify-mangle plugin seems to be abandoned and
in certain circumstances can be very buggy. The only safe options are to
disable it, or to switch to a different minification library.

Not minifying our javascript is not ideal, so this commit updates the
javascript tasks to use a rollup, combined with babel, and terser.

Babel still converts code from ES/UMD/AMD to AMD modules with the
relevant browser support, whilst terser minifies the code.

The rollup bundler handles tracking and creation of sourcemaps, and
supports better parallelisation of the tasks.

Since the upgrade to Node LTS/Gallium requires an upgrade to @babel/core
and eslint, which change the built files anyway, this seems like the
ideal time to make this change.
2022-02-23 08:55:09 +08:00
Paul Holden
8573981a03 MDL-73176 forms: escape selector for active autocomplete element. 2021-11-30 20:08:36 +00:00
Paul Holden
d38fe96834 MDL-73074 forms: ensure autocomplete element is enhanced only once.
This fixes the reportbuilder course filter, which was displayed twice
in response to an AJAX request for the rendered form.
2021-11-22 10:25:41 +00:00
Andrew Nicols
530322e2ce MDL-69918 core: Update uses of legacy form change checker 2021-08-10 23:54:01 +08:00
Andrew Nicols
f07d3b71d2 MDL-69107 form_autocomplete: Rewrite item selection
The form_autocomplete is essentially a custom element. Unfortunately the
`setValue()` function in Mink has undesired actions so it is necessary
to write our own handling for it.

The standard Mink `setValue()` function focuses the element, sets a
value, and then blurs the element. In the case of the autocomplete this
can cause the autocomplete suggestions list to be closed in some
situations. Instead of using the setValue we click, and type the value,
but do not immediately blur.
2020-12-15 09:08:05 +08:00
Andrew Nicols
7d786c7968 MDL-70075 core: Autocomplete selection should always have an active item
Ensure that there is always one active element in the list of selected
autocomplete elements.

Without this we have issues beacuse clicking on the link makes the first
one active if one is not already active, and this turns a click event
into a drag event, which means that it is not deleted.
2020-11-05 08:55:50 +08:00
Andrew Nicols
a88838c25f MDL-70075 core: Do not return a value in an event handler
Returning a value of `false` in an event handler has the effect of
calling event.preventDefault() and event.stopPropagation().

This is neither obvious, nor desirable in this situation.
2020-11-04 11:27:55 +08:00
Andrew Nicols
5d16bfcf7c MDL-70075 core: jQuery.attr() does not accept a bool value
The documented values that jQuery.attr() accepts are String, Number, or
null. For some reason, when we pass a Boolean value, the subsequent
click handler does not work in some situations.

Changing this to take a Number, and unsetting it when empty, resolves
this issue.
2020-11-04 11:27:55 +08:00
Shamim Rezaie
0438cd60bb MDL-68167 lib: autocomplete focos should not be removed on blur
See https://www.w3.org/TR/wai-aria-practices-1.1/examples/listbox/listbox-rearrangeable.html
2020-10-30 16:01:38 +11:00
Shamim Rezaie
e2ee6025fe MDL-68167 lib: Do not set aria-expanded if it should not be set 2020-10-30 16:01:38 +11:00
Shamim Rezaie
b643c88682 MDL-68167 lib: Autocomplete selection to use listbox aria role
The aria-selected state cannot be used for the listitem role. The
autocomplete widget highly uses the aria-selected state internally.
2020-10-30 14:43:00 +11:00
Thong Bui
f5cb4b9b5e MDL-69466 Autocomplete widget: Improve keyboard accessibility 2020-09-09 13:47:19 +07:00
Andrew Nicols
7cc18dc2ad MDL-68390 js: Update to use Aria mod 2020-07-15 14:40:49 +08:00
Andrew Nicols
1be0f90c6f MDL-67917 core: Add custom template support to autocomplete
Part of MDL-67743
2020-05-27 10:49:43 +08:00
Tim Hunt
be612e5f68 MDL-57680 form autocomplete: fix triggering change event 2020-04-26 13:23:42 +01:00
Tim Hunt
588b86fd49 MDL-57680 form autocomplete: let singleselects be cleared.
This was already working after ajax had refreshed the choices, it was just
broken on first page load.
2020-04-26 13:23:42 +01:00
Shamim Rezaie
517e568e5a MDL-68196 core: not expand autocomplete elements too soon on IE 2020-04-16 12:25:37 +10:00
David Mudrák
7630b42232 MDL-67447 form: Fix the duplicate autocomplete selection node
When the autocomplete selection is updated, the content of the selection
wrapper is replaced with the new list of selected items. We must replace
only the content of the selection wrapper and not to nest it into
itself.
2020-01-25 05:39:01 +01:00
Paul Holden
9cbeaec26f MDL-63125 forms: allow item removal from single-select autocomplete. 2019-10-14 17:07:59 +01:00
Andrew Nicols
6654ac1151 MDL-66312 js: Autocomplete promises were inside out
The pending promise should nott be resolved until the changes are
complete.
Previously the resolution of the pendingPromise was triggering the other
changes.
2019-08-16 11:40:16 +08:00
Shamim Rezaie
e75bf41538 MDL-63198 forms: click on scrollbar should not close the suggestions box 2019-08-05 13:13:45 +10:00
Ryan Wyllie
195ea4480b MDL-62497 javascript: build AMD modules with new transpiler 2019-07-19 14:12:49 +08:00
Mihail Geshoski
a6c735031a MDL-65751 lib: Replace deprecated jQuery functions 2019-07-17 09:59:44 +08:00
Shamim Rezaie
072a033a79 MDL-65102 core_form: autocomplete element to handle submit event 2019-03-27 19:00:27 +11:00
Huong Nguyen
efef2efdd6 MDL-63937 autocomplete: Add the indicator when processing the request 2019-02-21 10:08:16 +07:00
Andrew Nicols
e994dea0b3 MDL-62514 behat: Rewrite handling of autocomplete
This includes a minor restructure of the autocomplete JS to make use of
promises and improve tracking of pending JS.

In particular it improves the way in which throttled text input is
handled to ensure that the behat does not continue until:
- typing is fully complete; and
- all possible ajax requests have been sent; and
- all possible ajax requests complete; and
- the suggestions are updated.

A number of conditions existed where behat would move on to the next
step too early in a race condition effect between Behat and Autocomplete.
2019-01-30 08:24:32 +08:00
Mirko Otto
5cfd7a7286 MDL-62756 form: Remove any click handler first.
The handler has the old state variable. Remove any click handler first.
2018-12-14 10:26:58 +01:00
David Mudrák
5cdf8d49c7 MDL-62848 form: Fix missing support for {{#js}} helper in autocomplete
The form-autocomplete module uses three Mustache templates
core/form_autocomplete_input, core/form_autocomplete_suggestions and
core/form_autocomplete_selection. However, it did not support executing
the JS that is eventually part of those templates.
2018-08-31 14:51:05 +02:00
David Matamoros
18e2f40377 MDL-58409 core_form: needs clean in autocomplete element 2018-08-07 10:59:34 +02:00
David Mudrák
9411beb384 MDL-60874 core_form: allow autocomplete AJAX handlers return a string
Custom AJAX handlers for the form autocomplete fields can now optionally
return string in their processResults() callback. If a string is
returned, it is displayed instead of the list of suggested items.

The string is displayed same way as we inform about no available
suggestions.
2018-07-16 21:27:25 +02:00
sam marshall
a97c937033 MDL-61028 core_form: Autocomplete field to support HTML selection
When using the AJAX autocomplete field, it allows JavaScript to add
custom HTML to selected options. For example, the user field from
the assign roles page includes an icon and other information by the
user's name.

Once you submit the form and the page reloads, there was no way to
provide this information back to the autocomplete field. HTML
<option> tag was used for the value names but it may only contain
text, not tags, so including it in the normal value did not work.

This change adds a new option for the autocomplete field that lets
you include HTML to override the default (text-only) value of the
label used to represent each option.
2018-04-20 16:42:54 +01:00
Andrew Nicols
78162bf5cf MDL-60773 core: Add pendingJS checks for autocomplete interactions 2017-11-17 13:52:04 +08:00
Damyon Wiese
b7df2485e6 MDL-59867 autocomplete: Prevent duplicate ids.
Rendering a form with 2 autocompletes in it can get messed up because of duplicated ids.
2017-09-07 09:31:57 +08:00
Andrew Nicols
85419c5b2e Merge branch 'MDL-59828-master' of git://github.com/damyon/moodle 2017-08-29 11:56:28 +08:00
Damyon Wiese
d8e57f02a7 MDL-59828 autocomplete: Sizing issues on themes
We want to avoid page jumps wherever possible. This change uses the original select element as a "proxy" to reserve the space
in the DOM for the enhanced auto-complete when the JS runs.

It uses visibility: hidden to make the select not rendered - but still take up space.

The exact sizing for the CSS was determined by testing and reverse engineering the bootstrap calculations.

The size of user pictures in selectors was reduced to avoid flicker when switching between no selection and a selected user. I
could have reserved a larger amount of space, but it looks worse for pickers with no pictures.
2017-08-25 15:07:40 +08:00
Jun Pataleta
68a0485c5c MDL-59836 core_amd: Use only one input event handler
* We have duplicate input event handlers for the autocomplete element
which are both firing when the input element's value is being set.
In case an AJAX handler is defined for the autocomplete suggestions,
this causes the autocomplete suggestions so show "No suggestions" first
and then load the results from the AJAX handler a little bit later.
2017-08-18 11:19:08 +08:00
Jun Pataleta
198d72913f MDL-59366 core_amd: Modifications for form-autocomplete
* New optional parameter 'closeSuggestionsOnSelect' for the enhance()
function for form-autocomplete. Setting this to true will close the
suggestions popup immediately after an option has been selected. If not
specified, it defaults to true for single-select elements and false
for multiple-select elements.

Part of MDL-59290.
2017-07-28 16:11:38 +08:00
Damyon Wiese
ddc1482026 MDL-59527 autocomplete: Don't fetch ajax twice 2017-07-20 09:52:05 +08:00
David Monllao
7d04eaca5c Merge branch 'MDL-59527-master' of git://github.com/damyon/moodle 2017-07-17 14:07:59 +02:00
Damyon Wiese
47dd535097 MDL-59527 forms: Race cond with ajax autocomplete
Sometimes (rarely) the auto complete will show "No suggestions" when there are valid suggestions.
2017-07-14 12:41:14 +08:00
David Monllao
eac6f51590 Merge branch 'MDL-59368-master' of git://github.com/damyon/moodle 2017-07-12 16:46:49 +02:00
Damyon Wiese
f3ecea3af4 MDL-59368 groups: Peer review fixes
* Fix coalesce on postgres.
* The edit icon's alt shows the HTML entities causing
* enrol/tests/behat/add_to_group.feature Contains a '@doit' tag which I assume is there from testing.
* group/classes/output/user_groups_editable.php
** Missing MOODLE_INTERNAL check.
** Unused variables context_system and moodle_exception.
** The PHPDocs for the constructors are wrong.
** export_for_template() returns an array, not stdClass (according to parent docs).
** Change moodle_exception to coding_exception at the beginning.
* group/lib.php
** Missing docs for core_group_inplace_editable().
* user/classes/participants_table.php
** The docs for the class variables $groups, $course and $context need a '\' beforehand as they are in a namespace.
** I would prefer $this->context = $context; and $this->groups = ... to be done at the end of the constructor with the other class variable assignments.
** You could get rid of the class variable courseid if we are setting course and use $this->course->id instead.
** The function col_groups has @param \stdclass $row but it should be $data
* lib/amd/src/form-autocomplete.js and lib/amd/src/inplace_editable.js
** Some issues here CiBot has pointed out.
* lib/classes/output/inplace_editable.php
** @see should be on a new line.
2017-07-12 10:09:09 +08:00
Damyon Wiese
13426bae93 MDL-59368 inplace_editable: Focus on auto-complete
Also fix JS coding style and build the amd.
2017-07-12 10:07:58 +08:00
Damyon Wiese
786e014c5c MDL-59365 autocomplete: Keep the suggestions open
If the list allows multiple selections, don't auto-close the suggestions list
every time something is chosen.
2017-07-11 13:47:28 +01:00
Nadav Kavalerchik
e375029ea0 MDL-53349 Autocomplete: Support multi lingual COMMA keycode (44) 2017-02-01 16:00:41 +08:00
Dan Poltawski
9b62a3eb71 MDL-55048 js: rebuilt files with new version of uglifyjs 2016-07-11 15:53:10 +01:00
Dan Poltawski
7f70d548fe MDL-54939 amd: build modified files 2016-06-17 09:03:18 +01:00
Frederic Massart
1eaba735f5 MDL-53730 form: Autocomplete triggers change event on change only 2016-05-06 09:27:29 +08:00
Jun Pataleta
1388b618d9 MDL-53942 form_autocomplete: Properly set noSelectionString 2016-04-26 13:41:29 +08:00