diff --git a/docs/FONT_SYSTEM_PLAN.md b/docs/FONT_SYSTEM_PLAN.md index d31cb6b..261e1aa 100644 --- a/docs/FONT_SYSTEM_PLAN.md +++ b/docs/FONT_SYSTEM_PLAN.md @@ -1,8 +1,8 @@ # Font System Erweiterung - Konzept & Implementierungsplan -**Datum:** 27. November 2025 +**Datum:** 5. Dezember 2025 **Status:** Geplant -**Ziel:** Erweiterte Font-Auswahl mit 11 hochwertigen Schriftarten für bessere Lesbarkeit +**Ziel:** Erweiterte Font-Auswahl mit 10 hochwertigen Schriftarten für bessere Lesbarkeit --- @@ -14,9 +14,9 @@ - ❌ **Sans Serif:** Helvetica Neue (Standard) - ❌ **Monospace:** Menlo (Apple) -### Neue Situation (11 Fonts) -- ✅ **5 Apple System Fonts** (bereits in iOS enthalten, 0 KB) -- ✅ **8 Google Fonts** (OFL 1.1 lizenziert, ~1-2 MB) +### Neue Situation (10 Fonts) +- ✅ **4 Apple System Fonts** (bereits in iOS enthalten, 0 KB) +- ✅ **6 Google Fonts** (OFL 1.1 lizenziert, ~1.5 MB) --- @@ -29,33 +29,22 @@ --- -## 📚 Font-Übersicht (11 Fonts Total) +## 📚 Font-Übersicht (10 Fonts Total) -### Serif Fonts (5 Schriftarten) +### Serif Fonts (4 Schriftarten) -#### 1. **New York** (Apple System Font) +#### 1. **New York** (Apple System Font) ⭐ - **Quelle:** In iOS 13+ enthalten - **Lizenz:** Apple proprietär (frei für iOS Apps) - **Eigenschaften:** - 6 Gewichte - Variable optische Größen - Unterstützt Latin, Greek, Cyrillic + - Wird in Apple Books und News verwendet - **Verwendung:** Premium Serif für Apple-native Ästhetik - **App-Größe:** 0 KB (bereits in iOS) -#### 2. **Lora** (Google Font) -- **Quelle:** [GitHub - cyrealtype/Lora-Cyrillic](https://github.com/cyrealtype/Lora-Cyrillic) -- **Google Fonts:** [fonts.google.com/specimen/Lora](https://fonts.google.com/specimen/Lora) -- **Lizenz:** SIL Open Font License 1.1 -- **Designer:** Olga Karpushina, Alexei Vanyashin (Cyreal) -- **Eigenschaften:** - - Gut ausbalancierte Brushes - - Optimiert für Bildschirm-Lesbarkeit - - Variable Font verfügbar -- **Verwendung:** Elegante, lesbare Serif für Artikel -- **App-Größe:** ~200-300 KB - -#### 3. **Literata** (Google Font) ⭐ +#### 2. **Literata** (Google Font) ⭐ - **Quelle:** [GitHub - googlefonts/literata](https://github.com/googlefonts/literata) - **Google Fonts:** [fonts.google.com/specimen/Literata](https://fonts.google.com/specimen/Literata) - **Lizenz:** SIL Open Font License 1.1 @@ -67,7 +56,7 @@ - **Verwendung:** **Readeck Web-UI Match** - Hauptschrift für Artikel - **App-Größe:** ~250-350 KB -#### 4. **Merriweather** (Google Font) +#### 3. **Merriweather** (Google Font) - **Quelle:** [GitHub - SorkinType/Merriweather](https://github.com/SorkinType/Merriweather) - **Google Fonts:** [fonts.google.com/specimen/Merriweather](https://fonts.google.com/specimen/Merriweather) - **Lizenz:** SIL Open Font License 1.1 @@ -79,7 +68,7 @@ - **Verwendung:** **Readeck Web-UI Match** - Alternative Serif - **App-Größe:** ~200-300 KB -#### 5. **Source Serif** (Adobe/Google Font) +#### 4. **Source Serif** (Adobe/Google Font) - **Quelle:** [GitHub - adobe-fonts/source-serif](https://github.com/adobe-fonts/source-serif) - **Google Fonts:** [fonts.google.com/specimen/Source+Serif+4](https://fonts.google.com/specimen/Source+Serif+4) - **Lizenz:** SIL Open Font License 1.1 @@ -96,7 +85,7 @@ ### Sans Serif Fonts (5 Schriftarten) -#### 6. **SF Pro** (San Francisco - Apple System Font) +#### 5. **SF Pro** (San Francisco - Apple System Font) ⭐ - **Quelle:** In iOS enthalten - **Lizenz:** Apple proprietär (frei für iOS Apps) - **Eigenschaften:** @@ -108,6 +97,17 @@ - **Verwendung:** Standard UI Font - **App-Größe:** 0 KB (bereits in iOS) +#### 6. **Avenir Next** (Apple System Font) ⭐ +- **Quelle:** In iOS enthalten +- **Lizenz:** Apple proprietär (frei für iOS Apps) +- **Eigenschaften:** + - Moderne geometrische Sans + - 12 Gewichte + - Sehr beliebt (Apple Marketing) + - Optimiert für Lesbarkeit +- **Verwendung:** Premium Sans für moderne Ästhetik +- **App-Größe:** 0 KB (bereits in iOS) + #### 7. **Lato** (Google Font) - **Quelle:** [GitHub - latofonts/lato-source](https://github.com/latofonts/lato-source) - **Google Fonts:** [fonts.google.com/specimen/Lato](https://fonts.google.com/specimen/Lato) diff --git a/readeck.xcodeproj/project.pbxproj b/readeck.xcodeproj/project.pbxproj index 1260cd5..37e5490 100644 --- a/readeck.xcodeproj/project.pbxproj +++ b/readeck.xcodeproj/project.pbxproj @@ -103,9 +103,9 @@ UI/Components/UnifiedLabelChip.swift, UI/Extension/FontSizeExtension.swift, UI/Models/AppSettings.swift, + "UI/Utils 2/Logger.swift", + "UI/Utils 2/LogStore.swift", UI/Utils/NotificationNames.swift, - Utils/Logger.swift, - Utils/LogStore.swift, ); target = 5D2B7FAE2DFA27A400EBDB2B /* URLShare */; }; @@ -640,7 +640,7 @@ CODE_SIGN_ENTITLEMENTS = readeck/readeck.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 37; + CURRENT_PROJECT_VERSION = 40; DEVELOPMENT_ASSET_PATHS = "\"readeck/Preview Content\""; DEVELOPMENT_TEAM = 8J69P655GN; ENABLE_HARDENED_RUNTIME = YES; @@ -684,7 +684,7 @@ CODE_SIGN_ENTITLEMENTS = readeck/readeck.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 37; + CURRENT_PROJECT_VERSION = 40; DEVELOPMENT_ASSET_PATHS = "\"readeck/Preview Content\""; DEVELOPMENT_TEAM = 8J69P655GN; ENABLE_HARDENED_RUNTIME = YES; diff --git a/readeck/Data/Repository/OfflineSyncManager.swift b/readeck/Data/Repository/OfflineSyncManager.swift index 3216677..ade36c1 100644 --- a/readeck/Data/Repository/OfflineSyncManager.swift +++ b/readeck/Data/Repository/OfflineSyncManager.swift @@ -2,7 +2,13 @@ import Foundation import CoreData import SwiftUI -class OfflineSyncManager: ObservableObject, @unchecked Sendable { +protocol POfflineSyncManager { + func syncOfflineBookmarks() async + func getOfflineBookmarks() -> [ArticleURLEntity] + func deleteOfflineBookmark(_ entity: ArticleURLEntity) +} + +open class OfflineSyncManager: ObservableObject, @unchecked Sendable { static let shared = OfflineSyncManager() @Published var isSyncing = false @@ -10,36 +16,21 @@ class OfflineSyncManager: ObservableObject, @unchecked Sendable { private let coreDataManager = CoreDataManager.shared private let api: PAPI - private let checkServerReachabilityUseCase: PCheckServerReachabilityUseCase - init(api: PAPI = API(), - checkServerReachabilityUseCase: PCheckServerReachabilityUseCase = DefaultUseCaseFactory.shared.makeCheckServerReachabilityUseCase()) { + init(api: PAPI = API()) { self.api = api - self.checkServerReachabilityUseCase = checkServerReachabilityUseCase } // MARK: - Sync Methods func syncOfflineBookmarks() async { - // First check if server is reachable - guard await checkServerReachabilityUseCase.execute() else { - await MainActor.run { - isSyncing = false - syncStatus = "Server not reachable. Cannot sync." - } - DispatchQueue.main.asyncAfter(deadline: .now() + 3) { - self.syncStatus = nil - } - return - } - await MainActor.run { isSyncing = true syncStatus = "Syncing bookmarks with server..." } - + let offlineBookmarks = getOfflineBookmarks() - + guard !offlineBookmarks.isEmpty else { await MainActor.run { isSyncing = false @@ -50,48 +41,61 @@ class OfflineSyncManager: ObservableObject, @unchecked Sendable { } return } - + var successCount = 0 var failedCount = 0 - + for bookmark in offlineBookmarks { guard let url = bookmark.url else { failedCount += 1 continue } - + let tags = bookmark.tags?.components(separatedBy: ",").filter { !$0.isEmpty } ?? [] let title = bookmark.title ?? "" - + do { - // Try to upload via API let dto = CreateBookmarkRequestDto(url: url, title: title, labels: tags.isEmpty ? nil : tags) _ = try await api.createBookmark(createRequest: dto) - - // If successful, delete from offline storage + deleteOfflineBookmark(bookmark) successCount += 1 - + await MainActor.run { syncStatus = "Synced \(successCount) bookmarks..." } - + } catch { print("Failed to sync bookmark: \(url) - \(error)") failedCount += 1 + + // If first sync attempt fails, server is likely unreachable - abort + if successCount == 0 && failedCount == 1 { + await MainActor.run { + isSyncing = false + syncStatus = "Server not reachable. Cannot sync." + } + DispatchQueue.main.asyncAfter(deadline: .now() + 3) { + self.syncStatus = nil + } + return + } } } - + await MainActor.run { isSyncing = false - if failedCount == 0 { - syncStatus = "✅ Successfully synced \(successCount) bookmarks" - } else { - syncStatus = "⚠️ Synced \(successCount), failed \(failedCount) bookmarks" + if successCount > 0 { + if failedCount == 0 { + syncStatus = "✅ Successfully synced \(successCount) bookmarks" + } else { + syncStatus = "⚠️ Synced \(successCount), failed \(failedCount) bookmarks" + } + } else if failedCount > 0 { + syncStatus = "❌ Sync failed - check your connection" } } - - // Clear status after a few seconds + DispatchQueue.main.asyncAfter(deadline: .now() + 3) { self.syncStatus = nil } @@ -100,8 +104,8 @@ class OfflineSyncManager: ObservableObject, @unchecked Sendable { func getOfflineBookmarksCount() -> Int { return getOfflineBookmarks().count } - - private func getOfflineBookmarks() -> [ArticleURLEntity] { + + open func getOfflineBookmarks() -> [ArticleURLEntity] { do { let fetchRequest: NSFetchRequest = ArticleURLEntity.fetchRequest() return try coreDataManager.context.safeFetch(fetchRequest) @@ -110,12 +114,12 @@ class OfflineSyncManager: ObservableObject, @unchecked Sendable { return [] } } - - private func deleteOfflineBookmark(_ entity: ArticleURLEntity) { + + open func deleteOfflineBookmark(_ entity: ArticleURLEntity) { do { try coreDataManager.context.safePerform { [weak self] in guard let self = self else { return } - + self.coreDataManager.context.delete(entity) self.coreDataManager.save() } diff --git a/readeck/Domain/Model/FontFamily.swift b/readeck/Domain/Model/FontFamily.swift index c29219f..71dad2c 100644 --- a/readeck/Domain/Model/FontFamily.swift +++ b/readeck/Domain/Model/FontFamily.swift @@ -5,19 +5,74 @@ // Created by Ilyas Hallak on 06.11.25. // - enum FontFamily: String, CaseIterable { - case system = "system" + // Apple System Fonts + case system = "system" // SF Pro + case newYork = "newYork" // New York + case avenirNext = "avenirNext" // Avenir Next + case monospace = "monospace" // SF Mono + + // Google Serif Fonts + case literata = "literata" + case merriweather = "merriweather" + case sourceSerif = "sourceSerif" + + // Google Sans Serif Fonts + case lato = "lato" + case montserrat = "montserrat" + case sourceSans = "sourceSans" + + // Legacy (for backwards compatibility) case serif = "serif" case sansSerif = "sansSerif" - case monospace = "monospace" - + var displayName: String { switch self { - case .system: return "System" - case .serif: return "Serif" - case .sansSerif: return "Sans Serif" - case .monospace: return "Monospace" + // Apple + case .system: return "SF Pro" + case .newYork: return "New York" + case .avenirNext: return "Avenir Next" + case .monospace: return "SF Mono" + + // Serif + case .literata: return "Literata *" + case .merriweather: return "Merriweather *" + case .sourceSerif: return "Source Serif *" + + // Sans Serif + case .lato: return "Lato" + case .montserrat: return "Montserrat" + case .sourceSans: return "Source Sans *" + + // Legacy + case .serif: return "Serif (Legacy)" + case .sansSerif: return "Sans Serif (Legacy)" } } + + var category: FontCategory { + switch self { + case .system, .avenirNext, .lato, .montserrat, .sourceSans, .sansSerif: + return .sansSerif + case .newYork, .literata, .merriweather, .sourceSerif, .serif: + return .serif + case .monospace: + return .monospace + } + } + + var isReadeckWebMatch: Bool { + switch self { + case .literata, .merriweather, .sourceSerif, .sourceSans: + return true + default: + return false + } + } +} + +enum FontCategory { + case serif + case sansSerif + case monospace } \ No newline at end of file diff --git a/readeck/Info.plist b/readeck/Info.plist index 067cad4..734d68b 100644 --- a/readeck/Info.plist +++ b/readeck/Info.plist @@ -15,6 +15,8 @@ NSAppTransportSecurity + NSAllowsArbitraryLoads + NSAllowsLocalNetworking NSExceptionRequiresForwardSecrecy @@ -31,5 +33,20 @@ UIImageName splash + UIAppFonts + + Literata-Regular.ttf + Literata-Bold.ttf + Merriweather-Regular.ttf + Merriweather-Bold.ttf + SourceSerif4-Regular.ttf + SourceSerif4-Bold.ttf + Lato-Regular.ttf + Lato-Bold.ttf + Montserrat-Regular.ttf + Montserrat-Bold.ttf + SourceSans3-Regular.ttf + SourceSans3-Bold.ttf + diff --git a/readeck/Localizations/de.lproj/Localizable.strings b/readeck/Localizations/de.lproj/Localizable.strings index 034e254..074e629 100644 --- a/readeck/Localizations/de.lproj/Localizable.strings +++ b/readeck/Localizations/de.lproj/Localizable.strings @@ -188,5 +188,9 @@ "Enable offline reading and sync to cache articles for offline access" = "Aktiviere Offline-Lesen und synchronisiere, um Artikel für den Offline-Zugriff zu cachen"; "Use 'Sync Now' to download articles" = "Verwende 'Jetzt synchronisieren', um Artikel herunterzuladen"; "Simulate Offline Mode" = "Offline-Modus simulieren"; + +/* Font Settings */ +"font.web.match.hint" = "* Entspricht den Readeck Web-Schriften"; + "DEBUG: Toggle network status" = "DEBUG: Netzwerkstatus umschalten"; diff --git a/readeck/Localizations/en.lproj/Localizable.strings b/readeck/Localizations/en.lproj/Localizable.strings index a2c6bcd..a1d65b0 100644 --- a/readeck/Localizations/en.lproj/Localizable.strings +++ b/readeck/Localizations/en.lproj/Localizable.strings @@ -184,4 +184,7 @@ "Enable offline reading and sync to cache articles for offline access" = "Enable offline reading and sync to cache articles for offline access"; "Use 'Sync Now' to download articles" = "Use 'Sync Now' to download articles"; "Simulate Offline Mode" = "Simulate Offline Mode"; + +/* Font Settings */ +"font.web.match.hint" = "* Matches Readeck Web fonts"; "DEBUG: Toggle network status" = "DEBUG: Toggle network status"; \ No newline at end of file diff --git a/readeck/Resources/Fonts/Lato-Bold.ttf b/readeck/Resources/Fonts/Lato-Bold.ttf new file mode 100644 index 0000000..28518d5 Binary files /dev/null and b/readeck/Resources/Fonts/Lato-Bold.ttf differ diff --git a/readeck/Resources/Fonts/Lato-Regular.ttf b/readeck/Resources/Fonts/Lato-Regular.ttf new file mode 100644 index 0000000..82f7ade Binary files /dev/null and b/readeck/Resources/Fonts/Lato-Regular.ttf differ diff --git a/readeck/Resources/Fonts/Licenses/FONTS-LICENSE.md b/readeck/Resources/Fonts/Licenses/FONTS-LICENSE.md new file mode 100644 index 0000000..9a19608 --- /dev/null +++ b/readeck/Resources/Fonts/Licenses/FONTS-LICENSE.md @@ -0,0 +1,71 @@ +# Open Source Fonts Used in Readeck + +This app uses the following open-source fonts: + +## Google Fonts (SIL Open Font License 1.1) + +### Serif Fonts + +- **Literata** by TypeTogether for Google + - License: SIL OFL 1.1 + - Source: https://github.com/googlefonts/literata + +- **Merriweather** by Sorkin Type + - License: SIL OFL 1.1 + - Source: https://github.com/SorkinType/Merriweather + +- **Source Serif** by Adobe (Frank Grießhammer) + - License: SIL OFL 1.1 + - Source: https://github.com/adobe-fonts/source-serif + +### Sans Serif Fonts + +- **Lato** by Łukasz Dziedzic + - License: SIL OFL 1.1 + - Source: https://github.com/latofonts/lato-source + +- **Montserrat** by Julieta Ulanovsky + - License: SIL OFL 1.1 + - Source: https://github.com/JulietaUla/Montserrat + +- **Source Sans** by Adobe (Paul D. Hunt) + - License: SIL OFL 1.1 + - Source: https://github.com/adobe-fonts/source-sans + +## Apple System Fonts + +- **New York** - Apple proprietary (free for iOS apps) +- **SF Pro** - Apple proprietary (free for iOS apps) +- **Avenir Next** - Apple proprietary (free for iOS apps) +- **SF Mono** - Apple proprietary (free for iOS apps) + +--- + +## SIL Open Font License 1.1 + +Full license text: https://scripts.sil.org/OFL + +### Summary + +**Permitted:** +✅ Private use +✅ Commercial use +✅ Modification +✅ Distribution (embedded in App) +✅ Sale of App in AppStore + +**Forbidden:** +❌ Sale of fonts as standalone product + +**Requirements:** +- Copyright notice must be retained (already in font files) +- License text should be included (see individual license files) + +### Individual License Files + +- Literata: `Literata-OFL.txt` +- Merriweather: `Merriweather-OFL.txt` +- Source Serif: `SourceSerif-LICENSE.md` +- Lato: `Lato-LICENSE.txt` +- Montserrat: `Montserrat-OFL.txt` +- Source Sans: `SourceSans-LICENSE.md` diff --git a/readeck/Resources/Fonts/Licenses/Lato-LICENSE.txt b/readeck/Resources/Fonts/Licenses/Lato-LICENSE.txt new file mode 100755 index 0000000..34553c0 --- /dev/null +++ b/readeck/Resources/Fonts/Licenses/Lato-LICENSE.txt @@ -0,0 +1,94 @@ +Copyright (c) 2010-2019, Łukasz Dziedzic (dziedzic@typoland.com), +with Reserved Font Name Lato. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/readeck/Resources/Fonts/Licenses/Literata-OFL.txt b/readeck/Resources/Fonts/Licenses/Literata-OFL.txt new file mode 100644 index 0000000..9d3b4e3 --- /dev/null +++ b/readeck/Resources/Fonts/Licenses/Literata-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2017 The Literata Project Authors (https://github.com/googlefonts/literata) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/readeck/Resources/Fonts/Licenses/Merriweather-OFL.txt b/readeck/Resources/Fonts/Licenses/Merriweather-OFL.txt new file mode 100644 index 0000000..042a4c4 --- /dev/null +++ b/readeck/Resources/Fonts/Licenses/Merriweather-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2016 The Merriweather Project Authors (https://github.com/EbenSorkin/Merriweather), with Reserved Font Name "Merriweather". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/readeck/Resources/Fonts/Licenses/Montserrat-OFL.txt b/readeck/Resources/Fonts/Licenses/Montserrat-OFL.txt new file mode 100644 index 0000000..fe576a2 --- /dev/null +++ b/readeck/Resources/Fonts/Licenses/Montserrat-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2024 The Montserrat.Git Project Authors (https://github.com/JulietaUla/Montserrat.git) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/readeck/Resources/Fonts/Licenses/SourceSans-LICENSE.md b/readeck/Resources/Fonts/Licenses/SourceSans-LICENSE.md new file mode 100644 index 0000000..22c601b --- /dev/null +++ b/readeck/Resources/Fonts/Licenses/SourceSans-LICENSE.md @@ -0,0 +1,93 @@ +Copyright 2010-2024 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/readeck/Resources/Fonts/Licenses/SourceSerif-LICENSE.md b/readeck/Resources/Fonts/Licenses/SourceSerif-LICENSE.md new file mode 100644 index 0000000..5871e1f --- /dev/null +++ b/readeck/Resources/Fonts/Licenses/SourceSerif-LICENSE.md @@ -0,0 +1,93 @@ +Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/readeck/Resources/Fonts/Literata-Bold.ttf b/readeck/Resources/Fonts/Literata-Bold.ttf new file mode 100644 index 0000000..d39f653 Binary files /dev/null and b/readeck/Resources/Fonts/Literata-Bold.ttf differ diff --git a/readeck/Resources/Fonts/Literata-Regular.ttf b/readeck/Resources/Fonts/Literata-Regular.ttf new file mode 100644 index 0000000..b0e7f7a Binary files /dev/null and b/readeck/Resources/Fonts/Literata-Regular.ttf differ diff --git a/readeck/Resources/Fonts/Merriweather-Bold.ttf b/readeck/Resources/Fonts/Merriweather-Bold.ttf new file mode 100644 index 0000000..0e104b3 Binary files /dev/null and b/readeck/Resources/Fonts/Merriweather-Bold.ttf differ diff --git a/readeck/Resources/Fonts/Merriweather-Regular.ttf b/readeck/Resources/Fonts/Merriweather-Regular.ttf new file mode 100644 index 0000000..3447c5f Binary files /dev/null and b/readeck/Resources/Fonts/Merriweather-Regular.ttf differ diff --git a/readeck/Resources/Fonts/Montserrat-Bold.ttf b/readeck/Resources/Fonts/Montserrat-Bold.ttf new file mode 100644 index 0000000..a3dbde5 Binary files /dev/null and b/readeck/Resources/Fonts/Montserrat-Bold.ttf differ diff --git a/readeck/Resources/Fonts/Montserrat-Regular.ttf b/readeck/Resources/Fonts/Montserrat-Regular.ttf new file mode 100644 index 0000000..3ef210a Binary files /dev/null and b/readeck/Resources/Fonts/Montserrat-Regular.ttf differ diff --git a/readeck/Resources/Fonts/SourceSans3-Bold.ttf b/readeck/Resources/Fonts/SourceSans3-Bold.ttf new file mode 100644 index 0000000..85693cc Binary files /dev/null and b/readeck/Resources/Fonts/SourceSans3-Bold.ttf differ diff --git a/readeck/Resources/Fonts/SourceSans3-Regular.ttf b/readeck/Resources/Fonts/SourceSans3-Regular.ttf new file mode 100644 index 0000000..c5dd0b8 Binary files /dev/null and b/readeck/Resources/Fonts/SourceSans3-Regular.ttf differ diff --git a/readeck/Resources/Fonts/SourceSerif4-Bold.ttf b/readeck/Resources/Fonts/SourceSerif4-Bold.ttf new file mode 100644 index 0000000..c4159ff Binary files /dev/null and b/readeck/Resources/Fonts/SourceSerif4-Bold.ttf differ diff --git a/readeck/Resources/Fonts/SourceSerif4-Regular.ttf b/readeck/Resources/Fonts/SourceSerif4-Regular.ttf new file mode 100644 index 0000000..964a2bf Binary files /dev/null and b/readeck/Resources/Fonts/SourceSerif4-Regular.ttf differ diff --git a/readeck/UI/BookmarkDetail/BookmarkDetailLegacyView.swift b/readeck/UI/BookmarkDetail/BookmarkDetailLegacyView.swift index 334bf83..a8d50e4 100644 --- a/readeck/UI/BookmarkDetail/BookmarkDetailLegacyView.swift +++ b/readeck/UI/BookmarkDetail/BookmarkDetailLegacyView.swift @@ -116,6 +116,7 @@ struct BookmarkDetailLegacyView: View { .frame(height: webViewHeight) .cornerRadius(14) .padding(.horizontal, 4) + .id("\(settings.fontFamily?.rawValue ?? "system")-\(settings.fontSize?.rawValue ?? "medium")") } else if viewModel.isLoadingArticle { ProgressView("Loading article...") .frame(maxWidth: .infinity, alignment: .center) @@ -392,6 +393,7 @@ struct BookmarkDetailLegacyView: View { .cornerRadius(14) .padding(.horizontal, 4) .animation(.easeInOut, value: webViewHeight) + .id("\(settings.fontFamily?.rawValue ?? "system")-\(settings.fontSize?.rawValue ?? "medium")") } else if viewModel.isLoadingArticle { ProgressView("Loading article...") .frame(maxWidth: .infinity, alignment: .center) diff --git a/readeck/UI/BookmarkDetail/BookmarkDetailView2.swift b/readeck/UI/BookmarkDetail/BookmarkDetailView2.swift index d197416..c016ef4 100644 --- a/readeck/UI/BookmarkDetail/BookmarkDetailView2.swift +++ b/readeck/UI/BookmarkDetail/BookmarkDetailView2.swift @@ -496,6 +496,7 @@ struct BookmarkDetailView2: View { .frame(height: webViewHeight) .cornerRadius(14) .padding(.horizontal, 4) + .id("\(settings.fontFamily?.rawValue ?? "system")-\(settings.fontSize?.rawValue ?? "medium")") } } else if viewModel.isLoadingArticle { ProgressView("Loading article...") diff --git a/readeck/UI/Components/NativeWebView.swift b/readeck/UI/Components/NativeWebView.swift index c8b2f59..91065f3 100644 --- a/readeck/UI/Components/NativeWebView.swift +++ b/readeck/UI/Components/NativeWebView.swift @@ -189,6 +189,68 @@ struct NativeWebView: View {