This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/tests/unit/lib
Dan Gebhardt 28be5d3037
DEV: Normalize event handling to improve Glimmer + Classic component compat (#18490)
Classic Ember components (i.e. "@ember/component") rely upon "event
delegation" to listen for events at the application root and then dispatch
those events to any event handlers defined on individual Classic components.
This coordination is handled by Ember's EventDispatcher.

In contrast, Glimmer components (i.e. "@glimmer/component") expect event
listeners to be added to elements using modifiers (such as `{{on "click"}}`).
These event listeners are added directly to DOM elements using
`addEventListener`. There is no need for an event dispatcher.

Issues may arise when using Classic and Glimmer components together, since it
requires reconciling the two event handling approaches. For instance, event
propagation may not work as expected when a Classic component is nested
inside a Glimmer component.

`normalizeEmberEventHandling` helps an application standardize upon the
Glimmer event handling approach by eliminating usage of event delegation and
instead rewiring Classic components to directly use `addEventListener`.

Specifically, it performs the following:

- Invokes `eliminateClassicEventDelegation()` to remove all events associated
  with Ember's EventDispatcher to reduce its runtime overhead and ensure that
  it is effectively not in use.

- Invokes `rewireClassicComponentEvents(app)` to rewire each Classic
  component to add its own event listeners for standard event handlers (e.g.
  `click`, `mouseDown`, `submit`, etc.).

- Configures an instance initializer that invokes
  `rewireActionModifier(appInstance)` to redefine the `action` modifier with
    a substitute that uses `addEventListener`.

Additional changes include:
* d-button: only preventDefault / stopPropagation for handled actions
   This allows unhandled events to propagate as expected.
* d-editor: avoid adding duplicate event listener for tests
   This extra event listener causes duplicate paste events in tests.
* group-manage-email-settings: Monitor `input` instead of `change` event for checkboxes
2022-10-24 16:06:11 +01:00
..
notification-types DEV: Refactor new user menu files (#17879) 2022-08-16 10:37:56 +08:00
reviewable-types FIX: Add missing string for reviewables in user menu when reviewable post is deleted (#18295) 2022-09-21 09:05:08 +10:00
allow-lister-test.js DEV: adds initial support for custom blocks using code fencing (#15743) 2022-02-09 11:23:44 +01:00
bookmark-test.js DEV: Replace equal() with strictEqual() (#14827) 2021-11-08 10:26:28 +01:00
category-badge-test.js DEV: Remove most of jQuery usage from tests (#17474) 2022-07-13 19:29:19 +02:00
click-track-test.js DEV: Introduce discourseLater (#17532) 2022-07-17 00:50:49 +02:00
computed-test.js DEV: Replace equal() with strictEqual() (#14827) 2021-11-08 10:26:28 +01:00
dom-from-string-test.js DEV: Allow utility class domFromString to take in strings with multiple top level elements (#15548) 2022-01-12 19:49:24 +08:00
download-calendar-test.js FIX: improvements for download local dates (#14588) 2021-10-14 09:22:44 +11:00
ember-action-modifer-test.js DEV: Normalize event handling to improve Glimmer + Classic component compat (#18490) 2022-10-24 16:06:11 +01:00
ember-events-test.js DEV: Normalize event handling to improve Glimmer + Classic component compat (#18490) 2022-10-24 16:06:11 +01:00
emoji-test.js DEV: Emoji picker keyboard accessibility updates (#18331) 2022-09-22 15:21:34 -07:00
formatter-test.js DEV: extract until date formatting in a library function (#18003) 2022-08-29 15:45:36 +04:00
get-url-test.js FIX: Build correct post and topic shareUrl (#16332) 2022-04-01 00:02:01 +03:00
highlight-search-test.js DEV: Replace equal() with strictEqual() (#14827) 2021-11-08 10:26:28 +01:00
highlight-syntax-test.js DEV: Add test case for syntax highlight of complex HTML (#18320) 2022-09-21 19:09:53 -03:00
i18n-test.js DEV: add translation fallback option for i18n 2022-06-10 11:10:05 -10:00
icon-library-test.js DEV: Add aria-label option to the d-icon helper (#17741) 2022-08-03 09:33:50 +03:00
key-value-store-test.js DEV: implements removeKeys(predicate) in keyValueStore (#18019) 2022-08-21 19:19:25 +02:00
keyboard-shortcuts-test.js DEV: Add more keyboard shortcut acceptance tests (#13280) 2021-06-04 14:04:20 +10:00
link-lookup-test.js DEV: Keep global state reset in a single place (#18049) 2022-08-23 21:09:37 +02:00
link-mentions-test.js DEV: Consistently use response helper (#17627) 2022-07-25 02:31:52 +02:00
load-script-test.js DEV: Fix javascript:update rake task (#17098) 2022-06-15 19:49:04 +02:00
oneboxer-test.js DEV: Remove most of jQuery usage from tests (#17474) 2022-07-13 19:29:19 +02:00
parse-bbcode-tag-test.js DEV: Replace equal() with strictEqual() (#14827) 2021-11-08 10:26:28 +01:00
preload-store-test.js DEV: Use async and sinon.resolves instead of rsvp (#18001) 2022-08-20 11:20:55 +02:00
pretty-text-test.js A11Y: Set role=presentation if alt attr is missing (#18546) 2022-10-12 14:07:37 +03:00
sanitizer-test.js DEV: adds initial support for custom blocks using code fencing (#15743) 2022-02-09 11:23:44 +01:00
search-test.js DEV: Remove most of jQuery usage from tests (#17474) 2022-07-13 19:29:19 +02:00
sharing-test.js DEV: Replace equal() with strictEqual() (#14827) 2021-11-08 10:26:28 +01:00
suffix-trie-test.js PERF: Improve JS app boot speed by optimizing customResolve() (#14990) 2021-11-18 16:38:00 +00:00
text-direction-test.js DEV: Avoid triggering 404 errors in tests (#17404) 2022-07-10 11:09:13 +02:00
text-test.js DEV: implements parseAsync in discourse/lib/text (#17899) 2022-08-13 14:25:32 +02:00
time-shortcut-test.js DEV: Update sinon (#17266) 2022-06-28 21:21:51 +02:00
time-utils-test.js DEV: Replace equal() with strictEqual() (#14827) 2021-11-08 10:26:28 +01:00
to-markdown-test.js DEV: Add to-markdown decorator functions (#16943) 2022-05-31 11:06:41 +02:00
upload-short-url-test.js DEV: Rename secure_media to secure_uploads (#18376) 2022-09-29 09:24:33 +10:00
uploads-test.js DEV: refactor bootbox alerts (#18292) 2022-09-27 14:47:13 -04:00
uppy-checksum-plugin-test.js DEV: Update linting setup and fix issues (#17345) 2022-07-06 10:37:54 +02:00
uppy-media-optimization-plugin-test.js DEV: Use async and sinon.resolves instead of rsvp (#18001) 2022-08-20 11:20:55 +02:00
url-test.js DEV: Rename secure_media to secure_uploads (#18376) 2022-09-29 09:24:33 +10:00
user-search-test.js DEV: Replace equal() with strictEqual() (#14827) 2021-11-08 10:26:28 +01:00
utilities-test.js FIX: Ability to trigger emoji after indented code block (#18478) 2022-10-05 10:33:08 -07:00