diff --git a/Kiwix-iOS/Controller/Main/MainController.swift b/Kiwix-iOS/Controller/Main/MainController.swift
index fb050180..fa41804b 100644
--- a/Kiwix-iOS/Controller/Main/MainController.swift
+++ b/Kiwix-iOS/Controller/Main/MainController.swift
@@ -19,7 +19,7 @@ class MainController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
- webView.loadRequest(URLRequest(url: URL(string: "about:blank")!))
+// webView.loadRequest(URLRequest(url: URL(string: "about:blank")!))
navigationItem.titleView = searchBar
searchBar.delegate = self
buttons.delegate = self
@@ -56,3 +56,49 @@ class MainController: UIViewController {
}
}
}
+
+class WebView: UIWebView {
+ var backList = [URL]()
+ var forwardList = [URL]()
+ var currentURL: URL?
+
+ override var canGoBack: Bool {
+ return backList.count > 0
+ }
+
+ override var canGoForward: Bool {
+ return forwardList.count > 0
+ }
+
+ override func goBack() {
+ guard let lastURL = backList.last, let currentURL = currentURL else {return}
+ backList.removeLast()
+ self.currentURL = lastURL
+ forwardList.insert(currentURL, at: 0)
+
+ let request = URLRequest(url: lastURL)
+ loadRequest(request)
+ }
+
+ override func goForward() {
+ guard let nextURL = forwardList.first, let currentURL = currentURL else {return}
+ backList.append(currentURL)
+ self.currentURL = nextURL
+ forwardList.removeFirst()
+
+ let request = URLRequest(url: nextURL)
+ loadRequest(request)
+ }
+
+ override func loadRequest(_ request: URLRequest) {
+ super.loadRequest(request)
+ guard let currentURL = currentURL, let requestURL = request.url else {
+ self.currentURL = request.url
+ return
+ }
+ guard currentURL != requestURL else {return}
+ backList.append(currentURL)
+ self.currentURL = requestURL
+ forwardList.removeAll()
+ }
+}
diff --git a/Kiwix-iOS/Controller/Main/MainDelegates.swift b/Kiwix-iOS/Controller/Main/MainDelegates.swift
index a830777e..68ca6a6f 100644
--- a/Kiwix-iOS/Controller/Main/MainDelegates.swift
+++ b/Kiwix-iOS/Controller/Main/MainDelegates.swift
@@ -95,11 +95,11 @@ extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate {
present(controller, animated: true, completion: nil)
return false
}
+ navigationList.webViewStartLoading(requestURL: url)
return true
}
func webViewDidStartLoad(_ webView: UIWebView) {
-
}
func webViewDidFinishLoad(_ webView: UIWebView) {
@@ -107,8 +107,8 @@ extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate {
guard let title = JS.getTitle(from: webView) else {return}
searchBar.title = title
- buttons.back.tintColor = webView.canGoBack ? nil : UIColor.gray
- buttons.forward.tintColor = webView.canGoForward ? nil : UIColor.gray
+ buttons.back.tintColor = navigationList.canGoBack ? nil : UIColor.gray
+ buttons.forward.tintColor = navigationList.canGoForward ? nil : UIColor.gray
}
func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
@@ -128,11 +128,11 @@ extension MainController {
extension MainController: ButtonDelegates, SearchContainerDelegate {
func didTapBackButton() {
- webView.goBack()
+ navigationList.goBack(webView: webView)
}
func didTapForwardButton() {
- webView.goForward()
+ navigationList.goForward(webView: webView)
}
func didTapBookmarkButton() {
diff --git a/Kiwix-iOS/Controller/Main/NavigationList.swift b/Kiwix-iOS/Controller/Main/NavigationList.swift
index 770397a5..fcc7db36 100644
--- a/Kiwix-iOS/Controller/Main/NavigationList.swift
+++ b/Kiwix-iOS/Controller/Main/NavigationList.swift
@@ -13,24 +13,44 @@ class NavigationList {
var forwardList = [URL]()
var currentURL: URL?
- func webViewFinishedLoading(url: URL) {
- guard url != currentURL else { return }
+ 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()
}
- func goBack() {
+ func goBack(webView: UIWebView) {
+ guard let lastURL = backList.last, let currentURL = currentURL else {return}
+ backList.removeLast()
+ self.currentURL = lastURL
+ forwardList.insert(currentURL, at: 0)
+ let request = URLRequest(url: lastURL)
+ webView.loadRequest(request)
}
- func goForward() {
+ func goForward(webView: UIWebView) {
+ guard let nextURL = forwardList.first, let currentURL = currentURL else {return}
+ backList.append(currentURL)
+ self.currentURL = nextURL
+ forwardList.removeFirst()
+ let request = URLRequest(url: nextURL)
+ webView.loadRequest(request)
}
var canGoBack: Bool {
- return false
+ return backList.count > 0
}
var canGoForward: Bool {
- return false
+ return forwardList.count > 0
}
}
diff --git a/Kiwix-iOS/Info.plist b/Kiwix-iOS/Info.plist
index b5054fe7..509f9d2b 100644
--- a/Kiwix-iOS/Info.plist
+++ b/Kiwix-iOS/Info.plist
@@ -49,7 +49,7 @@
CFBundleVersion
- 1.8.3001
+ 1.8.3037
ITSAppUsesNonExemptEncryption
LSRequiresIPhoneOS
diff --git a/Kiwix-iOS/Storyboard/Main.storyboard b/Kiwix-iOS/Storyboard/Main.storyboard
index 3bc55f32..ce895f10 100644
--- a/Kiwix-iOS/Storyboard/Main.storyboard
+++ b/Kiwix-iOS/Storyboard/Main.storyboard
@@ -30,7 +30,7 @@
-
+