diff --git a/Kiwix-iOS/Assets.xcassets/Wiki.imageset/Contents.json b/Kiwix-iOS/Assets.xcassets/Compass.imageset/Contents.json similarity index 87% rename from Kiwix-iOS/Assets.xcassets/Wiki.imageset/Contents.json rename to Kiwix-iOS/Assets.xcassets/Compass.imageset/Contents.json index bc080854..0a79bf16 100644 --- a/Kiwix-iOS/Assets.xcassets/Wiki.imageset/Contents.json +++ b/Kiwix-iOS/Assets.xcassets/Compass.imageset/Contents.json @@ -10,7 +10,7 @@ }, { "idiom" : "universal", - "filename" : "wikipedia5.png", + "filename" : "compass.png", "scale" : "3x" } ], diff --git a/Kiwix-iOS/Assets.xcassets/Compass.imageset/compass.png b/Kiwix-iOS/Assets.xcassets/Compass.imageset/compass.png new file mode 100644 index 00000000..eab29929 Binary files /dev/null and b/Kiwix-iOS/Assets.xcassets/Compass.imageset/compass.png differ diff --git a/Kiwix-iOS/Assets.xcassets/TableOfContent.imageset/Contents.json b/Kiwix-iOS/Assets.xcassets/TableOfContent.imageset/Contents.json index 0e99f802..0de111d9 100644 --- a/Kiwix-iOS/Assets.xcassets/TableOfContent.imageset/Contents.json +++ b/Kiwix-iOS/Assets.xcassets/TableOfContent.imageset/Contents.json @@ -10,7 +10,7 @@ }, { "idiom" : "universal", - "filename" : "list.png", + "filename" : "list-1.png", "scale" : "3x" } ], diff --git a/Kiwix-iOS/Assets.xcassets/TableOfContent.imageset/list-1.png b/Kiwix-iOS/Assets.xcassets/TableOfContent.imageset/list-1.png new file mode 100644 index 00000000..34a6fec4 Binary files /dev/null and b/Kiwix-iOS/Assets.xcassets/TableOfContent.imageset/list-1.png differ diff --git a/Kiwix-iOS/Assets.xcassets/TableOfContent.imageset/list.png b/Kiwix-iOS/Assets.xcassets/TableOfContent.imageset/list.png deleted file mode 100644 index f8c11399..00000000 Binary files a/Kiwix-iOS/Assets.xcassets/TableOfContent.imageset/list.png and /dev/null differ diff --git a/Kiwix-iOS/Assets.xcassets/Wiki.imageset/wikipedia5.png b/Kiwix-iOS/Assets.xcassets/Wiki.imageset/wikipedia5.png deleted file mode 100644 index 1be694eb..00000000 Binary files a/Kiwix-iOS/Assets.xcassets/Wiki.imageset/wikipedia5.png and /dev/null differ diff --git a/Kiwix-iOS/Controller/MainVC.swift b/Kiwix-iOS/Controller/MainVC.swift index a460db54..159cead6 100644 --- a/Kiwix-iOS/Controller/MainVC.swift +++ b/Kiwix-iOS/Controller/MainVC.swift @@ -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) } - } diff --git a/Kiwix-iOS/Controller/MainVCWebViewD.swift b/Kiwix-iOS/Controller/MainVCDelegates.swift similarity index 74% rename from Kiwix-iOS/Controller/MainVCWebViewD.swift rename to Kiwix-iOS/Controller/MainVCDelegates.swift index 2fe98bc1..b373bd09 100644 --- a/Kiwix-iOS/Controller/MainVCWebViewD.swift +++ b/Kiwix-iOS/Controller/MainVCDelegates.swift @@ -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 { } } } + } \ No newline at end of file diff --git a/Kiwix-iOS/Controller/MainVCLoading.swift b/Kiwix-iOS/Controller/MainVCLoading.swift index 8bbff0e5..36014c35 100644 --- a/Kiwix-iOS/Controller/MainVCLoading.swift +++ b/Kiwix-iOS/Controller/MainVCLoading.swift @@ -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} } } \ No newline at end of file diff --git a/Kiwix-iOS/Controller/MainVCOtherD.swift b/Kiwix-iOS/Controller/MainVCOtherD.swift deleted file mode 100644 index 483f1f9f..00000000 --- a/Kiwix-iOS/Controller/MainVCOtherD.swift +++ /dev/null @@ -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() - } -} \ No newline at end of file diff --git a/Kiwix-iOS/Controller/TableOfContentController.swift b/Kiwix-iOS/Controller/TableOfContentController.swift new file mode 100644 index 00000000..9fe0cda8 --- /dev/null +++ b/Kiwix-iOS/Controller/TableOfContentController.swift @@ -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 + } + +} diff --git a/Kiwix-iOS/Info.plist b/Kiwix-iOS/Info.plist index 59bdd77b..da711ed3 100644 --- a/Kiwix-iOS/Info.plist +++ b/Kiwix-iOS/Info.plist @@ -36,7 +36,7 @@ CFBundleSignature ???? CFBundleVersion - 706 + 745 ITSAppUsesNonExemptEncryption LSRequiresIPhoneOS diff --git a/Kiwix-iOS/Storyboard/Main.storyboard b/Kiwix-iOS/Storyboard/Main.storyboard index 54268e40..f1c86909 100644 --- a/Kiwix-iOS/Storyboard/Main.storyboard +++ b/Kiwix-iOS/Storyboard/Main.storyboard @@ -711,6 +711,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Kiwix.xcodeproj/project.pbxproj b/Kiwix.xcodeproj/project.pbxproj index 99dc6d56..740152d0 100644 --- a/Kiwix.xcodeproj/project.pbxproj +++ b/Kiwix.xcodeproj/project.pbxproj @@ -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 = ""; }; 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 = ""; @@ -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 */,