mirror of
https://github.com/kiwix/kiwix-apple.git
synced 2025-09-27 05:49:25 -04:00
some restructure
This commit is contained in:
parent
554cfdd293
commit
0f4c154685
@ -32,6 +32,8 @@ class Buttons: LPTBarButtonItemDelegate {
|
||||
delegate?.didTapBackButton()
|
||||
case forward:
|
||||
delegate?.didTapForwardButton()
|
||||
case toc:
|
||||
delegate?.didTapTOCButton()
|
||||
default:
|
||||
return
|
||||
}
|
||||
|
@ -10,26 +10,12 @@ import UIKit
|
||||
|
||||
class Controllers {
|
||||
|
||||
public func cleanUp() {
|
||||
//_bookmark = nil
|
||||
//bookmarkHUD = nil
|
||||
_library = nil
|
||||
_search = nil
|
||||
//setting = nil
|
||||
_welcome = nil
|
||||
}
|
||||
|
||||
// MARK: - Main
|
||||
|
||||
class var main: MainController {
|
||||
return (UIApplication.appDelegate.window?.rootViewController as! UINavigationController).topViewController as! MainController
|
||||
}
|
||||
|
||||
// MARK: - NavigationList
|
||||
|
||||
private(set) lazy var navigationList = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NavigationListController") as! NavigationListController
|
||||
|
||||
|
||||
// MARK: - Bookmark
|
||||
//
|
||||
// private var bookmark: UINavigationController?
|
||||
|
@ -12,10 +12,21 @@ import WebKit
|
||||
class MainController: UIViewController {
|
||||
|
||||
@IBOutlet weak var webView: UIWebView!
|
||||
@IBOutlet weak var dimView: UIView!
|
||||
@IBOutlet weak var tocVisiualEffectView: UIVisualEffectView!
|
||||
@IBOutlet weak var tocTopToSuperViewBottomSpacing: NSLayoutConstraint!
|
||||
@IBOutlet weak var tocHeightConstraint: NSLayoutConstraint!
|
||||
@IBOutlet weak var tocLeadSpacing: NSLayoutConstraint!
|
||||
|
||||
|
||||
let searchBar = SearchBar()
|
||||
lazy var controllers = Controllers()
|
||||
lazy var buttons = Buttons()
|
||||
|
||||
var isShowingTableOfContents = false
|
||||
private(set) var tableOfContentsController: TableOfContentsController?
|
||||
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
@ -31,6 +42,7 @@ class MainController: UIViewController {
|
||||
super.traitCollectionDidChange(previousTraitCollection)
|
||||
guard traitCollection.horizontalSizeClass != previousTraitCollection?.horizontalSizeClass ||
|
||||
traitCollection.verticalSizeClass != previousTraitCollection?.verticalSizeClass else {return}
|
||||
// buttons
|
||||
switch traitCollection.horizontalSizeClass {
|
||||
case .compact:
|
||||
navigationController?.setToolbarHidden(false, animated: false)
|
||||
@ -48,5 +60,16 @@ class MainController: UIViewController {
|
||||
default:
|
||||
return
|
||||
}
|
||||
configureTOCConstraints()
|
||||
}
|
||||
|
||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
||||
if segue.identifier == "EmbeddedTOCController" {
|
||||
guard let controller = segue.destination as? TableOfContentsController else {return}
|
||||
tableOfContentsController = controller
|
||||
tableOfContentsController?.delegate = self
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -9,9 +9,40 @@
|
||||
import UIKit
|
||||
import SafariServices
|
||||
|
||||
// MARK: - Web
|
||||
|
||||
extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate {
|
||||
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
|
||||
guard let url = request.url else {return false}
|
||||
guard url.isKiwixURL else {
|
||||
let controller = SFSafariViewController(url: url)
|
||||
controller.delegate = self
|
||||
present(controller, animated: true, completion: nil)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func webViewDidStartLoad(_ webView: UIWebView) {
|
||||
}
|
||||
|
||||
func webViewDidFinishLoad(_ webView: UIWebView) {
|
||||
JS.preventDefaultLongTap(webView: webView)
|
||||
guard let title = JS.getTitle(from: webView) else {return}
|
||||
searchBar.title = title
|
||||
|
||||
buttons.back.tintColor = webView.canGoBack ? nil : UIColor.gray
|
||||
buttons.forward.tintColor = webView.canGoForward ? nil : UIColor.gray
|
||||
}
|
||||
|
||||
func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Search
|
||||
|
||||
extension MainController: SearchBarDelegate {
|
||||
extension MainController: SearchBarDelegate, SearchContainerDelegate {
|
||||
|
||||
func didBecomeFirstResponder(searchBar: SearchBar) {
|
||||
showSearch(animated: true)
|
||||
@ -82,50 +113,15 @@ extension MainController: SearchBarDelegate {
|
||||
completion(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Web
|
||||
|
||||
extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate {
|
||||
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
|
||||
guard let url = request.url else {return false}
|
||||
guard url.isKiwixURL else {
|
||||
let controller = SFSafariViewController(url: url)
|
||||
controller.delegate = self
|
||||
present(controller, animated: true, completion: nil)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func webViewDidStartLoad(_ webView: UIWebView) {
|
||||
}
|
||||
|
||||
func webViewDidFinishLoad(_ webView: UIWebView) {
|
||||
JS.preventDefaultLongTap(webView: webView)
|
||||
guard let title = JS.getTitle(from: webView) else {return}
|
||||
searchBar.title = title
|
||||
|
||||
buttons.back.tintColor = webView.canGoBack ? nil : UIColor.gray
|
||||
buttons.forward.tintColor = webView.canGoForward ? nil : UIColor.gray
|
||||
}
|
||||
|
||||
func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - SFSafariViewControllerDelegate
|
||||
|
||||
extension MainController {
|
||||
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
|
||||
controller.dismiss(animated: true, completion: nil)
|
||||
func didTapSearchDimView() {
|
||||
_ = searchBar.resignFirstResponder()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Button Delegates
|
||||
|
||||
extension MainController: ButtonDelegates, SearchContainerDelegate {
|
||||
extension MainController: ButtonDelegates {
|
||||
func didTapBackButton() {
|
||||
webView.goBack()
|
||||
}
|
||||
@ -135,7 +131,7 @@ extension MainController: ButtonDelegates, SearchContainerDelegate {
|
||||
}
|
||||
|
||||
func didTapTOCButton() {
|
||||
|
||||
isShowingTableOfContents ? hideTableOfContents(animated: true) : showTableOfContents(animated: true)
|
||||
}
|
||||
|
||||
func didTapBookmarkButton() {
|
||||
@ -161,20 +157,81 @@ extension MainController: ButtonDelegates, SearchContainerDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - NavigationListControllerDelegate
|
||||
// MARK: - Table Of Content
|
||||
|
||||
//extension MainController: NavigationListControllerDelegate {
|
||||
// func load(url: URL) {
|
||||
// let request = URLRequest(url: url)
|
||||
// webView.loadRequest(request)
|
||||
// }
|
||||
//}
|
||||
extension MainController: TableOfContentsDelegate {
|
||||
func showTableOfContents(animated: Bool) {
|
||||
guard welcomeController == nil else {return}
|
||||
isShowingTableOfContents = true
|
||||
tocVisiualEffectView.isHidden = false
|
||||
dimView.isHidden = false
|
||||
dimView.alpha = 0.0
|
||||
view.layoutIfNeeded()
|
||||
|
||||
// MARK: - SearchContainerDelegate
|
||||
//configureTableOfContents()
|
||||
configureTOCConstraints()
|
||||
|
||||
extension MainController {
|
||||
func didTapDimView() {
|
||||
_ = searchBar.resignFirstResponder()
|
||||
if animated {
|
||||
UIView.animate(withDuration: 0.3, delay: 0.0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.0, options: .curveEaseOut, animations: {
|
||||
self.view.layoutIfNeeded()
|
||||
self.dimView.alpha = 0.5
|
||||
}) { (completed) in }
|
||||
} else {
|
||||
view.layoutIfNeeded()
|
||||
dimView.alpha = 0.5
|
||||
}
|
||||
|
||||
JS.startTOCCallBack(webView)
|
||||
}
|
||||
|
||||
func hideTableOfContents(animated: Bool) {
|
||||
isShowingTableOfContents = false
|
||||
view.layoutIfNeeded()
|
||||
|
||||
configureTOCConstraints()
|
||||
if animated {
|
||||
UIView.animate(withDuration: 0.2, delay: 0.0, options: .curveEaseIn, animations: {
|
||||
self.view.layoutIfNeeded()
|
||||
self.dimView.alpha = 0.0
|
||||
}) { (completed) in
|
||||
self.dimView.isHidden = true
|
||||
self.tocVisiualEffectView.isHidden = true
|
||||
}
|
||||
} else {
|
||||
view.layoutIfNeeded()
|
||||
dimView.alpha = 0.0
|
||||
dimView.isHidden = true
|
||||
tocVisiualEffectView.isHidden = true
|
||||
}
|
||||
|
||||
JS.stopTOCCallBack(webView)
|
||||
}
|
||||
|
||||
func configureTOCConstraints() {
|
||||
switch traitCollection.horizontalSizeClass {
|
||||
case .compact:
|
||||
let tocHeight: CGFloat = {
|
||||
guard let controller = tableOfContentsController else {return floor(view.frame.height * 0.4)}
|
||||
let tocContentHeight = controller.tableView.contentSize.height
|
||||
guard controller.headings.count != 0 else {return floor(view.frame.height * 0.4)}
|
||||
let toolBarHeight: CGFloat = traitCollection.horizontalSizeClass == .regular ? 0.0 : (traitCollection.verticalSizeClass == .compact ? 32.0 : 44.0)
|
||||
return min(tocContentHeight + toolBarHeight, floor(view.frame.height * 0.65))
|
||||
}()
|
||||
tocHeightConstraint.constant = tocHeight
|
||||
tocTopToSuperViewBottomSpacing.constant = isShowingTableOfContents ? tocHeight : 0.0
|
||||
case .regular:
|
||||
tocLeadSpacing.constant = isShowingTableOfContents ? 0.0 : 270
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
func didSelectTOCItem(heading: HTMLHeading) {
|
||||
|
||||
}
|
||||
|
||||
@IBAction func didTapTOCDimView(_ sender: UITapGestureRecognizer) {
|
||||
hideTableOfContents(animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
@ -193,10 +250,14 @@ extension MainController {
|
||||
}
|
||||
|
||||
func hideWelcome() {
|
||||
guard let controller = childViewControllers.flatMap({$0 as? WelcomeController}).first else {return}
|
||||
guard let controller = welcomeController else {return}
|
||||
controller.removeFromParentViewController()
|
||||
controller.view.removeFromSuperview()
|
||||
}
|
||||
|
||||
var welcomeController: WelcomeController? {
|
||||
return childViewControllers.flatMap({$0 as? WelcomeController}).first
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Bookmark
|
||||
@ -224,3 +285,11 @@ extension MainController: UIViewControllerTransitioningDelegate {
|
||||
return BookmarkHUDAnimator(animateIn: false)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - SFSafariViewControllerDelegate
|
||||
|
||||
extension MainController {
|
||||
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
|
||||
controller.dismiss(animated: true, completion: nil)
|
||||
}
|
||||
}
|
||||
|
@ -1,95 +0,0 @@
|
||||
//
|
||||
// NavigationListController.swift
|
||||
// Kiwix
|
||||
//
|
||||
// Created by Chris Li on 11/25/16.
|
||||
// Copyright © 2016 Chris Li. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class NavigationListController: UITableViewController {
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
// Uncomment the following line to preserve selection between presentations
|
||||
// self.clearsSelectionOnViewWillAppear = false
|
||||
|
||||
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
|
||||
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
|
||||
}
|
||||
|
||||
override func didReceiveMemoryWarning() {
|
||||
super.didReceiveMemoryWarning()
|
||||
// Dispose of any resources that can be recreated.
|
||||
}
|
||||
|
||||
// MARK: - Table view data source
|
||||
|
||||
override func numberOfSections(in tableView: UITableView) -> Int {
|
||||
// #warning Incomplete implementation, return the number of sections
|
||||
return 0
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
// #warning Incomplete implementation, return the number of rows
|
||||
return 0
|
||||
}
|
||||
|
||||
/*
|
||||
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
|
||||
|
||||
// Configure the cell...
|
||||
|
||||
return cell
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
// Override to support conditional editing of the table view.
|
||||
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
|
||||
// Return false if you do not want the specified item to be editable.
|
||||
return true
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
// Override to support editing the table view.
|
||||
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
|
||||
if editingStyle == .delete {
|
||||
// Delete the row from the data source
|
||||
tableView.deleteRows(at: [indexPath], with: .fade)
|
||||
} else if editingStyle == .insert {
|
||||
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
// Override to support rearranging the table view.
|
||||
override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) {
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
// Override to support conditional rearranging of the table view.
|
||||
override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
|
||||
// Return false if you do not want the item to be re-orderable.
|
||||
return true
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
// MARK: - Navigation
|
||||
|
||||
// In a storyboard-based application, you will often want to do a little preparation before navigation
|
||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
||||
// Get the new view controller using segue.destinationViewController.
|
||||
// Pass the selected object to the new view controller.
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
@ -122,7 +122,7 @@ class TableOfContentsController: UIViewController, UITableViewDelegate, UITableV
|
||||
// MARK: - Table view delegate
|
||||
|
||||
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||||
delegate?.scrollTo(headings[indexPath.row])
|
||||
delegate?.didSelectTOCItem(heading: headings[indexPath.row])
|
||||
tableView.deselectRow(at: indexPath, animated: true)
|
||||
}
|
||||
|
||||
@ -150,5 +150,5 @@ class TableOfContentsController: UIViewController, UITableViewDelegate, UITableV
|
||||
}
|
||||
|
||||
protocol TableOfContentsDelegate: class {
|
||||
func scrollTo(_ heading: HTMLHeading)
|
||||
func didSelectTOCItem(heading: HTMLHeading)
|
||||
}
|
||||
|
@ -58,10 +58,10 @@ class SearchContainer: UIViewController {
|
||||
}
|
||||
|
||||
@IBAction func handleDimViewTap(_ sender: UITapGestureRecognizer) {
|
||||
delegate?.didTapDimView()
|
||||
delegate?.didTapSearchDimView()
|
||||
}
|
||||
}
|
||||
|
||||
protocol SearchContainerDelegate: class {
|
||||
func didTapDimView()
|
||||
func didTapSearchDimView()
|
||||
}
|
||||
|
@ -49,7 +49,7 @@
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.8.3277</string>
|
||||
<string>1.8.3308</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11760" systemVersion="16B2555" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="3qT-fi-cxa">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11760" systemVersion="16B2555" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="uuM-WO-DyB">
|
||||
<device id="retina5_5" orientation="portrait">
|
||||
<adaptation id="fullscreen"/>
|
||||
</device>
|
||||
@ -23,7 +23,7 @@
|
||||
<rect key="frame" x="0.0" y="28" width="414" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="r7E-6T-nCU" id="MHm-bs-fau">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="43"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableViewCellContentView>
|
||||
</tableViewCell>
|
||||
@ -38,51 +38,6 @@
|
||||
</objects>
|
||||
<point key="canvasLocation" x="4262" y="-350"/>
|
||||
</scene>
|
||||
<!--Root View Controller-->
|
||||
<scene sceneID="BNz-yk-AfC">
|
||||
<objects>
|
||||
<tableViewController id="WhC-HH-hZh" customClass="NavigationListController" 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="03l-xW-El2">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<prototypes>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="Cell" id="dzE-1z-TGl">
|
||||
<rect key="frame" x="0.0" y="28" width="414" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="dzE-1z-TGl" id="MUh-zX-0U1">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="43"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableViewCellContentView>
|
||||
</tableViewCell>
|
||||
</prototypes>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="WhC-HH-hZh" id="4PA-es-DCw"/>
|
||||
<outlet property="delegate" destination="WhC-HH-hZh" id="Uy3-JF-5AO"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
<navigationItem key="navigationItem" title="Root View Controller" id="30n-oT-cxd"/>
|
||||
</tableViewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="PJq-HV-PHx" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="3416" y="-348"/>
|
||||
</scene>
|
||||
<!--Navigation List Nav-->
|
||||
<scene sceneID="VeW-EH-F1h">
|
||||
<objects>
|
||||
<navigationController id="R7u-Q9-uy7" customClass="NavigationListNav" sceneMemberID="viewController">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="yDq-ho-5C5">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
<connections>
|
||||
<segue destination="WhC-HH-hZh" kind="relationship" relationship="rootViewController" id="wFp-ul-1Fy"/>
|
||||
</connections>
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="mqo-ts-Ds4" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="2509" y="-350"/>
|
||||
</scene>
|
||||
<!--Table Of Contents Controller-->
|
||||
<scene sceneID="sFA-xU-ByH">
|
||||
<objects>
|
||||
@ -103,11 +58,11 @@
|
||||
<rect key="frame" x="0.0" y="28" width="414" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="DSn-3Y-Gs4" id="vq5-6x-vLY">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="43"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="xPq-dt-NK6">
|
||||
<rect key="frame" x="15" y="0.0" width="384" height="43"/>
|
||||
<rect key="frame" x="15" y="0.0" width="384" height="43.666666666666664"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
@ -125,11 +80,11 @@
|
||||
<rect key="frame" x="0.0" y="72" width="414" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="au4-iz-tLz" id="3UD-lZ-hs0">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="43"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="DJX-Kf-59M">
|
||||
<rect key="frame" x="15" y="0.0" width="384" height="43"/>
|
||||
<rect key="frame" x="15" y="0.0" width="384" height="43.666666666666664"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
@ -147,11 +102,11 @@
|
||||
<rect key="frame" x="0.0" y="116" width="414" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="cam-ik-ZIw" id="ooG-35-3Wp">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="43"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ry7-2s-QyS">
|
||||
<rect key="frame" x="15" y="0.0" width="384" height="43"/>
|
||||
<rect key="frame" x="15" y="0.0" width="384" height="43.666666666666664"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
@ -321,7 +276,7 @@
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<webView hidden="YES" opaque="NO" contentMode="scaleToFill" layoutMarginsFollowReadableWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hIy-lu-2F6">
|
||||
<webView opaque="NO" contentMode="scaleToFill" layoutMarginsFollowReadableWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hIy-lu-2F6">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<dataDetectorType key="dataDetectorTypes"/>
|
||||
@ -397,7 +352,7 @@
|
||||
<color key="backgroundColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<gestureRecognizers/>
|
||||
<connections>
|
||||
<outletCollection property="gestureRecognizers" destination="NUn-UO-p8Y" appends="YES" id="hSH-Mi-4Ly"/>
|
||||
<outletCollection property="gestureRecognizers" destination="NUn-UO-p8Y" appends="YES" id="sK9-4I-XpH"/>
|
||||
</connections>
|
||||
</view>
|
||||
</subviews>
|
||||
@ -488,7 +443,7 @@
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Gtk-Xb-X35" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
<tapGestureRecognizer id="NUn-UO-p8Y">
|
||||
<connections>
|
||||
<action selector="dimViewTapGestureRecognizer:" destination="vVc-as-aAx" id="9Rr-IW-Grc"/>
|
||||
<action selector="didTapTOCDimView:" destination="vVc-as-aAx" id="bvM-yI-TFZ"/>
|
||||
</connections>
|
||||
</tapGestureRecognizer>
|
||||
</objects>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.8.3277</string>
|
||||
<string>1.8.3308</string>
|
||||
<key>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionMainStoryboard</key>
|
||||
|
@ -68,7 +68,6 @@
|
||||
9764F5991D833F2B00E0B1C4 /* KiwixURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9764F5981D833F2B00E0B1C4 /* KiwixURL.swift */; };
|
||||
976B86D81DDA0C7E00FA7FD1 /* SearchContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976B86D71DDA0C7E00FA7FD1 /* SearchContainer.swift */; };
|
||||
9771A5BD1DD269BD005F1795 /* Book+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D6813C1D6F712800E5FA99 /* Book+CoreDataProperties.swift */; };
|
||||
977319841DE8998200111474 /* NavigationListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 977319831DE8998200111474 /* NavigationListController.swift */; };
|
||||
9779C3141D4575AD0064CC8E /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97E609F01D103DED00EBCB9D /* NotificationCenter.framework */; };
|
||||
9779C3171D4575AE0064CC8E /* TodayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9779C3161D4575AE0064CC8E /* TodayViewController.swift */; };
|
||||
9779C31E1D4575AE0064CC8E /* Bookmarks.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 9779C3131D4575AD0064CC8E /* Bookmarks.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
@ -225,7 +224,6 @@
|
||||
9764F5981D833F2B00E0B1C4 /* KiwixURL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KiwixURL.swift; sourceTree = "<group>"; };
|
||||
976A0C801D41619C0006A742 /* DZNEmptyDataSet.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DZNEmptyDataSet.framework; path = "../../../../Users/chrisli/Library/Developer/Xcode/DerivedData/Kiwix-ayxrfhaqnfxzendihdolvkklkmhk/Build/Products/Debug-iphoneos/DZNEmptyDataSet/DZNEmptyDataSet.framework"; sourceTree = "<group>"; };
|
||||
976B86D71DDA0C7E00FA7FD1 /* SearchContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchContainer.swift; sourceTree = "<group>"; };
|
||||
977319831DE8998200111474 /* NavigationListController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NavigationListController.swift; sourceTree = "<group>"; };
|
||||
9779C3131D4575AD0064CC8E /* Bookmarks.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Bookmarks.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
9779C3161D4575AE0064CC8E /* TodayViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayViewController.swift; sourceTree = "<group>"; };
|
||||
9779C31B1D4575AE0064CC8E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
@ -480,7 +478,6 @@
|
||||
97BC0FBA1DD90A34004BBAD1 /* old */,
|
||||
97BC0FBE1DD90A65004BBAD1 /* MainController.swift */,
|
||||
97D0E98E1DDA12B30029530E /* MainDelegates.swift */,
|
||||
977319831DE8998200111474 /* NavigationListController.swift */,
|
||||
97BC0FC11DD92B62004BBAD1 /* Buttons.swift */,
|
||||
97BC0FBD1DD90A65004BBAD1 /* JSInjection.swift */,
|
||||
972F81581DDC1B71008D7289 /* Controllers.swift */,
|
||||
@ -1185,7 +1182,6 @@
|
||||
97D6813F1D6F712800E5FA99 /* Article+CoreDataProperties.swift in Sources */,
|
||||
97A1FD1D1D6F71D800A80EE2 /* URLResponseCache.swift in Sources */,
|
||||
97A1FD441D6F728200A80EE2 /* Preference.swift in Sources */,
|
||||
977319841DE8998200111474 /* NavigationListController.swift in Sources */,
|
||||
97D681311D6F70EC00E5FA99 /* 1.5.xcmappingmodel in Sources */,
|
||||
9732075C1DD136BB00EDD3DC /* CoreDataExtension.swift in Sources */,
|
||||
973208271DD2238B00EDD3DC /* GlobalQueue.swift in Sources */,
|
||||
|
@ -3,36 +3,6 @@
|
||||
type = "0"
|
||||
version = "2.0">
|
||||
<Breakpoints>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Kiwix-iOS/Controller/Library/LibraryTabBarController.swift"
|
||||
timestampString = "493314092.554991"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "14"
|
||||
endingLineNumber = "14"
|
||||
landmarkName = "viewDidLoad(_:)"
|
||||
landmarkType = "5">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Kiwix/CoreData/Migration/MigrationPolicy.swift"
|
||||
timestampString = "496614888.818509"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "37"
|
||||
endingLineNumber = "37">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
|
||||
<BreakpointContent
|
||||
|
Loading…
x
Reference in New Issue
Block a user