Font size

This commit is contained in:
Chris Li 2017-01-20 15:17:03 -05:00
parent ab2fbea8db
commit 0c7e6421ec
5 changed files with 343 additions and 3 deletions

View File

@ -0,0 +1,74 @@
//
// FontSizeController.swift
// Kiwix
//
// Created by Chris Li on 1/20/17.
// Copyright © 2017 Chris Li. All rights reserved.
//
import UIKit
class FontSizeController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var visiualView: UIVisualEffectView!
@IBOutlet weak var tableView: UITableView!
private(set) var selected = Preference.webViewZoomScale
let percentages = [0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.05, 1.10, 1.15, 1.20, 1.30, 1.40, 1.50, 1.75, 2.0]
let percentageFormatter: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .percent
formatter.maximumFractionDigits = 0
formatter.maximumIntegerDigits = 3
return formatter
}()
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
Preference.webViewZoomScale = selected
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let topInset = (navigationController?.navigationBar.frame.height ?? 0) + visiualView.frame.height
tableView.contentInset = UIEdgeInsets(top: topInset, left: 0, bottom: 0, right: 0)
tableView.scrollIndicatorInsets = tableView.contentInset
tableView.scrollRectToVisible(CGRect(x: 0, y: 0, width: 1, height: 1), animated: false)
}
// MARK: - UITableViewDataSource
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return percentages.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = percentageFormatter.string(from: NSNumber(value: percentages[indexPath.row]))
cell.accessoryType = percentages[indexPath.row] == selected ? .checkmark : .none
return cell
}
// MARK: - UITableViewDelegate
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
var indexPaths = [indexPath]
if let previousIndex = percentages.index(of: selected) {
indexPaths.append(IndexPath(row: previousIndex, section: 0))
}
selected = percentages[indexPath.row]
tableView.reloadRows(at: indexPaths, with: .automatic)
label.font = UIFont.systemFont(ofSize: CGFloat(14.0 * percentages[indexPath.row]))
}
}

View File

@ -0,0 +1,95 @@
//
// NotificationSettingController.swift
// Kiwix
//
// Created by Chris Li on 1/20/17.
// Copyright © 2017 Chris Li. All rights reserved.
//
import UIKit
class NotificationSettingController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 0
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 0
}
/*
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
// Configure the cell...
return cell
}
*/
/*
// Override to support conditional editing of the table view.
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the specified item to be editable.
return true
}
*/
/*
// Override to support editing the table view.
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
// Delete the row from the data source
tableView.deleteRows(at: [indexPath], with: .fade)
} else if editingStyle == .insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
*/
/*
// Override to support rearranging the table view.
override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) {
}
*/
/*
// Override to support conditional rearranging of the table view.
override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the item to be re-orderable.
return true
}
*/
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}

View File

