mirror of
https://github.com/kiwix/kiwix-apple.git
synced 2025-09-28 22:43:55 -04:00
NavigationList
This commit is contained in:
parent
adbbc3350e
commit
3496d1e95d
@ -19,7 +19,7 @@ class MainController: UIViewController {
|
|||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
webView.loadRequest(URLRequest(url: URL(string: "about:blank")!))
|
// webView.loadRequest(URLRequest(url: URL(string: "about:blank")!))
|
||||||
navigationItem.titleView = searchBar
|
navigationItem.titleView = searchBar
|
||||||
searchBar.delegate = self
|
searchBar.delegate = self
|
||||||
buttons.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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -95,11 +95,11 @@ extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate {
|
|||||||
present(controller, animated: true, completion: nil)
|
present(controller, animated: true, completion: nil)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
navigationList.webViewStartLoading(requestURL: url)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func webViewDidStartLoad(_ webView: UIWebView) {
|
func webViewDidStartLoad(_ webView: UIWebView) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func webViewDidFinishLoad(_ webView: UIWebView) {
|
func webViewDidFinishLoad(_ webView: UIWebView) {
|
||||||
@ -107,8 +107,8 @@ extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate {
|
|||||||
guard let title = JS.getTitle(from: webView) else {return}
|
guard let title = JS.getTitle(from: webView) else {return}
|
||||||
searchBar.title = title
|
searchBar.title = title
|
||||||
|
|
||||||
buttons.back.tintColor = webView.canGoBack ? nil : UIColor.gray
|
buttons.back.tintColor = navigationList.canGoBack ? nil : UIColor.gray
|
||||||
buttons.forward.tintColor = webView.canGoForward ? nil : UIColor.gray
|
buttons.forward.tintColor = navigationList.canGoForward ? nil : UIColor.gray
|
||||||
}
|
}
|
||||||
|
|
||||||
func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
|
func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
|
||||||
@ -128,11 +128,11 @@ extension MainController {
|
|||||||
|
|
||||||
extension MainController: ButtonDelegates, SearchContainerDelegate {
|
extension MainController: ButtonDelegates, SearchContainerDelegate {
|
||||||
func didTapBackButton() {
|
func didTapBackButton() {
|
||||||
webView.goBack()
|
navigationList.goBack(webView: webView)
|
||||||
}
|
}
|
||||||
|
|
||||||
func didTapForwardButton() {
|
func didTapForwardButton() {
|
||||||
webView.goForward()
|
navigationList.goForward(webView: webView)
|
||||||
}
|
}
|
||||||
|
|
||||||
func didTapBookmarkButton() {
|
func didTapBookmarkButton() {
|
||||||
|
@ -13,24 +13,44 @@ class NavigationList {
|
|||||||
var forwardList = [URL]()
|
var forwardList = [URL]()
|
||||||
var currentURL: URL?
|
var currentURL: URL?
|
||||||
|
|
||||||
func webViewFinishedLoading(url: URL) {
|
func webViewStartLoading(requestURL: URL) {
|
||||||
guard url != currentURL else { return }
|
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 {
|
var canGoBack: Bool {
|
||||||
return false
|
return backList.count > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
var canGoForward: Bool {
|
var canGoForward: Bool {
|
||||||
return false
|
return forwardList.count > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1.8.3001</string>
|
<string>1.8.3037</string>
|
||||||
<key>ITSAppUsesNonExemptEncryption</key>
|
<key>ITSAppUsesNonExemptEncryption</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>LSRequiresIPhoneOS</key>
|
<key>LSRequiresIPhoneOS</key>
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
<rect key="frame" x="0.0" y="28" width="414" height="44"/>
|
<rect key="frame" x="0.0" y="28" width="414" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="DSn-3Y-Gs4" id="vq5-6x-vLY">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="DSn-3Y-Gs4" id="vq5-6x-vLY">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/>
|
<rect key="frame" x="0.0" y="0.0" width="414" height="43.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="xPq-dt-NK6">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="xPq-dt-NK6">
|
||||||
@ -52,7 +52,7 @@
|
|||||||
<rect key="frame" x="0.0" y="72" width="414" height="44"/>
|
<rect key="frame" x="0.0" y="72" width="414" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="au4-iz-tLz" id="3UD-lZ-hs0">
|
<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="414" height="43.666666666666664"/>
|
<rect key="frame" x="0.0" y="0.0" width="414" height="43.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="DJX-Kf-59M">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="DJX-Kf-59M">
|
||||||
@ -74,7 +74,7 @@
|
|||||||
<rect key="frame" x="0.0" y="116" width="414" height="44"/>
|
<rect key="frame" x="0.0" y="116" width="414" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="cam-ik-ZIw" id="ooG-35-3Wp">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="cam-ik-ZIw" id="ooG-35-3Wp">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="414" height="43.666666666666664"/>
|
<rect key="frame" x="0.0" y="0.0" width="414" height="43.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ry7-2s-QyS">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ry7-2s-QyS">
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1.8.3001</string>
|
<string>1.8.3037</string>
|
||||||
<key>NSExtension</key>
|
<key>NSExtension</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSExtensionMainStoryboard</key>
|
<key>NSExtensionMainStoryboard</key>
|
||||||
|
@ -43,21 +43,5 @@
|
|||||||
stopOnStyle = "0">
|
stopOnStyle = "0">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
</BreakpointProxy>
|
</BreakpointProxy>
|
||||||
<BreakpointProxy
|
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
|
||||||
<BreakpointContent
|
|
||||||
shouldBeEnabled = "Yes"
|
|
||||||
ignoreCount = "0"
|
|
||||||
continueAfterRunningActions = "No"
|
|
||||||
filePath = "Kiwix/Operations/ArticleOperation.swift"
|
|
||||||
timestampString = "501088031.696211"
|
|
||||||
startingColumnNumber = "9223372036854775807"
|
|
||||||
endingColumnNumber = "9223372036854775807"
|
|
||||||
startingLineNumber = "61"
|
|
||||||
endingLineNumber = "61"
|
|
||||||
landmarkName = "execute()"
|
|
||||||
landmarkType = "7">
|
|
||||||
</BreakpointContent>
|
|
||||||
</BreakpointProxy>
|
|
||||||
</Breakpoints>
|
</Breakpoints>
|
||||||
</Bucket>
|
</Bucket>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user