mirror of
https://github.com/kiwix/kiwix-apple.git
synced 2025-09-22 02:52:39 -04:00
Table of contents
This commit is contained in:
parent
9f5e12f54d
commit
2dbaad1d9a
@ -10,7 +10,7 @@
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "wikipedia5.png",
|
||||
"filename" : "compass.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
BIN
Kiwix-iOS/Assets.xcassets/Compass.imageset/compass.png
vendored
Normal file
BIN
Kiwix-iOS/Assets.xcassets/Compass.imageset/compass.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
@ -10,7 +10,7 @@
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "list.png",
|
||||
"filename" : "list-1.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
|
BIN
Kiwix-iOS/Assets.xcassets/TableOfContent.imageset/list-1.png
vendored
Normal file
BIN
Kiwix-iOS/Assets.xcassets/TableOfContent.imageset/list-1.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 525 B |
Binary file not shown.
Before Width: | Height: | Size: 1.0 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.6 KiB |
@ -1,5 +1,5 @@
|
||||
//
|
||||
// MainVC2.swift
|
||||
// MainVC.swift
|
||||
// Kiwix
|
||||
//
|
||||
// Created by Chris Li on 1/22/16.
|
||||
@ -11,9 +11,10 @@ import UIKit
|
||||
class MainVC: UIViewController {
|
||||
|
||||
@IBOutlet weak var webView: UIWebView!
|
||||
var bookmarkVC: UIViewController?
|
||||
var libraryVC: UIViewController?
|
||||
var settingVC: UIViewController?
|
||||
var tableOfContentController: TableOfContentController?
|
||||
var bookmarkController: UIViewController?
|
||||
var libraryController: UIViewController?
|
||||
var settingController: UIViewController?
|
||||
var searchVC: SearchVC?
|
||||
let searchBar = SearchBar()
|
||||
|
||||
@ -53,15 +54,18 @@ class MainVC: UIViewController {
|
||||
|
||||
override func didReceiveMemoryWarning() {
|
||||
super.didReceiveMemoryWarning()
|
||||
bookmarkVC = nil
|
||||
libraryVC = nil
|
||||
settingVC = nil
|
||||
tableOfContentController = nil
|
||||
bookmarkController = nil
|
||||
libraryController = nil
|
||||
settingController = nil
|
||||
searchVC = nil
|
||||
}
|
||||
|
||||
override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
|
||||
super.traitCollectionDidChange(previousTraitCollection)
|
||||
configureUIElements(self.traitCollection)
|
||||
if previousTraitCollection?.horizontalSizeClass != traitCollection.horizontalSizeClass {
|
||||
configureUIElements(traitCollection.horizontalSizeClass)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - First Time Launch Alert
|
||||
@ -75,19 +79,19 @@ class MainVC: UIViewController {
|
||||
|
||||
// MARK: - Configure
|
||||
|
||||
func configureUIElements(traitCollection: UITraitCollection) {
|
||||
switch traitCollection.horizontalSizeClass {
|
||||
func configureUIElements(horizontalSizeClass: UIUserInterfaceSizeClass) {
|
||||
switch horizontalSizeClass {
|
||||
case .Regular:
|
||||
navigationController?.toolbarHidden = true
|
||||
toolbarItems?.removeAll()
|
||||
navigationItem.leftBarButtonItems = [navigateLeftButton, navigateRightButton, blankButton]
|
||||
navigationItem.leftBarButtonItems = [navigateLeftButton, navigateRightButton, tableOfContentButton]
|
||||
navigationItem.rightBarButtonItems = [settingButton, libraryButton, bookmarkButton]
|
||||
case .Compact:
|
||||
if !searchBar.isFirstResponder() {navigationController?.toolbarHidden = false}
|
||||
navigationItem.leftBarButtonItems?.removeAll()
|
||||
navigationItem.rightBarButtonItems?.removeAll()
|
||||
let spaceButton = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
|
||||
toolbarItems = [navigateLeftButton, spaceButton, navigateRightButton, spaceButton, bookmarkButton, spaceButton, libraryButton, spaceButton, settingButton]
|
||||
toolbarItems = [navigateLeftButton, spaceButton, navigateRightButton, spaceButton, tableOfContentButton, spaceButton, bookmarkButton, spaceButton, libraryButton, spaceButton, settingButton]
|
||||
if UIDevice.currentDevice().userInterfaceIdiom == .Pad && searchBar.isFirstResponder() {
|
||||
navigationItem.setRightBarButtonItem(cancelButton, animated: true)
|
||||
}
|
||||
@ -99,6 +103,7 @@ class MainVC: UIViewController {
|
||||
|
||||
func configureButtonColor() {
|
||||
configureNavigationButtonTint()
|
||||
tableOfContentButton.tintColor = UIColor.grayColor()
|
||||
libraryButton.tintColor = UIColor.grayColor()
|
||||
settingButton.tintColor = UIColor.grayColor()
|
||||
UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).tintColor = UIColor.themeColor
|
||||
@ -198,10 +203,10 @@ class MainVC: UIViewController {
|
||||
|
||||
lazy var navigateLeftButton: UIBarButtonItem = UIBarButtonItem(imageNamed: "LeftArrow", target: self, action: #selector(MainVC.navigateLeftButtonTapped))
|
||||
lazy var navigateRightButton: UIBarButtonItem = UIBarButtonItem(imageNamed: "RightArrow", target: self, action: #selector(MainVC.navigateRightButtonTapped))
|
||||
lazy var tableOfContentButton: UIBarButtonItem = UIBarButtonItem(imageNamed: "TableOfContent", target: self, action: #selector(MainVC.showTableOfContentButtonTapped))
|
||||
lazy var bookmarkButton: LPTBarButtonItem = LPTBarButtonItem(imageName: "Star", highlightedImageName: "StarHighlighted", delegate: self)
|
||||
lazy var libraryButton: UIBarButtonItem = UIBarButtonItem(imageNamed: "Library", target: self, action: #selector(MainVC.showLibraryButtonTapped))
|
||||
lazy var settingButton: UIBarButtonItem = UIBarButtonItem(imageNamed: "Setting", target: self, action: #selector(MainVC.showSettingButtonTapped))
|
||||
lazy var blankButton: UIBarButtonItem = UIBarButtonItem(imageNamed: "BlankImage", target: nil, action: nil)
|
||||
lazy var cancelButton: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Cancel, target: self, action: #selector(MainVC.cancelButtonTapped))
|
||||
|
||||
// MARK: - Actions
|
||||
@ -214,19 +219,26 @@ class MainVC: UIViewController {
|
||||
webView.goForward()
|
||||
}
|
||||
|
||||
func showTableOfContentButtonTapped(sender: UIBarButtonItem) {
|
||||
guard let controller = tableOfContentController ?? UIStoryboard.main.initViewController(TableOfContentController.self) else {return}
|
||||
controller.modalPresentationStyle = .Popover
|
||||
controller.popoverPresentationController?.barButtonItem = sender
|
||||
controller.popoverPresentationController?.permittedArrowDirections = [.Up, .Down]
|
||||
controller.popoverPresentationController?.delegate = self
|
||||
presentViewController(controller, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
func showLibraryButtonTapped() {
|
||||
guard let viewController = libraryVC ?? UIStoryboard.library.instantiateInitialViewController() else {return}
|
||||
//let viewController = UITabBarController()
|
||||
//viewController.viewControllers = [UITableViewController(), UITableViewController(), UITableViewController()]
|
||||
guard let viewController = libraryController ?? UIStoryboard.library.instantiateInitialViewController() else {return}
|
||||
viewController.modalPresentationStyle = .FormSheet
|
||||
libraryVC = viewController
|
||||
libraryController = viewController
|
||||
presentViewController(viewController, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
func showSettingButtonTapped() {
|
||||
guard let viewController = settingVC ?? UIStoryboard.setting.instantiateInitialViewController() else {return}
|
||||
guard let viewController = settingController ?? UIStoryboard.setting.instantiateInitialViewController() else {return}
|
||||
viewController.modalPresentationStyle = .FormSheet
|
||||
settingVC = viewController
|
||||
settingController = viewController
|
||||
presentViewController(viewController, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
@ -234,5 +246,4 @@ class MainVC: UIViewController {
|
||||
hideSearch()
|
||||
navigationItem.setRightBarButtonItem(nil, animated: true)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// MainVCWebViewD.swift
|
||||
// MainVCOtherD.swift
|
||||
// Kiwix
|
||||
//
|
||||
// Created by Chris Li on 1/22/16.
|
||||
@ -8,7 +8,54 @@
|
||||
|
||||
import UIKit
|
||||
|
||||
extension MainVC: UIWebViewDelegate, UIScrollViewDelegate {
|
||||
extension MainVC: LPTBarButtonItemDelegate, UISearchBarDelegate, UIPopoverPresentationControllerDelegate, UIWebViewDelegate, UIScrollViewDelegate {
|
||||
|
||||
// MARK: - LPTBarButtonItemDelegate
|
||||
|
||||
func barButtonTapped(sender: LPTBarButtonItem, gestureRecognizer: UIGestureRecognizer) {
|
||||
guard sender == bookmarkButton else {return}
|
||||
|
||||
guard let controller = bookmarkController ?? UIStoryboard.main.initViewController("BookmarkNav", type: UINavigationController.self) else {return}
|
||||
bookmarkController = controller
|
||||
controller.modalPresentationStyle = .FormSheet
|
||||
presentViewController(controller, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
func barButtonLongPressedStart(sender: LPTBarButtonItem, gestureRecognizer: UIGestureRecognizer) {
|
||||
guard sender == bookmarkButton else {return}
|
||||
guard !webView.hidden else {return}
|
||||
guard let article = article else {return}
|
||||
guard let bookmarkHUDVC = UIStoryboard.main.initViewController(BookmarkHUDVC.self) else {return}
|
||||
UIApplication.appDelegate.window?.addSubview(bookmarkHUDVC.view)
|
||||
article.isBookmarked = !article.isBookmarked
|
||||
bookmarkHUDVC.show(article.isBookmarked)
|
||||
configureBookmarkButton()
|
||||
}
|
||||
|
||||
// MARK: - UISearchBarDelegate
|
||||
|
||||
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
|
||||
showSearch()
|
||||
}
|
||||
|
||||
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
|
||||
hideSearch()
|
||||
configureSearchBarPlaceHolder()
|
||||
}
|
||||
|
||||
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
|
||||
searchVC?.searchText = searchText
|
||||
}
|
||||
|
||||
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
|
||||
searchVC?.searchResultTBVC?.selectFirstResultIfPossible()
|
||||
}
|
||||
|
||||
// MARK: - UIPopoverPresentationControllerDelegate
|
||||
|
||||
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
|
||||
return .None
|
||||
}
|
||||
|
||||
// MARK: - UIWebViewDelegate
|
||||
|
||||
@ -132,4 +179,5 @@ extension MainVC: UIWebViewDelegate, UIScrollViewDelegate {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -29,10 +29,34 @@ extension MainVC {
|
||||
// MARK: - JS
|
||||
|
||||
func getTOC(webView: UIWebView) {
|
||||
guard let context = webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") as? JSContext else {return}
|
||||
guard let path = NSBundle.mainBundle().pathForResource("getTableOfContents", ofType: "js") else {return}
|
||||
guard let jString = Utilities.contentOfFileAtPath(path) else {return}
|
||||
let value: JSValue = context.evaluateScript(jString)
|
||||
print(value.toArray())
|
||||
guard let context = webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") as? JSContext,
|
||||
let path = NSBundle.mainBundle().pathForResource("getTableOfContents", ofType: "js"),
|
||||
let jString = Utilities.contentOfFileAtPath(path),
|
||||
let elements = context.evaluateScript(jString).toArray() as? [[String: String]] else {return}
|
||||
var headings = [HTMLHeading]()
|
||||
for element in elements {
|
||||
guard let heading = HTMLHeading(rawValue: element) else {continue}
|
||||
headings.append(heading)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class HTMLHeading {
|
||||
let id: String
|
||||
let tagName: String
|
||||
let textContent: String
|
||||
let level: Int
|
||||
|
||||
init?(rawValue: [String: String]) {
|
||||
let tagName = rawValue["tagName"] ?? ""
|
||||
self.id = rawValue["id"] ?? ""
|
||||
self.textContent = rawValue["textContent"] ?? ""
|
||||
self.tagName = tagName
|
||||
self.level = Int(tagName.stringByReplacingOccurrencesOfString("H", withString: "")) ?? -1
|
||||
|
||||
if id == "" {return nil}
|
||||
if tagName == "" {return nil}
|
||||
if textContent == "" {return nil}
|
||||
if level == -1 {return nil}
|
||||
}
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
//
|
||||
// MainVCOtherD.swift
|
||||
// Kiwix
|
||||
//
|
||||
// Created by Chris Li on 1/22/16.
|
||||
// Copyright © 2016 Chris. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
extension MainVC: LPTBarButtonItemDelegate, UISearchBarDelegate {
|
||||
|
||||
// MARK: - LPTBarButtonItemDelegate
|
||||
|
||||
func barButtonTapped(sender: LPTBarButtonItem, gestureRecognizer: UIGestureRecognizer) {
|
||||
guard sender == bookmarkButton else {return}
|
||||
|
||||
guard let controller = bookmarkVC ?? UIStoryboard.main.initViewController("BookmarkNav", type: UINavigationController.self) else {return}
|
||||
bookmarkVC = controller
|
||||
controller.modalPresentationStyle = .FormSheet
|
||||
presentViewController(controller, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
func barButtonLongPressedStart(sender: LPTBarButtonItem, gestureRecognizer: UIGestureRecognizer) {
|
||||
guard sender == bookmarkButton else {return}
|
||||
guard !webView.hidden else {return}
|
||||
guard let article = article else {return}
|
||||
guard let bookmarkHUDVC = UIStoryboard.main.initViewController(BookmarkHUDVC.self) else {return}
|
||||
UIApplication.appDelegate.window?.addSubview(bookmarkHUDVC.view)
|
||||
article.isBookmarked = !article.isBookmarked
|
||||
bookmarkHUDVC.show(article.isBookmarked)
|
||||
configureBookmarkButton()
|
||||
}
|
||||
|
||||
// MARK: - UISearchBarDelegate
|
||||
|
||||
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
|
||||
showSearch()
|
||||
}
|
||||
|
||||
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
|
||||
hideSearch()
|
||||
configureSearchBarPlaceHolder()
|
||||
}
|
||||
|
||||
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
|
||||
searchVC?.searchText = searchText
|
||||
}
|
||||
|
||||
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
|
||||
searchVC?.searchResultTBVC?.selectFirstResultIfPossible()
|
||||
}
|
||||
}
|
73
Kiwix-iOS/Controller/TableOfContentController.swift
Normal file
73
Kiwix-iOS/Controller/TableOfContentController.swift
Normal file
@ -0,0 +1,73 @@
|
||||
//
|
||||
// TableOfContentController.swift
|
||||
// Kiwix
|
||||
//
|
||||
// Created by Chris Li on 6/26/16.
|
||||
// Copyright © 2016 Chris. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import DZNEmptyDataSet
|
||||
|
||||
class TableOfContentController: UITableViewController, DZNEmptyDataSetSource, DZNEmptyDataSetDelegate {
|
||||
|
||||
var headings = [String]()
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
tableView.emptyDataSetSource = self
|
||||
tableView.emptyDataSetDelegate = self
|
||||
tableView.tableFooterView = UIView()
|
||||
}
|
||||
|
||||
override func viewWillAppear(animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
configurePreferredContentSize()
|
||||
}
|
||||
|
||||
func configurePreferredContentSize() {
|
||||
let count = headings.count
|
||||
preferredContentSize = CGSizeMake(300, count == 0 ? 350 : CGFloat(count) * 44.0)
|
||||
}
|
||||
|
||||
// MARK: - Table view data source
|
||||
|
||||
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
|
||||
return 1
|
||||
}
|
||||
|
||||
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
|
||||
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
|
||||
|
||||
|
||||
return cell
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Empty table datasource & delegate
|
||||
|
||||
func imageForEmptyDataSet(scrollView: UIScrollView!) -> UIImage! {
|
||||
return UIImage(named: "Compass")
|
||||
}
|
||||
|
||||
func titleForEmptyDataSet(scrollView: UIScrollView!) -> NSAttributedString! {
|
||||
let text = NSLocalizedString("Table Of Contents Not Available", comment: "Table Of Content, empty text")
|
||||
let attributes = [NSFontAttributeName: UIFont.boldSystemFontOfSize(18.0),
|
||||
NSForegroundColorAttributeName: UIColor.darkGrayColor()]
|
||||
return NSAttributedString(string: text, attributes: attributes)
|
||||
}
|
||||
|
||||
func verticalOffsetForEmptyDataSet(scrollView: UIScrollView!) -> CGFloat {
|
||||
return 0
|
||||
}
|
||||
|
||||
func spaceHeightForEmptyDataSet(scrollView: UIScrollView!) -> CGFloat {
|
||||
return 30.0
|
||||
}
|
||||
|
||||
}
|
@ -36,7 +36,7 @@
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>706</string>
|
||||
<string>745</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
|
@ -711,6 +711,34 @@
|
||||
</objects>
|
||||
<point key="canvasLocation" x="2607" y="433"/>
|
||||
</scene>
|
||||
<!--Table Of Content Controller-->
|
||||
<scene sceneID="iw2-hs-BiG">
|
||||
<objects>
|
||||
<tableViewController storyboardIdentifier="TableOfContentController" id="p5i-v1-okn" customClass="TableOfContentController" 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="2on-Ss-GkQ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<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="au4-iz-tLz">
|
||||
<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="au4-iz-tLz" id="3UD-lZ-hs0">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableViewCellContentView>
|
||||
</tableViewCell>
|
||||
</prototypes>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="p5i-v1-okn" id="Khv-9C-1Wx"/>
|
||||
<outlet property="delegate" destination="p5i-v1-okn" id="8sr-CM-fnw"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</tableViewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="coI-7Y-cLO" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="3393" y="432"/>
|
||||
</scene>
|
||||
<!--MainVC-->
|
||||
<scene sceneID="WWO-2R-Y9G">
|
||||
<objects>
|
||||
|
@ -94,8 +94,7 @@
|
||||
971A10601D022DF2007FC62C /* LanguageTBVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A105F1D022DF2007FC62C /* LanguageTBVC.swift */; };
|
||||
971A10651D022E0A007FC62C /* MainVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10611D022E0A007FC62C /* MainVC.swift */; };
|
||||
971A10661D022E0A007FC62C /* MainVCLoading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10621D022E0A007FC62C /* MainVCLoading.swift */; };
|
||||
971A10671D022E0A007FC62C /* MainVCOtherD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10631D022E0A007FC62C /* MainVCOtherD.swift */; };
|
||||
971A10681D022E0A007FC62C /* MainVCWebViewD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10641D022E0A007FC62C /* MainVCWebViewD.swift */; };
|
||||
971A10671D022E0A007FC62C /* MainVCDelegates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10631D022E0A007FC62C /* MainVCDelegates.swift */; };
|
||||
971A106A1D022E15007FC62C /* BookmarkHUDVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10691D022E15007FC62C /* BookmarkHUDVC.swift */; };
|
||||
971A106C1D022E50007FC62C /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A106B1D022E50007FC62C /* Utilities.swift */; };
|
||||
971A106F1D022E62007FC62C /* DownloadProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A106D1D022E62007FC62C /* DownloadProgress.swift */; };
|
||||
@ -260,6 +259,7 @@
|
||||
97BA32A51CEBC36300339A47 /* RootWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97BA32A31CEBC29500339A47 /* RootWindowController.swift */; };
|
||||
97D452BC1D16FF010033666F /* RecentSearchCVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D452BB1D16FF010033666F /* RecentSearchCVC.swift */; };
|
||||
97D452BE1D1723FF0033666F /* CollectionViewCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D452BD1D1723FF0033666F /* CollectionViewCells.swift */; };
|
||||
97D55EF61D2075180081B523 /* TableOfContentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D55EF51D2075180081B523 /* TableOfContentController.swift */; };
|
||||
97DF23551CE807A1003E1E5A /* GlobalOperationQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97DF23541CE807A1003E1E5A /* GlobalOperationQueue.swift */; };
|
||||
97E609F11D103DED00EBCB9D /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97E609F01D103DED00EBCB9D /* NotificationCenter.framework */; };
|
||||
97E609F41D103DED00EBCB9D /* TodayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97E609F31D103DED00EBCB9D /* TodayViewController.swift */; };
|
||||
@ -407,8 +407,7 @@
|
||||
971A105F1D022DF2007FC62C /* LanguageTBVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LanguageTBVC.swift; path = "Kiwix-iOS/Controller/LanguageTBVC.swift"; sourceTree = SOURCE_ROOT; };
|
||||
971A10611D022E0A007FC62C /* MainVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MainVC.swift; path = "Kiwix-iOS/Controller/MainVC.swift"; sourceTree = SOURCE_ROOT; };
|
||||
971A10621D022E0A007FC62C /* MainVCLoading.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MainVCLoading.swift; path = "Kiwix-iOS/Controller/MainVCLoading.swift"; sourceTree = SOURCE_ROOT; };
|
||||
971A10631D022E0A007FC62C /* MainVCOtherD.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MainVCOtherD.swift; path = "Kiwix-iOS/Controller/MainVCOtherD.swift"; sourceTree = SOURCE_ROOT; };
|
||||
971A10641D022E0A007FC62C /* MainVCWebViewD.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MainVCWebViewD.swift; path = "Kiwix-iOS/Controller/MainVCWebViewD.swift"; sourceTree = SOURCE_ROOT; };
|
||||
971A10631D022E0A007FC62C /* MainVCDelegates.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MainVCDelegates.swift; path = "Kiwix-iOS/Controller/MainVCDelegates.swift"; sourceTree = SOURCE_ROOT; };
|
||||
971A10691D022E15007FC62C /* BookmarkHUDVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BookmarkHUDVC.swift; path = "Kiwix-iOS/Controller/BookmarkHUDVC.swift"; sourceTree = SOURCE_ROOT; };
|
||||
971A106B1D022E50007FC62C /* Utilities.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Utilities.swift; path = "Kiwix-iOS/Model/Utilities.swift"; sourceTree = SOURCE_ROOT; };
|
||||
971A106D1D022E62007FC62C /* DownloadProgress.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DownloadProgress.swift; path = "Kiwix-iOS/Model/DownloadProgress.swift"; sourceTree = SOURCE_ROOT; };
|
||||
@ -538,6 +537,7 @@
|
||||
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; };
|
||||
97DF23541CE807A1003E1E5A /* GlobalOperationQueue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlobalOperationQueue.swift; sourceTree = "<group>"; };
|
||||
97E609EF1D103DED00EBCB9D /* Kiwix-iOSWidget.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Kiwix-iOSWidget.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
97E609F01D103DED00EBCB9D /* NotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NotificationCenter.framework; path = System/Library/Frameworks/NotificationCenter.framework; sourceTree = SDKROOT; };
|
||||
@ -844,9 +844,7 @@
|
||||
children = (
|
||||
971A10611D022E0A007FC62C /* MainVC.swift */,
|
||||
971A10621D022E0A007FC62C /* MainVCLoading.swift */,
|
||||
971A10631D022E0A007FC62C /* MainVCOtherD.swift */,
|
||||
971A10641D022E0A007FC62C /* MainVCWebViewD.swift */,
|
||||
971A10691D022E15007FC62C /* BookmarkHUDVC.swift */,
|
||||
971A10631D022E0A007FC62C /* MainVCDelegates.swift */,
|
||||
);
|
||||
name = MainVC;
|
||||
sourceTree = "<group>";
|
||||
@ -1028,6 +1026,8 @@
|
||||
972B007D1C35DBAB00B5FDC5 /* MainVC */,
|
||||
97E108221C5D5A0D00E27FD3 /* Search */,
|
||||
9771DC4B1C37278E009ECFF0 /* Setting */,
|
||||
97D55EF51D2075180081B523 /* TableOfContentController.swift */,
|
||||
971A10691D022E15007FC62C /* BookmarkHUDVC.swift */,
|
||||
);
|
||||
name = Controllers;
|
||||
path = Kiwix;
|
||||
@ -1822,7 +1822,6 @@
|
||||
979CB6711D05C44F005E1BA1 /* SilentCondition.swift in Sources */,
|
||||
97D452BC1D16FF010033666F /* RecentSearchCVC.swift in Sources */,
|
||||
979CB6651D05C44F005E1BA1 /* NoCancelledDependencies.swift in Sources */,
|
||||
971A10681D022E0A007FC62C /* MainVCWebViewD.swift in Sources */,
|
||||
970103FB1C6824FA00DC48F6 /* RefreshLibraryOperation.swift in Sources */,
|
||||
971A10651D022E0A007FC62C /* MainVC.swift in Sources */,
|
||||
971A106F1D022E62007FC62C /* DownloadProgress.swift in Sources */,
|
||||
@ -1833,7 +1832,7 @@
|
||||
971A105A1D022DAD007FC62C /* LibraryLocalTBVC.swift in Sources */,
|
||||
97E60A021D10423A00EBCB9D /* ShadowView.swift in Sources */,
|
||||
979CB6BD1D05C520005E1BA1 /* Operation.swift in Sources */,
|
||||
971A10671D022E0A007FC62C /* MainVCOtherD.swift in Sources */,
|
||||
971A10671D022E0A007FC62C /* MainVCDelegates.swift in Sources */,
|
||||
978C58981C1CD86E0077AE47 /* Book.swift in Sources */,
|
||||
978C58961C1CD86E0077AE47 /* Language.swift in Sources */,
|
||||
971A10701D022E62007FC62C /* Network.swift in Sources */,
|
||||
@ -1886,6 +1885,7 @@
|
||||
979CB6B71D05C520005E1BA1 /* LocationOperation.swift in Sources */,
|
||||
971A102F1D022AD5007FC62C /* Logo.swift in Sources */,
|
||||
979CB6451D05C44F005E1BA1 /* Capability.swift in Sources */,
|
||||
97D55EF61D2075180081B523 /* TableOfContentController.swift in Sources */,
|
||||
971A104B1D022CBE007FC62C /* SearchScopeSelectVC.swift in Sources */,
|
||||
977998771C1E0B7900B1DD5E /* Article+CoreDataProperties.swift in Sources */,
|
||||
971187301CEB50FC00B9909D /* ZimReader.mm in Sources */,
|
||||
|
Loading…
x
Reference in New Issue
Block a user