1- var reload = chrome . runtime . reload
1+ var reload = chrome . runtime . reload ;
2+ var storage = chrome . storage . local ;
23window . onresize = doLayout ;
34var isLoading = false ;
45
56function ui_ready ( ) {
6-
77 if ( window . webapp ) {
88 if ( ! ( webapp . started || webapp . starting ) ) {
99 // autostart ?
@@ -18,37 +18,32 @@ function settings_ready(d) {
1818 ui_ready ( ) ;
1919}
2020
21- chrome . runtime . getBackgroundPage ( function ( bg ) {
21+ chrome . runtime . getBackgroundPage ( function ( bg ) {
2222 window . bg = bg ;
23- chrome . storage . local . get ( null , settings_ready ) ;
24- } )
25-
23+ storage . get ( null , settings_ready ) ;
24+ } ) ;
2625
27-
28- onload = function ( ) {
26+ onload = function ( ) {
2927 getServerSettings ( receivedServerSettings ) ;
3028 var webview = document . querySelector ( 'webview' ) ;
3129 doLayout ( ) ;
3230
33- document . querySelector ( '#reset' ) . onclick = function ( ) {
31+ document . querySelector ( '#reset' ) . onclick = function ( ) {
3432 window . close ( ) ;
3533 } ;
3634
37- document . querySelector ( '#reload' ) . onclick = function ( ) {
35+ document . querySelector ( '#reload' ) . onclick = function ( ) {
3836 if ( isLoading ) {
3937 webview . stop ( ) ;
4038 } else {
4139 webview . reload ( ) ;
4240 }
4341 } ;
44- document . querySelector ( '#reload' ) . addEventListener (
45- 'webkitAnimationIteration' ,
46- function ( ) {
47- if ( ! isLoading ) {
48- document . body . classList . remove ( 'loading' ) ;
49- }
50- } ) ;
51-
42+ document . querySelector ( '#reload' ) . addEventListener ( 'webkitAnimationIteration' , function ( ) {
43+ if ( ! isLoading ) {
44+ document . body . classList . remove ( 'loading' ) ;
45+ }
46+ } ) ;
5247
5348 webview . addEventListener ( 'exit' , handleExit ) ;
5449 webview . addEventListener ( 'loadstart' , handleLoadStart ) ;
@@ -57,44 +52,42 @@ onload = function () {
5752 webview . addEventListener ( 'loadredirect' , handleLoadRedirect ) ;
5853 webview . addEventListener ( 'loadcommit' , handleLoadCommit ) ;
5954 webview . addEventListener ( 'permissionrequest' , handleRequest ) ;
55+ webview . addEventListener ( 'newwindow' , handleNewWindow ) ;
6056} ;
6157
62-
6358function getServerSettings ( callback ) {
64- chrome . storage . managed . get ( " serverSettings" , function ( results ) {
59+ storage . get ( ' serverSettings' , function ( results ) {
6560 if ( chrome . runtime . lastError ) {
66- console . log ( " error, returning empty. Error Message: " + chrome . runtime . lastError . message ) ;
61+ console . log ( ' error, returning empty. Error Message: ' + chrome . runtime . lastError . message ) ;
6762 return ;
6863 } else {
69- console . log ( "got server settings, returning" ) ;
70- callback ( results . serverSettings )
71-
64+ console . log ( 'got server settings, returning' ) ;
65+ callback ( results . serverSettings ) ;
7266 }
7367 } ) ;
7468}
7569
7670function receivedServerSettings ( serverSettings ) {
77- console . log ( " got server settings" ) ;
71+ console . log ( ' got server settings' ) ;
7872 console . log ( serverSettings ) ;
79- chrome . storage . local . get ( 'relativeLaunchUrl' , function ( obj ) {
73+ storage . get ( 'relativeLaunchUrl' , function ( obj ) {
8074 var relativeLaunchUrl = obj && obj . relativeLaunchUrl ,
8175 url = convertServerSettingsToUrl ( serverSettings , relativeLaunchUrl ) ;
8276
8377 if ( url && url . length > 0 ) {
84- console . log ( " calling navigateTo url: " + url ) ;
78+ console . log ( ' calling navigateTo url: ' + url ) ;
8579 navigateTo ( url ) ;
8680 }
8781 } ) ;
8882}
8983
90-
9184function handleRequest ( e ) {
92- console . log ( " permission request" ) ;
85+ console . log ( ' permission request' ) ;
9386 if ( e . permission === 'media' ) {
94- console . log ( " Audio permission request" ) ;
87+ console . log ( ' Audio permission request' ) ;
9588 e . request . allow ( ) ;
9689 }
97- console . log ( " Done with permission request" ) ;
90+ console . log ( ' Done with permission request' ) ;
9891}
9992
10093function navigateTo ( url ) {
@@ -142,7 +135,6 @@ function handleLoadCommit(event) {
142135 return ;
143136 }
144137
145-
146138 var webview = document . querySelector ( 'webview' ) ;
147139}
148140
@@ -162,49 +154,47 @@ function handleLoadStop(event) {
162154 // finish, so that the spinner doesn't jerkily reset back to the 0 position.
163155 isLoading = false ;
164156
165- chrome . storage . sync . get ( null , function ( items ) {
157+ chrome . storage . sync . get ( null , function ( items ) {
166158 settings = items ;
167159
168160 var webview = document . querySelector ( 'webview' ) ;
169161 //by sending this message the webview can then send messages back to the listener added above
170- webview . contentWindow . postMessage ( {
171- command : 'handshake' ,
172- settings : settings
173- } , '*' ) ;
162+ webview . contentWindow . postMessage (
163+ {
164+ command : 'handshake' ,
165+ settings : settings
166+ } ,
167+ '*'
168+ ) ;
174169 } ) ;
175170
176- window . addEventListener ( " message" , function ( event ) {
171+ window . addEventListener ( ' message' , function ( event ) {
177172 console . log ( 'window received message:' , event . data ) ;
178173 processCommand ( event . data ) ;
179174 } ) ;
180175}
181176
182177function processCommand ( data ) {
183-
184178 if ( data . command === 'handshakereply' ) {
185179 //ignore because this is just the client telling us it can talk back
186180 return ;
187181 }
188182
189183 if ( data . command === 'deletePref' ) {
190184 delete settings [ data . data . key ] ;
191- }
192- else if ( data . command === 'setPref' ) {
185+ } else if ( data . command === 'setPref' ) {
193186 settings [ data . data . key ] = data . data ;
194187 }
195188
196- chrome . storage . sync . set ( settings , function ( ) {
197-
189+ chrome . storage . sync . set ( settings , function ( ) {
198190 if ( ! chrome . runtime . lastError ) {
199191 console . log ( 'settings set' ) ;
200192 }
201193 } ) ;
202-
203-
204194}
205195
206196function handleLoadAbort ( event ) {
207- console . log ( 'oadAbort ' ) ;
197+ console . log ( 'loadAbort ' ) ;
208198 console . log ( ' url: ' + event . url ) ;
209199 console . log ( ' isTopLevel: ' + event . isTopLevel ) ;
210200 console . log ( ' type: ' + event . type ) ;
@@ -217,4 +207,72 @@ function handleLoadRedirect(event) {
217207 }
218208
219209 document . querySelector ( '#location' ) . value = event . newUrl ;
220- }
210+ }
211+
212+ function handleNewWindow ( event ) {
213+ event . preventDefault ( ) ;
214+
215+ // event.targetUrl contains the target URL of the original link click
216+ // or window.open() call: use it to open your own window to it.
217+ // See: https://stackoverflow.com/a/18452171/6326743
218+ var url = event . targetUrl ;
219+
220+ // `chrome.browser.openTab` with `browser` permission will open the link in the browser.
221+ // See: https://stackoverflow.com/a/36530347/6326743
222+ chrome . browser . openTab ( { url : url } ) ;
223+ }
224+
225+ /**
226+ * Handler for messages sent with `chrome.runtime.sendMessage`
227+ *
228+ * @param {any } message The message sent by the calling script
229+ * @param {MessageSender } sender
230+ * @param {function } sendResponse Function to call (at most once) when you have a response.
231+ */
232+ function handleMessage ( message , sender , sendResponse ) {
233+ console . log ( 'handleMessage:' , message ) ;
234+ if ( message . command === 'settings.get' ) {
235+ storage . get ( 'serverSettings' , function ( items ) {
236+ if ( sendResponse ) {
237+ var response = {
238+ success : ! chrome . runtime . lastError ,
239+ data : chrome . runtime . lastError
240+ } ;
241+ if ( response . success ) {
242+ var data = items . serverSettings || { } ;
243+ if ( typeof message . data === 'string' ) {
244+ response . data = data [ message . data ] ;
245+ } else if ( Array . isArray ( message . data ) ) {
246+ response . data = message . data . reduce ( function ( aggregator , current ) {
247+ return ( aggregator [ current ] = data [ current ] ) ;
248+ } , { } ) ;
249+ } else {
250+ response . data = data ;
251+ }
252+ }
253+ console . log ( 'response:' , response ) ;
254+ sendResponse ( response ) ;
255+ }
256+ } ) ;
257+ return ! ! sendResponse ; // wait for response
258+ } else if ( message . command === 'settings.patch' ) {
259+ storage . get ( 'serverSettings' , function ( items ) {
260+ var settings = {
261+ serverSettings : _ . extend ( items . serverSettings || { } , message . data )
262+ } ;
263+ storage . set ( settings , function ( ) {
264+ if ( sendResponse ) {
265+ var response = {
266+ success : ! chrome . runtime . lastError ,
267+ data : chrome . runtime . lastError
268+ } ;
269+ console . log ( 'response:' , response ) ;
270+ sendResponse ( response ) ;
271+ }
272+ } ) ;
273+ } ) ;
274+ return ! ! sendResponse ; // wait for response
275+ }
276+ }
277+
278+ chrome . runtime . onMessageExternal . addListener ( handleMessage ) ;
0 commit comments