From 2174766ce5ef8e91eaf1274489e1b16b7f2d792a Mon Sep 17 00:00:00 2001 From: Lauri Eskola <lauriii@1078742.no-reply.drupal.org> Date: Tue, 1 Aug 2017 18:45:09 +0300 Subject: [PATCH] Issue #2898261 by droplet, effulgentsia, nod_, andrewmacpherson, cilefen, dmsmidt, drpal, larowlan: In jQuery 3, $('#') throws syntax errors --- core/misc/form.es6.js | 32 +++++++++++++++++--------------- core/misc/form.js | 28 ++++++++++++++++------------ 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/core/misc/form.es6.js b/core/misc/form.es6.js index 96fc990f7c26..8f535dac8aea 100644 --- a/core/misc/form.es6.js +++ b/core/misc/form.es6.js @@ -265,28 +265,30 @@ * @fires event:formFragmentLinkClickOrHashChange */ const handleFragmentLinkClickOrHashChange = (e) => { - let $target; - + let url; if (e.type === 'click') { - $target = e.currentTarget.location ? $(e.currentTarget.location.hash) : $(e.currentTarget.hash); + url = e.currentTarget.location ? e.currentTarget.location : e.currentTarget; } else { - $target = $(`#${location.hash.substr(1)}`); + url = location; } + const hash = url.hash.substr(1); + if (hash) { + const $target = $(`#${hash}`); + $('body').trigger('formFragmentLinkClickOrHashChange', [$target]); - $('body').trigger('formFragmentLinkClickOrHashChange', [$target]); - - /** - * Clicking a fragment link or a hash change should focus the target - * element, but event timing issues in multiple browsers require a timeout. - */ - setTimeout(() => { - $target.focus(); - }, 300, $target); + /** + * Clicking a fragment link or a hash change should focus the target + * element, but event timing issues in multiple browsers require a timeout. + */ + setTimeout(() => $target.trigger('focus'), 300); + } }; + const debouncedHandleFragmentLinkClickOrHashChange = debounce(handleFragmentLinkClickOrHashChange, 300, true); + // Binds a listener to handle URL fragment changes. - $(window).on('hashchange.form-fragment', debounce(handleFragmentLinkClickOrHashChange, 300, true)); + $(window).on('hashchange.form-fragment', debouncedHandleFragmentLinkClickOrHashChange); /** * Binds a listener to handle clicks on fragment links and absolute URL links @@ -294,6 +296,6 @@ * because clicking such links doesn't trigger a hash change when the fragment * is already in the URL. */ - $(document).on('click.form-fragment', 'a[href*="#"]', debounce(handleFragmentLinkClickOrHashChange, 300, true)); + $(document).on('click.form-fragment', 'a[href*="#"]', debouncedHandleFragmentLinkClickOrHashChange); }(jQuery, Drupal, Drupal.debounce)); diff --git a/core/misc/form.js b/core/misc/form.js index b5689db61169..7e32a31a34f3 100644 --- a/core/misc/form.js +++ b/core/misc/form.js @@ -126,22 +126,26 @@ }; var handleFragmentLinkClickOrHashChange = function handleFragmentLinkClickOrHashChange(e) { - var $target = void 0; - + var url = void 0; if (e.type === 'click') { - $target = e.currentTarget.location ? $(e.currentTarget.location.hash) : $(e.currentTarget.hash); + url = e.currentTarget.location ? e.currentTarget.location : e.currentTarget; } else { - $target = $('#' + location.hash.substr(1)); + url = location; + } + var hash = url.hash.substr(1); + if (hash) { + var $target = $('#' + hash); + $('body').trigger('formFragmentLinkClickOrHashChange', [$target]); + + setTimeout(function () { + return $target.trigger('focus'); + }, 300); } - - $('body').trigger('formFragmentLinkClickOrHashChange', [$target]); - - setTimeout(function () { - $target.focus(); - }, 300, $target); }; - $(window).on('hashchange.form-fragment', debounce(handleFragmentLinkClickOrHashChange, 300, true)); + var debouncedHandleFragmentLinkClickOrHashChange = debounce(handleFragmentLinkClickOrHashChange, 300, true); + + $(window).on('hashchange.form-fragment', debouncedHandleFragmentLinkClickOrHashChange); - $(document).on('click.form-fragment', 'a[href*="#"]', debounce(handleFragmentLinkClickOrHashChange, 300, true)); + $(document).on('click.form-fragment', 'a[href*="#"]', debouncedHandleFragmentLinkClickOrHashChange); })(jQuery, Drupal, Drupal.debounce); \ No newline at end of file -- GitLab