@prose-reader/core 1.59.0 → 1.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/createReaderWithEnhancer.d.ts +4 -45
- package/dist/enhancers/fonts/SettingsManager.d.ts +10 -0
- package/dist/enhancers/fonts/fonts.d.ts +7 -0
- package/dist/enhancers/fonts/types.d.ts +9 -0
- package/dist/enhancers/layoutEnhancer/SettingsManager.d.ts +10 -0
- package/dist/enhancers/layoutEnhancer/layoutEnhancer.d.ts +5 -8
- package/dist/enhancers/layoutEnhancer/types.d.ts +5 -7
- package/dist/index.js +289 -210
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +222 -143
- package/dist/index.umd.cjs.map +1 -1
- package/dist/reader.d.ts +2 -2
- package/dist/settings/ReaderSettingsManager.d.ts +32 -0
- package/dist/settings/SettingsInterface.d.ts +13 -0
- package/dist/settings/SettingsManagerOverload.d.ts +23 -0
- package/dist/settings/types.d.ts +6 -5
- package/dist/spine/createSpine.d.ts +2 -2
- package/dist/spine/locationResolver.d.ts +2 -2
- package/dist/spine/navigationResolver.d.ts +2 -2
- package/dist/spineItem/commonSpineItem.d.ts +2 -2
- package/dist/spineItem/createSpineItem.d.ts +2 -2
- package/dist/spineItem/frameItem/frameItem.d.ts +2 -2
- package/dist/spineItem/frameItem/loader.d.ts +2 -2
- package/dist/spineItem/navigationResolver.d.ts +2 -2
- package/dist/spineItem/prePaginatedSpineItem.d.ts +2 -2
- package/dist/spineItem/reflowableSpineItem.d.ts +2 -2
- package/dist/spineItemManager.d.ts +2 -2
- package/dist/types/reader.d.ts +4 -4
- package/dist/utils/objects.d.ts +1 -0
- package/dist/viewportNavigator/panViewportNavigator.d.ts +2 -2
- package/dist/viewportNavigator/scrollViewportNavigator.d.ts +2 -2
- package/dist/viewportNavigator/viewportNavigator.d.ts +2 -2
- package/package.json +3 -3
- package/dist/enhancers/fonts.d.ts +0 -19
- package/dist/settings/SettingsManager.d.ts +0 -14
- package/dist/settings/defaultSettings.d.ts +0 -3
- package/dist/settings/getComputedSettings.d.ts +0 -4
- package/dist/utils/compose.d.ts +0 -8
package/dist/index.umd.cjs
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
(function(global, factory) {
|
|
2
2
|
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("rxjs"), require("rxjs/operators"), require("@prose-reader/shared")) : typeof define === "function" && define.amd ? define(["exports", "rxjs", "rxjs/operators", "@prose-reader/shared"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.prose = {}, global.rxjs, global.operators, global.shared));
|
|
3
3
|
})(this, function(exports2, rxjs, operators, shared) {
|
|
4
|
-
"use strict";
|
|
4
|
+
"use strict";var __typeError = (msg) => {
|
|
5
|
+
throw TypeError(msg);
|
|
6
|
+
};
|
|
7
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
8
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
9
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
10
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
11
|
+
|
|
12
|
+
var _context;
|
|
5
13
|
const chromeEnhancer = (next) => (options) => {
|
|
6
14
|
const reader = next(options);
|
|
7
15
|
reader.context.state$.pipe(rxjs.takeUntil(reader.$.destroy$)).subscribe(({ containerElement }) => {
|
|
@@ -73,21 +81,98 @@
|
|
|
73
81
|
reader.readAsDataURL(data);
|
|
74
82
|
});
|
|
75
83
|
};
|
|
84
|
+
function shallowMergeIfDefined(obj1, obj2) {
|
|
85
|
+
const result = { ...obj1 };
|
|
86
|
+
for (const key in obj2) {
|
|
87
|
+
if (Object.prototype.hasOwnProperty.call(obj2, key)) {
|
|
88
|
+
const value = obj2[key];
|
|
89
|
+
if (value !== void 0 || !(key in obj1)) {
|
|
90
|
+
result[key] = value;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
class SettingsManagerOverload {
|
|
97
|
+
constructor(initialSettings, settingsManager) {
|
|
98
|
+
this.settingsManager = settingsManager;
|
|
99
|
+
this.inputSettings = shallowMergeIfDefined(this.getDefaultSettings(), initialSettings);
|
|
100
|
+
this.outputSettings = this.computeOutputSettings();
|
|
101
|
+
this.outputSettingsUpdateSubject = new rxjs.Subject();
|
|
102
|
+
this.settings$ = rxjs.combineLatest([
|
|
103
|
+
this.settingsManager.settings$,
|
|
104
|
+
this.outputSettingsUpdateSubject.pipe(operators.startWith(this.outputSettings))
|
|
105
|
+
]).pipe(
|
|
106
|
+
operators.map(([parentSettings, settings]) => ({ ...parentSettings, ...settings })),
|
|
107
|
+
operators.shareReplay(1)
|
|
108
|
+
);
|
|
109
|
+
this.settings$.subscribe();
|
|
110
|
+
}
|
|
111
|
+
_prepareUpdate(settings) {
|
|
112
|
+
const parentInputSettings = this.getCleanedParentInputSettings(settings);
|
|
113
|
+
const parentManagerPreparedUpdate = this.settingsManager._prepareUpdate(parentInputSettings);
|
|
114
|
+
this.inputSettings = { ...this.inputSettings, ...settings };
|
|
115
|
+
const outputSettings = this.computeOutputSettings();
|
|
116
|
+
const hasChanged = this.hasSettingsChanged(outputSettings);
|
|
117
|
+
console.log({ outputSettings, hasChanged, parentManagerPreparedUpdate });
|
|
118
|
+
return {
|
|
119
|
+
hasChanged: hasChanged || parentManagerPreparedUpdate.hasChanged,
|
|
120
|
+
commit: () => {
|
|
121
|
+
this.outputSettings = outputSettings;
|
|
122
|
+
if (!parentManagerPreparedUpdate.hasChanged && hasChanged) {
|
|
123
|
+
this.outputSettingsUpdateSubject.next(outputSettings);
|
|
124
|
+
}
|
|
125
|
+
parentManagerPreparedUpdate.commit();
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
update(settings) {
|
|
130
|
+
const { commit } = this._prepareUpdate(settings);
|
|
131
|
+
commit();
|
|
132
|
+
}
|
|
133
|
+
get settings() {
|
|
134
|
+
return {
|
|
135
|
+
...this.settingsManager.settings,
|
|
136
|
+
...this.outputSettings
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
destroy() {
|
|
140
|
+
this.outputSettingsUpdateSubject.complete();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
let SettingsManager$1 = class SettingsManager extends SettingsManagerOverload {
|
|
144
|
+
computeOutputSettings() {
|
|
145
|
+
return this.inputSettings;
|
|
146
|
+
}
|
|
147
|
+
hasSettingsChanged(newOutputSettings) {
|
|
148
|
+
return !isShallowEqual(this.outputSettings, newOutputSettings);
|
|
149
|
+
}
|
|
150
|
+
getCleanedParentInputSettings(settings) {
|
|
151
|
+
const { fontJustification, fontScale, fontWeight, lineHeight, ...rest } = settings;
|
|
152
|
+
return rest;
|
|
153
|
+
}
|
|
154
|
+
getDefaultSettings() {
|
|
155
|
+
return {
|
|
156
|
+
fontScale: 1,
|
|
157
|
+
fontWeight: "publisher",
|
|
158
|
+
lineHeight: "publisher",
|
|
159
|
+
fontJustification: "publisher"
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
};
|
|
76
163
|
const fontsEnhancer = (next) => (options) => {
|
|
77
|
-
const {
|
|
78
|
-
fontScale = 1,
|
|
79
|
-
lineHeight = `publisher`,
|
|
80
|
-
fontWeight = `publisher`,
|
|
81
|
-
fontJustification = `publisher`
|
|
82
|
-
} = options;
|
|
164
|
+
const { fontScale, lineHeight, fontWeight, fontJustification } = options;
|
|
83
165
|
const changes$ = new rxjs.Subject();
|
|
84
|
-
const settings$ = new rxjs.BehaviorSubject({
|
|
85
|
-
fontScale,
|
|
86
|
-
lineHeight,
|
|
87
|
-
fontWeight,
|
|
88
|
-
fontJustification
|
|
89
|
-
});
|
|
90
166
|
const reader = next(options);
|
|
167
|
+
const settingsManager = new SettingsManager$1(
|
|
168
|
+
{
|
|
169
|
+
fontScale,
|
|
170
|
+
lineHeight,
|
|
171
|
+
fontWeight,
|
|
172
|
+
fontJustification
|
|
173
|
+
},
|
|
174
|
+
reader.settings
|
|
175
|
+
);
|
|
91
176
|
const getStyle = () => `
|
|
92
177
|
${/*
|
|
93
178
|
Ideally, we would like to use !important but it could break publisher specific
|
|
@@ -99,10 +184,10 @@
|
|
|
99
184
|
*/
|
|
100
185
|
``}
|
|
101
186
|
body {
|
|
102
|
-
${settings
|
|
103
|
-
${settings
|
|
104
|
-
${settings
|
|
105
|
-
${settings
|
|
187
|
+
${settingsManager.settings.fontScale !== 1 ? `font-size: ${settingsManager.settings.fontScale}em !important;` : ``}
|
|
188
|
+
${settingsManager.settings.lineHeight !== `publisher` ? `line-height: ${settingsManager.settings.lineHeight} !important;` : ``}
|
|
189
|
+
${settingsManager.settings.fontWeight !== `publisher` ? `font-weight: ${settingsManager.settings.fontWeight} !important;` : ``}
|
|
190
|
+
${settingsManager.settings.fontJustification !== `publisher` ? `text-align: ${settingsManager.settings.fontJustification} !important;` : ``}
|
|
106
191
|
}
|
|
107
192
|
`;
|
|
108
193
|
const applyChangeToSpineItem = (requireLayout) => {
|
|
@@ -132,42 +217,15 @@
|
|
|
132
217
|
return false;
|
|
133
218
|
})
|
|
134
219
|
);
|
|
135
|
-
|
|
136
|
-
operators.withLatestFrom(settings$),
|
|
137
|
-
rxjs.map(([changes, settings]) => ({
|
|
138
|
-
fontJustification: changes.fontJustification ?? settings.fontJustification,
|
|
139
|
-
fontWeight: changes.fontWeight ?? settings.fontWeight,
|
|
140
|
-
lineHeight: changes.lineHeight ?? settings.lineHeight,
|
|
141
|
-
fontScale: Math.max(0.01, changes.fontScale ?? settings.fontScale)
|
|
142
|
-
})),
|
|
143
|
-
operators.distinctUntilChanged(isShallowEqual),
|
|
144
|
-
operators.shareReplay(1)
|
|
145
|
-
);
|
|
146
|
-
newSettings$.subscribe(settings$);
|
|
147
|
-
settings$.pipe(shouldRequireLayout, operators.tap(applyChangeToSpineItem), rxjs.takeUntil(reader.$.destroy$)).subscribe();
|
|
148
|
-
const settingsMerge$ = rxjs.combineLatest([reader.settings.settings$, settings$]).pipe(
|
|
149
|
-
rxjs.map(([innerSettings, settings]) => ({
|
|
150
|
-
...innerSettings,
|
|
151
|
-
...settings
|
|
152
|
-
}))
|
|
153
|
-
);
|
|
154
|
-
const setSettings = (settings) => {
|
|
155
|
-
const { fontJustification: fontJustification2, fontScale: fontScale2, fontWeight: fontWeight2, lineHeight: lineHeight2, ...passthroughSettings } = settings;
|
|
156
|
-
changes$.next({ fontJustification: fontJustification2, fontScale: fontScale2, fontWeight: fontWeight2, lineHeight: lineHeight2 });
|
|
157
|
-
reader.settings.setSettings(passthroughSettings);
|
|
158
|
-
};
|
|
220
|
+
settingsManager.settings$.pipe(shouldRequireLayout, operators.tap(applyChangeToSpineItem), rxjs.takeUntil(reader.$.destroy$)).subscribe();
|
|
159
221
|
return {
|
|
160
222
|
...reader,
|
|
161
223
|
destroy: () => {
|
|
162
224
|
changes$.complete();
|
|
163
|
-
|
|
225
|
+
settingsManager.destroy();
|
|
164
226
|
reader.destroy();
|
|
165
227
|
},
|
|
166
|
-
settings:
|
|
167
|
-
...reader.settings,
|
|
168
|
-
setSettings,
|
|
169
|
-
settings$: settingsMerge$
|
|
170
|
-
}
|
|
228
|
+
settings: settingsManager
|
|
171
229
|
};
|
|
172
230
|
};
|
|
173
231
|
const hotkeysEnhancer = (next) => (options) => {
|
|
@@ -293,14 +351,37 @@
|
|
|
293
351
|
function isDefined(arg) {
|
|
294
352
|
return arg !== null && arg !== void 0;
|
|
295
353
|
}
|
|
354
|
+
class SettingsManager extends SettingsManagerOverload {
|
|
355
|
+
computeOutputSettings() {
|
|
356
|
+
return this.inputSettings;
|
|
357
|
+
}
|
|
358
|
+
hasSettingsChanged(newOutputSettings) {
|
|
359
|
+
return !isShallowEqual(this.outputSettings, newOutputSettings);
|
|
360
|
+
}
|
|
361
|
+
getCleanedParentInputSettings(settings) {
|
|
362
|
+
const { layoutAutoResize, pageHorizontalMargin, pageVerticalMargin, ...rest } = settings;
|
|
363
|
+
return rest;
|
|
364
|
+
}
|
|
365
|
+
getDefaultSettings() {
|
|
366
|
+
return {
|
|
367
|
+
layoutAutoResize: "container",
|
|
368
|
+
pageHorizontalMargin: 24,
|
|
369
|
+
pageVerticalMargin: 24
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
}
|
|
296
373
|
const SHOULD_NOT_LAYOUT = false;
|
|
297
374
|
const layoutEnhancer = (next) => (options) => {
|
|
298
|
-
const { pageHorizontalMargin
|
|
375
|
+
const { pageHorizontalMargin, pageVerticalMargin, layoutAutoResize } = options;
|
|
299
376
|
const reader = next(options);
|
|
300
|
-
const
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
377
|
+
const settingsManager = new SettingsManager(
|
|
378
|
+
{
|
|
379
|
+
pageHorizontalMargin,
|
|
380
|
+
pageVerticalMargin,
|
|
381
|
+
layoutAutoResize
|
|
382
|
+
},
|
|
383
|
+
reader.settings
|
|
384
|
+
);
|
|
304
385
|
reader.hookManager.register(`onViewportOffsetAdjust`, () => {
|
|
305
386
|
let hasRedrawn = false;
|
|
306
387
|
reader.spine.manipulateSpineItems(({ frame }) => {
|
|
@@ -313,7 +394,7 @@
|
|
|
313
394
|
});
|
|
314
395
|
reader.hookManager.register(`item.onLayoutBeforeMeasurement`, ({ frame, minimumWidth, item, isImageType }) => {
|
|
315
396
|
var _a, _b;
|
|
316
|
-
const { pageHorizontalMargin: pageHorizontalMargin2 = 0, pageVerticalMargin: pageVerticalMargin2 = 0 } =
|
|
397
|
+
const { pageHorizontalMargin: pageHorizontalMargin2 = 0, pageVerticalMargin: pageVerticalMargin2 = 0 } = settingsManager.settings;
|
|
317
398
|
const pageSize = reader.context.getPageSize();
|
|
318
399
|
if (item.renditionLayout === `reflowable` && frame.getIsReady() && !isImageType() && !frame.getViewportDimensions()) {
|
|
319
400
|
let columnWidth = pageSize.width - pageHorizontalMargin2 * 2;
|
|
@@ -367,7 +448,7 @@
|
|
|
367
448
|
}
|
|
368
449
|
const movingSafePan$ = createMovingSafePan$(reader);
|
|
369
450
|
movingSafePan$.subscribe();
|
|
370
|
-
|
|
451
|
+
settingsManager.settings$.pipe(
|
|
371
452
|
mapKeysTo([`pageHorizontalMargin`, `pageVerticalMargin`]),
|
|
372
453
|
operators.distinctUntilChanged(isShallowEqual),
|
|
373
454
|
operators.skip(1),
|
|
@@ -376,32 +457,14 @@
|
|
|
376
457
|
}),
|
|
377
458
|
operators.takeUntil(reader.$.destroy$)
|
|
378
459
|
).subscribe();
|
|
379
|
-
const settings$ = rxjs.combineLatest([reader.settings.settings$, settingsSubject$.asObservable()]).pipe(
|
|
380
|
-
operators.map(([innerSettings, settings]) => ({
|
|
381
|
-
...innerSettings,
|
|
382
|
-
...settings
|
|
383
|
-
}))
|
|
384
|
-
);
|
|
385
|
-
const setSettings = ({ pageVerticalMargin: pageVerticalMargin2, pageHorizontalMargin: pageHorizontalMargin2, ...rest }) => {
|
|
386
|
-
if (pageHorizontalMargin2 !== void 0 || pageVerticalMargin2 !== void 0) {
|
|
387
|
-
settingsSubject$.next({
|
|
388
|
-
pageHorizontalMargin: pageHorizontalMargin2 ?? settingsSubject$.value.pageHorizontalMargin,
|
|
389
|
-
pageVerticalMargin: pageVerticalMargin2 ?? settingsSubject$.value.pageVerticalMargin
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
reader.settings.setSettings(rest);
|
|
393
|
-
};
|
|
394
460
|
return {
|
|
395
461
|
...reader,
|
|
396
462
|
destroy: () => {
|
|
463
|
+
settingsManager.destroy();
|
|
397
464
|
reader.destroy();
|
|
398
465
|
observer == null ? void 0 : observer.disconnect();
|
|
399
466
|
},
|
|
400
|
-
settings:
|
|
401
|
-
...reader.settings,
|
|
402
|
-
setSettings,
|
|
403
|
-
settings$
|
|
404
|
-
}
|
|
467
|
+
settings: settingsManager
|
|
405
468
|
};
|
|
406
469
|
};
|
|
407
470
|
const ROOT_NAMESPACE = `@prose-reader/core`;
|
|
@@ -5506,95 +5569,111 @@
|
|
|
5506
5569
|
generateFromRange
|
|
5507
5570
|
};
|
|
5508
5571
|
};
|
|
5509
|
-
|
|
5510
|
-
const manifest = context.manifest;
|
|
5511
|
-
const hasVerticalWriting = context.state.hasVerticalWriting ?? false;
|
|
5512
|
-
const computedSettings = {
|
|
5513
|
-
computedPageTurnDirection: settings.pageTurnDirection,
|
|
5514
|
-
computedPageTurnAnimation: settings.pageTurnAnimation,
|
|
5515
|
-
computedPageTurnMode: `controlled`,
|
|
5516
|
-
computedPageTurnAnimationDuration: 0
|
|
5517
|
-
};
|
|
5518
|
-
if ((manifest == null ? void 0 : manifest.renditionFlow) === `scrolled-continuous`) {
|
|
5519
|
-
computedSettings.computedPageTurnMode = `scrollable`;
|
|
5520
|
-
computedSettings.computedPageTurnDirection = `vertical`;
|
|
5521
|
-
} else if (manifest && settings.pageTurnMode === `scrollable` && (manifest.renditionLayout !== `pre-paginated` || !areAllItemsPrePaginated(manifest))) {
|
|
5522
|
-
Report.warn(`pageTurnMode ${settings.pageTurnMode} incompatible with current book, switching back to default`);
|
|
5523
|
-
computedSettings.computedPageTurnAnimation = `none`;
|
|
5524
|
-
computedSettings.computedPageTurnMode = `controlled`;
|
|
5525
|
-
} else if (settings.pageTurnMode === `scrollable`) {
|
|
5526
|
-
computedSettings.computedPageTurnMode = `scrollable`;
|
|
5527
|
-
computedSettings.computedPageTurnDirection = `vertical`;
|
|
5528
|
-
}
|
|
5529
|
-
if (hasVerticalWriting && computedSettings.computedPageTurnAnimation === `slide`) {
|
|
5530
|
-
Report.warn(
|
|
5531
|
-
`pageTurnAnimation ${computedSettings.computedPageTurnAnimation} incompatible with current book, switching back to default`
|
|
5532
|
-
);
|
|
5533
|
-
computedSettings.computedPageTurnAnimation = `none`;
|
|
5534
|
-
}
|
|
5535
|
-
if (computedSettings.computedPageTurnMode === `scrollable`) {
|
|
5536
|
-
computedSettings.computedPageTurnAnimationDuration = 0;
|
|
5537
|
-
computedSettings.computedPageTurnAnimation = `none`;
|
|
5538
|
-
} else {
|
|
5539
|
-
computedSettings.computedPageTurnAnimationDuration = settings.pageTurnAnimationDuration !== void 0 ? settings.pageTurnAnimationDuration : 300;
|
|
5540
|
-
}
|
|
5541
|
-
return computedSettings;
|
|
5542
|
-
};
|
|
5543
|
-
const defaultSettings = {
|
|
5544
|
-
forceSinglePageMode: false,
|
|
5545
|
-
pageTurnAnimation: `none`,
|
|
5546
|
-
// computedPageTurnAnimation: `none`,
|
|
5547
|
-
pageTurnDirection: `horizontal`,
|
|
5548
|
-
// computedPageTurnDirection: `horizontal`,
|
|
5549
|
-
pageTurnAnimationDuration: void 0,
|
|
5550
|
-
// computedPageTurnAnimationDuration: 0,
|
|
5551
|
-
pageTurnMode: `controlled`,
|
|
5552
|
-
// computedPageTurnMode: `controlled`,
|
|
5553
|
-
snapAnimationDuration: 300,
|
|
5554
|
-
navigationSnapThreshold: 0.3,
|
|
5555
|
-
numberOfAdjacentSpineItemToPreLoad: 0
|
|
5556
|
-
};
|
|
5557
|
-
class SettingsManager {
|
|
5572
|
+
class ReaderSettingsManager {
|
|
5558
5573
|
constructor(initialSettings, context) {
|
|
5559
|
-
this
|
|
5574
|
+
__privateAdd(this, _context);
|
|
5575
|
+
__privateSet(this, _context, context);
|
|
5560
5576
|
const settingsWithDefaults = {
|
|
5561
|
-
...
|
|
5577
|
+
...this.getDefaultSettings(),
|
|
5562
5578
|
...initialSettings
|
|
5563
5579
|
};
|
|
5564
|
-
const
|
|
5565
|
-
|
|
5566
|
-
this.
|
|
5567
|
-
this.settings$ = this.
|
|
5580
|
+
const outputSettings = this.getOutputSettings(settingsWithDefaults);
|
|
5581
|
+
this.outputSettings = outputSettings;
|
|
5582
|
+
this.outputSettingsUpdateSubject = new rxjs.Subject();
|
|
5583
|
+
this.settings$ = this.outputSettingsUpdateSubject.asObservable().pipe(operators.startWith(this.settings), operators.shareReplay(1));
|
|
5568
5584
|
const recomputeSettingsOnContextChange$ = rxjs.combineLatest([context.hasVerticalWriting$, context.manifest$]).pipe(
|
|
5569
5585
|
operators.tap(() => {
|
|
5570
|
-
this.
|
|
5586
|
+
this.update(this.settings);
|
|
5571
5587
|
})
|
|
5572
5588
|
);
|
|
5573
|
-
const updateContextOnSettingsChanges$ = this.
|
|
5589
|
+
const updateContextOnSettingsChanges$ = this.settings$.pipe(
|
|
5574
5590
|
operators.tap(({ forceSinglePageMode }) => {
|
|
5575
5591
|
context.update({ forceSinglePageMode });
|
|
5576
5592
|
})
|
|
5577
5593
|
);
|
|
5578
5594
|
rxjs.merge(recomputeSettingsOnContextChange$, updateContextOnSettingsChanges$).pipe(operators.takeUntil(context.destroy$)).subscribe();
|
|
5595
|
+
this.settings$.subscribe();
|
|
5579
5596
|
}
|
|
5580
|
-
|
|
5581
|
-
|
|
5582
|
-
const
|
|
5583
|
-
const
|
|
5584
|
-
|
|
5597
|
+
getComputedSettings(settings) {
|
|
5598
|
+
const manifest = __privateGet(this, _context).manifest;
|
|
5599
|
+
const hasVerticalWriting = __privateGet(this, _context).state.hasVerticalWriting ?? false;
|
|
5600
|
+
const computedSettings = {
|
|
5601
|
+
computedPageTurnDirection: settings.pageTurnDirection,
|
|
5602
|
+
computedPageTurnAnimation: settings.pageTurnAnimation,
|
|
5603
|
+
computedPageTurnMode: `controlled`,
|
|
5604
|
+
computedPageTurnAnimationDuration: 0
|
|
5605
|
+
};
|
|
5606
|
+
if ((manifest == null ? void 0 : manifest.renditionFlow) === `scrolled-continuous`) {
|
|
5607
|
+
computedSettings.computedPageTurnMode = `scrollable`;
|
|
5608
|
+
computedSettings.computedPageTurnDirection = `vertical`;
|
|
5609
|
+
} else if (manifest && settings.pageTurnMode === `scrollable` && (manifest.renditionLayout !== `pre-paginated` || !areAllItemsPrePaginated(manifest))) {
|
|
5610
|
+
Report.warn(`pageTurnMode ${settings.pageTurnMode} incompatible with current book, switching back to default`);
|
|
5611
|
+
computedSettings.computedPageTurnAnimation = `none`;
|
|
5612
|
+
computedSettings.computedPageTurnMode = `controlled`;
|
|
5613
|
+
} else if (settings.pageTurnMode === `scrollable`) {
|
|
5614
|
+
computedSettings.computedPageTurnMode = `scrollable`;
|
|
5615
|
+
computedSettings.computedPageTurnDirection = `vertical`;
|
|
5616
|
+
}
|
|
5617
|
+
if (hasVerticalWriting && computedSettings.computedPageTurnAnimation === `slide`) {
|
|
5618
|
+
Report.warn(
|
|
5619
|
+
`pageTurnAnimation ${computedSettings.computedPageTurnAnimation} incompatible with current book, switching back to default`
|
|
5620
|
+
);
|
|
5621
|
+
computedSettings.computedPageTurnAnimation = `none`;
|
|
5622
|
+
}
|
|
5623
|
+
if (computedSettings.computedPageTurnMode === `scrollable`) {
|
|
5624
|
+
computedSettings.computedPageTurnAnimationDuration = 0;
|
|
5625
|
+
computedSettings.computedPageTurnAnimation = `none`;
|
|
5626
|
+
} else {
|
|
5627
|
+
computedSettings.computedPageTurnAnimationDuration = settings.pageTurnAnimationDuration !== void 0 ? settings.pageTurnAnimationDuration : 300;
|
|
5628
|
+
}
|
|
5629
|
+
return computedSettings;
|
|
5630
|
+
}
|
|
5631
|
+
_prepareUpdate(settings) {
|
|
5632
|
+
const state = this.getOutputSettings(settings);
|
|
5633
|
+
const hasChanged = !isShallowEqual(this.outputSettings, state);
|
|
5634
|
+
return {
|
|
5635
|
+
hasChanged,
|
|
5636
|
+
state,
|
|
5637
|
+
commit: () => {
|
|
5638
|
+
this.outputSettings = state;
|
|
5639
|
+
if (hasChanged) {
|
|
5640
|
+
this.outputSettingsUpdateSubject.next(state);
|
|
5641
|
+
}
|
|
5642
|
+
}
|
|
5643
|
+
};
|
|
5644
|
+
}
|
|
5645
|
+
getOutputSettings(inputSettings) {
|
|
5646
|
+
const computedSettings = this.getComputedSettings({ ...this.outputSettings, ...inputSettings });
|
|
5647
|
+
return { ...this.outputSettings, ...inputSettings, ...computedSettings };
|
|
5648
|
+
}
|
|
5649
|
+
getDefaultSettings() {
|
|
5650
|
+
return {
|
|
5651
|
+
forceSinglePageMode: false,
|
|
5652
|
+
pageTurnAnimation: `none`,
|
|
5653
|
+
// computedPageTurnAnimation: `none`,
|
|
5654
|
+
pageTurnDirection: `horizontal`,
|
|
5655
|
+
// computedPageTurnDirection: `horizontal`,
|
|
5656
|
+
pageTurnAnimationDuration: void 0,
|
|
5657
|
+
// computedPageTurnAnimationDuration: 0,
|
|
5658
|
+
pageTurnMode: `controlled`,
|
|
5659
|
+
// computedPageTurnMode: `controlled`,
|
|
5660
|
+
snapAnimationDuration: 300,
|
|
5661
|
+
navigationSnapThreshold: 0.3,
|
|
5662
|
+
numberOfAdjacentSpineItemToPreLoad: 0
|
|
5663
|
+
};
|
|
5585
5664
|
}
|
|
5586
|
-
|
|
5587
|
-
|
|
5588
|
-
|
|
5589
|
-
this._updateSettings(newMergedSettings);
|
|
5665
|
+
update(settings) {
|
|
5666
|
+
const { commit } = this._prepareUpdate(settings);
|
|
5667
|
+
commit();
|
|
5590
5668
|
}
|
|
5591
5669
|
get settings() {
|
|
5592
|
-
return this.
|
|
5670
|
+
return this.outputSettings;
|
|
5593
5671
|
}
|
|
5594
5672
|
destroy() {
|
|
5595
|
-
this.
|
|
5673
|
+
this.outputSettingsUpdateSubject.complete();
|
|
5596
5674
|
}
|
|
5597
5675
|
}
|
|
5676
|
+
_context = new WeakMap();
|
|
5598
5677
|
class HookManager {
|
|
5599
5678
|
constructor() {
|
|
5600
5679
|
this._hooks = [];
|
|
@@ -5677,7 +5756,7 @@
|
|
|
5677
5756
|
const viewportStateSubject = new rxjs.BehaviorSubject(`free`);
|
|
5678
5757
|
const hookManager = new HookManager();
|
|
5679
5758
|
const context = new Context();
|
|
5680
|
-
const settingsManager = new
|
|
5759
|
+
const settingsManager = new ReaderSettingsManager(inputSettings, context);
|
|
5681
5760
|
const spineItemManager = createSpineItemManager({ context, settings: settingsManager });
|
|
5682
5761
|
const pagination = createPagination({ context, spineItemManager });
|
|
5683
5762
|
const elementSubject$ = new rxjs.BehaviorSubject(void 0);
|