File tree Expand file tree Collapse file tree 3 files changed +50
-0
lines changed
Expand file tree Collapse file tree 3 files changed +50
-0
lines changed Original file line number Diff line number Diff 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
207218protocol 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 }
Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff 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+ }
You can’t perform that action at this time.
0 commit comments