Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ All notable changes to this project will be documented in this file. Take a look
* New `EPUBNavigatorViewController.Configuration.preferredResourceVariant` to choose which variant of each resource is rendered among its `alternates`, such as the XHTML page or its bitmap fallback.
* Bitmap resources in the reading order are rendered as fixed-layout, even in a reflowable publication.
* New `EPUBNavigatorDelegate.navigator(_:contentInsetFor:)` to customize the content insets of a spread according to its `EPUBLayout`, for example to add margins only around the reflowable resources of a mixed-layout publication. It takes precedence over `navigatorContentInset(_:)`.
* New `Navigator.readingOrder` property returning the reading order actually rendered by the navigator, which may differ from `publication.readingOrder` when a custom reading order or a resource variant is used.

### Changed

Expand Down
5 changes: 5 additions & 0 deletions Sources/Navigator/Audiobook/AudioNavigator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,11 @@ public final class AudioNavigator: Navigator, Configurable, AudioSessionUser, Lo
}

public let publication: Publication

public var readingOrder: [Link] {
publication.readingOrder
}

private let initialLocation: Locator?
private let config: Configuration
private let audioSession: AudioSessionManaging
Expand Down
21 changes: 10 additions & 11 deletions Sources/Navigator/EPUB/EPUBNavigatorViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -296,9 +296,8 @@ open class EPUBNavigatorViewController: InputObservableViewController,
viewModel.config
}

/// Reading order rendered by the navigator.
private var readingOrder: EPUBReadingOrder {
viewModel.readingOrder
public var readingOrder: [Link] {
viewModel.readingOrder.links
}

/// Creates a new instance of `EPUBNavigatorViewController`.
Expand Down Expand Up @@ -635,7 +634,7 @@ open class EPUBNavigatorViewController: InputObservableViewController,

spreads = EPUBSpread.makeSpreads(
for: publication,
readingOrder: readingOrder.links,
readingOrder: readingOrder,
readingProgression: viewModel.readingProgression,
spread: viewModel.spreadEnabled,
offsetFirstPage: viewModel.offsetFirstPage
Expand All @@ -644,7 +643,7 @@ open class EPUBNavigatorViewController: InputObservableViewController,
let initialIndex: ReadingOrder.Index = {
if
let href = locator?.href,
let index = readingOrder.index(of: href),
let index = viewModel.readingOrder.index(of: href),
let foundIndex = self.spreads.firstIndexWithReadingOrderIndex(index)
{
return foundIndex
Expand All @@ -671,7 +670,7 @@ open class EPUBNavigatorViewController: InputObservableViewController,
private func loadedSpreadViewForHREF<T: URLConvertible>(_ href: T) -> EPUBSpreadView? {
guard
let loadedViews = paginationView?.loadedViews,
let index = readingOrder.links.firstIndexWithHREF(href)
let index = readingOrder.firstIndexWithHREF(href)
else {
return nil
}
Expand Down Expand Up @@ -717,7 +716,7 @@ open class EPUBNavigatorViewController: InputObservableViewController,
readingOrderIndices: spreadView.spread.readingOrderIndices,
progression: { spreadView.progression(in: $0) },
manifest: publication.manifest,
readingOrder: readingOrder.links,
readingOrder: readingOrder,
positionsByReadingOrder: positionsByReadingOrder,
tableOfContentsTitleByHref: tableOfContentsTitleByHref
)
Expand Down Expand Up @@ -759,7 +758,7 @@ open class EPUBNavigatorViewController: InputObservableViewController,
public func go(to locator: Locator, options: NavigatorGoOptions) async -> Bool {
guard
let paginationView = paginationView,
let resolved = readingOrder.resolve(publication.normalizeLocator(locator)),
let resolved = viewModel.readingOrder.resolve(publication.normalizeLocator(locator)),
let spreadIndex = spreads.firstIndexWithReadingOrderIndex(resolved.index),
on(.jump(resolved.locator))
else {
Expand Down Expand Up @@ -1053,7 +1052,7 @@ extension EPUBNavigatorViewController: EPUBNavigatorViewModelDelegate {
for (_, view) in paginationView.loadedViews {
guard
let view = view as? EPUBSpreadView,
let index = readingOrder.links.firstIndexWithHREF(href),
let index = readingOrder.firstIndexWithHREF(href),
view.spread.contains(index: index)
else {
continue
Expand Down Expand Up @@ -1128,7 +1127,7 @@ extension EPUBNavigatorViewController: EPUBSpreadViewDelegate {
.joined(separator: "\n")

let links = spreadView.spread.readingOrderIndices
.compactMap { readingOrder.links.getOrNil($0) }
.compactMap { readingOrder.getOrNil($0) }

for link in links {
let href = link.url()
Expand Down Expand Up @@ -1334,6 +1333,6 @@ extension EPUBNavigatorViewController: PaginationViewDelegate {
}

func paginationView(_ paginationView: PaginationView, positionCountAtIndex index: Int) -> Int {
spreads[index].positionCount(in: readingOrder.links, positionsByReadingOrder: positionsByReadingOrder)
spreads[index].positionCount(in: readingOrder, positionsByReadingOrder: positionsByReadingOrder)
}
}
7 changes: 7 additions & 0 deletions Sources/Navigator/Navigator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@ public protocol Navigator: AnyObject {
/// Publication being rendered.
var publication: Publication { get }

/// Reading order actually rendered by the navigator.
///
/// It may differ from `publication.readingOrder` when the navigator was
/// initialized with a custom reading order, or when a resource variant is
/// selected for rendering.
var readingOrder: [Link] { get }

/// Current position in the publication.
/// Can be used to save a bookmark to the current position.
var currentLocation: Locator? { get }
Expand Down
5 changes: 5 additions & 0 deletions Sources/Navigator/PDF/PDFNavigatorViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ open class PDFNavigatorViewController:
private var pdfViewDefaultBackgroundColor: UIColor!

public let publication: Publication

public var readingOrder: [Link] {
publication.readingOrder
}

private let initialLocation: Locator?
private let config: Configuration
private let editingActions: EditingActionsController
Expand Down
Loading