@ -15,6 +15,14 @@ class SettingController: UITableViewController {
let rows = [[Localized.Setting.fontSize, Localized.Setting.notifications],
[Localized.Setting.feedback, Localized.Setting.rateApp],
[Localized.Setting.about]]
let percentageFormatter: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .percent
formatter.maximumFractionDigits = 0
formatter.maximumIntegerDigits = 3
return formatter
}()
override func viewDidLoad() {
super.viewDidLoad()
@ -37,7 +45,14 @@ class SettingController: UITableViewController {
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = rows[indexPath.section][indexPath.row]
let text = rows[indexPath.section][indexPath.row]
cell.textLabel?.text = text
switch text {
case Localized.Setting.fontSize:
cell.detailTextLabel?.text = percentageFormatter.string(from: NSNumber(value: Preference.webViewZoomScale))
default:
cell.detailTextLabel?.text = nil
}
return cell
}
@ -47,6 +62,10 @@ class SettingController: UITableViewController {
tableView.deselectRow(at: indexPath, animated: true)
let text = rows[indexPath.section][indexPath.row]
switch text {
case Localized.Setting.fontSize:
let controller = UIStoryboard(name: "Setting", bundle: nil).instantiateViewController(withIdentifier: "FontSizeController") as! FontSizeController
controller.title = Localized.Setting.fontSize
navigationController?.pushViewController(controller, animated: true)
case Localized.Setting.feedback:
if MFMailComposeViewController.canSendMail() {
UIQueue.shared.add(operation: FeedbackMailOperation(context: self))
@ -90,6 +109,11 @@ extension Localized {
static let about = NSLocalizedString("About", comment: "Setting table rows")
static let version = NSLocalizedString("Kiwix for iOS v%@", comment: "Setting table footer")
class Notification {
static let libraryRefresh = NSLocalizedString("Library Refresh", comment: "Notification Setting")
static let bookUpdatesAvailable = NSLocalizedString("Book Updates Available", comment: "Notification Setting")
}
class Feedback {
static let subject = NSLocalizedString(String(format: "Feedback: Kiwix for iOS %@", Bundle.appShortVersion),
comment: "Feedback email composer subject, %@ will be replaced by kiwix version string")

View File

@ -18,7 +18,7 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="Cell" textLabel="OEl-0W-5zG" style="IBUITableViewCellStyleDefault" id="K6f-F5-Ibr">
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="Cell" textLabel="OEl-0W-5zG" detailTextLabel="Gym-6E-seW" style="IBUITableViewCellStyleValue1" id="K6f-F5-Ibr">
<rect key="frame" x="0.0" y="56" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="K6f-F5-Ibr" id="VlD-vh-hfO">
@ -26,7 +26,14 @@
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="OEl-0W-5zG">
<rect key="frame" x="15" y="0.0" width="325" height="43"/>
<rect key="frame" x="15" y="11" width="34" height="21"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Detail" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Gym-6E-seW">
<rect key="frame" x="296" y="11" width="44" height="21"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
@ -53,6 +60,138 @@
</objects>
<point key="canvasLocation" x="1040.8" y="224.4377811094453"/>
</scene>
<!--Font Size Controller-->
<scene sceneID="J3V-PD-eYd">
<objects>
<viewController storyboardIdentifier="FontSizeController" automaticallyAdjustsScrollViewInsets="NO" id="P2M-5j-5TY" customClass="FontSizeController" customModule="Kiwix" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="uqv-6I-TtY"/>
<viewControllerLayoutGuide type="bottom" id="0g9-an-uzg"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="ACg-V3-Vck">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="IN1-AZ-MDG">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="Cell" id="fQb-QE-gpI">
<rect key="frame" x="0.0" y="56" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="fQb-QE-gpI" id="7Jd-OT-Wkn">
<rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
<autoresizingMask key="autoresizingMask"/>
</tableViewCellContentView>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="P2M-5j-5TY" id="22X-as-lzi"/>
<outlet property="delegate" destination="P2M-5j-5TY" id="7kM-X9-17W"/>
</connections>
</tableView>
<visualEffectView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ifm-6c-UaC">
<rect key="frame" x="0.0" y="64" width="375" height="90.5"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="2v7-6U-Zy8">
<rect key="frame" x="0.0" y="0.0" width="375" height="90.5"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="justified" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Q8Z-xJ-28L">
<rect key="frame" x="8" y="31" width="359" height="50.5"/>
<string key="text">Kiwix for iOS is an offline reader for wikipedia. Our mission is to give people equal and easy access to free knowledge of the world.</string>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="pWH-2t-LHW">
<rect key="frame" x="0.0" y="89.5" width="375" height="1"/>
<color key="backgroundColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<constraints>
<constraint firstAttribute="height" constant="0.5" id="hMS-Ko-BaP"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Preview:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qio-Rh-CpL">
<rect key="frame" x="8" y="8" width="359" height="21"/>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="pWH-2t-LHW" secondAttribute="bottom" id="1zF-HW-C31"/>
<constraint firstItem="qio-Rh-CpL" firstAttribute="top" secondItem="2v7-6U-Zy8" secondAttribute="top" constant="8" id="4MU-Q0-pWq"/>
<constraint firstAttribute="trailing" secondItem="pWH-2t-LHW" secondAttribute="trailing" id="K6u-Dg-Hz5"/>
<constraint firstAttribute="trailing" secondItem="Q8Z-xJ-28L" secondAttribute="trailing" constant="8" id="MGr-Em-FzR"/>
<constraint firstItem="qio-Rh-CpL" firstAttribute="leading" secondItem="2v7-6U-Zy8" secondAttribute="leading" constant="8" id="NFw-1L-7Er"/>
<constraint firstAttribute="trailing" secondItem="qio-Rh-CpL" secondAttribute="trailing" constant="8" id="bdz-hh-LHL"/>
<constraint firstItem="pWH-2t-LHW" firstAttribute="top" secondItem="Q8Z-xJ-28L" secondAttribute="bottom" constant="8" id="g91-d8-owW"/>
<constraint firstItem="Q8Z-xJ-28L" firstAttribute="leading" secondItem="2v7-6U-Zy8" secondAttribute="leading" constant="8" id="oKg-Yp-fm6"/>
<constraint firstItem="pWH-2t-LHW" firstAttribute="leading" secondItem="2v7-6U-Zy8" secondAttribute="leading" id="reU-JU-IjM"/>
<constraint firstItem="Q8Z-xJ-28L" firstAttribute="top" secondItem="qio-Rh-CpL" secondAttribute="bottom" constant="2" id="wfW-hH-WOA"/>
</constraints>
</view>
<blurEffect style="extraLight"/>
</visualEffectView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="Ifm-6c-UaC" secondAttribute="trailing" id="CYp-TC-GoI"/>
<constraint firstItem="Ifm-6c-UaC" firstAttribute="leading" secondItem="ACg-V3-Vck" secondAttribute="leading" id="Eus-UL-e9a"/>
<constraint firstItem="IN1-AZ-MDG" firstAttribute="leading" secondItem="ACg-V3-Vck" secondAttribute="leading" id="JAM-SY-5Sm"/>
<constraint firstItem="IN1-AZ-MDG" firstAttribute="top" secondItem="ACg-V3-Vck" secondAttribute="top" id="QgJ-Y0-a4v"/>
<constraint firstItem="Ifm-6c-UaC" firstAttribute="top" secondItem="uqv-6I-TtY" secondAttribute="bottom" id="imv-13-bXi"/>
<constraint firstItem="0g9-an-uzg" firstAttribute="top" secondItem="IN1-AZ-MDG" secondAttribute="bottom" id="oRY-JB-ylK"/>
<constraint firstAttribute="trailing" secondItem="IN1-AZ-MDG" secondAttribute="trailing" id="zFH-ia-OVo"/>
</constraints>
</view>
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
<connections>
<outlet property="label" destination="Q8Z-xJ-28L" id="b20-Ts-400"/>
<outlet property="tableView" destination="IN1-AZ-MDG" id="RKl-HE-T5c"/>
<outlet property="visiualView" destination="Ifm-6c-UaC" id="WjN-xd-jXA"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="6MA-Bq-hJq" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2505" y="224"/>
</scene>
<!--Table View Controller-->
<scene sceneID="9Sm-h0-uHE">
<objects>
<tableViewController id="vWm-pL-Cqo" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="Wdz-NP-TF0">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="Cell" textLabel="WUG-nC-ahL" style="IBUITableViewCellStyleDefault" id="aC7-5o-lNk">
<rect key="frame" x="0.0" y="56" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="aC7-5o-lNk" id="X9i-gE-h3L">
<rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="WUG-nC-ahL">
<rect key="frame" x="15" y="0.0" width="345" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="vWm-pL-Cqo" id="drG-HO-hBg"/>
<outlet property="delegate" destination="vWm-pL-Cqo" id="MHp-JV-bAY"/>
</connections>
</tableView>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="5iA-l5-DLY" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="3252" y="224"/>
</scene>
<!--Static Web Controller-->
<scene sceneID="BAo-fm-zbn">
<objects>

View File

@ -71,6 +71,8 @@
976C1DD21E3000F1005EDEC4 /* SettingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976C1DD11E3000F1005EDEC4 /* SettingController.swift */; };
976C1DD41E300695005EDEC4 /* UIProcedure.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976C1DD31E300695005EDEC4 /* UIProcedure.swift */; };
976C1DD61E32628B005EDEC4 /* StaticWebController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976C1DD51E32628B005EDEC4 /* StaticWebController.swift */; };
976C1DD81E327328005EDEC4 /* FontSizeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976C1DD71E327328005EDEC4 /* FontSizeController.swift */; };
976C1DDA1E32A7B3005EDEC4 /* NotificationSettingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976C1DD91E32A7B3005EDEC4 /* NotificationSettingController.swift */; };
9771A5BD1DD269BD005F1795 /* Book+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D6813C1D6F712800E5FA99 /* Book+CoreDataProperties.swift */; };
9779C3141D4575AD0064CC8E /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97E609F01D103DED00EBCB9D /* NotificationCenter.framework */; };
9779C3171D4575AE0064CC8E /* TodayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9779C3161D4575AE0064CC8E /* TodayViewController.swift */; };
@ -232,6 +234,8 @@
976C1DD11E3000F1005EDEC4 /* SettingController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingController.swift; sourceTree = "<group>"; };
976C1DD31E300695005EDEC4 /* UIProcedure.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIProcedure.swift; sourceTree = "<group>"; };
976C1DD51E32628B005EDEC4 /* StaticWebController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StaticWebController.swift; sourceTree = "<group>"; };
976C1DD71E327328005EDEC4 /* FontSizeController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FontSizeController.swift; sourceTree = "<group>"; };
976C1DD91E32A7B3005EDEC4 /* NotificationSettingController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationSettingController.swift; sourceTree = "<group>"; };
9779C3131D4575AD0064CC8E /* Bookmarks.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Bookmarks.appex; sourceTree = BUILT_PRODUCTS_DIR; };
9779C3161D4575AE0064CC8E /* TodayViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayViewController.swift; sourceTree = "<group>"; };
9779C31B1D4575AE0064CC8E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@ -587,6 +591,8 @@
isa = PBXGroup;
children = (
976C1DD11E3000F1005EDEC4 /* SettingController.swift */,
976C1DD91E32A7B3005EDEC4 /* NotificationSettingController.swift */,
976C1DD71E327328005EDEC4 /* FontSizeController.swift */,
976C1DD51E32628B005EDEC4 /* StaticWebController.swift */,
);
path = Setting;
@ -1123,6 +1129,7 @@
97D681321D6F70EC00E5FA99 /* MigrationPolicy.swift in Sources */,
9732079E1DD197EA00EDD3DC /* LibrarySplitViewController.swift in Sources */,
976C1DCB1E2FD5FC005EDEC4 /* TableOfContentsController.swift in Sources */,
976C1DD81E327328005EDEC4 /* FontSizeController.swift in Sources */,
9771A5BD1DD269BD005F1795 /* Book+CoreDataProperties.swift in Sources */,
9764CBD11D806AD800072D6A /* RefreshLibControl.swift in Sources */,
976C1DD61E32628B005EDEC4 /* StaticWebController.swift in Sources */,
@ -1133,6 +1140,7 @@
97A127CC1D777CF100FB204D /* SearchResultController.swift in Sources */,
9732079F1DD197F400EDD3DC /* CloudBooksController.swift in Sources */,
973208241DD217B600EDD3DC /* BookmarkHUD.swift in Sources */,
976C1DDA1E32A7B3005EDEC4 /* NotificationSettingController.swift in Sources */,
971A102F1D022AD5007FC62C /* Logo.swift in Sources */,
97A1FD191D6F71CE00A80EE2 /* ZimMultiReader.swift in Sources */,
97A1FD261D6F71E200A80EE2 /* ZimReader.mm in Sources */,