@@ -5,11 +5,16 @@ const fs = remote.require('fs');
55const os = remote . require ( 'os' ) ;
66const path = remote . require ( 'path' ) ;
77
8+ const Config = require ( 'electron-config' ) ;
9+ const config = new Config ( ) ;
10+ const validate = require ( 'validate.js' ) ;
11+
812const ipcClient = require ( './ipc/client' ) ;
913
1014const menu = require ( './menu' ) ;
1115
12- const SERVER_URL = 'https://hackmd.io' ;
16+ const { DEFAULT_SERVER_URL } = require ( './constants' ) ;
17+ const { getServerUrl } = require ( './utils' ) ;
1318
1419const isMac = os . platform ( ) === 'darwin' ;
1520
@@ -21,10 +26,11 @@ onload = () => {
2126 document . querySelector ( '#navbar-container .more-menu' ) . style . display = 'none' ;
2227 }
2328
29+ let targetURL ;
2430 if ( window . location . search !== '' ) {
2531 targetURL = window . location . search . match ( / \? t a r g e t = ( [ ^ ? ] + ) / ) [ 1 ] ;
2632 } else {
27- targetURL = SERVER_URL ;
33+ targetURL = getServerUrl ( ) ;
2834 }
2935
3036 document . body . innerHTML += `<webview src="${ targetURL } " id="main-window" disablewebsecurity autosize="on" allowpopups allowfileaccessfromfiles></webview>` ;
@@ -37,7 +43,7 @@ onload = () => {
3743 document . querySelector ( 'title' ) . innerHTML = webview . getTitle ( ) ;
3844
3945 // set dark theme if in home page
40- if ( webview . getURL ( ) . split ( '?' ) [ 0 ] . split ( '#' ) [ 0 ] . match ( / h t t p s : \/ \/ h a c k m d .i o \/ $ / ) ) {
46+ if ( webview . getURL ( ) . split ( '?' ) [ 0 ] . split ( '#' ) [ 0 ] . match ( / h t t p s ? : \/ \/ h a c k m d .i o \/ $ / ) ) {
4147 document . querySelector ( 'navbar' ) . className = 'dark' ;
4248 } else {
4349 document . querySelector ( 'navbar' ) . className = '' ;
@@ -57,7 +63,7 @@ onload = () => {
5763 } ;
5864
5965 document . querySelector ( '#navbar-container .home' ) . onclick = ( ) => {
60- webview . loadURL ( SERVER_URL ) ;
66+ webview . loadURL ( getServerUrl ( ) ) ;
6167 }
6268
6369 document . querySelector ( '#navbar-container .refresh' ) . onclick = ( ) => {
@@ -122,6 +128,30 @@ onload = () => {
122128 document . querySelector ( 'navbar' ) . style . display = 'inherit' ;
123129 } )
124130
131+ ipcRenderer . on ( 'config-serverurl' , ( ) => {
132+ if ( ! getServerUrl ( ) . match ( / h t t p s ? : \/ \/ h a c k m d \. i o / ) ) {
133+ $ ( '#serverurl-config-modal.modal input[type="text"]' ) . val ( getServerUrl ( ) ) ;
134+ }
135+ $ ( '#serverurl-config-modal.modal' ) . modal ( ) ;
136+ } )
137+
138+ $ ( '#serverurl-config-modal.modal #submit-serverurl' ) . click ( function ( ) {
139+ let serverurl = $ ( '#serverurl-config-modal.modal input[type="text"]' ) . val ( ) ;
140+
141+ // reset default
142+ if ( serverurl . length === 0 ) { serverurl = DEFAULT_SERVER_URL ; }
143+
144+ const errors = validate ( { serverurl } , { serverurl : { url : { allowLocal : true } } } ) ;
145+ if ( ! errors ) {
146+ config . set ( 'serverurl' , serverurl ) ;
147+ webview . loadURL ( serverurl ) ;
148+ $ ( '#serverurl-config-modal.modal' ) . modal ( 'hide' ) ;
149+ } else {
150+ // show me some error
151+ alert ( errors . serverurl ) ;
152+ }
153+ } )
154+
125155 /* handle _target=blank pages */
126156 webview . addEventListener ( 'new-window' , ( event ) => {
127157 ipcClient ( 'createWindow' , { url : `file://${ path . join ( __dirname , `index.html?target=${ event . url } ` ) } ` } ) ;
0 commit comments