diff --git a/Kiwix-iOS/Controller/Main/Buttons.swift b/Kiwix-iOS/Controller/Main/Buttons.swift
index f302a9d7..51f6fdc7 100644
--- a/Kiwix-iOS/Controller/Main/Buttons.swift
+++ b/Kiwix-iOS/Controller/Main/Buttons.swift
@@ -75,9 +75,9 @@ class Buttons {
guard let view = recognizer.view, recognizer.state == .began else {return}
switch view.tag {
case 0:
- print("left long tapped")
+ delegate?.didLongPressBackButton()
case 1:
- print("right long tapped")
+ delegate?.didLongPressForwardButton()
case 3:
delegate?.didLongPressBookmarkButton()
default:
@@ -93,17 +93,38 @@ protocol ButtonDelegates {
func didTapLibraryButton()
func didTapCancelButton()
+ func didLongPressBackButton()
+ func didLongPressForwardButton()
func didLongPressBookmarkButton()
}
class GrayBarButtonItem: UIBarButtonItem {
override init() {
super.init()
+ print(value(forKey: "view") as? UIView)
tintColor = UIColor.gray
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
+ print(value(forKey: "view") as? UIView)
tintColor = UIColor.gray
}
+
+}
+
+class BarButton: UIBarButtonItem {
+ private(set) var type = BarButtonType.blank
+ convenience init(type: BarButtonType) {
+ let button = UIButton()
+ button.setImage(<#T##image: UIImage?##UIImage?#>, for: <#T##UIControlState#>)
+ self.init(customView: button)
+ self.type = type
+ }
+}
+
+enum BarButtonType {
+ case back, forward
+ case tableOfContent, bookmark, library, setting
+ case blank
}
diff --git a/Kiwix-iOS/Controller/Main/Controllers.swift b/Kiwix-iOS/Controller/Main/Controllers.swift
index caabf597..af7663cf 100644
--- a/Kiwix-iOS/Controller/Main/Controllers.swift
+++ b/Kiwix-iOS/Controller/Main/Controllers.swift
@@ -25,8 +25,13 @@ class Controllers {
return (UIApplication.appDelegate.window?.rootViewController as! UINavigationController).topViewController as! MainController
}
-// // MARK: - Bookmark
-//
+ // MARK: - NavigationList
+
+ private(set) lazy var navigationList = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NavigationListController") as! NavigationListController
+
+
+ // MARK: - Bookmark
+//
// private var bookmark: UINavigationController?
//
// class var bookmark: UINavigationController {
diff --git a/Kiwix-iOS/Controller/Main/MainDelegates.swift b/Kiwix-iOS/Controller/Main/MainDelegates.swift
index 68ca6a6f..d4599bcd 100644
--- a/Kiwix-iOS/Controller/Main/MainDelegates.swift
+++ b/Kiwix-iOS/Controller/Main/MainDelegates.swift
@@ -107,8 +107,8 @@ extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate {
guard let title = JS.getTitle(from: webView) else {return}
searchBar.title = title
- buttons.back.tintColor = navigationList.canGoBack ? nil : UIColor.gray
- buttons.forward.tintColor = navigationList.canGoForward ? nil : UIColor.gray
+// buttons.back.tintColor = navigationList.canGoBack ? nil : UIColor.gray
+// buttons.forward.tintColor = navigationList.canGoForward ? nil : UIColor.gray
}
func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
@@ -147,6 +147,20 @@ extension MainController: ButtonDelegates, SearchContainerDelegate {
_ = searchBar.resignFirstResponder()
}
+ func didLongPressBackButton() {
+ let controller = controllers.navigationList
+ controller.urls = navigationList.backList
+ let nav = UINavigationController(rootViewController: controller)
+ present(nav, animated: true, completion: nil)
+ }
+
+ func didLongPressForwardButton() {
+ let controller = controllers.navigationList
+ controller.urls = navigationList.forwardList
+ let nav = UINavigationController(rootViewController: controller)
+ present(nav, animated: true, completion: nil)
+ }
+
func didLongPressBookmarkButton() {
showBookmarkHUD()
}
diff --git a/Kiwix-iOS/Controller/Main/NavigationList.swift b/Kiwix-iOS/Controller/Main/NavigationList.swift
index fcc7db36..b37cab36 100644
--- a/Kiwix-iOS/Controller/Main/NavigationList.swift
+++ b/Kiwix-iOS/Controller/Main/NavigationList.swift
@@ -9,48 +9,70 @@
import UIKit
class NavigationList {
- var backList = [URL]()
- var forwardList = [URL]()
- var currentURL: URL?
+ private var urls = [URL]()
+ private var currentIndex: Int?
+
+ var currentURL: URL? {
+ guard let currentIndex = currentIndex else {return nil}
+ return urls.indices.contains(currentIndex) ? urls[currentIndex] : nil
+ }
func webViewStartLoading(requestURL: URL) {
- guard let currentURL = currentURL else {
- self.currentURL = requestURL
- return
- }
-
guard currentURL != requestURL else {return}
- backList.append(currentURL)
- self.currentURL = requestURL
- forwardList.removeAll()
+
+ if let index = currentIndex {
+ urls.removeLast(urls.count - index - 1)
+ urls.append(requestURL)
+ self.currentIndex = index + 1
+ } else {
+ urls.append(requestURL)
+ self.currentIndex = 0
+ }
}
- func goBack(webView: UIWebView) {
- guard let lastURL = backList.last, let currentURL = currentURL else {return}
- backList.removeLast()
- self.currentURL = lastURL
- forwardList.insert(currentURL, at: 0)
+ func goBack(webView: UIWebView, backListIndex: Int = 0) {
+ guard let currentIndex = currentIndex else {return}
+ let index = currentIndex - 1 - backListIndex
+ guard index >= 0 else {return}
+ self.currentIndex = index
- let request = URLRequest(url: lastURL)
+ guard let url = currentURL else {return}
+ let request = URLRequest(url: url)
webView.loadRequest(request)
}
- func goForward(webView: UIWebView) {
- guard let nextURL = forwardList.first, let currentURL = currentURL else {return}
- backList.append(currentURL)
- self.currentURL = nextURL
- forwardList.removeFirst()
+ func goForward(webView: UIWebView, forwardListIndex: Int = 0) {
+ guard let currentIndex = currentIndex else {return}
+ let index = currentIndex + 1 + forwardListIndex
+ guard index <= urls.count - 1 else {return}
+ self.currentIndex = index
- let request = URLRequest(url: nextURL)
+ guard let url = currentURL else {return}
+ let request = URLRequest(url: url)
webView.loadRequest(request)
}
+ var backList: [URL] {
+ guard let currentIndex = currentIndex else {return [URL]()}
+ return Array(urls.prefix(currentIndex))
+ }
+
+ var forwardList: [URL] {
+ guard let currentIndex = currentIndex else {return [URL]()}
+ return Array(urls.suffix(urls.count - currentIndex - 1))
+ }
+
var canGoBack: Bool {
- return backList.count > 0
+ guard let currentIndex = currentIndex else {return false}
+ return currentIndex >= 1 && urls.indices.contains(currentIndex - 1)
}
var canGoForward: Bool {
- return forwardList.count > 0
+ guard let currentIndex = currentIndex else {return false}
+ return currentIndex >= 0 && urls.indices.contains(currentIndex + 1)
}
-
+}
+
+enum NavigationListType {
+ case Back, Forward
}
diff --git a/Kiwix-iOS/Controller/Main/NavigationListController.swift b/Kiwix-iOS/Controller/Main/NavigationListController.swift
new file mode 100644
index 00000000..552963db
--- /dev/null
+++ b/Kiwix-iOS/Controller/Main/NavigationListController.swift
@@ -0,0 +1,47 @@
+//
+// NavigationListController.swift
+// Kiwix
+//
+// Created by Chris Li on 11/21/16.
+// Copyright © 2016 Chris Li. All rights reserved.
+//
+
+import UIKit
+
+class NavigationListController: UITableViewController {
+
+ var type: NavigationListType?
+ var urls = [URL]() {
+ didSet {
+ tableView.reloadData()
+ }
+ }
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+ navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: self, action: #selector(dismiss(sender:)))
+ }
+
+ func dismiss(sender: UIBarButtonItem) {
+ dismiss(animated: true, completion: nil)
+ }
+
+ // MARK: - Table view data source
+
+ override func numberOfSections(in tableView: UITableView) -> Int {
+ return 1
+ }
+
+ override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+ return urls.count
+ }
+
+ override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+ let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
+
+ let url = urls[indexPath.row]
+ cell.textLabel?.text = url.lastPathComponent
+
+ return cell
+ }
+}
diff --git a/Kiwix-iOS/Info.plist b/Kiwix-iOS/Info.plist
index 509f9d2b..97418a86 100644
--- a/Kiwix-iOS/Info.plist
+++ b/Kiwix-iOS/Info.plist
@@ -49,7 +49,7 @@
CFBundleVersion
- 1.8.3037
+ 1.8.3101
ITSAppUsesNonExemptEncryption
LSRequiresIPhoneOS
diff --git a/Kiwix-iOS/Storyboard/Main.storyboard b/Kiwix-iOS/Storyboard/Main.storyboard
index ce895f10..6bfc8a7a 100644
--- a/Kiwix-iOS/Storyboard/Main.storyboard
+++ b/Kiwix-iOS/Storyboard/Main.storyboard
@@ -10,6 +10,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Kiwix-iOSWidgets/Bookmarks/Info.plist b/Kiwix-iOSWidgets/Bookmarks/Info.plist
index 8b527467..00499442 100644
--- a/Kiwix-iOSWidgets/Bookmarks/Info.plist
+++ b/Kiwix-iOSWidgets/Bookmarks/Info.plist
@@ -21,7 +21,7 @@
CFBundleSignature
????
CFBundleVersion
- 1.8.3037
+ 1.8.3101
NSExtension
NSExtensionMainStoryboard
diff --git a/Kiwix.xcodeproj/project.pbxproj b/Kiwix.xcodeproj/project.pbxproj
index fac189e3..8d8bfeb9 100644
--- a/Kiwix.xcodeproj/project.pbxproj
+++ b/Kiwix.xcodeproj/project.pbxproj
@@ -70,6 +70,7 @@
9764F5991D833F2B00E0B1C4 /* KiwixURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9764F5981D833F2B00E0B1C4 /* KiwixURL.swift */; };
976B86D81DDA0C7E00FA7FD1 /* SearchContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976B86D71DDA0C7E00FA7FD1 /* SearchContainer.swift */; };
9771A5BD1DD269BD005F1795 /* Book+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D6813C1D6F712800E5FA99 /* Book+CoreDataProperties.swift */; };
+ 977319801DE3AA3200111474 /* NavigationListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9773197F1DE3AA3200111474 /* NavigationListController.swift */; };
9779C3141D4575AD0064CC8E /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97E609F01D103DED00EBCB9D /* NotificationCenter.framework */; };
9779C3171D4575AE0064CC8E /* TodayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9779C3161D4575AE0064CC8E /* TodayViewController.swift */; };
9779C31E1D4575AE0064CC8E /* Bookmarks.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 9779C3131D4575AD0064CC8E /* Bookmarks.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
@@ -228,6 +229,7 @@
9764F5981D833F2B00E0B1C4 /* KiwixURL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KiwixURL.swift; sourceTree = ""; };
976A0C801D41619C0006A742 /* DZNEmptyDataSet.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DZNEmptyDataSet.framework; path = "../../../../Users/chrisli/Library/Developer/Xcode/DerivedData/Kiwix-ayxrfhaqnfxzendihdolvkklkmhk/Build/Products/Debug-iphoneos/DZNEmptyDataSet/DZNEmptyDataSet.framework"; sourceTree = ""; };
976B86D71DDA0C7E00FA7FD1 /* SearchContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchContainer.swift; sourceTree = ""; };
+ 9773197F1DE3AA3200111474 /* NavigationListController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NavigationListController.swift; sourceTree = ""; };
9779C3131D4575AD0064CC8E /* Bookmarks.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Bookmarks.appex; sourceTree = BUILT_PRODUCTS_DIR; };
9779C3161D4575AE0064CC8E /* TodayViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayViewController.swift; sourceTree = ""; };
9779C31B1D4575AE0064CC8E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
@@ -486,6 +488,7 @@
97BC0FC11DD92B62004BBAD1 /* Buttons.swift */,
97BC0FBD1DD90A65004BBAD1 /* JSInjection.swift */,
97362EE81DE1EADB004205B5 /* NavigationList.swift */,
+ 9773197F1DE3AA3200111474 /* NavigationListController.swift */,
972F81581DDC1B71008D7289 /* Controllers.swift */,
);
path = Main;
@@ -1179,6 +1182,7 @@
9764F5991D833F2B00E0B1C4 /* KiwixURL.swift in Sources */,
97A127CC1D777CF100FB204D /* SearchResultController.swift in Sources */,
9732079F1DD197F400EDD3DC /* CloudBooksController.swift in Sources */,
+ 977319801DE3AA3200111474 /* NavigationListController.swift in Sources */,
973208241DD217B600EDD3DC /* BookmarkHUD.swift in Sources */,
971A102F1D022AD5007FC62C /* Logo.swift in Sources */,
970E7F821DA0305000741290 /* TableOfContentsController.swift in Sources */,