Skip to content

Commit bb94b9e

Browse files
committed
Override preferences export
1 parent b63a952 commit bb94b9e

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed

devdocs-macos/DocumentationViewController.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,10 @@ class DocumentationViewController: NSViewController {
141141
}
142142
}
143143

144+
func overridePreferencesExport() {
145+
webView.evaluateJavaScript("overridePreferencesExport();")
146+
}
147+
144148
private func addFeatureScripts(_ controller: WKUserContentController) {
145149
if let pageObserverScript = readUserScript("page-observer") {
146150
let pageObserver = WKUserScript(source: pageObserverScript,
@@ -202,11 +206,19 @@ class DocumentationViewController: NSViewController {
202206
private func handleAppReboot() {
203207
webView.reload()
204208
}
209+
210+
private func handleExportPreferences(_ args: [AnyHashable: Any]) {
211+
guard let preferences = args["preferences"] as! String? else {
212+
return
213+
}
214+
delegate?.savePreferencesToFile(preferences)
215+
}
205216
}
206217

207218
protocol DocumentationViewDelegate: class {
208219
typealias OpenPanelParameters = WKOpenPanelParameters
209220
func selectFileToOpen(_ parameters: OpenPanelParameters, completionHandler: @escaping ([URL]?) -> Void)
221+
func savePreferencesToFile(_ preferences: String)
210222
}
211223

212224
// MARK:- WKUIDelegate
@@ -277,6 +289,11 @@ extension DocumentationViewController: WKScriptMessageHandler {
277289
handleLocationNotification(args)
278290
case "appReboot":
279291
handleAppReboot()
292+
case "exportPreferences":
293+
guard let args = msg["args"] as? [AnyHashable: Any] else {
294+
return
295+
}
296+
handleExportPreferences(args)
280297
default:
281298
return
282299
}

devdocs-macos/DocumentationWindowController.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class DocumentationWindowController: NSWindowController {
5757
return
5858
}
5959

60+
dvc.overridePreferencesExport()
6061
dvc.useNativeScrollbars(true)
6162

6263
guard let window = self.window else { return }
@@ -129,4 +130,22 @@ extension DocumentationWindowController: DocumentationViewDelegate {
129130
}
130131
}
131132
}
133+
134+
func savePreferencesToFile(_ preferences: String) {
135+
let panel = NSSavePanel()
136+
panel.nameFieldStringValue = "devdocs-preferences.json"
137+
panel.allowedFileTypes = ["json"]
138+
panel.allowsOtherFileTypes = false
139+
panel.isExtensionHidden = false
140+
141+
panel.beginSheetModal(for: self.window!) { modalResponse in
142+
if modalResponse == NSApplication.ModalResponse.OK, let url = panel.url {
143+
do {
144+
try preferences.write(to: url, atomically: true, encoding: .utf8)
145+
} catch {
146+
NSApplication.shared.presentError(error)
147+
}
148+
}
149+
}
150+
}
132151
}

devdocs-macos/user-scripts/ui-settings.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,17 @@ window.useNativeScrollbars = function (enable) {
2020
sp.toggleLayout('_native-scrollbars', enable)
2121
})
2222
}
23+
24+
window.overridePreferencesExport = function () {
25+
requestAnimationFrame(() => {
26+
app.document.content.settingsPage.export = () => {
27+
const preferences = JSON.stringify(app.settings.export())
28+
window.webkit.messageHandlers.vcBus.postMessage({
29+
type: 'exportPreferences',
30+
args: {
31+
preferences
32+
}
33+
})
34+
}
35+
})
36+
}

0 commit comments

Comments
 (0)