mirror of
https://github.com/kiwix/kiwix-apple.git
synced 2025-09-24 04:03:03 -04:00
Table of contents
This commit is contained in:
parent
9f5e12f54d
commit
2dbaad1d9a
@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"filename" : "wikipedia5.png",
|
"filename" : "compass.png",
|
||||||
"scale" : "3x"
|
"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",
|
"idiom" : "universal",
|
||||||
"filename" : "list.png",
|
"filename" : "list-1.png",
|
||||||
"scale" : "3x"
|
"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
|
// Kiwix
|
||||||
//
|
//
|
||||||
// Created by Chris Li on 1/22/16.
|
// Created by Chris Li on 1/22/16.
|
||||||
@ -11,9 +11,10 @@ import UIKit
|
|||||||
class MainVC: UIViewController {
|
class MainVC: UIViewController {
|
||||||
|
|
||||||
@IBOutlet weak var webView: UIWebView!
|
@IBOutlet weak var webView: UIWebView!
|
||||||
var bookmarkVC: UIViewController?
|
var tableOfContentController: TableOfContentController?
|
||||||
var libraryVC: UIViewController?
|
var bookmarkController: UIViewController?
|
||||||
var settingVC: UIViewController?
|
var libraryController: UIViewController?
|
||||||
|
var settingController: UIViewController?
|
||||||
var searchVC: SearchVC?
|
var searchVC: SearchVC?
|
||||||
let searchBar = SearchBar()
|
let searchBar = SearchBar()
|
||||||
|
|
||||||
@ -53,15 +54,18 @@ class MainVC: UIViewController {
|
|||||||
|
|
||||||
override func didReceiveMemoryWarning() {
|
override func didReceiveMemoryWarning() {
|
||||||
super.didReceiveMemoryWarning()
|
super.didReceiveMemoryWarning()
|
||||||
bookmarkVC = nil
|
tableOfContentController = nil
|
||||||
libraryVC = nil
|
bookmarkController = nil
|
||||||
settingVC = nil
|
libraryController = nil
|
||||||
|
settingController = nil
|
||||||
searchVC = nil
|
searchVC = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
|
override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
|
||||||
super.traitCollectionDidChange(previousTraitCollection)
|
super.traitCollectionDidChange(previousTraitCollection)
|
||||||
configureUIElements(self.traitCollection)
|
if previousTraitCollection?.horizontalSizeClass != traitCollection.horizontalSizeClass {
|
||||||
|
configureUIElements(traitCollection.horizontalSizeClass)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - First Time Launch Alert
|
// MARK: - First Time Launch Alert
|
||||||
@ -75,19 +79,19 @@ class MainVC: UIViewController {
|
|||||||
|
|
||||||
// MARK: - Configure
|
// MARK: - Configure
|
||||||
|
|
||||||
func configureUIElements(traitCollection: UITraitCollection) {
|
func configureUIElements(horizontalSizeClass: UIUserInterfaceSizeClass) {
|
||||||
switch traitCollection.horizontalSizeClass {
|
switch horizontalSizeClass {
|
||||||
case .Regular:
|
case .Regular:
|
||||||
navigationController?.toolbarHidden = true
|
navigationController?.toolbarHidden = true
|
||||||
toolbarItems?.removeAll()
|
toolbarItems?.removeAll()
|
||||||
navigationItem.leftBarButtonItems = [navigateLeftButton, navigateRightButton, blankButton]
|
navigationItem.leftBarButtonItems = [navigateLeftButton, navigateRightButton, tableOfContentButton]
|
||||||
navigationItem.rightBarButtonItems = [settingButton, libraryButton, bookmarkButton]
|
navigationItem.rightBarButtonItems = [settingButton, libraryButton, bookmarkButton]
|
||||||
case .Compact:
|
case .Compact:
|
||||||
if !searchBar.isFirstResponder() {navigationController?.toolbarHidden = false}
|
if !searchBar.isFirstResponder() {navigationController?.toolbarHidden = false}
|
||||||
navigationItem.leftBarButtonItems?.removeAll()
|
navigationItem.leftBarButtonItems?.removeAll()
|
||||||
navigationItem.rightBarButtonItems?.removeAll()
|
navigationItem.rightBarButtonItems?.removeAll()
|
||||||
let spaceButton = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
|
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() {
|
if UIDevice.currentDevice().userInterfaceIdiom == .Pad && searchBar.isFirstResponder() {
|
||||||
navigationItem.setRightBarButtonItem(cancelButton, animated: true)
|
navigationItem.setRightBarButtonItem(cancelButton, animated: true)
|
||||||
}
|
}
|
||||||
@ -99,6 +103,7 @@ class MainVC: UIViewController {
|
|||||||
|
|
||||||
func configureButtonColor() {
|
func configureButtonColor() {
|
||||||
configureNavigationButtonTint()
|
configureNavigationButtonTint()
|
||||||
|
tableOfContentButton.tintColor = UIColor.grayColor()
|
||||||
libraryButton.tintColor = UIColor.grayColor()
|
libraryButton.tintColor = UIColor.grayColor()
|
||||||
settingButton.tintColor = UIColor.grayColor()
|
settingButton.tintColor = UIColor.grayColor()
|
||||||
UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).tintColor = UIColor.themeColor
|
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 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 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 bookmarkButton: LPTBarButtonItem = LPTBarButtonItem(imageName: "Star", highlightedImageName: "StarHighlighted", delegate: self)
|
||||||
lazy var libraryButton: UIBarButtonItem = UIBarButtonItem(imageNamed: "Library", target: self, action: #selector(MainVC.showLibraryButtonTapped))
|
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 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))
|
lazy var cancelButton: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Cancel, target: self, action: #selector(MainVC.cancelButtonTapped))
|
||||||
|
|
||||||
// MARK: - Actions
|
// MARK: - Actions
|
||||||
@ -214,19 +219,26 @@ class MainVC: UIViewController {
|
|||||||
webView.goForward()
|
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() {
|
func showLibraryButtonTapped() {
|
||||||
guard let viewController = libraryVC ?? UIStoryboard.library.instantiateInitialViewController() else {return}
|
guard let viewController = libraryController ?? UIStoryboard.library.instantiateInitialViewController() else {return}
|
||||||
//let viewController = UITabBarController()
|
|
||||||
//viewController.viewControllers = [UITableViewController(), UITableViewController(), UITableViewController()]
|
|
||||||
viewController.modalPresentationStyle = .FormSheet
|
viewController.modalPresentationStyle = .FormSheet
|
||||||
libraryVC = viewController
|
libraryController = viewController
|
||||||
presentViewController(viewController, animated: true, completion: nil)
|
presentViewController(viewController, animated: true, completion: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func showSettingButtonTapped() {
|
func showSettingButtonTapped() {
|
||||||
guard let viewController = settingVC ?? UIStoryboard.setting.instantiateInitialViewController() else {return}
|
guard let viewController = settingController ?? UIStoryboard.setting.instantiateInitialViewController() else {return}
|
||||||
viewController.modalPresentationStyle = .FormSheet
|
viewController.modalPresentationStyle = .FormSheet
|
||||||
settingVC = viewController
|
settingController = viewController
|
||||||
presentViewController(viewController, animated: true, completion: nil)
|
presentViewController(viewController, animated: true, completion: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,5 +246,4 @@ class MainVC: UIViewController {
|
|||||||
hideSearch()
|
hideSearch()
|
||||||
navigationItem.setRightBarButtonItem(nil, animated: true)
|
navigationItem.setRightBarButtonItem(nil, animated: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// MainVCWebViewD.swift
|
// MainVCOtherD.swift
|
||||||
// Kiwix
|
// Kiwix
|
||||||
//
|
//
|
||||||
// Created by Chris Li on 1/22/16.
|
// Created by Chris Li on 1/22/16.
|
||||||
@ -8,7 +8,54 @@
|
|||||||
|
|
||||||
import UIKit
|
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
|
// MARK: - UIWebViewDelegate
|
||||||
|
|
||||||
@ -132,4 +179,5 @@ extension MainVC: UIWebViewDelegate, UIScrollViewDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -29,10 +29,34 @@ extension MainVC {
|
|||||||
// MARK: - JS
|
// MARK: - JS
|
||||||
|
|
||||||
func getTOC(webView: UIWebView) {
|
func getTOC(webView: UIWebView) {
|
||||||
guard let context = webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") as? JSContext else {return}
|
guard let context = webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") as? JSContext,
|
||||||
guard let path = NSBundle.mainBundle().pathForResource("getTableOfContents", ofType: "js") else {return}
|
let path = NSBundle.mainBundle().pathForResource("getTableOfContents", ofType: "js"),
|
||||||
guard let jString = Utilities.contentOfFileAtPath(path) else {return}
|
let jString = Utilities.contentOfFileAtPath(path),
|
||||||
let value: JSValue = context.evaluateScript(jString)
|
let elements = context.evaluateScript(jString).toArray() as? [[String: String]] else {return}
|
||||||
print(value.toArray())
|
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>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>706</string>
|
<string>745</string>
|
||||||
<key>ITSAppUsesNonExemptEncryption</key>
|
<key>ITSAppUsesNonExemptEncryption</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>LSRequiresIPhoneOS</key>
|
<key>LSRequiresIPhoneOS</key>
|
||||||
|
@ -711,6 +711,34 @@
|
|||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="2607" y="433"/>
|
<point key="canvasLocation" x="2607" y="433"/>
|
||||||
</scene>
|
</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-->
|
<!--MainVC-->
|
||||||
<scene sceneID="WWO-2R-Y9G">
|
<scene sceneID="WWO-2R-Y9G">
|
||||||
<objects>
|
<objects>
|
||||||
|
@ -94,8 +94,7 @@
|
|||||||
971A10601D022DF2007FC62C /* LanguageTBVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A105F1D022DF2007FC62C /* LanguageTBVC.swift */; };
|
971A10601D022DF2007FC62C /* LanguageTBVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A105F1D022DF2007FC62C /* LanguageTBVC.swift */; };
|
||||||
971A10651D022E0A007FC62C /* MainVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10611D022E0A007FC62C /* MainVC.swift */; };
|
971A10651D022E0A007FC62C /* MainVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10611D022E0A007FC62C /* MainVC.swift */; };
|
||||||
971A10661D022E0A007FC62C /* MainVCLoading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10621D022E0A007FC62C /* MainVCLoading.swift */; };
|
971A10661D022E0A007FC62C /* MainVCLoading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10621D022E0A007FC62C /* MainVCLoading.swift */; };
|
||||||
971A10671D022E0A007FC62C /* MainVCOtherD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10631D022E0A007FC62C /* MainVCOtherD.swift */; };
|
971A10671D022E0A007FC62C /* MainVCDelegates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10631D022E0A007FC62C /* MainVCDelegates.swift */; };
|
||||||
971A10681D022E0A007FC62C /* MainVCWebViewD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10641D022E0A007FC62C /* MainVCWebViewD.swift */; };
|
|
||||||
971A106A1D022E15007FC62C /* BookmarkHUDVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10691D022E15007FC62C /* BookmarkHUDVC.swift */; };
|
971A106A1D022E15007FC62C /* BookmarkHUDVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A10691D022E15007FC62C /* BookmarkHUDVC.swift */; };
|
||||||
971A106C1D022E50007FC62C /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A106B1D022E50007FC62C /* Utilities.swift */; };
|
971A106C1D022E50007FC62C /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A106B1D022E50007FC62C /* Utilities.swift */; };
|
||||||
971A106F1D022E62007FC62C /* DownloadProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 971A106D1D022E62007FC62C /* DownloadProgress.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 */; };
|
97BA32A51CEBC36300339A47 /* RootWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97BA32A31CEBC29500339A47 /* RootWindowController.swift */; };
|
||||||
97D452BC1D16FF010033666F /* RecentSearchCVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D452BB1D16FF010033666F /* RecentSearchCVC.swift */; };
|
97D452BC1D16FF010033666F /* RecentSearchCVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D452BB1D16FF010033666F /* RecentSearchCVC.swift */; };
|
||||||
97D452BE1D1723FF0033666F /* CollectionViewCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D452BD1D1723FF0033666F /* CollectionViewCells.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 */; };
|
97DF23551CE807A1003E1E5A /* GlobalOperationQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97DF23541CE807A1003E1E5A /* GlobalOperationQueue.swift */; };
|
||||||
97E609F11D103DED00EBCB9D /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97E609F01D103DED00EBCB9D /* NotificationCenter.framework */; };
|
97E609F11D103DED00EBCB9D /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97E609F01D103DED00EBCB9D /* NotificationCenter.framework */; };
|
||||||
97E609F41D103DED00EBCB9D /* TodayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97E609F31D103DED00EBCB9D /* TodayViewController.swift */; };
|
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; };
|
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; };
|
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; };
|
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; };
|
971A10631D022E0A007FC62C /* MainVCDelegates.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MainVCDelegates.swift; path = "Kiwix-iOS/Controller/MainVCDelegates.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; };
|
|
||||||
971A10691D022E15007FC62C /* BookmarkHUDVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BookmarkHUDVC.swift; path = "Kiwix-iOS/Controller/BookmarkHUDVC.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; };
|
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; };
|
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; };
|
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; };
|
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; };
|
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>"; };
|
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; };
|
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; };
|
97E609F01D103DED00EBCB9D /* NotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NotificationCenter.framework; path = System/Library/Frameworks/NotificationCenter.framework; sourceTree = SDKROOT; };
|
||||||
@ -844,9 +844,7 @@
|
|||||||
children = (
|
children = (
|
||||||
971A10611D022E0A007FC62C /* MainVC.swift */,
|
971A10611D022E0A007FC62C /* MainVC.swift */,
|
||||||
971A10621D022E0A007FC62C /* MainVCLoading.swift */,
|
971A10621D022E0A007FC62C /* MainVCLoading.swift */,
|
||||||
971A10631D022E0A007FC62C /* MainVCOtherD.swift */,
|
971A10631D022E0A007FC62C /* MainVCDelegates.swift */,
|
||||||
971A10641D022E0A007FC62C /* MainVCWebViewD.swift */,
|
|
||||||
971A10691D022E15007FC62C /* BookmarkHUDVC.swift */,
|
|
||||||
);
|
);
|
||||||
name = MainVC;
|
name = MainVC;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -1028,6 +1026,8 @@
|
|||||||
972B007D1C35DBAB00B5FDC5 /* MainVC */,
|
972B007D1C35DBAB00B5FDC5 /* MainVC */,
|
||||||
97E108221C5D5A0D00E27FD3 /* Search */,
|
97E108221C5D5A0D00E27FD3 /* Search */,
|
||||||
9771DC4B1C37278E009ECFF0 /* Setting */,
|
9771DC4B1C37278E009ECFF0 /* Setting */,
|
||||||
|
97D55EF51D2075180081B523 /* TableOfContentController.swift */,
|
||||||
|
971A10691D022E15007FC62C /* BookmarkHUDVC.swift */,
|
||||||
);
|
);
|
||||||
name = Controllers;
|
name = Controllers;
|
||||||
path = Kiwix;
|
path = Kiwix;
|
||||||
@ -1822,7 +1822,6 @@
|
|||||||
979CB6711D05C44F005E1BA1 /* SilentCondition.swift in Sources */,
|
979CB6711D05C44F005E1BA1 /* SilentCondition.swift in Sources */,
|
||||||
97D452BC1D16FF010033666F /* RecentSearchCVC.swift in Sources */,
|
97D452BC1D16FF010033666F /* RecentSearchCVC.swift in Sources */,
|
||||||
979CB6651D05C44F005E1BA1 /* NoCancelledDependencies.swift in Sources */,
|
979CB6651D05C44F005E1BA1 /* NoCancelledDependencies.swift in Sources */,
|
||||||
971A10681D022E0A007FC62C /* MainVCWebViewD.swift in Sources */,
|
|
||||||
970103FB1C6824FA00DC48F6 /* RefreshLibraryOperation.swift in Sources */,
|
970103FB1C6824FA00DC48F6 /* RefreshLibraryOperation.swift in Sources */,
|
||||||
971A10651D022E0A007FC62C /* MainVC.swift in Sources */,
|
971A10651D022E0A007FC62C /* MainVC.swift in Sources */,
|
||||||
971A106F1D022E62007FC62C /* DownloadProgress.swift in Sources */,
|
971A106F1D022E62007FC62C /* DownloadProgress.swift in Sources */,
|
||||||
@ -1833,7 +1832,7 @@
|
|||||||
971A105A1D022DAD007FC62C /* LibraryLocalTBVC.swift in Sources */,
|
971A105A1D022DAD007FC62C /* LibraryLocalTBVC.swift in Sources */,
|
||||||
97E60A021D10423A00EBCB9D /* ShadowView.swift in Sources */,
|
97E60A021D10423A00EBCB9D /* ShadowView.swift in Sources */,
|
||||||
979CB6BD1D05C520005E1BA1 /* Operation.swift in Sources */,
|
979CB6BD1D05C520005E1BA1 /* Operation.swift in Sources */,
|
||||||
971A10671D022E0A007FC62C /* MainVCOtherD.swift in Sources */,
|
971A10671D022E0A007FC62C /* MainVCDelegates.swift in Sources */,
|
||||||
978C58981C1CD86E0077AE47 /* Book.swift in Sources */,
|
978C58981C1CD86E0077AE47 /* Book.swift in Sources */,
|
||||||
978C58961C1CD86E0077AE47 /* Language.swift in Sources */,
|
978C58961C1CD86E0077AE47 /* Language.swift in Sources */,
|
||||||
971A10701D022E62007FC62C /* Network.swift in Sources */,
|
971A10701D022E62007FC62C /* Network.swift in Sources */,
|
||||||
@ -1886,6 +1885,7 @@
|
|||||||
979CB6B71D05C520005E1BA1 /* LocationOperation.swift in Sources */,
|
979CB6B71D05C520005E1BA1 /* LocationOperation.swift in Sources */,
|
||||||
971A102F1D022AD5007FC62C /* Logo.swift in Sources */,
|
971A102F1D022AD5007FC62C /* Logo.swift in Sources */,
|
||||||
979CB6451D05C44F005E1BA1 /* Capability.swift in Sources */,
|
979CB6451D05C44F005E1BA1 /* Capability.swift in Sources */,
|
||||||
|
97D55EF61D2075180081B523 /* TableOfContentController.swift in Sources */,
|
||||||
971A104B1D022CBE007FC62C /* SearchScopeSelectVC.swift in Sources */,
|
971A104B1D022CBE007FC62C /* SearchScopeSelectVC.swift in Sources */,
|
||||||
977998771C1E0B7900B1DD5E /* Article+CoreDataProperties.swift in Sources */,
|
977998771C1E0B7900B1DD5E /* Article+CoreDataProperties.swift in Sources */,
|
||||||
971187301CEB50FC00B9909D /* ZimReader.mm in Sources */,
|
971187301CEB50FC00B9909D /* ZimReader.mm in Sources */,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user