Merge branch '1.6-iPad-UI' into 1.6

This commit is contained in:
Chris Li 2016-06-29 16:36:27 -04:00
commit 6434e592b4
10 changed files with 1102 additions and 924 deletions

View File

@ -15,7 +15,7 @@ class MainVC: UIViewController {
var bookmarkController: UIViewController?
var libraryController: UIViewController?
var settingController: UIViewController?
var searchVC: SearchVC?
var searchController: SearchController?
let searchBar = SearchBar()
var context: UnsafeMutablePointer<Void> = nil
@ -58,7 +58,7 @@ class MainVC: UIViewController {
bookmarkController = nil
libraryController = nil
settingController = nil
searchVC = nil
searchController = nil
}
override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
@ -143,28 +143,28 @@ class MainVC: UIViewController {
// MARK: - UIViewAnimations
func animateInSearchResultController() {
guard let searchVC = self.searchVC ?? UIStoryboard.main.initViewController(SearchVC.self) else {return}
self.searchVC = searchVC
guard !childViewControllers.contains(searchVC) else {return}
addChildViewController(searchVC)
searchVC.view.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(searchVC.view)
searchVC.didMoveToParentViewController(self)
searchVC.view.alpha = 0.5
searchVC.view.transform = CGAffineTransformMakeScale(0.94, 0.94)
guard let searchController = searchController ?? UIStoryboard.search.instantiateInitialViewController() as? SearchController else {return}
self.searchController = searchController
guard !childViewControllers.contains(searchController) else {return}
addChildViewController(searchController)
searchController.view.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(searchController.view)
searchController.didMoveToParentViewController(self)
searchController.view.alpha = 0.5
searchController.view.transform = CGAffineTransformMakeScale(0.94, 0.94)
let views = ["searchVC": searchVC.view]
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[searchVC]|", options: .AlignAllCenterY, metrics: nil, views: views))
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[searchVC]|", options: .AlignAllCenterX, metrics: nil, views: views))
let views = ["SearchController": searchController.view]
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[SearchController]|", options: .AlignAllCenterY, metrics: nil, views: views))
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[SearchController]|", options: .AlignAllCenterX, metrics: nil, views: views))
UIView.animateWithDuration(0.15, delay: 0.0, options: .CurveEaseOut, animations: { () -> Void in
searchVC.view.alpha = 1.0
searchVC.view.transform = CGAffineTransformIdentity
searchController.view.alpha = 1.0
searchController.view.transform = CGAffineTransformIdentity
}, completion: nil)
}
func animateOutSearchResultController() {
guard let searchResultVC = searchVC else {return}
guard let searchResultVC = searchController else {return}
UIView.animateWithDuration(0.15, delay: 0.0, options: .BeginFromCurrentState, animations: { () -> Void in
searchResultVC.view.alpha = 0.0
searchResultVC.view.transform = CGAffineTransformMakeScale(0.96, 0.96)

View File

@ -50,11 +50,11 @@ extension MainVC: LPTBarButtonItemDelegate, TableOfContentsDelegate, UISearchBar
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
searchVC?.searchText = searchText
searchController?.searchText = searchText
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
searchVC?.searchResultTBVC?.selectFirstResultIfPossible()
searchController?.searchResultTBVC?.selectFirstResultIfPossible()
}
// MARK: - UIPopoverPresentationControllerDelegate

View File

@ -59,11 +59,11 @@ class RecentSearchCVC: UIViewController, UICollectionViewDataSource, UICollectio
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
guard let mainVC = parentViewController?.parentViewController?.parentViewController as? MainVC,
let searchVC = parentViewController?.parentViewController as? SearchVC,
let SearchController = parentViewController?.parentViewController as? SearchController,
let cell = collectionView.cellForItemAtIndexPath(indexPath) as? LocalLangCell,
let text = cell.label.text else {return}
mainVC.searchBar.text = text
searchVC.searchText = text
SearchController.searchText = text
collectionView.deselectItemAtIndexPath(indexPath, animated: true)
}

View File

@ -1,5 +1,5 @@
//
// SearchVC.swift
// SearchController.swift
// Kiwix
//
// Created by Chris Li on 1/30/16.
@ -8,7 +8,7 @@
import UIKit
class SearchVC: UIViewController, UISearchBarDelegate, UIGestureRecognizerDelegate {
class SearchController: UIViewController, UISearchBarDelegate, UIGestureRecognizerDelegate {
@IBOutlet weak var tabControllerContainer: UIView!
@IBOutlet weak var searchResultTBVCContainer: UIView!
@ -24,7 +24,7 @@ class SearchVC: UIViewController, UISearchBarDelegate, UIGestureRecognizerDelega
override func viewDidLoad() {
super.viewDidLoad()
tapGestureRecognizer.addTarget(self, action: #selector(SearchVC.handleTap(_:)))
tapGestureRecognizer.addTarget(self, action: #selector(SearchController.handleTap(_:)))
tapGestureRecognizer.delegate = self
}

View File

@ -36,7 +36,7 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>800</string>
<string>878</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSRequiresIPhoneOS</key>

View File

@ -93,513 +93,6 @@
</objects>
<point key="canvasLocation" x="1853" y="1137"/>
</scene>
<!--SearchVC-->
<scene sceneID="ruU-L0-1kn">
<objects>
<viewController storyboardIdentifier="SearchVC" id="GRt-tr-wJe" customClass="SearchVC" customModule="Kiwix" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Nn6-QD-Iko"/>
<viewControllerLayoutGuide type="bottom" id="PL4-sM-SW8"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="3LV-7r-Br0">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<containerView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nqD-Ce-fwY">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<constraints>
<constraint firstAttribute="height" priority="750" constant="690" id="1H8-2i-3rE">
<variation key="heightClass=regular-widthClass=regular" constant="800"/>
</constraint>
<constraint firstAttribute="width" constant="500" id="g1H-EU-UDX"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="1H8-2i-3rE"/>
<exclude reference="g1H-EU-UDX"/>
</mask>
</variation>
<variation key="heightClass=regular-widthClass=regular">
<mask key="constraints">
<include reference="1H8-2i-3rE"/>
<exclude reference="g1H-EU-UDX"/>
</mask>
</variation>
<connections>
<segue destination="6mg-ey-R4I" kind="embed" id="PJM-oo-7Sv"/>
</connections>
</containerView>
<containerView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="x9y-hU-87q">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<constraints>
<constraint firstAttribute="width" constant="500" id="Tdw-WL-mgJ"/>
<constraint firstAttribute="height" priority="750" constant="690" id="bRE-8N-boP">
<variation key="heightClass=regular-widthClass=regular" constant="800"/>
</constraint>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="Tdw-WL-mgJ"/>
<exclude reference="bRE-8N-boP"/>
</mask>
</variation>
<variation key="heightClass=regular-widthClass=regular">
<mask key="constraints">
<exclude reference="Tdw-WL-mgJ"/>
<include reference="bRE-8N-boP"/>
</mask>
</variation>
<connections>
<segue destination="AE5-6T-Che" kind="embed" identifier="EmbeddedSearchResultTBVC" id="FFx-BR-9CT"/>
</connections>
</containerView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<gestureRecognizers/>
<constraints>
<constraint firstItem="x9y-hU-87q" firstAttribute="top" secondItem="Nn6-QD-Iko" secondAttribute="bottom" constant="10" id="3sP-eF-PDp"/>
<constraint firstItem="nqD-Ce-fwY" firstAttribute="leading" secondItem="3LV-7r-Br0" secondAttribute="leading" id="4pP-XB-XVa"/>
<constraint firstItem="PL4-sM-SW8" firstAttribute="top" secondItem="nqD-Ce-fwY" secondAttribute="bottom" id="5sX-cq-FwU"/>
<constraint firstAttribute="trailingMargin" secondItem="nqD-Ce-fwY" secondAttribute="trailing" constant="-20" id="74h-pw-iWI"/>
<constraint firstItem="x9y-hU-87q" firstAttribute="leading" secondItem="3LV-7r-Br0" secondAttribute="leading" id="9mD-dp-6bw"/>
<constraint firstItem="nqD-Ce-fwY" firstAttribute="top" secondItem="Nn6-QD-Iko" secondAttribute="bottom" id="Fod-IJ-DSx"/>
<constraint firstItem="nqD-Ce-fwY" firstAttribute="centerX" secondItem="3LV-7r-Br0" secondAttribute="centerX" id="GaG-VB-EnV"/>
<constraint firstAttribute="trailingMargin" secondItem="x9y-hU-87q" secondAttribute="trailing" constant="-20" id="INv-i3-JJg"/>
<constraint firstItem="PL4-sM-SW8" firstAttribute="top" secondItem="nqD-Ce-fwY" secondAttribute="bottom" id="M6N-tf-gOM"/>
<constraint firstItem="x9y-hU-87q" firstAttribute="width" secondItem="3LV-7r-Br0" secondAttribute="width" multiplier="0.7" id="MoK-TW-ndH"/>
<constraint firstItem="nqD-Ce-fwY" firstAttribute="leading" secondItem="3LV-7r-Br0" secondAttribute="leadingMargin" constant="-20" id="PRY-eZ-sbX"/>
<constraint firstAttribute="trailing" secondItem="nqD-Ce-fwY" secondAttribute="trailing" id="ahQ-TF-rpV"/>
<constraint firstItem="PL4-sM-SW8" firstAttribute="top" secondItem="x9y-hU-87q" secondAttribute="bottom" id="bL8-DS-Ik3"/>
<constraint firstAttribute="trailing" secondItem="x9y-hU-87q" secondAttribute="trailing" id="bdd-bx-Geo"/>
<constraint firstItem="x9y-hU-87q" firstAttribute="centerY" secondItem="3LV-7r-Br0" secondAttribute="centerY" id="deH-wd-HVG"/>
<constraint firstItem="nqD-Ce-fwY" firstAttribute="leading" secondItem="3LV-7r-Br0" secondAttribute="leadingMargin" constant="-20" id="e7N-0z-2kH"/>
<constraint firstItem="nqD-Ce-fwY" firstAttribute="top" secondItem="Nn6-QD-Iko" secondAttribute="bottom" constant="56" id="ecd-0V-tsH">
<variation key="heightClass=regular-widthClass=regular" constant="10"/>
</constraint>
<constraint firstItem="PL4-sM-SW8" firstAttribute="top" secondItem="x9y-hU-87q" secondAttribute="bottom" constant="100" id="evv-cM-bwU"/>
<constraint firstItem="nqD-Ce-fwY" firstAttribute="top" secondItem="Nn6-QD-Iko" secondAttribute="bottom" constant="-64" id="gQt-eD-x5S"/>
<constraint firstItem="nqD-Ce-fwY" firstAttribute="centerY" secondItem="3LV-7r-Br0" secondAttribute="centerY" id="lWx-4X-TfA"/>
<constraint firstItem="PL4-sM-SW8" firstAttribute="top" secondItem="nqD-Ce-fwY" secondAttribute="bottom" constant="82" id="mk1-pP-QHJ">
<variation key="heightClass=regular-widthClass=regular" constant="100"/>
</constraint>
<constraint firstItem="x9y-hU-87q" firstAttribute="leading" secondItem="3LV-7r-Br0" secondAttribute="leadingMargin" constant="-20" id="qnh-XR-tN9"/>
<constraint firstItem="x9y-hU-87q" firstAttribute="top" secondItem="Nn6-QD-Iko" secondAttribute="bottom" constant="-64" id="tJe-L9-iub"/>
<constraint firstItem="x9y-hU-87q" firstAttribute="centerX" secondItem="3LV-7r-Br0" secondAttribute="centerX" id="tVf-f6-E8X"/>
<constraint firstItem="nqD-Ce-fwY" firstAttribute="width" secondItem="3LV-7r-Br0" secondAttribute="width" multiplier="0.7" id="wth-ed-aUs"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="74h-pw-iWI"/>
<exclude reference="Fod-IJ-DSx"/>
<exclude reference="GaG-VB-EnV"/>
<exclude reference="PRY-eZ-sbX"/>
<exclude reference="e7N-0z-2kH"/>
<exclude reference="ecd-0V-tsH"/>
<exclude reference="lWx-4X-TfA"/>
<exclude reference="wth-ed-aUs"/>
<exclude reference="3sP-eF-PDp"/>
<exclude reference="INv-i3-JJg"/>
<exclude reference="MoK-TW-ndH"/>
<exclude reference="deH-wd-HVG"/>
<exclude reference="qnh-XR-tN9"/>
<exclude reference="tVf-f6-E8X"/>
<exclude reference="5sX-cq-FwU"/>
<exclude reference="evv-cM-bwU"/>
<exclude reference="mk1-pP-QHJ"/>
</mask>
</variation>
<variation key="heightClass=regular-widthClass=regular">
<mask key="constraints">
<exclude reference="4pP-XB-XVa"/>
<exclude reference="74h-pw-iWI"/>
<exclude reference="Fod-IJ-DSx"/>
<include reference="GaG-VB-EnV"/>
<exclude reference="ahQ-TF-rpV"/>
<exclude reference="e7N-0z-2kH"/>
<include reference="ecd-0V-tsH"/>
<exclude reference="gQt-eD-x5S"/>
<exclude reference="lWx-4X-TfA"/>
<include reference="wth-ed-aUs"/>
<include reference="3sP-eF-PDp"/>
<exclude reference="9mD-dp-6bw"/>
<exclude reference="INv-i3-JJg"/>
<include reference="MoK-TW-ndH"/>
<exclude reference="bdd-bx-Geo"/>
<exclude reference="deH-wd-HVG"/>
<exclude reference="qnh-XR-tN9"/>
<exclude reference="tJe-L9-iub"/>
<include reference="tVf-f6-E8X"/>
<exclude reference="5sX-cq-FwU"/>
<exclude reference="M6N-tf-gOM"/>
<exclude reference="bL8-DS-Ik3"/>
<include reference="evv-cM-bwU"/>
<include reference="mk1-pP-QHJ"/>
</mask>
</variation>
<connections>
<outletCollection property="gestureRecognizers" destination="99T-bB-TdJ" appends="YES" id="ccV-vB-qpx"/>
</connections>
</view>
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
<connections>
<outlet property="searchResultTBVCContainer" destination="x9y-hU-87q" id="PjU-Th-UtN"/>
<outlet property="tabControllerContainer" destination="nqD-Ce-fwY" id="8IQ-Dw-YuV"/>
<outlet property="tapGestureRecognizer" destination="99T-bB-TdJ" id="neA-ik-lbQ"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="pcH-1A-6eo" userLabel="First Responder" sceneMemberID="firstResponder"/>
<tapGestureRecognizer id="99T-bB-TdJ"/>
</objects>
<point key="canvasLocation" x="1098.75" y="-304.5"/>
</scene>
<!--Search Local BooksCVC-->
<scene sceneID="tv8-MB-WTH">
<objects>
<viewController storyboardIdentifier="SearchLocalBooksCVC" id="AuN-RP-iDn" customClass="SearchLocalBooksCVC" customModule="Kiwix" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Tky-oO-aD1"/>
<viewControllerLayoutGuide type="bottom" id="Esl-DP-3Qd"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="wTn-24-zpK">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="E2T-US-f5Z">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="sqi-mP-JA0">
<size key="itemSize" width="50" height="50"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<cells>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="Cell" id="Xjf-YQ-cyn" customClass="BookCollectionCell" customModule="Kiwix" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="156" height="184"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="156" height="184"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="8fk-vN-ND8">
<rect key="frame" x="15" y="8" width="125" height="125"/>
<constraints>
<constraint firstAttribute="width" secondItem="8fk-vN-ND8" secondAttribute="height" id="IxA-Hj-Zvw"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="title" textAlignment="center" lineBreakMode="wordWrap" numberOfLines="2" baselineAdjustment="alignBaselines" minimumScaleFactor="0.80000000000000004" adjustsLetterSpacingToFitWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="nEm-T1-8cV">
<rect key="frame" x="8" y="137" width="140" height="13.5"/>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="title" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.80000001192092896" adjustsLetterSpacingToFitWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="iyb-9Y-zcu">
<rect key="frame" x="8" y="151" width="140" height="11"/>
<fontDescription key="fontDescription" type="system" pointSize="9"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="title" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.80000001192092896" adjustsLetterSpacingToFitWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="eYt-kO-73I">
<rect key="frame" x="8" y="162" width="140" height="11"/>
<fontDescription key="fontDescription" type="system" pointSize="9"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="8fk-vN-ND8" firstAttribute="width" secondItem="Xjf-YQ-cyn" secondAttribute="width" multiplier="0.8" id="1Yq-eA-GJE"/>
<constraint firstAttribute="topMargin" secondItem="8fk-vN-ND8" secondAttribute="top" id="Eaj-Wh-C8U"/>
<constraint firstAttribute="trailingMargin" secondItem="nEm-T1-8cV" secondAttribute="trailing" id="Fls-vp-fQp"/>
<constraint firstItem="nEm-T1-8cV" firstAttribute="top" secondItem="8fk-vN-ND8" secondAttribute="bottom" constant="4" id="GOz-fK-ltJ"/>
<constraint firstAttribute="leadingMargin" secondItem="iyb-9Y-zcu" secondAttribute="leading" id="IMG-PC-NYZ"/>
<constraint firstAttribute="leadingMargin" secondItem="nEm-T1-8cV" secondAttribute="leading" id="SFA-hi-FNw"/>
<constraint firstItem="eYt-kO-73I" firstAttribute="top" secondItem="iyb-9Y-zcu" secondAttribute="bottom" id="Tp5-V2-dHW"/>
<constraint firstItem="iyb-9Y-zcu" firstAttribute="top" secondItem="nEm-T1-8cV" secondAttribute="bottom" constant="0.5" id="gZ8-8I-Fgy"/>
<constraint firstAttribute="leadingMargin" secondItem="eYt-kO-73I" secondAttribute="leading" id="n6j-ld-fY3"/>
<constraint firstAttribute="trailingMargin" secondItem="iyb-9Y-zcu" secondAttribute="trailing" id="qLw-41-GPG"/>
<constraint firstItem="8fk-vN-ND8" firstAttribute="centerX" secondItem="Xjf-YQ-cyn" secondAttribute="centerX" id="rGp-oE-GxS"/>
<constraint firstAttribute="trailingMargin" secondItem="eYt-kO-73I" secondAttribute="trailing" id="v7T-7n-hfg"/>
</constraints>
<size key="customSize" width="156" height="184"/>
<connections>
<outlet property="dateLabel" destination="eYt-kO-73I" id="Dc5-qy-1be"/>
<outlet property="favIcon" destination="8fk-vN-ND8" id="bCX-LA-Vl1"/>
<outlet property="languageLabel" destination="iyb-9Y-zcu" id="4Cp-Xd-E0h"/>
<outlet property="titleLabel" destination="nEm-T1-8cV" id="26C-HJ-75E"/>
</connections>
</collectionViewCell>
</cells>
</collectionView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="E2T-US-f5Z" firstAttribute="leading" secondItem="wTn-24-zpK" secondAttribute="leading" id="4Ix-cl-xPl"/>
<constraint firstItem="Esl-DP-3Qd" firstAttribute="top" secondItem="E2T-US-f5Z" secondAttribute="bottom" id="5TV-zi-1ee">
<variation key="heightClass=regular-widthClass=regular" constant="0.0"/>
</constraint>
<constraint firstItem="E2T-US-f5Z" firstAttribute="top" secondItem="Tky-oO-aD1" secondAttribute="bottom" id="Skh-II-1rE"/>
<constraint firstAttribute="trailingMargin" secondItem="E2T-US-f5Z" secondAttribute="trailing" constant="-20" id="cE8-Jd-Bc7"/>
<constraint firstItem="E2T-US-f5Z" firstAttribute="leading" secondItem="wTn-24-zpK" secondAttribute="leadingMargin" constant="-20" id="e6v-f1-KZS"/>
<constraint firstItem="E2T-US-f5Z" firstAttribute="top" secondItem="Tky-oO-aD1" secondAttribute="bottom" id="fKF-pA-NJR"/>
<constraint firstAttribute="trailing" secondItem="E2T-US-f5Z" secondAttribute="trailing" id="lKG-2C-EbS"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="Skh-II-1rE"/>
<exclude reference="cE8-Jd-Bc7"/>
<exclude reference="e6v-f1-KZS"/>
</mask>
</variation>
</view>
<nil key="simulatedStatusBarMetrics"/>
<connections>
<outlet property="collectionView" destination="E2T-US-f5Z" id="DgE-V1-W8m"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="ja4-Ik-XIR" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="3985" y="-979"/>
</scene>
<!--Search BooksVC-->
<scene sceneID="D7X-oq-0zg">
<objects>
<viewController automaticallyAdjustsScrollViewInsets="NO" id="6mg-ey-R4I" customClass="SearchBooksVC" customModule="Kiwix" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="zo0-tg-4E4"/>
<viewControllerLayoutGuide type="bottom" id="Tmc-y1-RDA"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="xId-x3-dwx">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="N78-0h-zb7">
<rect key="frame" x="0.0" y="108" width="600" height="492"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="CheckMarkBookCell" id="QXK-je-ISm" customClass="CheckMarkBookCell" customModule="Kiwix">
<rect key="frame" x="0.0" y="28" width="600" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="QXK-je-ISm" id="bj5-Xo-SR6">
<rect key="frame" x="0.0" y="0.0" width="600" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" minimumFontSize="8" adjustsLetterSpacingToFitWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="g8b-RO-czj">
<rect key="frame" x="59" y="6" width="501" height="20"/>
<constraints>
<constraint firstAttribute="height" constant="19.5" id="Q5R-Kr-GZZ"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="bxk-BM-3An">
<rect key="frame" x="6" y="6" width="32" height="32"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="JoA-ao-ig3"/>
<constraint firstAttribute="height" constant="32" id="YIg-Fy-Lpa"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Lna-QC-TaS">
<rect key="frame" x="59" y="26" width="501" height="12"/>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="P" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TmV-G9-g51">
<rect key="frame" x="42" y="6" width="13" height="13"/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" constant="13" id="TX0-hy-6dI"/>
<constraint firstAttribute="width" constant="13" id="z1e-H2-gJk"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="I" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9y6-m2-QTb">
<rect key="frame" x="42" y="23" width="13" height="13"/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" constant="13" id="UWv-F1-PPl"/>
<constraint firstAttribute="width" constant="13" id="WsT-Dy-qw2"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="11"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="PGj-Uz-NTF">
<rect key="frame" x="42" y="19" width="10" height="4"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" constant="10" id="JY1-4a-Im0"/>
<constraint firstAttribute="height" constant="4" id="O29-j7-kSU"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="O29-j7-kSU"/>
</mask>
</variation>
</view>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Check" highlightedImage="CheckBlue" translatesAutoresizingMaskIntoConstraints="NO" id="DBc-uZ-XJ7" customClass="LargeHitZoneImageView" customModule="Kiwix" customModuleProvider="target">
<rect key="frame" x="568" y="10" width="24" height="24"/>
<color key="tintColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" constant="24" id="1cX-LF-tWy"/>
<constraint firstAttribute="width" constant="24" id="EiB-qo-N6J"/>
</constraints>
</imageView>
</subviews>
<constraints>
<constraint firstItem="PGj-Uz-NTF" firstAttribute="leading" secondItem="bxk-BM-3An" secondAttribute="trailing" constant="4" id="3B6-jN-jbK"/>
<constraint firstItem="g8b-RO-czj" firstAttribute="top" secondItem="bj5-Xo-SR6" secondAttribute="topMargin" constant="-2" id="3wG-Wf-uAm"/>
<constraint firstItem="9y6-m2-QTb" firstAttribute="leading" secondItem="bxk-BM-3An" secondAttribute="trailing" constant="4" id="6va-XC-chZ"/>
<constraint firstItem="PGj-Uz-NTF" firstAttribute="height" secondItem="bj5-Xo-SR6" secondAttribute="height" multiplier="0.09" id="9ds-vD-nqD"/>
<constraint firstItem="TmV-G9-g51" firstAttribute="top" secondItem="g8b-RO-czj" secondAttribute="top" id="AcV-0E-WGd"/>
<constraint firstAttribute="bottomMargin" secondItem="Lna-QC-TaS" secondAttribute="bottom" constant="-2.5" id="BQQ-R5-5fd"/>
<constraint firstItem="DBc-uZ-XJ7" firstAttribute="leading" secondItem="g8b-RO-czj" secondAttribute="trailing" constant="8" id="HIF-JG-enG"/>
<constraint firstItem="9y6-m2-QTb" firstAttribute="top" secondItem="PGj-Uz-NTF" secondAttribute="bottom" id="LrR-7P-oLk"/>
<constraint firstItem="TmV-G9-g51" firstAttribute="leading" secondItem="bxk-BM-3An" secondAttribute="trailing" constant="4" id="RKY-EX-UIm"/>
<constraint firstItem="bxk-BM-3An" firstAttribute="leading" secondItem="bj5-Xo-SR6" secondAttribute="leadingMargin" constant="-2" id="TaI-4N-dRQ"/>
<constraint firstItem="bxk-BM-3An" firstAttribute="centerY" secondItem="bj5-Xo-SR6" secondAttribute="centerY" id="ZNz-3g-dex"/>
<constraint firstAttribute="trailingMargin" secondItem="DBc-uZ-XJ7" secondAttribute="trailing" id="cJt-JY-sHw"/>
<constraint firstItem="PGj-Uz-NTF" firstAttribute="centerY" secondItem="bj5-Xo-SR6" secondAttribute="centerY" id="fAh-oJ-ziK"/>
<constraint firstItem="PGj-Uz-NTF" firstAttribute="top" secondItem="TmV-G9-g51" secondAttribute="bottom" id="jK9-II-eaW"/>
<constraint firstItem="Lna-QC-TaS" firstAttribute="leading" secondItem="9y6-m2-QTb" secondAttribute="trailing" constant="4" id="kfr-yj-Ics"/>
<constraint firstItem="Lna-QC-TaS" firstAttribute="top" secondItem="g8b-RO-czj" secondAttribute="bottom" id="oog-7o-e6U"/>
<constraint firstItem="DBc-uZ-XJ7" firstAttribute="centerY" secondItem="bj5-Xo-SR6" secondAttribute="centerY" id="sDT-gW-28b"/>
<constraint firstItem="g8b-RO-czj" firstAttribute="leading" secondItem="TmV-G9-g51" secondAttribute="trailing" constant="4" id="sRF-jC-X66"/>
<constraint firstItem="9y6-m2-QTb" firstAttribute="top" secondItem="Lna-QC-TaS" secondAttribute="top" id="uBT-QM-ups"/>
<constraint firstItem="DBc-uZ-XJ7" firstAttribute="leading" secondItem="Lna-QC-TaS" secondAttribute="trailing" constant="8" id="zBV-hr-nJW"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="AcV-0E-WGd"/>
<exclude reference="uBT-QM-ups"/>
</mask>
</variation>
</tableViewCellContentView>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="bxk-BM-3An" firstAttribute="top" secondItem="QXK-je-ISm" secondAttribute="top" constant="6" id="NHP-qf-G8F"/>
<constraint firstAttribute="trailing" secondItem="Lna-QC-TaS" secondAttribute="trailing" constant="30" id="RP5-NQ-eSs"/>
<constraint firstAttribute="trailing" secondItem="g8b-RO-czj" secondAttribute="trailing" constant="30" id="ij7-SU-k1Q"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="NHP-qf-G8F"/>
<exclude reference="ij7-SU-k1Q"/>
<exclude reference="RP5-NQ-eSs"/>
</mask>
</variation>
<connections>
<outlet property="accessoryImageView" destination="DBc-uZ-XJ7" id="Il3-71-PF9"/>
<outlet property="favIcon" destination="bxk-BM-3An" id="iHS-PU-xLX"/>
<outlet property="hasIndexIndicator" destination="9y6-m2-QTb" id="7MF-et-ko3"/>
<outlet property="hasPicIndicator" destination="TmV-G9-g51" id="kKT-Lj-Ze1"/>
<outlet property="subtitleLabel" destination="Lna-QC-TaS" id="9KZ-nj-eTx"/>
<outlet property="titleLabel" destination="g8b-RO-czj" id="owt-J5-qGm"/>
</connections>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="Cell" textLabel="ff0-K9-MIu" style="IBUITableViewCellStyleDefault" id="mws-kS-13l">
<rect key="frame" x="0.0" y="72" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="mws-kS-13l" id="kHF-OB-kpr">
<rect key="frame" x="0.0" y="0.0" width="600" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ff0-K9-MIu">
<rect key="frame" x="15" y="0.0" width="570" height="43.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
</tableViewCell>
</prototypes>
</tableView>
<containerView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xsY-LL-2as" customClass="DropShadowView" customModule="Kiwix" customModuleProvider="target">
<rect key="frame" x="0.0" y="64" width="600" height="44"/>
<constraints>
<constraint firstAttribute="height" constant="44" id="6A0-j8-csD"/>
</constraints>
<connections>
<segue destination="x8e-ps-NUY" kind="embed" id="1G1-dy-u1M"/>
</connections>
</containerView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="xsY-LL-2as" secondAttribute="trailing" id="0Y8-BQ-wxl"/>
<constraint firstItem="N78-0h-zb7" firstAttribute="top" secondItem="xsY-LL-2as" secondAttribute="bottom" id="4XG-Av-G6S"/>
<constraint firstItem="Tmc-y1-RDA" firstAttribute="top" secondItem="N78-0h-zb7" secondAttribute="bottom" id="7NT-cy-Kqp"/>
<constraint firstItem="N78-0h-zb7" firstAttribute="top" secondItem="zo0-tg-4E4" secondAttribute="bottom" constant="44" id="C1c-FJ-IFr"/>
<constraint firstAttribute="trailing" secondItem="N78-0h-zb7" secondAttribute="trailing" id="CPN-ym-DCz"/>
<constraint firstItem="N78-0h-zb7" firstAttribute="top" secondItem="xId-x3-dwx" secondAttribute="top" id="T0d-Ah-Ztr"/>
<constraint firstItem="xsY-LL-2as" firstAttribute="leading" secondItem="xId-x3-dwx" secondAttribute="leading" id="UBV-XT-6uX"/>
<constraint firstItem="xsY-LL-2as" firstAttribute="top" secondItem="zo0-tg-4E4" secondAttribute="bottom" id="gDO-1F-hDx"/>
<constraint firstItem="N78-0h-zb7" firstAttribute="leading" secondItem="xId-x3-dwx" secondAttribute="leading" id="tov-n3-ofO"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="C1c-FJ-IFr"/>
<exclude reference="T0d-Ah-Ztr"/>
</mask>
</variation>
</view>
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics"/>
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
<connections>
<outlet property="recentSearchBarHeight" destination="6A0-j8-csD" id="kFa-pn-cRm"/>
<outlet property="tableView" destination="N78-0h-zb7" id="KTs-h1-wNo"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="xCo-ub-29g" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1844" y="-1129"/>
</scene>
<!--Search HistoryTBVC-->
<scene sceneID="9Nv-K7-Ksi">
<objects>
<tableViewController storyboardIdentifier="SearchHistoryTBVC" id="c60-LS-VO8" customClass="SearchHistoryTBVC" customModule="Kiwix" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="JbJ-2B-1Mr">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="Cell" textLabel="Ei8-9X-JT7" style="IBUITableViewCellStyleDefault" id="BLN-Zq-sB4">
<rect key="frame" x="0.0" y="28" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="BLN-Zq-sB4" id="ztc-Jf-fZU">
<rect key="frame" x="0.0" y="0.0" width="600" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Ei8-9X-JT7">
<rect key="frame" x="15" y="0.0" width="570" height="43.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="c60-LS-VO8" id="zsR-xU-ORT"/>
<outlet property="delegate" destination="c60-LS-VO8" id="9wh-d5-bf9"/>
</connections>
</tableView>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Gge-hI-22O" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="4643" y="-979"/>
</scene>
<!--BookmarkHUDVC-->
<scene sceneID="PBK-Zl-kOY">
<objects>
@ -866,188 +359,6 @@
</objects>
<point key="canvasLocation" x="1099" y="433"/>
</scene>
<!--Search ResultTBVC-->
<scene sceneID="NS7-r3-Fyn">
<objects>
<viewController storyboardIdentifier="SearchResultTBVC" id="AE5-6T-Che" customClass="SearchResultTBVC" customModule="Kiwix" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="kgz-8X-zh8"/>
<viewControllerLayoutGuide type="bottom" id="jIS-zP-PBj"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="wat-LR-8a3">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="Ai3-HO-cTh">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="ArticleCell" id="2cb-wD-Rba" customClass="ArticleCell" customModule="Kiwix" customModuleProvider="target">
<rect key="frame" x="0.0" y="28" width="600" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="2cb-wD-Rba" id="AVt-5D-EDa">
<rect key="frame" x="0.0" y="0.0" width="600" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="fRX-aT-Msd">
<rect key="frame" x="6" y="6" width="32" height="32"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="PFS-Vm-y50"/>
<constraint firstAttribute="height" constant="32" id="zs4-SG-lau"/>
</constraints>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ntq-dj-dof">
<rect key="frame" x="42" y="6" width="2" height="32"/>
<color key="backgroundColor" red="1" green="0.40242569929999999" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="width" constant="2" id="Mar-7h-AS0"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="T" lineBreakMode="tailTruncation" adjustsLetterSpacingToFitWidth="YES" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4Rt-3v-TnX">
<rect key="frame" x="48" y="6" width="544" height="32"/>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="32" id="ek2-9c-Wfd"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstAttribute="bottomMargin" secondItem="ntq-dj-dof" secondAttribute="bottom" constant="-2.5" id="28Q-zI-MS7"/>
<constraint firstItem="4Rt-3v-TnX" firstAttribute="top" secondItem="AVt-5D-EDa" secondAttribute="topMargin" constant="-2" id="8i2-Ks-Pce"/>
<constraint firstAttribute="trailingMargin" secondItem="4Rt-3v-TnX" secondAttribute="trailing" id="Ca2-Ic-STN"/>
<constraint firstItem="ntq-dj-dof" firstAttribute="top" secondItem="AVt-5D-EDa" secondAttribute="topMargin" constant="-2" id="Ra8-Ed-Pzi"/>
<constraint firstItem="fRX-aT-Msd" firstAttribute="centerY" secondItem="AVt-5D-EDa" secondAttribute="centerY" id="UMO-Ld-urN"/>
<constraint firstItem="4Rt-3v-TnX" firstAttribute="leading" secondItem="ntq-dj-dof" secondAttribute="trailing" constant="4" id="Vfd-LE-iWg"/>
<constraint firstItem="ntq-dj-dof" firstAttribute="leading" secondItem="fRX-aT-Msd" secondAttribute="trailing" constant="4" id="bG8-uE-A1Z"/>
<constraint firstAttribute="bottomMargin" secondItem="4Rt-3v-TnX" secondAttribute="bottom" constant="-2.5" id="spJ-h2-LKm"/>
<constraint firstItem="fRX-aT-Msd" firstAttribute="leading" secondItem="AVt-5D-EDa" secondAttribute="leadingMargin" constant="-2" id="syS-uD-Zfc"/>
</constraints>
</tableViewCellContentView>
<constraints>
<constraint firstItem="fRX-aT-Msd" firstAttribute="top" secondItem="2cb-wD-Rba" secondAttribute="top" constant="6" id="qmr-MQ-3cz"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="qmr-MQ-3cz"/>
</mask>
</variation>
<connections>
<outlet property="favIcon" destination="fRX-aT-Msd" id="SYv-tq-EN7"/>
<outlet property="hasPicIndicator" destination="ntq-dj-dof" id="tlQ-V5-NJF"/>
<outlet property="titleLabel" destination="4Rt-3v-TnX" id="Md9-Kq-qgu"/>
</connections>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="ArticleSnippetCell" rowHeight="87" id="evy-Vc-PVs" customClass="ArticleSnippetCell" customModule="Kiwix" customModuleProvider="target">
<rect key="frame" x="0.0" y="72" width="600" height="87"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="evy-Vc-PVs" id="ler-qW-wM4">
<rect key="frame" x="0.0" y="0.0" width="600" height="86.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Vve-JZ-hbD">
<rect key="frame" x="6" y="27" width="32" height="32"/>
<constraints>
<constraint firstAttribute="height" constant="32" id="58H-6Z-tIb"/>
<constraint firstAttribute="width" constant="32" id="Wrr-Kr-tgS"/>
</constraints>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mDB-3S-zrI">
<rect key="frame" x="42" y="6" width="2" height="75"/>
<color key="backgroundColor" red="1" green="0.40242569929999999" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="width" constant="2" id="rs1-gR-BG2"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="T" lineBreakMode="tailTruncation" adjustsLetterSpacingToFitWidth="YES" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="niC-eM-iSp">
<rect key="frame" x="48" y="10" width="544" height="24"/>
<constraints>
<constraint firstAttribute="height" constant="24" id="PdX-I3-C4M"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9GY-Nm-byt">
<rect key="frame" x="48" y="34" width="544" height="44.5"/>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="2" id="xdt-uR-JJS"/>
</constraints>
<fontDescription key="fontDescription" style="UICTFontTextStyleCaption1"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstAttribute="bottomMargin" secondItem="niC-eM-iSp" secondAttribute="bottom" constant="-2.5" id="02S-pI-WWY"/>
<constraint firstItem="niC-eM-iSp" firstAttribute="leading" secondItem="mDB-3S-zrI" secondAttribute="trailing" constant="4" id="2wN-r5-wjm"/>
<constraint firstItem="mDB-3S-zrI" firstAttribute="leading" secondItem="Vve-JZ-hbD" secondAttribute="trailing" constant="4" id="DHa-Mp-D6k"/>
<constraint firstItem="9GY-Nm-byt" firstAttribute="top" secondItem="niC-eM-iSp" secondAttribute="bottom" id="KxC-Yv-BJ9"/>
<constraint firstAttribute="bottomMargin" secondItem="9GY-Nm-byt" secondAttribute="bottom" id="Lmd-n9-xf8"/>
<constraint firstItem="Vve-JZ-hbD" firstAttribute="leading" secondItem="ler-qW-wM4" secondAttribute="leadingMargin" constant="-2" id="QAj-eo-DTF"/>
<constraint firstItem="9GY-Nm-byt" firstAttribute="leading" secondItem="mDB-3S-zrI" secondAttribute="trailing" constant="4" id="XYv-9b-dK2"/>
<constraint firstAttribute="bottomMargin" secondItem="mDB-3S-zrI" secondAttribute="bottom" constant="-2.5" id="bdX-6o-Xwb"/>
<constraint firstAttribute="trailingMargin" secondItem="9GY-Nm-byt" secondAttribute="trailing" id="fqk-KT-naN"/>
<constraint firstItem="niC-eM-iSp" firstAttribute="top" secondItem="ler-qW-wM4" secondAttribute="topMargin" constant="2" id="hAc-5u-Cq9"/>
<constraint firstItem="Vve-JZ-hbD" firstAttribute="centerY" secondItem="ler-qW-wM4" secondAttribute="centerY" id="hu3-TP-BUh"/>
<constraint firstItem="mDB-3S-zrI" firstAttribute="top" secondItem="ler-qW-wM4" secondAttribute="topMargin" constant="-2" id="oLo-9N-o1F"/>
<constraint firstAttribute="trailingMargin" secondItem="niC-eM-iSp" secondAttribute="trailing" id="s9R-rK-wbS"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="02S-pI-WWY"/>
</mask>
</variation>
</tableViewCellContentView>
<constraints>
<constraint firstItem="Vve-JZ-hbD" firstAttribute="top" secondItem="evy-Vc-PVs" secondAttribute="top" constant="6" id="zTb-oa-wom"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="zTb-oa-wom"/>
</mask>
</variation>
<connections>
<outlet property="favIcon" destination="Vve-JZ-hbD" id="Jez-n3-BK8"/>
<outlet property="hasPicIndicator" destination="mDB-3S-zrI" id="jKB-gJ-dz6"/>
<outlet property="snippetLabel" destination="9GY-Nm-byt" id="m5b-Bl-LdP"/>
<outlet property="titleLabel" destination="niC-eM-iSp" id="2LE-ZF-htX"/>
</connections>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="AE5-6T-Che" id="tRG-ww-fz0"/>
<outlet property="delegate" destination="AE5-6T-Che" id="b0I-Tp-7Uh"/>
</connections>
</tableView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="jIS-zP-PBj" firstAttribute="top" secondItem="Ai3-HO-cTh" secondAttribute="bottom" id="8DO-iH-lna">
<variation key="heightClass=regular-widthClass=regular" constant="0.0"/>
</constraint>
<constraint firstItem="Ai3-HO-cTh" firstAttribute="leading" secondItem="wat-LR-8a3" secondAttribute="leading" id="Ney-mO-xaN"/>
<constraint firstItem="Ai3-HO-cTh" firstAttribute="top" secondItem="kgz-8X-zh8" secondAttribute="bottom" id="fIg-pB-8ir"/>
<constraint firstAttribute="trailingMargin" secondItem="Ai3-HO-cTh" secondAttribute="trailing" constant="-20" id="ri1-fz-cUd"/>
<constraint firstItem="Ai3-HO-cTh" firstAttribute="leading" secondItem="wat-LR-8a3" secondAttribute="leadingMargin" constant="-20" id="sf5-mY-vUe"/>
<constraint firstAttribute="trailing" secondItem="Ai3-HO-cTh" secondAttribute="trailing" id="uFm-8R-t2s"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="ri1-fz-cUd"/>
<exclude reference="sf5-mY-vUe"/>
</mask>
</variation>
</view>
<connections>
<outlet property="tableView" destination="Ai3-HO-cTh" id="VZi-86-vmd"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="nxh-2H-OuR" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1852" y="-305"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="TmE-cH-Z0r">
<objects>
@ -1066,208 +377,9 @@
</objects>
<point key="canvasLocation" x="1099" y="1137"/>
</scene>
<!--Search Tab Controller-->
<scene sceneID="ELM-OI-Gks">
<objects>
<viewController id="9gZ-CS-CgY" customClass="SearchTabController" customModule="Kiwix" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="X4e-wR-a2C"/>
<viewControllerLayoutGuide type="bottom" id="ZV9-VO-yey"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="lSp-dp-Ktv">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="pYo-r0-bj4">
<rect key="frame" x="0.0" y="44" width="600" height="556"/>
<color key="backgroundColor" red="0.97946714743589747" green="0.97946714743589747" blue="0.97946714743589747" alpha="1" colorSpace="calibratedRGB"/>
</scrollView>
<view contentMode="scaleToFill" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="IhM-7L-w7W" customClass="TabsContainerView" customModule="Kiwix" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="600" height="44"/>
<subviews>
<visualEffectView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lcU-Sh-nVA">
<rect key="frame" x="0.0" y="0.0" width="600" height="44"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="rX7-kx-z4L">
<rect key="frame" x="0.0" y="0.0" width="600" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</view>
<constraints>
<constraint firstAttribute="height" constant="44" id="b4N-rx-Rsk"/>
</constraints>
<blurEffect style="extraLight"/>
<variation key="default">
<mask key="constraints">
<exclude reference="b4N-rx-Rsk"/>
</mask>
</variation>
</visualEffectView>
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="42o-HC-ALL">
<rect key="frame" x="0.0" y="0.0" width="600" height="44"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AGB-HN-tQ6">
<rect key="frame" x="0.0" y="7" width="200" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="IJN-Sq-wew"/>
</constraints>
<state key="normal" image="MainPage"/>
<connections>
<action selector="mainPageButtonTapped:" destination="9gZ-CS-CgY" eventType="touchUpInside" id="eP8-f4-PRQ"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ROJ-fp-z79">
<rect key="frame" x="200" y="7" width="200" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="cGZ-7B-WEw"/>
</constraints>
<state key="normal" image="History"/>
<connections>
<action selector="historyButtonTapped:" destination="9gZ-CS-CgY" eventType="touchUpInside" id="30S-Er-EhC"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="C2A-Wh-7aK">
<rect key="frame" x="400" y="7" width="200" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="Og5-rG-bp2"/>
</constraints>
<state key="normal" image="SearchSetting"/>
<connections>
<action selector="scopeButtonTapped:" destination="9gZ-CS-CgY" eventType="touchUpInside" id="x4W-PG-nzJ"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</stackView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" constant="44" id="1zd-WM-D28"/>
<constraint firstItem="lcU-Sh-nVA" firstAttribute="leading" secondItem="IhM-7L-w7W" secondAttribute="leading" id="2I7-ke-KFx"/>
<constraint firstAttribute="trailing" secondItem="42o-HC-ALL" secondAttribute="trailing" id="33Z-8J-1jh"/>
<constraint firstAttribute="trailing" secondItem="lcU-Sh-nVA" secondAttribute="trailing" id="CYV-oh-as2"/>
<constraint firstAttribute="bottom" secondItem="42o-HC-ALL" secondAttribute="bottom" id="Ceb-Qk-CWR"/>
<constraint firstItem="lcU-Sh-nVA" firstAttribute="top" secondItem="IhM-7L-w7W" secondAttribute="top" id="FNa-yb-JjV"/>
<constraint firstItem="42o-HC-ALL" firstAttribute="leading" secondItem="IhM-7L-w7W" secondAttribute="leading" id="PDG-kR-Aba"/>
<constraint firstAttribute="bottom" secondItem="lcU-Sh-nVA" secondAttribute="bottom" id="Rch-7t-2Y1"/>
<constraint firstItem="42o-HC-ALL" firstAttribute="top" secondItem="IhM-7L-w7W" secondAttribute="top" id="TJK-OZ-vlu"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="IhM-7L-w7W" secondAttribute="trailing" id="47H-cR-Mby"/>
<constraint firstItem="IhM-7L-w7W" firstAttribute="top" secondItem="lSp-dp-Ktv" secondAttribute="top" constant="64" id="5WR-OE-kfp"/>
<constraint firstAttribute="trailingMargin" secondItem="pYo-r0-bj4" secondAttribute="trailing" constant="-20" id="5pj-UG-fPS"/>
<constraint firstItem="IhM-7L-w7W" firstAttribute="leading" secondItem="lSp-dp-Ktv" secondAttribute="leading" id="C5b-ef-o1p"/>
<constraint firstItem="pYo-r0-bj4" firstAttribute="top" secondItem="X4e-wR-a2C" secondAttribute="bottom" id="CXl-in-NCN"/>
<constraint firstItem="IhM-7L-w7W" firstAttribute="top" secondItem="X4e-wR-a2C" secondAttribute="bottom" id="NWx-BS-7a2"/>
<constraint firstItem="pYo-r0-bj4" firstAttribute="top" secondItem="IhM-7L-w7W" secondAttribute="bottom" id="OX2-ks-B6d"/>
<constraint firstItem="ZV9-VO-yey" firstAttribute="top" secondItem="pYo-r0-bj4" secondAttribute="bottom" id="Y7q-g6-5br"/>
<constraint firstItem="pYo-r0-bj4" firstAttribute="leading" secondItem="lSp-dp-Ktv" secondAttribute="leadingMargin" constant="-20" id="ZHF-dt-dhY"/>
<constraint firstItem="pYo-r0-bj4" firstAttribute="top" secondItem="IhM-7L-w7W" secondAttribute="bottom" id="a6L-FR-Q5Z"/>
<constraint firstItem="IhM-7L-w7W" firstAttribute="top" secondItem="X4e-wR-a2C" secondAttribute="bottom" id="eZt-fu-xsd"/>
<constraint firstItem="pYo-r0-bj4" firstAttribute="top" secondItem="X4e-wR-a2C" secondAttribute="bottom" id="ffK-uI-CTT"/>
<constraint firstAttribute="trailing" secondItem="pYo-r0-bj4" secondAttribute="trailing" id="jVO-aa-Biq"/>
<constraint firstItem="pYo-r0-bj4" firstAttribute="leading" secondItem="lSp-dp-Ktv" secondAttribute="leading" id="u4r-lx-Xkr"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="5WR-OE-kfp"/>
<exclude reference="eZt-fu-xsd"/>
<exclude reference="5pj-UG-fPS"/>
<exclude reference="CXl-in-NCN"/>
<exclude reference="ZHF-dt-dhY"/>
<exclude reference="a6L-FR-Q5Z"/>
<exclude reference="ffK-uI-CTT"/>
</mask>
</variation>
</view>
<connections>
<outlet property="historyButton" destination="ROJ-fp-z79" id="Gga-WH-idC"/>
<outlet property="mainPageButton" destination="AGB-HN-tQ6" id="e4D-HL-0mE"/>
<outlet property="scrollView" destination="pYo-r0-bj4" id="5uf-XS-gWK"/>
<outlet property="settingButton" destination="C2A-Wh-7aK" id="pN1-9B-5WS"/>
<outlet property="tabsContainer" destination="IhM-7L-w7W" id="PLg-qS-ecM"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="wva-Fk-hmb" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="3329" y="-979"/>
</scene>
<!--Recent SearchCVC-->
<scene sceneID="jLU-Rv-hcv">
<objects>
<viewController id="x8e-ps-NUY" customClass="RecentSearchCVC" customModule="Kiwix" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="cm9-Ho-8rR"/>
<viewControllerLayoutGuide type="bottom" id="M4a-gw-9IU"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="HQ0-6h-SSN">
<rect key="frame" x="0.0" y="0.0" width="600" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="oLp-jV-WAb">
<rect key="frame" x="0.0" y="0.0" width="600" height="44"/>
<color key="backgroundColor" red="0.96078431372549022" green="0.96078431372549022" blue="0.96078431372549022" alpha="1" colorSpace="calibratedRGB"/>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="SEj-84-HqB">
<size key="itemSize" width="102" height="42"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<cells>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="Cell" id="yvP-cy-f4q" customClass="LocalLangCell" customModule="Kiwix" customModuleProvider="target">
<rect key="frame" x="0.0" y="1" width="102" height="42"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="102" height="42"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PEx-jc-RoI">
<rect key="frame" x="8" y="10" width="86" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="trailingMargin" secondItem="PEx-jc-RoI" secondAttribute="trailing" id="16y-Ff-TeD"/>
<constraint firstAttribute="leadingMargin" secondItem="PEx-jc-RoI" secondAttribute="leading" id="5S0-5o-wlC"/>
<constraint firstItem="PEx-jc-RoI" firstAttribute="centerY" secondItem="yvP-cy-f4q" secondAttribute="centerY" id="NLl-0r-15q"/>
</constraints>
<connections>
<outlet property="label" destination="PEx-jc-RoI" id="97Y-ZM-sNz"/>
</connections>
</collectionViewCell>
</cells>
</collectionView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="oLp-jV-WAb" secondAttribute="trailing" id="Kav-h8-re2"/>
<constraint firstAttribute="bottom" secondItem="oLp-jV-WAb" secondAttribute="bottom" id="ejK-QK-YVR"/>
<constraint firstItem="oLp-jV-WAb" firstAttribute="leading" secondItem="HQ0-6h-SSN" secondAttribute="leading" id="l5H-9W-Dze"/>
<constraint firstItem="oLp-jV-WAb" firstAttribute="top" secondItem="HQ0-6h-SSN" secondAttribute="top" id="sCF-0y-fVJ"/>
</constraints>
</view>
<connections>
<outlet property="collectionView" destination="oLp-jV-WAb" id="7Gi-bJ-DHW"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="8l6-By-GDL" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2600" y="-1129"/>
</scene>
</scenes>
<resources>
<image name="Check" width="21" height="21"/>
<image name="CheckBlue" width="21" height="21"/>
<image name="DownArrow" width="21" height="21"/>
<image name="History" width="21" height="21"/>
<image name="MainPage" width="21" height="21"/>
<image name="SearchSetting" width="21" height="21"/>
<image name="Star" width="21" height="20"/>
<image name="StarHighlighted" width="21" height="20"/>
</resources>

File diff suppressed because it is too large Load Diff

View File

@ -9,17 +9,70 @@
import UIKit
class DropShadowView: UIView {
var bottomBorder: CALayer?
override func drawRect(rect: CGRect) {
switch traitCollection.horizontalSizeClass {
case .Regular:
layer.shadowRadius = 0.0
layer.shadowOpacity = 0.0
layer.backgroundColor = UIColor.whiteColor().CGColor
let border: CALayer = {
if let border = bottomBorder {
return border
} else {
let border = CALayer()
bottomBorder = border
border.backgroundColor = UIColor.lightGrayColor().colorWithAlphaComponent(0.75).CGColor
border.frame = CGRectMake(0, rect.height - 0.5, rect.width, 0.5)
return border
}
}()
layer.addSublayer(border)
case .Compact:
layer.shadowRadius = 2.0
layer.shadowOpacity = 0.5
layer.backgroundColor = UIColor(red: 240/255, green: 240/255, blue: 240/255, alpha: 1.0).CGColor
if let border = bottomBorder {border.removeFromSuperlayer()}
default:
break
}
}
override func awakeFromNib() {
layer.masksToBounds = false
layer.shadowOffset = CGSizeMake(0, 0)
layer.shadowRadius = 2.0
layer.shadowOpacity = 0.5
}
override func layoutSubviews() {
super.layoutSubviews()
layer.shadowPath = UIBezierPath(rect: bounds).CGPath
}
override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
guard previousTraitCollection != traitCollection else {return}
setNeedsDisplay()
}
}
class SearchHRegularDropShadowView: UIView {
override func awakeFromNib() {
layer.masksToBounds = false
layer.cornerRadius = 10.0
layer.shadowOffset = CGSizeMake(0, 0)
layer.shadowRadius = 50.0
layer.shadowOpacity = 0.2
}
override func layoutSubviews() {
super.layoutSubviews()
layer.shadowPath = UIBezierPath(rect: bounds).CGPath
}
}
class SearchRoundedCornerView: UIView {
override func awakeFromNib() {
layer.masksToBounds = true
layer.cornerRadius = 10.0
}
}

View File

@ -36,8 +36,9 @@ extension NSManagedObjectContext {
// MARK: - UI
extension UIStoryboard {
class var main: UIStoryboard {get {return UIStoryboard(name: "Main", bundle: nil)}}
class var library: UIStoryboard {get {return UIStoryboard(name: "Library", bundle: nil)}}
class var main: UIStoryboard {get {return UIStoryboard(name: "Main", bundle: nil)}}
class var search: UIStoryboard {get {return UIStoryboard(name: "Search", bundle: nil)}}
class var setting: UIStoryboard {get {return UIStoryboard(name: "Setting", bundle: nil)}}
class var help: UIStoryboard {get {return UIStoryboard(name: "Help", bundle: nil)}}
@ -52,6 +53,10 @@ extension UIStoryboard {
func initViewController<T:UIViewController>(identifier: String, type: T.Type) -> T? {
return instantiateViewControllerWithIdentifier(identifier) as? T
}
func controller<T:UIViewController>(type: T.Type) -> T? {
return instantiateViewControllerWithIdentifier(String(T)) as? T
}
}
extension UIColor {

View File

@ -82,7 +82,7 @@
971A103F1D022C42007FC62C /* LibraryAutoRefreshTBVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A103D1D022C42007FC62C /* LibraryAutoRefreshTBVC.swift */; };
971A10401D022C42007FC62C /* LibraryUseCellularDataTBVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A103E1D022C42007FC62C /* LibraryUseCellularDataTBVC.swift */; };
971A10431D022C54007FC62C /* SettingTBVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10411D022C54007FC62C /* SettingTBVC.swift */; };
971A10461D022CB2007FC62C /* SearchVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10451D022CB2007FC62C /* SearchVC.swift */; };
971A10461D022CB2007FC62C /* SearchController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10451D022CB2007FC62C /* SearchController.swift */; };
971A104A1D022CBE007FC62C /* SearchResultTBVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10471D022CBE007FC62C /* SearchResultTBVC.swift */; };
971A104B1D022CBE007FC62C /* SearchBooksVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10481D022CBE007FC62C /* SearchBooksVC.swift */; };
971A10521D022D9D007FC62C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10511D022D9D007FC62C /* AppDelegate.swift */; };
@ -267,6 +267,7 @@
97E60A021D10423A00EBCB9D /* ShadowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97E60A011D10423A00EBCB9D /* ShadowView.swift */; };
97E60A061D10504000EBCB9D /* LibraryBackupTBVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97E60A051D10504000EBCB9D /* LibraryBackupTBVC.swift */; };
97E891691CA976E90001CA32 /* FileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97E891681CA976E90001CA32 /* FileManager.swift */; };
97F03CE21D2440470040D26E /* Search.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97F03CE11D2440470040D26E /* Search.storyboard */; };
AEFF409D8D5B53BC90700424 /* Pods_Kiwix_OSX.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBAF14EE0505901A1570F23F /* Pods_Kiwix_OSX.framework */; };
BECDBCEF4720E3E86FE63989 /* Pods_Kiwix_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CEA715EBFC96C75E73447A7 /* Pods_Kiwix_iOS.framework */; };
/* End PBXBuildFile section */
@ -395,7 +396,7 @@
971A103D1D022C42007FC62C /* LibraryAutoRefreshTBVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LibraryAutoRefreshTBVC.swift; path = "Kiwix-iOS/Controller/LibraryAutoRefreshTBVC.swift"; sourceTree = SOURCE_ROOT; };
971A103E1D022C42007FC62C /* LibraryUseCellularDataTBVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LibraryUseCellularDataTBVC.swift; path = "Kiwix-iOS/Controller/LibraryUseCellularDataTBVC.swift"; sourceTree = SOURCE_ROOT; };
971A10411D022C54007FC62C /* SettingTBVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SettingTBVC.swift; path = "Kiwix-iOS/Controller/SettingTBVC.swift"; sourceTree = SOURCE_ROOT; };
971A10451D022CB2007FC62C /* SearchVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SearchVC.swift; path = "Kiwix-iOS/Controller/SearchVC.swift"; sourceTree = SOURCE_ROOT; };
971A10451D022CB2007FC62C /* SearchController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SearchController.swift; path = "Kiwix-iOS/Controller/SearchController.swift"; sourceTree = SOURCE_ROOT; };
971A10471D022CBE007FC62C /* SearchResultTBVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SearchResultTBVC.swift; path = "Kiwix-iOS/Controller/SearchResultTBVC.swift"; sourceTree = SOURCE_ROOT; };
971A10481D022CBE007FC62C /* SearchBooksVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SearchBooksVC.swift; path = "Kiwix-iOS/Controller/SearchBooksVC.swift"; sourceTree = SOURCE_ROOT; };
971A10511D022D9D007FC62C /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
@ -534,7 +535,6 @@
97BA32A31CEBC29500339A47 /* RootWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RootWindowController.swift; path = "Kiwix-OSX/Controllers/RootWindowController.swift"; sourceTree = SOURCE_ROOT; };
97D452BB1D16FF010033666F /* RecentSearchCVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RecentSearchCVC.swift; path = "Kiwix-iOS/Controller/Search/RecentSearchCVC.swift"; sourceTree = SOURCE_ROOT; };
97D452BD1D1723FF0033666F /* CollectionViewCells.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewCells.swift; sourceTree = "<group>"; };
97D452BF1D1871E70033666F /* SearchHistoryTBVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SearchHistoryTBVC.swift; path = "Kiwix-iOS/Controller/Search/SearchHistoryTBVC.swift"; sourceTree = SOURCE_ROOT; };
97D452C01D1871E70033666F /* SearchLocalBooksCVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SearchLocalBooksCVC.swift; path = "Kiwix-iOS/Controller/Search/SearchLocalBooksCVC.swift"; sourceTree = SOURCE_ROOT; };
97D452C11D1871E70033666F /* SearchTabController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SearchTabController.swift; path = "Kiwix-iOS/Controller/Search/SearchTabController.swift"; sourceTree = SOURCE_ROOT; };
97D55EF51D2075180081B523 /* TableOfContentController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TableOfContentController.swift; path = "Kiwix-iOS/Controller/TableOfContentController.swift"; sourceTree = SOURCE_ROOT; };
@ -547,6 +547,7 @@
97E60A011D10423A00EBCB9D /* ShadowView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShadowView.swift; sourceTree = "<group>"; };
97E60A051D10504000EBCB9D /* LibraryBackupTBVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LibraryBackupTBVC.swift; path = "Kiwix-iOS/Controller/LibraryBackupTBVC.swift"; sourceTree = SOURCE_ROOT; };
97E891681CA976E90001CA32 /* FileManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FileManager.swift; path = Kiwix/FileManager.swift; sourceTree = "<group>"; };
97F03CE11D2440470040D26E /* Search.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Search.storyboard; path = "Kiwix-iOS/Storyboard/Search.storyboard"; sourceTree = SOURCE_ROOT; };
B14E5F8A97964014F99EAD4E /* Pods-Kiwix-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Kiwix-iOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Kiwix-iOS/Pods-Kiwix-iOS.debug.xcconfig"; sourceTree = "<group>"; };
B3B41D59F4B010C559B18D3D /* Pods-Kiwix-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Kiwix-iOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-Kiwix-iOS/Pods-Kiwix-iOS.release.xcconfig"; sourceTree = "<group>"; };
DBAF14EE0505901A1570F23F /* Pods_Kiwix_OSX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Kiwix_OSX.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@ -853,6 +854,7 @@
isa = PBXGroup;
children = (
971A10511D022D9D007FC62C /* AppDelegate.swift */,
975B90FD1CEB909100D13906 /* iOSExtensions.swift */,
978C587A1C1CCC9C0077AE47 /* Storyboards */,
978C58821C1CCDAF0077AE47 /* Controllers */,
971A10221D022AD5007FC62C /* View */,
@ -973,7 +975,6 @@
9768957A1CB6A35E00F02686 /* Old */ = {
isa = PBXGroup;
children = (
97D452BF1D1871E70033666F /* SearchHistoryTBVC.swift */,
97D452C01D1871E70033666F /* SearchLocalBooksCVC.swift */,
97D452C11D1871E70033666F /* SearchTabController.swift */,
);
@ -1012,6 +1013,7 @@
children = (
975227C91D0227E8001D1DDE /* Library.storyboard */,
975227CA1D0227E8001D1DDE /* Main.storyboard */,
97F03CE11D2440470040D26E /* Search.storyboard */,
975227CB1D0227E8001D1DDE /* Setting.storyboard */,
);
name = Storyboards;
@ -1036,7 +1038,6 @@
978C588B1C1CD1E30077AE47 /* Model */ = {
isa = PBXGroup;
children = (
975B90FD1CEB909100D13906 /* iOSExtensions.swift */,
971904A41CA3204B002E9CFF /* Network */,
971A106B1D022E50007FC62C /* Utilities.swift */,
);
@ -1244,7 +1245,7 @@
97E108221C5D5A0D00E27FD3 /* Search */ = {
isa = PBXGroup;
children = (
971A10451D022CB2007FC62C /* SearchVC.swift */,
971A10451D022CB2007FC62C /* SearchController.swift */,
97D452BB1D16FF010033666F /* RecentSearchCVC.swift */,
971A10481D022CBE007FC62C /* SearchBooksVC.swift */,
971A10471D022CBE007FC62C /* SearchResultTBVC.swift */,
@ -1525,6 +1526,7 @@
971A10811D022F74007FC62C /* Pic_P.png in Resources */,
971A101D1D0228E8007FC62C /* adjustlayoutiPad.js in Resources */,
975227D01D022814001D1DDE /* LaunchScreen.storyboard in Resources */,
97F03CE21D2440470040D26E /* Search.storyboard in Resources */,
971A10181D0228E0007FC62C /* about.html in Resources */,
971A10161D022872007FC62C /* Assets.xcassets in Resources */,
971A10771D022F05007FC62C /* Localizable.stringsdict in Resources */,
@ -1856,7 +1858,7 @@
974570F41C2DABB500680E43 /* ZIMMultiReaderAPI.swift in Sources */,
979CB6511D05C44F005E1BA1 /* PassbookCapability.swift in Sources */,
971A105C1D022DAD007FC62C /* LibraryTabBarController.swift in Sources */,
971A10461D022CB2007FC62C /* SearchVC.swift in Sources */,
971A10461D022CB2007FC62C /* SearchController.swift in Sources */,
9779987B1C1E1C9600B1DD5E /* Extensions.swift in Sources */,
979CB6551D05C44F005E1BA1 /* PushCapability-iOS.swift in Sources */,
979CB6831D05C44F005E1BA1 /* OperationObserver.swift in Sources */,