refactors

This commit is contained in:
Chris Li 2016-09-06 12:02:19 -04:00
parent 9af0c6d5d6
commit 7e2cb6d302
12 changed files with 380 additions and 342 deletions

View File

@ -10,37 +10,54 @@ import UIKit
class ControllerRetainer {
static let shared = ControllerRetainer()
private init() {}
private init() {
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ControllerRetainer.removeStrongReference), name: UIApplicationDidReceiveMemoryWarningNotification, object: nil)
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIApplicationDidReceiveMemoryWarningNotification, object: nil)
}
@objc func removeStrongReference() {
search = nil
bookmark = nil
}
// MARK: - Search
var searchStore: SearchController?
var search: SearchController {
let controller = searchStore ?? UIStoryboard.search.instantiateInitialViewController() as? SearchController
searchStore = controller
return controller!
private var search: SearchController?
class var search: SearchController {
let controller = ControllerRetainer.shared.search ?? UIStoryboard(name: "Search", bundle: nil).instantiateInitialViewController() as! SearchController
ControllerRetainer.shared.search = controller
return controller
}
// MARK: - Bookmark
private var bookmark: UINavigationController?
class var bookmark: UINavigationController {
let controller = ControllerRetainer.shared.bookmark ?? UIStoryboard(name: "Bookmark", bundle: nil).instantiateInitialViewController() as! UINavigationController
ControllerRetainer.shared.bookmark = controller
return controller
}
private var bookmarkStar: BookmarkController?
class var bookmarkStar: BookmarkController {
let controller = ControllerRetainer.shared.bookmarkStar ?? UIStoryboard(name: "Bookmark", bundle: nil).instantiateViewControllerWithIdentifier("BookmarkController") as! BookmarkController
ControllerRetainer.shared.bookmarkStar = controller
return controller
}
// MARK: - Library
private var libraryStore: UIViewController?
private func releaseLibrary() {libraryStore = nil}
private var library: UIViewController?
var library: UIViewController {
let controller = libraryStore ?? UIStoryboard.library.instantiateInitialViewController()
libraryStore = controller
class var library: UIViewController {
let controller = ControllerRetainer.shared.bookmarkStar ?? UIStoryboard(name: "Library", bundle: nil).instantiateInitialViewController()
ControllerRetainer.shared.library = controller!
return controller!
}
func didDismissLibrary() {
if #available(iOS 10, *) {
NSTimer.scheduledTimerWithTimeInterval(120.0, repeats: false, block: { (timer) in
self.libraryStore = nil
})
} else {
NSTimer.scheduledTimerWithTimeInterval(120.0, target: self, selector: Selector("releaseLibrary"), userInfo: nil, repeats: false)
}
}
}

View File

@ -19,6 +19,7 @@ class BookDetailController: UITableViewController, CenterButtonCellDelegate, DZN
@IBOutlet weak var hasIndexIndicator: UILabel!
@IBOutlet weak var hasIndexLabel: UILabel!
var context: UnsafeMutablePointer<Void> = nil
typealias Strings = LocalizedStrings.BookDetail
var book: Book?
@ -37,8 +38,22 @@ class BookDetailController: UITableViewController, CenterButtonCellDelegate, DZN
hasIndexIndicator.layer.cornerRadius = 2.0
hasPicIndicator.layer.masksToBounds = true
hasIndexIndicator.layer.masksToBounds = true
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
configureViews()
book?.downloadTask?.addObserver(self, forKeyPath: "stateRaw", options: .New, context: context)
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
book?.downloadTask?.removeObserver(self, forKeyPath: "stateRaw", context: context)
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
guard context == self.context else {return}
}
func configureViews() {

View File

@ -26,9 +26,7 @@ class LibrarySplitViewController: UISplitViewController, UISplitViewControllerDe
}
func dismiss() {
dismissViewControllerAnimated(true) {
ControllerRetainer.shared.didDismissLibrary()
}
dismissViewControllerAnimated(true, completion: nil)
}
// MARK: - UISplitViewControllerDelegate

View File

@ -20,8 +20,6 @@ class MainController: UIViewController {
@IBOutlet weak var tocLeadSpacing: NSLayoutConstraint!
var tableOfContentsController: TableOfContentsController?
var bookmarkController: BookmarkController?
var bookmarkNav: UIViewController?
var settingController: UIViewController?
var welcomeController: UIViewController?
let searchBar = SearchBar()
@ -82,8 +80,6 @@ class MainController: UIViewController {
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
tableOfContentsController = nil
bookmarkController = nil
bookmarkNav = nil
settingController = nil
welcomeController = nil
}
@ -236,7 +232,7 @@ class MainController: UIViewController {
}
func showLibraryButtonTapped() {
let controller = ControllerRetainer.shared.library
let controller = ControllerRetainer.library
controller.modalPresentationStyle = .FullScreen
presentViewController(controller, animated: true, completion: nil)
}

View File

@ -32,8 +32,7 @@ extension MainController: LPTBarButtonItemDelegate, TableOfContentsDelegate, Zim
let operation = UpdateWidgetDataSourceOperation()
GlobalQueue.shared.addOperation(operation)
guard let controller = bookmarkController ?? UIStoryboard.main.initViewController("BookmarkController", type: BookmarkController.self) else {return}
bookmarkController = controller
let controller = ControllerRetainer.bookmarkStar
controller.bookmarkAdded = article.isBookmarked
controller.transitioningDelegate = self
controller.modalPresentationStyle = .OverFullScreen
@ -79,11 +78,11 @@ extension MainController: LPTBarButtonItemDelegate, TableOfContentsDelegate, Zim
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
ControllerRetainer.shared.search.startSearch(searchText, delayed: true)
ControllerRetainer.search.startSearch(searchText, delayed: true)
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
ControllerRetainer.shared.search.searchResultTBVC?.selectFirstResultIfPossible()
ControllerRetainer.search.searchResultTBVC?.selectFirstResultIfPossible()
}
// MARK: - UIPopoverPresentationControllerDelegate

