Skip to content

Commit b63a952

Browse files
committed
Implement "open file" delegate
1 parent 63cba93 commit b63a952

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

devdocs-macos/DocumentationViewController.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class DocumentationViewController: NSViewController {
1818
case ready
1919
}
2020

21+
weak var delegate: DocumentationViewDelegate?
2122
private var webView: WKWebView!
2223
private var searchCVC: SearchControlViewController?
2324

@@ -203,6 +204,11 @@ class DocumentationViewController: NSViewController {
203204
}
204205
}
205206

207+
protocol DocumentationViewDelegate: class {
208+
typealias OpenPanelParameters = WKOpenPanelParameters
209+
func selectFileToOpen(_ parameters: OpenPanelParameters, completionHandler: @escaping ([URL]?) -> Void)
210+
}
211+
206212
// MARK:- WKUIDelegate
207213
extension DocumentationViewController: WKUIDelegate {
208214
func webView(_ webView: WKWebView,
@@ -229,6 +235,13 @@ extension DocumentationViewController: WKUIDelegate {
229235

230236
return nil
231237
}
238+
239+
func webView(_ webView: WKWebView,
240+
runOpenPanelWith parameters: WKOpenPanelParameters,
241+
initiatedByFrame frame: WKFrameInfo,
242+
completionHandler: @escaping ([URL]?) -> Void) {
243+
delegate?.selectFileToOpen(parameters, completionHandler: completionHandler)
244+
}
232245
}
233246

234247
// MARK:- WKNavigationDelegate

devdocs-macos/DocumentationWindowController.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class DocumentationWindowController: NSWindowController {
1414

1515
override func awakeFromNib() {
1616
guard let dvc = documentationViewController else { return }
17+
dvc.delegate = self
1718
dvc.documentURL = documentation.url
1819
}
1920

@@ -110,3 +111,22 @@ class DocumentationWindowController: NSWindowController {
110111
)
111112
}
112113
}
114+
115+
// MARK:- DocumentationViewDelegate
116+
extension DocumentationWindowController: DocumentationViewDelegate {
117+
func selectFileToOpen(_ parameters: OpenPanelParameters, completionHandler: @escaping ([URL]?) -> Void) {
118+
let panel = NSOpenPanel()
119+
panel.canChooseFiles = true
120+
panel.canChooseDirectories = parameters.allowsDirectories
121+
panel.allowsMultipleSelection = parameters.allowsMultipleSelection
122+
panel.allowedFileTypes = ["json"]
123+
panel.allowsOtherFileTypes = false
124+
panel.resolvesAliases = true
125+
126+
panel.beginSheetModal(for: self.window!) { modalResponse in
127+
if modalResponse == NSApplication.ModalResponse.OK, let url = panel.url {
128+
completionHandler([url])
129+
}
130+
}
131+
}
132+
}

0 commit comments

Comments
 (0)