From 647f105873ad14c513d52759a940c15aca437a7b Mon Sep 17 00:00:00 2001 From: Noel De Martin Date: Mon, 15 May 2023 13:16:35 +0200 Subject: [PATCH 1/2] MOBILE-4338 quiz: Fix popover feedback --- .../question/services/question-helper.ts | 17 ++++++++++++----- src/core/singletons/dom.ts | 12 +++++++++++- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/core/features/question/services/question-helper.ts b/src/core/features/question/services/question-helper.ts index c6de41b09..f797dc92c 100644 --- a/src/core/features/question/services/question-helper.ts +++ b/src/core/features/question/services/question-helper.ts @@ -855,10 +855,13 @@ export class CoreQuestionHelperProvider { const icons = Array.from(element.querySelectorAll('ion-icon.questioncorrectnessicon')); const title = Translate.instant('core.question.feedback'); const getClickableFeedback = (icon: HTMLElement) => { - if (icon.parentElement instanceof HTMLButtonElement && icon.parentElement.dataset.toggle === 'popover') { + const parentElement = icon.parentElement; + const parentIsClickable = parentElement instanceof HTMLButtonElement || parentElement instanceof HTMLAnchorElement; + + if (parentElement && parentIsClickable && parentElement.dataset.toggle === 'popover') { return { - element: icon.parentElement, - html: icon.parentElement?.dataset.content, + element: parentElement, + html: parentElement?.dataset.content, }; } @@ -866,7 +869,7 @@ export class CoreQuestionHelperProvider { if (icon.hasAttribute('tappable')) { return { element: icon, - html: icon.parentElement?.querySelector('.feedbackspan.accesshide')?.innerHTML, + html: parentElement?.querySelector('.feedbackspan.accesshide')?.innerHTML, }; } @@ -881,7 +884,11 @@ export class CoreQuestionHelperProvider { } // There's a hidden feedback, show it when the icon is clicked. - target.element.addEventListener('click', () => { + target.element.dataset.disabledA11yClicks = 'true'; + target.element.addEventListener('click', event => { + event.preventDefault(); + event.stopPropagation(); + CoreTextUtils.viewText(title, target.html ?? '', { component: component, componentId: componentId, diff --git a/src/core/singletons/dom.ts b/src/core/singletons/dom.ts index 66aff6a71..36bdceb2d 100644 --- a/src/core/singletons/dom.ts +++ b/src/core/singletons/dom.ts @@ -536,9 +536,15 @@ export class CoreDom { element: HTMLElement & {disabled?: boolean}, callback: (event: MouseEvent | KeyboardEvent) => void, ): void { - element.addEventListener('click', (event) => callback(event)); + const enabled = () => !CoreUtils.isTrueOrOne(element.dataset.disabledA11yClicks ?? 'false'); + + element.addEventListener('click', (event) => enabled() && callback(event)); element.addEventListener('keydown', (event) => { + if (!enabled()) { + return; + } + if (event.key === ' ' || event.key === 'Enter') { event.preventDefault(); event.stopPropagation(); @@ -546,6 +552,10 @@ export class CoreDom { }); element.addEventListener('keyup', (event) => { + if (!enabled()) { + return; + } + if (event.key === ' ' || event.key === 'Enter') { event.preventDefault(); event.stopPropagation(); From 072da8a045500af75cc8febce1cb08133217a8d3 Mon Sep 17 00:00:00 2001 From: Noel De Martin Date: Mon, 15 May 2023 14:01:09 +0200 Subject: [PATCH 2/2] MOBILE-4338 core: Fix whitespace in
 elements

"pre" comes from "preformatted text", so we shouldn't be tweaking the whitespace on those elements.
---
 src/theme/theme.base.scss | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/theme/theme.base.scss b/src/theme/theme.base.scss
index 7ad370c8c..366fea4b8 100644
--- a/src/theme/theme.base.scss
+++ b/src/theme/theme.base.scss
@@ -120,15 +120,15 @@ body {
 }
 
 // Correctly inherit ion-text-wrap onto labels.
-.item ion-label core-format-text > *,
-.fake-ion-item core-format-text > * {
+.item ion-label core-format-text > *:not(pre),
+.fake-ion-item core-format-text > *:not(pre) {
     white-space: nowrap;
     overflow: hidden;
     text-overflow: ellipsis;
 }
 
-.item.ion-text-wrap > ion-label core-format-text > *,
-.fake-ion-item.ion-text-wrap core-format-text > * {
+.item.ion-text-wrap > ion-label core-format-text > *:not(pre),
+.fake-ion-item.ion-text-wrap core-format-text > *:not(pre) {
     white-space: normal;
     overflow: inherit;
 }