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 @@ - +