Skip to content

Commit 3e5490e

Browse files
authored
Merge pull request moodlehq#4473 from crazyserver/MOBILE-3063
MOBILE-3063 reading: Fix reading mode disable on glossary swipe
2 parents c5d9e8b + 777f2f2 commit 3e5490e

File tree

3 files changed

+65
-4
lines changed

3 files changed

+65
-4
lines changed

src/core/directives/reading-mode.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ export class CoreReadingModeDirective implements AfterViewInit, OnDestroy {
6767
await this.addTextViewerButton();
6868
this.element.classList.add('core-reading-mode-ready');
6969

70-
this.enabled = document.body.classList.contains('core-reading-mode-enable-on-enter');
70+
this.enabled = CoreViewer.isReadingModeEnabledOnEnter();
71+
CoreViewer.increaseReadingModeCounter();
7172
if (this.enabled) {
7273
await this.enterReadingMode();
7374
}
@@ -136,7 +137,7 @@ export class CoreReadingModeDirective implements AfterViewInit, OnDestroy {
136137
await this.header?.setEnabled(false);
137138

138139
document.body.classList.add('core-reading-mode-enabled');
139-
document.body.classList.add('core-reading-mode-enable-on-enter');
140+
CoreViewer.setReadingModeEnabledOnEnter(true);
140141

141142
const elements = document.body.querySelectorAll('[core-reading-mode].core-reading-mode-ready');
142143

@@ -186,7 +187,7 @@ export class CoreReadingModeDirective implements AfterViewInit, OnDestroy {
186187

187188
this.enabled = false;
188189
document.body.classList.remove('core-reading-mode-enabled');
189-
document.body.classList.remove('core-reading-mode-enable-on-enter');
190+
CoreViewer.setReadingModeEnabledOnEnter(false);
190191

191192
// Enable all styles in element.
192193
this.disabledStyles.forEach((style) => {
@@ -238,7 +239,8 @@ export class CoreReadingModeDirective implements AfterViewInit, OnDestroy {
238239
this.viewportPromise?.cancel();
239240

240241
// Disable reading mode should be done by the user.
241-
document.body.classList.remove('core-reading-mode-enabled');
242+
CoreViewer.decreaseReadingModeCounter();
243+
document.body.classList.toggle('core-reading-mode-enabled', CoreViewer.isReadingModeEnabled());
242244
}
243245

244246
}

src/core/features/viewer/services/viewer.ts

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ import {
3333
@Injectable({ providedIn: 'root' })
3434
export class CoreViewerService {
3535

36+
protected readingModeEnabledOnEnter = false;
37+
protected readingModeInstancesCounter = 0;
38+
3639
/**
3740
* View an image in a modal.
3841
*
@@ -148,6 +151,54 @@ export class CoreViewerService {
148151
this.applyReadingModeSettings(settings);
149152
}
150153

154+
/**
155+
* Set whether reading mode was enabled on enter.
156+
*
157+
* @param enabled Whether reading mode was enabled on enter.
158+
*/
159+
setReadingModeEnabledOnEnter(enabled: boolean): void {
160+
this.readingModeEnabledOnEnter = enabled;
161+
}
162+
163+
/**
164+
* Increase the reading mode counter.
165+
* This should be only called by the reading mode directive.
166+
*/
167+
increaseReadingModeCounter(): void {
168+
this.readingModeInstancesCounter++;
169+
}
170+
171+
/**
172+
* Decrease the reading mode counter.
173+
* If the counter goes below 0, it will be set to 0.
174+
* This should be only called by the reading mode directive.
175+
*/
176+
decreaseReadingModeCounter(): void {
177+
this.readingModeInstancesCounter--;
178+
179+
if (this.readingModeInstancesCounter < 0) {
180+
this.readingModeInstancesCounter = 0;
181+
}
182+
}
183+
184+
/**
185+
* Check if reading mode was enabled on enter.
186+
*
187+
* @returns Whether reading mode was enabled on enter.
188+
*/
189+
isReadingModeEnabledOnEnter(): boolean {
190+
return this.readingModeEnabledOnEnter;
191+
}
192+
193+
/**
194+
* Check if reading mode is enabled.
195+
*
196+
* @returns Whether reading mode is enabled.
197+
*/
198+
isReadingModeEnabled(): boolean {
199+
return this.readingModeEnabledOnEnter && this.readingModeInstancesCounter > 0;
200+
}
201+
151202
}
152203
export const CoreViewer = makeSingleton(CoreViewerService);
153204

src/theme/components/collapsible-header.scss

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,11 @@ body:not(.core-iframe-fullscreen):not(.core-reading-mode-enabled) .collapsible-h
118118
}
119119

120120
}
121+
122+
body.core-reading-mode-enabled .collapsible-header-page {
123+
.collapsible-header-original-title {
124+
pointer-events: none;
125+
user-select: none;
126+
visibility: hidden;
127+
}
128+
}

0 commit comments

Comments
 (0)