View File

@ -51,7 +51,7 @@ extension MainController {
}
private func showSearchResultController(animated animated: Bool) {
let controller = ControllerRetainer.shared.search
let controller = ControllerRetainer.search
guard !childViewControllers.contains(controller) else {return}
addChildViewController(controller)
controller.view.translatesAutoresizingMaskIntoConstraints = false
@ -150,8 +150,7 @@ extension MainController {
// MARK: - Show Bookmark
func showBookmarkTBVC() {
guard let controller = bookmarkNav ?? UIStoryboard.main.initViewController("BookmarkNav", type: UINavigationController.self) else {return}
bookmarkNav = controller
let controller = ControllerRetainer.bookmark
controller.modalPresentationStyle = .FormSheet
presentViewController(controller, animated: true, completion: nil)
}

View File

@ -49,7 +49,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>1.7.1685</string>
<string>1.7.1706</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSRequiresIPhoneOS</key>

View File

@ -0,0 +1,299 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11198.2" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="CQC-Yj-yBQ">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11161"/>
<capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--BookmarkTBVC-->
<scene sceneID="i8i-hs-b3w">
<objects>
<tableViewController storyboardIdentifier="BookmarkTBVC" id="EOO-t3-Qii" customClass="BookmarkTBVC" customModule="Kiwix" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="Cad-DV-oVY">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="sectionIndexBackgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="BookmarkCell" rowHeight="66" id="HDv-lO-b6r" customClass="BookmarkCell" customModule="Kiwix" customModuleProvider="target">
<rect key="frame" x="0.0" y="100" width="375" height="66"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="HDv-lO-b6r" id="OAl-D1-ec7">
<frame key="frameInset" width="375" height="65.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="U1x-fn-tr7">
<constraints>
<constraint firstAttribute="height" constant="22" id="EYh-7Y-oG7"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aAu-zR-Dyv">
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="NmU-4J-7nK">
<constraints>
<constraint firstAttribute="width" constant="50" id="CMB-0r-Nzi"/>
<constraint firstAttribute="height" constant="50" id="glp-JE-A6V"/>
</constraints>
</imageView>
</subviews>
<constraints>
<constraint firstItem="aAu-zR-Dyv" firstAttribute="trailing" secondItem="OAl-D1-ec7" secondAttribute="trailingMargin" id="ASW-qE-BKY"/>
<constraint firstItem="U1x-fn-tr7" firstAttribute="leading" secondItem="OAl-D1-ec7" secondAttribute="leadingMargin" constant="58" id="Q2t-Qj-2p6"/>
<constraint firstItem="U1x-fn-tr7" firstAttribute="leading" secondItem="NmU-4J-7nK" secondAttribute="trailing" constant="8" id="YPu-Lb-iqi"/>
<constraint firstAttribute="bottomMargin" secondItem="aAu-zR-Dyv" secondAttribute="bottom" constant="2" id="Z8A-en-1vc"/>
<constraint firstItem="NmU-4J-7nK" firstAttribute="centerY" secondItem="OAl-D1-ec7" secondAttribute="centerY" id="ZK3-DD-4zy"/>
<constraint firstItem="U1x-fn-tr7" firstAttribute="trailing" secondItem="OAl-D1-ec7" secondAttribute="trailingMargin" id="ezr-0B-NeS"/>
<constraint firstItem="U1x-fn-tr7" firstAttribute="top" secondItem="OAl-D1-ec7" secondAttribute="topMargin" constant="2" id="i42-zE-aO6"/>
<constraint firstItem="aAu-zR-Dyv" firstAttribute="leading" secondItem="OAl-D1-ec7" secondAttribute="leadingMargin" constant="58" id="lIM-RO-d3O"/>
<constraint firstItem="aAu-zR-Dyv" firstAttribute="top" secondItem="U1x-fn-tr7" secondAttribute="bottom" constant="4" id="n7b-tr-1HP"/>
</constraints>
</tableViewCellContentView>
<connections>
<outlet property="subtitleLabel" destination="aAu-zR-Dyv" id="mi9-sm-cvx"/>
<outlet property="thumbImageView" destination="NmU-4J-7nK" id="eAX-4T-LOl"/>
<outlet property="titleLabel" destination="U1x-fn-tr7" id="EfA-a3-qhv"/>
</connections>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="BookmarkSnippetCell" rowHeight="149" id="o5A-Xv-pf5" customClass="BookmarkSnippetCell" customModule="Kiwix" customModuleProvider="target">
<rect key="frame" x="0.0" y="166" width="375" height="149"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="o5A-Xv-pf5" id="KOC-sh-r2Q">
<frame key="frameInset" width="375" height="148.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Iw0-U5-FqV">
<constraints>
<constraint firstAttribute="height" constant="22" id="KCw-oa-mJL"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="V1Z-5u-ZFY">
<constraints>
<constraint firstAttribute="height" constant="19.5" id="Afp-Lh-Fdw"/>
</constraints>
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="gpH-Ig-sQv">
<constraints>
<constraint firstAttribute="width" constant="50" id="gH6-fM-fDz"/>
<constraint firstAttribute="height" constant="50" id="kcR-a8-RAR"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="justified" lineBreakMode="tailTruncation" numberOfLines="4" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7Cx-8r-nyy">
<fontDescription key="fontDescription" style="UICTFontTextStyleCaption2"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstItem="Iw0-U5-FqV" firstAttribute="leading" secondItem="KOC-sh-r2Q" secondAttribute="leadingMargin" constant="58" id="39Y-P9-vWW"/>
<constraint firstItem="7Cx-8r-nyy" firstAttribute="bottom" secondItem="KOC-sh-r2Q" secondAttribute="bottomMargin" id="E4h-0E-C3u"/>
<constraint firstItem="Iw0-U5-FqV" firstAttribute="trailing" secondItem="KOC-sh-r2Q" secondAttribute="trailingMargin" id="GPf-QW-QaX"/>
<constraint firstItem="7Cx-8r-nyy" firstAttribute="trailing" secondItem="KOC-sh-r2Q" secondAttribute="trailingMargin" id="OOc-05-0bc"/>
<constraint firstItem="gpH-Ig-sQv" firstAttribute="centerY" secondItem="KOC-sh-r2Q" secondAttribute="centerY" id="QiT-l5-ZVT"/>
<constraint firstItem="V1Z-5u-ZFY" firstAttribute="leading" secondItem="KOC-sh-r2Q" secondAttribute="leadingMargin" constant="58" id="XeK-HP-8f6"/>
<constraint firstItem="V1Z-5u-ZFY" firstAttribute="trailing" secondItem="KOC-sh-r2Q" secondAttribute="trailingMargin" id="ZSg-mU-O22"/>
<constraint firstAttribute="leadingMargin" secondItem="7Cx-8r-nyy" secondAttribute="leading" id="bbW-Pj-58I"/>
<constraint firstAttribute="topMargin" secondItem="gpH-Ig-sQv" secondAttribute="top" id="haD-cC-DNC"/>
<constraint firstItem="7Cx-8r-nyy" firstAttribute="top" secondItem="V1Z-5u-ZFY" secondAttribute="bottom" constant="10.5" id="j7f-8q-Nbg"/>
<constraint firstItem="V1Z-5u-ZFY" firstAttribute="top" secondItem="Iw0-U5-FqV" secondAttribute="bottom" constant="4" id="jU9-hy-tXJ"/>
<constraint firstItem="Iw0-U5-FqV" firstAttribute="leading" secondItem="gpH-Ig-sQv" secondAttribute="trailing" constant="8" id="k3s-1a-rdN"/>
<constraint firstItem="Iw0-U5-FqV" firstAttribute="top" secondItem="KOC-sh-r2Q" secondAttribute="topMargin" constant="2" id="zXo-gw-Gf1"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="QiT-l5-ZVT"/>
</mask>
</variation>
</tableViewCellContentView>
<connections>
<outlet property="snippetLabel" destination="7Cx-8r-nyy" id="BqO-aq-yel"/>
<outlet property="subtitleLabel" destination="V1Z-5u-ZFY" id="qpd-mB-abg"/>
<outlet property="thumbImageView" destination="gpH-Ig-sQv" id="nDY-7e-2rA"/>
<outlet property="titleLabel" destination="Iw0-U5-FqV" id="AKn-XL-dHz"/>
</connections>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="EOO-t3-Qii" id="Lzl-Ub-vud"/>
<outlet property="delegate" destination="EOO-t3-Qii" id="GE5-qw-MBw"/>
</connections>
</tableView>
<toolbarItems>
<barButtonItem style="plain" systemItem="flexibleSpace" id="tZP-Up-9rY"/>
<barButtonItem image="StarRemoved" id="Rkc-aK-Y9L">
<connections>
<action selector="removeBookmarkButtonTapped:" destination="EOO-t3-Qii" id="j1W-eN-qKg"/>
</connections>
</barButtonItem>
</toolbarItems>
<navigationItem key="navigationItem" id="a2U-AV-M0y">
<barButtonItem key="leftBarButtonItem" image="DownArrow" id="66s-uf-eDs">
<connections>
<action selector="dismissButtonTapped:" destination="EOO-t3-Qii" id="3YA-A5-eSo"/>
</connections>
</barButtonItem>
<barButtonItem key="rightBarButtonItem" systemItem="edit" id="tTL-c1-xab">
<connections>
<action selector="editingButtonTapped:" destination="EOO-t3-Qii" id="Ebm-dR-YbU"/>
</connections>
</barButtonItem>
</navigationItem>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="b4G-fm-Sda" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1853" y="1137"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="QEZ-t8-ULC">
<objects>
<navigationController storyboardIdentifier="BookmarkNav" automaticallyAdjustsScrollViewInsets="NO" toolbarHidden="NO" id="CQC-Yj-yBQ" sceneMemberID="viewController">
<toolbarItems/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="CXJ-5N-R8L">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<nil name="viewControllers"/>
<toolbar key="toolbar" opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="Yeq-LG-i5F">
<rect key="frame" x="0.0" y="623" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</toolbar>
<connections>
<segue destination="EOO-t3-Qii" kind="relationship" relationship="rootViewController" id="Uo9-Ji-muW"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="ls9-CP-THB" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1099" y="1137"/>
</scene>
<!--Bookmark Controller-->
<scene sceneID="eMu-pk-jX5">
<objects>
<viewController storyboardIdentifier="BookmarkController" id="hqG-Qy-2zg" customClass="BookmarkController" customModule="Kiwix" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="dJR-6a-lyw"/>
<viewControllerLayoutGuide type="bottom" id="4tE-FX-iOW"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="2dS-1E-9FG">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<visualEffectView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="HFe-de-R0s">
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="rZm-UK-Rkk">
<frame key="frameInset"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Bookmarked" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="I77-SP-O9K">
<constraints>
<constraint firstAttribute="height" constant="40" id="sP9-Wk-HZy"/>
</constraints>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="22"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bEX-sT-sCw">
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="ZiA-Ig-RKd"/>
<constraint firstAttribute="width" constant="10" id="nuz-N0-WZl"/>
</constraints>
</view>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BookmarkAdded" highlightedImage="BookmarkRemoved" translatesAutoresizingMaskIntoConstraints="NO" id="Ez8-bg-mmo">
<constraints>
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="128" id="9Aa-nz-Quz"/>
<constraint firstAttribute="width" secondItem="Ez8-bg-mmo" secondAttribute="height" multiplier="1:1" id="cmJ-a7-eFv"/>
</constraints>
</imageView>
<visualEffectView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="TXy-BJ-W0z">
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="lsv-Ff-iQe">
<frame key="frameInset"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Tap anywhere to dismiss" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OCG-cf-ckk">
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstItem="OCG-cf-ckk" firstAttribute="top" secondItem="lsv-Ff-iQe" secondAttribute="top" id="2B2-h4-VIK"/>
<constraint firstAttribute="bottom" secondItem="OCG-cf-ckk" secondAttribute="bottom" id="7MP-fY-YOx"/>
<constraint firstItem="OCG-cf-ckk" firstAttribute="leading" secondItem="lsv-Ff-iQe" secondAttribute="leading" id="cPP-T4-ffa"/>
<constraint firstAttribute="trailing" secondItem="OCG-cf-ckk" secondAttribute="trailing" id="u2x-Sw-8KF"/>
</constraints>
</view>
<constraints>
<constraint firstAttribute="height" constant="24" id="thC-RR-XIW"/>
</constraints>
<vibrancyEffect>
<blurEffect style="extraLight"/>
</vibrancyEffect>
</visualEffectView>
</subviews>
<gestureRecognizers/>
<constraints>
<constraint firstItem="I77-SP-O9K" firstAttribute="top" secondItem="bEX-sT-sCw" secondAttribute="bottom" id="0RI-yW-i8p"/>
<constraint firstItem="bEX-sT-sCw" firstAttribute="top" secondItem="Ez8-bg-mmo" secondAttribute="bottom" id="7bD-3n-d7E"/>
<constraint firstItem="Ez8-bg-mmo" firstAttribute="centerX" secondItem="rZm-UK-Rkk" secondAttribute="centerX" id="AXN-dT-3HN"/>
<constraint firstAttribute="trailing" secondItem="TXy-BJ-W0z" secondAttribute="trailing" constant="8" id="Mlf-G2-kQ2"/>
<constraint firstItem="bEX-sT-sCw" firstAttribute="centerX" secondItem="rZm-UK-Rkk" secondAttribute="centerX" id="Mn9-CF-Q7C"/>
<constraint firstAttribute="trailing" secondItem="I77-SP-O9K" secondAttribute="trailing" constant="8" id="UIC-Mf-euA"/>
<constraint firstAttribute="bottom" secondItem="TXy-BJ-W0z" secondAttribute="bottom" constant="44" id="hXr-KW-aDs"/>
<constraint firstItem="Ez8-bg-mmo" firstAttribute="width" secondItem="rZm-UK-Rkk" secondAttribute="width" multiplier="0.5" priority="750" id="qLU-17-mOs"/>
<constraint firstItem="TXy-BJ-W0z" firstAttribute="leading" secondItem="rZm-UK-Rkk" secondAttribute="leading" constant="8" id="qtR-my-ZAt"/>
<constraint firstItem="bEX-sT-sCw" firstAttribute="centerY" secondItem="rZm-UK-Rkk" secondAttribute="centerY" id="tD6-72-iVp"/>
<constraint firstItem="I77-SP-O9K" firstAttribute="leading" secondItem="rZm-UK-Rkk" secondAttribute="leading" constant="8" id="yYf-Lr-cAx"/>
</constraints>
<connections>
<outletCollection property="gestureRecognizers" destination="yuw-xk-Asr" appends="YES" id="MZG-9X-Xmx"/>
</connections>
</view>
<blurEffect style="light"/>
</visualEffectView>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="HFe-de-R0s" firstAttribute="leading" secondItem="2dS-1E-9FG" secondAttribute="leading" id="bFC-Rq-jvb"/>
<constraint firstItem="HFe-de-R0s" firstAttribute="top" secondItem="2dS-1E-9FG" secondAttribute="top" id="mrz-Gs-Lfx"/>
<constraint firstAttribute="trailing" secondItem="HFe-de-R0s" secondAttribute="trailing" id="nAL-sy-e1y"/>
<constraint firstItem="4tE-FX-iOW" firstAttribute="top" secondItem="HFe-de-R0s" secondAttribute="bottom" id="tgo-Qb-lss"/>
</constraints>
</view>
<connections>
<outlet property="centerView" destination="bEX-sT-sCw" id="sYd-H4-Gtq"/>
<outlet property="centerViewYOffset" destination="tD6-72-iVp" id="d4I-1C-8NL"/>
<outlet property="imageView" destination="Ez8-bg-mmo" id="4To-3h-frz"/>
<outlet property="label" destination="I77-SP-O9K" id="KbG-xm-Qc8"/>
<outlet property="messageLabel" destination="OCG-cf-ckk" id="Rtw-js-avy"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Ujq-zq-qYt" userLabel="First Responder" sceneMemberID="firstResponder"/>
<tapGestureRecognizer id="yuw-xk-Asr">
<connections>
<action selector="tapRecognized:" destination="hqG-Qy-2zg" id="Kly-Ex-v4q"/>
</connections>
</tapGestureRecognizer>
</objects>
<point key="canvasLocation" x="2604" y="1137"/>
</scene>
</scenes>
<resources>
<image name="BookmarkAdded" width="21" height="21"/>
<image name="BookmarkRemoved" width="21" height="21"/>
<image name="DownArrow" width="21" height="21"/>
<image name="StarRemoved" width="21" height="21"/>
</resources>
</document>

View File

@ -1,162 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11198.2" systemVersion="15G31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="uuM-WO-DyB">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11198.2" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="uuM-WO-DyB">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11161"/>
<capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--BookmarkTBVC-->
<scene sceneID="GIu-wz-QwQ">
<objects>
<tableViewController storyboardIdentifier="BookmarkTBVC" id="FmQ-kS-9xq" customClass="BookmarkTBVC" customModule="Kiwix" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="ES3-js-GpE">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="sectionIndexBackgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="BookmarkCell" rowHeight="66" id="GfZ-eZ-upm" customClass="BookmarkCell" customModule="Kiwix" customModuleProvider="target">
<rect key="frame" x="0.0" y="119.5" width="375" height="66"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="GfZ-eZ-upm" id="3j0-7h-Jjx">
<frame key="frameInset" width="375" height="65.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mxb-6u-SmF">
<constraints>
<constraint firstAttribute="height" constant="22" id="jS6-tO-mfx"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fG8-KY-O8H">
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="a8w-h5-qXQ">
<constraints>
<constraint firstAttribute="height" constant="50" id="f6O-L8-jj9"/>
<constraint firstAttribute="width" constant="50" id="fAT-cY-lWq"/>
</constraints>
</imageView>
</subviews>
<constraints>
<constraint firstItem="fG8-KY-O8H" firstAttribute="trailing" secondItem="3j0-7h-Jjx" secondAttribute="trailingMargin" id="0Dd-B5-IV0"/>
<constraint firstItem="mxb-6u-SmF" firstAttribute="leading" secondItem="3j0-7h-Jjx" secondAttribute="leadingMargin" constant="58" id="C9s-sc-YIC"/>
<constraint firstItem="mxb-6u-SmF" firstAttribute="top" secondItem="3j0-7h-Jjx" secondAttribute="topMargin" constant="2" id="FW1-dg-AIU"/>
<constraint firstAttribute="bottomMargin" secondItem="fG8-KY-O8H" secondAttribute="bottom" constant="2" id="L72-cO-xVq"/>
<constraint firstItem="a8w-h5-qXQ" firstAttribute="centerY" secondItem="3j0-7h-Jjx" secondAttribute="centerY" id="MvK-fe-ebn"/>
<constraint firstItem="mxb-6u-SmF" firstAttribute="trailing" secondItem="3j0-7h-Jjx" secondAttribute="trailingMargin" id="T1E-bH-2Hf"/>
<constraint firstItem="fG8-KY-O8H" firstAttribute="top" secondItem="mxb-6u-SmF" secondAttribute="bottom" constant="4" id="YdG-0Y-0su"/>
<constraint firstItem="fG8-KY-O8H" firstAttribute="leading" secondItem="3j0-7h-Jjx" secondAttribute="leadingMargin" constant="58" id="fX2-ng-4HJ"/>
<constraint firstItem="mxb-6u-SmF" firstAttribute="leading" secondItem="a8w-h5-qXQ" secondAttribute="trailing" constant="8" id="mlV-uh-WOx"/>
</constraints>
</tableViewCellContentView>
<connections>
<outlet property="subtitleLabel" destination="fG8-KY-O8H" id="s8H-eg-dV5"/>
<outlet property="thumbImageView" destination="a8w-h5-qXQ" id="M7t-YL-r37"/>
<outlet property="titleLabel" destination="mxb-6u-SmF" id="4x2-Ig-c0E"/>
</connections>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="BookmarkSnippetCell" rowHeight="149" id="HWb-93-GEM" customClass="BookmarkSnippetCell" customModule="Kiwix" customModuleProvider="target">
<rect key="frame" x="0.0" y="185.5" width="375" height="149"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="HWb-93-GEM" id="GJ5-eD-Ulj">
<frame key="frameInset" width="375" height="148.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2G4-VE-Wy1">
<constraints>
<constraint firstAttribute="height" constant="22" id="J7B-2l-svg"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="l55-kI-Ig5">
<constraints>
<constraint firstAttribute="height" constant="19.5" id="H4O-Fl-fMr"/>
</constraints>
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="fjC-I2-EvF">
<constraints>
<constraint firstAttribute="height" constant="50" id="JgV-iI-zv1"/>
<constraint firstAttribute="width" constant="50" id="kxv-uV-jAf"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="justified" lineBreakMode="tailTruncation" numberOfLines="4" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wb6-do-Jvs">
<fontDescription key="fontDescription" style="UICTFontTextStyleCaption2"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstItem="l55-kI-Ig5" firstAttribute="leading" secondItem="GJ5-eD-Ulj" secondAttribute="leadingMargin" constant="58" id="5We-5U-DtA"/>
<constraint firstItem="l55-kI-Ig5" firstAttribute="top" secondItem="2G4-VE-Wy1" secondAttribute="bottom" constant="4" id="7SE-Ip-loz"/>
<constraint firstItem="2G4-VE-Wy1" firstAttribute="trailing" secondItem="GJ5-eD-Ulj" secondAttribute="trailingMargin" id="FF2-Dw-I9f"/>
<constraint firstAttribute="leadingMargin" secondItem="wb6-do-Jvs" secondAttribute="leading" id="GpR-oh-8zo"/>
<constraint firstItem="fjC-I2-EvF" firstAttribute="centerY" secondItem="GJ5-eD-Ulj" secondAttribute="centerY" id="KmG-MW-3iu"/>
<constraint firstItem="2G4-VE-Wy1" firstAttribute="top" secondItem="GJ5-eD-Ulj" secondAttribute="topMargin" constant="2" id="V5t-0f-biu"/>
<constraint firstItem="wb6-do-Jvs" firstAttribute="top" secondItem="l55-kI-Ig5" secondAttribute="bottom" constant="10.5" id="WZf-t9-Fsl"/>
<constraint firstAttribute="topMargin" secondItem="fjC-I2-EvF" secondAttribute="top" id="fjq-gc-zVF"/>
<constraint firstItem="l55-kI-Ig5" firstAttribute="trailing" secondItem="GJ5-eD-Ulj" secondAttribute="trailingMargin" id="ilg-Sl-qbi"/>
<constraint firstItem="wb6-do-Jvs" firstAttribute="bottom" secondItem="GJ5-eD-Ulj" secondAttribute="bottomMargin" id="jM8-PT-rQv"/>
<constraint firstItem="2G4-VE-Wy1" firstAttribute="leading" secondItem="GJ5-eD-Ulj" secondAttribute="leadingMargin" constant="58" id="kIv-c7-UQh"/>
<constraint firstItem="2G4-VE-Wy1" firstAttribute="leading" secondItem="fjC-I2-EvF" secondAttribute="trailing" constant="8" id="mwj-y0-pwM"/>
<constraint firstItem="wb6-do-Jvs" firstAttribute="trailing" secondItem="GJ5-eD-Ulj" secondAttribute="trailingMargin" id="r15-9o-tUx"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="KmG-MW-3iu"/>
</mask>
</variation>
</tableViewCellContentView>
<connections>
<outlet property="snippetLabel" destination="wb6-do-Jvs" id="hnH-gv-SH9"/>
<outlet property="subtitleLabel" destination="l55-kI-Ig5" id="Snf-8N-LK2"/>
<outlet property="thumbImageView" destination="fjC-I2-EvF" id="IKU-9m-VYb"/>
<outlet property="titleLabel" destination="2G4-VE-Wy1" id="ht7-Nx-6Uj"/>
</connections>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="FmQ-kS-9xq" id="EFb-uR-7Ol"/>
<outlet property="delegate" destination="FmQ-kS-9xq" id="Ge9-9m-6Uz"/>
</connections>
</tableView>
<toolbarItems>
<barButtonItem style="plain" systemItem="flexibleSpace" id="Z1G-0A-26t"/>
<barButtonItem image="StarRemoved" id="j6g-X2-Pte">
<connections>
<action selector="removeBookmarkButtonTapped:" destination="FmQ-kS-9xq" id="Ssy-s0-9my"/>
</connections>
</barButtonItem>
</toolbarItems>
<navigationItem key="navigationItem" id="Mu9-Fa-bI7">
<barButtonItem key="leftBarButtonItem" image="DownArrow" id="gcp-jo-kFP">
<connections>
<action selector="dismissButtonTapped:" destination="FmQ-kS-9xq" id="E2b-fg-15n"/>
</connections>
</barButtonItem>
<barButtonItem key="rightBarButtonItem" systemItem="edit" id="o5l-d8-2hL">
<connections>
<action selector="editingButtonTapped:" destination="FmQ-kS-9xq" id="3tT-Df-zmE"/>
</connections>
</barButtonItem>
</navigationItem>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="cYS-sb-0qX" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1853" y="1137"/>
</scene>
<!--Table Of Contents Controller-->
<scene sceneID="sFA-xU-ByH">
<objects>
@ -237,14 +86,14 @@
<exclude reference="tZq-RO-dRD"/>
</mask>
<mask key="constraints">
<exclude reference="3No-fR-9mh"/>
<exclude reference="Cl3-Kl-nY0"/>
<exclude reference="olA-XZ-0EX"/>
<exclude reference="y5a-P4-Smx"/>
<exclude reference="FgY-e7-gFD"/>
<exclude reference="qdY-qI-Wxp"/>
<exclude reference="qhd-h1-qMQ"/>
<exclude reference="xwq-xw-Eg3"/>
<exclude reference="3No-fR-9mh"/>
<exclude reference="Cl3-Kl-nY0"/>
<exclude reference="olA-XZ-0EX"/>
<exclude reference="y5a-P4-Smx"/>
</mask>
</variation>
<variation key="widthClass=compact">
@ -261,15 +110,15 @@
<include reference="tZq-RO-dRD"/>
</mask>
<mask key="constraints">
<include reference="3No-fR-9mh"/>
<include reference="Cl3-Kl-nY0"/>
<include reference="olA-XZ-0EX"/>
<include reference="y5a-P4-Smx"/>
<exclude reference="FgY-e7-gFD"/>
<include reference="qdY-qI-Wxp"/>
<exclude reference="xGK-V4-BpV"/>
<exclude reference="XDC-Ei-kbw"/>
<exclude reference="qhd-h1-qMQ"/>
<include reference="3No-fR-9mh"/>
<include reference="Cl3-Kl-nY0"/>
<include reference="olA-XZ-0EX"/>
<include reference="y5a-P4-Smx"/>
</mask>
</variation>
</view>
@ -402,11 +251,11 @@
<exclude reference="K9J-LG-g2K"/>
</mask>
<mask key="constraints">
<exclude reference="j9u-OA-K4W"/>
<exclude reference="wIQ-Lv-buV"/>
<exclude reference="fNo-Ba-KRO"/>
<exclude reference="ieA-8B-e1X"/>
<exclude reference="xcv-M9-m5f"/>
<exclude reference="j9u-OA-K4W"/>
<exclude reference="6b5-8X-7aD"/>
<exclude reference="AwJ-A8-0MO"/>
<exclude reference="JwF-38-cyF"/>
@ -421,10 +270,10 @@
<include reference="K9J-LG-g2K"/>
</mask>
<mask key="constraints">
<include reference="Gde-Fa-kB8"/>
<include reference="fNo-Ba-KRO"/>
<include reference="ieA-8B-e1X"/>
<include reference="xcv-M9-m5f"/>
<include reference="Gde-Fa-kB8"/>
<include reference="AwJ-A8-0MO"/>
<include reference="V1f-UR-jH8"/>
<include reference="c3k-qN-lYX"/>
@ -436,9 +285,9 @@
<include reference="r0g-Y2-P3v"/>
</mask>
<mask key="constraints">
<include reference="wIQ-Lv-buV"/>
<exclude reference="Gde-Fa-kB8"/>
<include reference="j9u-OA-K4W"/>
<include reference="wIQ-Lv-buV"/>
<include reference="6b5-8X-7aD"/>
<include reference="JwF-38-cyF"/>
</mask>
@ -485,143 +334,5 @@
</objects>
<point key="canvasLocation" x="1099" y="433"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="TmE-cH-Z0r">
<objects>
<navigationController storyboardIdentifier="BookmarkNav" automaticallyAdjustsScrollViewInsets="NO" toolbarHidden="NO" id="7So-3x-feX" sceneMemberID="viewController">
<toolbarItems/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="liO-Vk-25p">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<nil name="viewControllers"/>
<toolbar key="toolbar" opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="lf3-4t-a4k">
<rect key="frame" x="0.0" y="623" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</toolbar>
<connections>
<segue destination="FmQ-kS-9xq" kind="relationship" relationship="rootViewController" id="aTC-tp-9EX"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="YbK-HS-piv" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1099" y="1137"/>
</scene>
<!--Bookmark Controller-->
<scene sceneID="aqK-hW-Q6n">
<objects>
<viewController storyboardIdentifier="BookmarkController" id="MOi-xP-Fg8" customClass="BookmarkController" customModule="Kiwix" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="qq6-Hw-naM"/>
<viewControllerLayoutGuide type="bottom" id="8pr-2h-wfk"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Cp5-kE-xdL">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<visualEffectView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="621-8M-jTD">
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="wEb-nz-fFr">
<frame key="frameInset"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Bookmarked" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wkJ-9t-x7m">
<constraints>
<constraint firstAttribute="height" constant="40" id="WkO-03-8rL"/>
</constraints>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="22"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vSr-Oq-CpV">
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="10" id="7HX-KD-7MX"/>
<constraint firstAttribute="height" constant="50" id="QdU-Ja-3C6"/>
</constraints>
</view>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BookmarkAdded" highlightedImage="BookmarkRemoved" translatesAutoresizingMaskIntoConstraints="NO" id="jkm-VL-oUY">
<constraints>
<constraint firstAttribute="width" secondItem="jkm-VL-oUY" secondAttribute="height" multiplier="1:1" id="eeI-5C-9Zu"/>
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="128" id="ffS-qM-pff"/>
</constraints>
</imageView>
<visualEffectView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jpt-94-dyR">
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="OzL-eb-rw9">
<frame key="frameInset"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Tap anywhere to dismiss" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="O3v-jF-pbe">
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstItem="O3v-jF-pbe" firstAttribute="top" secondItem="OzL-eb-rw9" secondAttribute="top" id="U4v-xu-UXk"/>
<constraint firstAttribute="bottom" secondItem="O3v-jF-pbe" secondAttribute="bottom" id="Wd2-8v-xRs"/>
<constraint firstItem="O3v-jF-pbe" firstAttribute="leading" secondItem="OzL-eb-rw9" secondAttribute="leading" id="cev-40-XcF"/>
<constraint firstAttribute="trailing" secondItem="O3v-jF-pbe" secondAttribute="trailing" id="lq7-4C-aDQ"/>
</constraints>
</view>
<constraints>
<constraint firstAttribute="height" constant="24" id="Zq0-r9-wM4"/>
</constraints>
<vibrancyEffect>
<blurEffect style="extraLight"/>
</vibrancyEffect>
</visualEffectView>
</subviews>
<gestureRecognizers/>
<constraints>
<constraint firstAttribute="trailing" secondItem="wkJ-9t-x7m" secondAttribute="trailing" constant="8" id="87r-m8-CnT"/>
<constraint firstItem="jkm-VL-oUY" firstAttribute="width" secondItem="wEb-nz-fFr" secondAttribute="width" multiplier="0.5" priority="750" id="8tn-pK-eSp"/>
<constraint firstItem="jkm-VL-oUY" firstAttribute="centerX" secondItem="wEb-nz-fFr" secondAttribute="centerX" id="HNo-D9-9BG"/>
<constraint firstItem="wkJ-9t-x7m" firstAttribute="leading" secondItem="wEb-nz-fFr" secondAttribute="leading" constant="8" id="IPd-Bg-xN8"/>
<constraint firstItem="wkJ-9t-x7m" firstAttribute="top" secondItem="vSr-Oq-CpV" secondAttribute="bottom" id="Pjg-WY-NZK"/>
<constraint firstAttribute="trailing" secondItem="jpt-94-dyR" secondAttribute="trailing" constant="8" id="RTK-Op-le4"/>
<constraint firstItem="vSr-Oq-CpV" firstAttribute="top" secondItem="jkm-VL-oUY" secondAttribute="bottom" id="TgI-uO-cwc"/>
<constraint firstAttribute="bottom" secondItem="jpt-94-dyR" secondAttribute="bottom" constant="44" id="aMK-IU-b0c"/>
<constraint firstItem="jpt-94-dyR" firstAttribute="leading" secondItem="wEb-nz-fFr" secondAttribute="leading" constant="8" id="eot-le-WHz"/>
<constraint firstItem="vSr-Oq-CpV" firstAttribute="centerX" secondItem="wEb-nz-fFr" secondAttribute="centerX" id="vCd-xx-Yfr"/>
<constraint firstItem="vSr-Oq-CpV" firstAttribute="centerY" secondItem="wEb-nz-fFr" secondAttribute="centerY" id="yd0-Fs-Z3H"/>
</constraints>
<connections>
<outletCollection property="gestureRecognizers" destination="I7u-c5-Qtf" appends="YES" id="M4j-Pj-V7h"/>
</connections>
</view>
<blurEffect style="light"/>
</visualEffectView>
</subviews>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="8pr-2h-wfk" firstAttribute="top" secondItem="621-8M-jTD" secondAttribute="bottom" id="5g8-ik-9eo"/>
<constraint firstAttribute="trailing" secondItem="621-8M-jTD" secondAttribute="trailing" id="KMK-LV-N18"/>
<constraint firstItem="621-8M-jTD" firstAttribute="leading" secondItem="Cp5-kE-xdL" secondAttribute="leading" id="dJ2-7h-qzL"/>
<constraint firstItem="621-8M-jTD" firstAttribute="top" secondItem="Cp5-kE-xdL" secondAttribute="top" id="ull-MZ-kwr"/>
</constraints>
</view>
<connections>
<outlet property="centerView" destination="vSr-Oq-CpV" id="LLV-Y3-NMM"/>
<outlet property="centerViewYOffset" destination="yd0-Fs-Z3H" id="Kqp-sE-uST"/>
<outlet property="imageView" destination="jkm-VL-oUY" id="bGN-UZ-D4U"/>
<outlet property="label" destination="wkJ-9t-x7m" id="0P1-Gz-r8a"/>
<outlet property="messageLabel" destination="O3v-jF-pbe" id="6qi-2E-uC5"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="nEo-6P-S71" userLabel="First Responder" sceneMemberID="firstResponder"/>
<tapGestureRecognizer id="I7u-c5-Qtf">
<connections>
<action selector="tapRecognized:" destination="MOi-xP-Fg8" id="noz-dI-2Sv"/>
</connections>
</tapGestureRecognizer>
</objects>
<point key="canvasLocation" x="2604" y="1137"/>
</scene>
</scenes>
<resources>
<image name="BookmarkAdded" width="348" height="331"/>
<image name="BookmarkRemoved" width="348" height="331"/>
<image name="DownArrow" width="21" height="21"/>
<image name="StarRemoved" width="21" height="21"/>
</resources>
</document>

View File

@ -21,7 +21,7 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.7.2146</string>
<string>1.7.2193</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionMainStoryboard</key>

View File

@ -110,6 +110,7 @@
97C005D61D64B3B0004352E8 /* Library.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C005D51D64B3B0004352E8 /* Library.storyboard */; };
97C005D81D64B99E004352E8 /* LibrarySplitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97C005D71D64B99E004352E8 /* LibrarySplitViewController.swift */; };
97C005DC1D64BEFE004352E8 /* CloudBooksController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97C005DB1D64BEFE004352E8 /* CloudBooksController.swift */; };
97C601DC1D7F15C400362D4F /* Bookmark.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C601DB1D7F15C400362D4F /* Bookmark.storyboard */; };
97D452BE1D1723FF0033666F /* CollectionViewCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D452BD1D1723FF0033666F /* CollectionViewCells.swift */; };
97D55EF61D2075180081B523 /* TableOfContentsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D55EF51D2075180081B523 /* TableOfContentsController.swift */; };
97D6811B1D6E2A7100E5FA99 /* DownloadTasksController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D6811A1D6E2A7100E5FA99 /* DownloadTasksController.swift */; };
@ -332,6 +333,7 @@
97C005D51D64B3B0004352E8 /* Library.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Library.storyboard; path = "Kiwix-iOS/Storyboard/Library.storyboard"; sourceTree = SOURCE_ROOT; };
97C005D71D64B99E004352E8 /* LibrarySplitViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LibrarySplitViewController.swift; path = "Kiwix-iOS/Controller/Library/LibrarySplitViewController.swift"; sourceTree = SOURCE_ROOT; };
97C005DB1D64BEFE004352E8 /* CloudBooksController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CloudBooksController.swift; sourceTree = "<group>"; };
97C601DB1D7F15C400362D4F /* Bookmark.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Bookmark.storyboard; sourceTree = "<group>"; };
97D452BD1D1723FF0033666F /* CollectionViewCells.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewCells.swift; sourceTree = "<group>"; };
97D55EF51D2075180081B523 /* TableOfContentsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TableOfContentsController.swift; path = "Kiwix-iOS/Controller/TableOfContentsController.swift"; sourceTree = SOURCE_ROOT; };
97D6811A1D6E2A7100E5FA99 /* DownloadTasksController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DownloadTasksController.swift; sourceTree = "<group>"; };
@ -789,13 +791,14 @@
isa = PBXGroup;
children = (
975227CA1D0227E8001D1DDE /* Main.storyboard */,
97C601DB1D7F15C400362D4F /* Bookmark.storyboard */,
97C005D51D64B3B0004352E8 /* Library.storyboard */,
97F03CE11D2440470040D26E /* Search.storyboard */,
975227CB1D0227E8001D1DDE /* Setting.storyboard */,
9734E54D1D289D060061C39B /* Welcome.storyboard */,
);
name = Storyboards;
path = Kiwix;
path = Storyboard;
sourceTree = "<group>";
};
978C58821C1CCDAF0077AE47 /* Controllers */ = {
@ -1272,6 +1275,7 @@
971A10161D022872007FC62C /* Assets.xcassets in Resources */,
971A10771D022F05007FC62C /* Localizable.stringsdict in Resources */,
97E850CB1D2DA5B300A9F688 /* About.html in Resources */,
97C601DC1D7F15C400362D4F /* Bookmark.storyboard in Resources */,
975227CD1D0227E8001D1DDE /* Main.storyboard in Resources */,
975227CE1D0227E8001D1DDE /* Setting.storyboard in Resources */,
971A10801D022F74007FC62C /* Pic_I.png in Resources */,