Skip to content

Commit 20c70c4

Browse files
committed
Wire up search UI to JavaScript API
1 parent bedd08d commit 20c70c4

File tree

3 files changed

+26
-11
lines changed

3 files changed

+26
-11
lines changed

devdocs-macos/DocumentationViewController.swift

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class DocumentationViewController:
1515
}
1616

1717
private var webView: WKWebView!
18+
private var searchCVC: SearchControlViewController!
1819

1920
@objc dynamic var documentTitle: String?
2021
@objc dynamic var documentURL: URL?
@@ -46,6 +47,11 @@ class DocumentationViewController:
4647
userContentController.addUserScript(pageObserver)
4748
}
4849

50+
if let pageSearchScript = readUserScript("page-search") {
51+
let pageSearch = WKUserScript(source: pageSearchScript, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
52+
userContentController.addUserScript(pageSearch)
53+
}
54+
4955
if let uiSettingsScript = readUserScript("ui-settings") {
5056
let uiSettings = WKUserScript(source: uiSettingsScript, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
5157
userContentController.addUserScript(uiSettings)
@@ -67,9 +73,11 @@ class DocumentationViewController:
6773
}
6874

6975
private func setupSearchControlView() {
70-
let searchVC = SearchControlViewController()
76+
// Need to store strong ref to the VC, or IBActions don't work
77+
searchCVC = SearchControlViewController()
78+
searchCVC.delegate = self
7179

72-
let searchView = searchVC.view
80+
let searchView = searchCVC.view
7381
searchView.translatesAutoresizingMaskIntoConstraints = false
7482

7583
webView.addSubview(searchView);
@@ -189,5 +197,17 @@ class DocumentationViewController:
189197
}
190198
self.documentURL = URL(string: location)
191199
}
200+
}
201+
202+
// MARK:- SearchControlDelegate
203+
extension DocumentationViewController: SearchControlDelegate {
204+
func search(term: String) {
205+
let argsBytes = try! JSONSerialization.data(withJSONObject: ["term": term])
206+
let args = NSString(data: argsBytes, encoding: String.Encoding.utf8.rawValue)! as String
207+
webView.evaluateJavaScript("search( (\(args))[\"term\"] );")
208+
}
192209

210+
func dismiss() {
211+
webView.evaluateJavaScript("resetSearch();")
212+
}
193213
}

devdocs-macos/SearchControlView.xib

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
<objects>
88
<customObject id="-2" userLabel="File's Owner" customClass="SearchControlViewController" customModule="DevDocs" customModuleProvider="target">
99
<connections>
10-
<outlet property="searchField" destination="Sob-7j-rmS" id="63N-X7-5xX"/>
1110
<outlet property="view" destination="c22-O7-iKe" id="8CF-Bz-17c"/>
1211
</connections>
1312
</customObject>
@@ -22,16 +21,13 @@
2221
<subviews>
2322
<searchField wantsLayer="YES" verticalHuggingPriority="750" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Sob-7j-rmS">
2423
<rect key="frame" x="0.0" y="0.0" width="200" height="19"/>
25-
<constraints>
26-
<constraint firstAttribute="width" constant="200" id="Zms-uK-vwr"/>
27-
</constraints>
2824
<searchFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" usesSingleLineMode="YES" bezelStyle="round" sendsSearchStringImmediately="YES" sendsWholeSearchString="YES" id="p9W-s3-2vm">
2925
<font key="font" metaFont="smallSystem"/>
3026
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
3127
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
3228
</searchFieldCell>
3329
<connections>
34-
<action selector="performSearch:" target="-2" id="C7J-uG-P9I"/>
30+
<action selector="performSearch:" target="-2" id="i8X-0A-USs"/>
3531
</connections>
3632
</searchField>
3733
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NIJ-J2-h3b">
@@ -44,7 +40,7 @@
4440
<font key="font" metaFont="smallSystem"/>
4541
</buttonCell>
4642
<connections>
47-
<action selector="dismissSearch:" target="-2" id="uF4-ir-bYe"/>
43+
<action selector="dismissSearch:" target="-2" id="qfV-XO-2d2"/>
4844
</connections>
4945
</button>
5046
</subviews>

devdocs-macos/SearchControlViewController.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import Cocoa
22

33
class SearchControlViewController: NSViewController {
4-
@IBOutlet weak var searchField: NSSearchField?
54
weak var delegate: SearchControlDelegate?
65

76
init() {
@@ -19,8 +18,8 @@ class SearchControlViewController: NSViewController {
1918
view.layer?.backgroundColor = NSColor.windowBackgroundColor.cgColor
2019
}
2120

22-
@IBAction func performSearch(_ sender: Any) {
23-
let searchTerm = (searchField?.stringValue ?? "")
21+
@IBAction func performSearch(_ searchField: NSSearchField) {
22+
let searchTerm = searchField.stringValue
2423
.trimmingCharacters(in: .whitespacesAndNewlines)
2524
if (searchTerm.isEmpty) {
2625
return

0 commit comments

Comments
 (0)