@@ -3,6 +3,7 @@ import React from 'react';
3
3
import ReactDOM from 'react-dom' ;
4
4
import Frame from './modules/frame/frame' ;
5
5
import UpdateNotice from './modules/UpdateNotice/UpdateNotice' ;
6
+ import { SIDEBAR_CONTAINER_ID } from '../../shared/constants' ;
6
7
7
8
let shouldShrinkBody = true ;
8
9
let sidebarLocation = 'left' ;
@@ -131,6 +132,11 @@ chrome.storage.sync.get(['sidebarOnLeft'], (result) => {
131
132
chrome . storage . sync . get ( [ 'autoShowHide' ] , ( result ) => {
132
133
if ( result . autoShowHide !== undefined ) {
133
134
autoShowHide = result . autoShowHide === true ;
135
+ if ( autoShowHide ) {
136
+ mountAutoShowHideListener ( ) ;
137
+ }
138
+ } else {
139
+ unmountAutoShowHideListener ( ) ;
134
140
}
135
141
} ) ;
136
142
@@ -151,9 +157,128 @@ const checkSidebarStatus = () => {
151
157
152
158
checkSidebarStatus ( ) ;
153
159
160
+ /**
161
+ * Auto Show Hide
162
+ */
163
+ let mouseLeftSidebarTimer = null ;
164
+ const openSidebarUponMouseOverWindowEdge = ( ) => {
165
+ chrome . runtime . sendMessage (
166
+ {
167
+ from : 'content' ,
168
+ msg : 'REQUEST_SIDEBAR_STATUS' ,
169
+ } ,
170
+ ( response ) => {
171
+ let sidebarOpen = response . sidebarOpen ;
172
+ if ( sidebarOpen === false ) {
173
+ // open sidebar on this page with timer
174
+ console . log ( 'should open sidebar' ) ;
175
+ if ( Frame . isReady ( ) ) {
176
+ isToggledOpenGloballyFromBackground = false ;
177
+ Frame . toggle ( true ) ;
178
+ }
179
+ }
180
+ }
181
+ ) ;
182
+ } ;
183
+
184
+ const mouseEnteredSidebarHandler = ( event ) => {
185
+ if ( isToggledOpenGloballyFromBackground === true ) {
186
+ return ;
187
+ }
188
+ console . log ( 'mouse entered' ) ;
189
+ clearTimeout ( mouseLeftSidebarTimer ) ;
190
+ } ;
191
+
192
+ const mouseLeftSidebarHandler = ( event ) => {
193
+ if ( isToggledOpenGloballyFromBackground === true ) {
194
+ return ;
195
+ }
196
+ console . log ( 'mouse left' ) ;
197
+ mouseLeftSidebarTimer = setTimeout ( ( ) => {
198
+ if ( Frame . isReady ( ) ) {
199
+ Frame . toggle ( false ) ;
200
+ }
201
+ } , 500 ) ;
202
+ } ;
203
+
204
+ const focusOffSidebarHandler = ( event ) => {
205
+ if ( isToggledOpenGloballyFromBackground === true ) {
206
+ return ;
207
+ }
208
+ console . log ( 'mouse left' ) ;
209
+ if ( Frame . isReady ( ) ) {
210
+ Frame . toggle ( false ) ;
211
+ }
212
+ clearTimeout ( mouseLeftSidebarTimer ) ;
213
+ } ;
214
+
215
+ let isMouseWithinEdgeDelta = false ;
216
+ let isToggledOpenGloballyFromBackground = false ;
217
+ const openSidebarUponMouseOverWindowEdgeEventHandler = ( event ) => {
218
+ if ( isToggledOpenGloballyFromBackground === true ) {
219
+ return ;
220
+ }
221
+ const delta = 5 ;
222
+ if ( sidebarLocation === 'left' && event . clientX < delta ) {
223
+ if ( ! isMouseWithinEdgeDelta ) {
224
+ console . log ( 'reached left side' ) ;
225
+ isMouseWithinEdgeDelta = true ;
226
+ openSidebarUponMouseOverWindowEdge ( ) ;
227
+ }
228
+ } else if (
229
+ sidebarLocation === 'right' &&
230
+ event . clientX > $ ( document ) . width ( ) - delta
231
+ ) {
232
+ if ( ! isMouseWithinEdgeDelta ) {
233
+ console . log ( 'reached right side' ) ;
234
+ isMouseWithinEdgeDelta = true ;
235
+ openSidebarUponMouseOverWindowEdge ( ) ;
236
+ }
237
+ } else {
238
+ isMouseWithinEdgeDelta = false ;
239
+ }
240
+ } ;
241
+
242
+ const mountAutoShowHideListener = ( ) => {
243
+ $ ( document ) . on ( 'mousemove' , openSidebarUponMouseOverWindowEdgeEventHandler ) ;
244
+ $ ( document ) . on (
245
+ 'mouseenter' ,
246
+ `#${ SIDEBAR_CONTAINER_ID } ` ,
247
+ mouseEnteredSidebarHandler
248
+ ) ;
249
+ $ ( document ) . on (
250
+ 'mouseleave' ,
251
+ `#${ SIDEBAR_CONTAINER_ID } ` ,
252
+ mouseLeftSidebarHandler
253
+ ) ;
254
+
255
+ $ ( document ) . on ( 'blur' , `#${ SIDEBAR_CONTAINER_ID } ` , focusOffSidebarHandler ) ;
256
+ } ;
257
+
258
+ const unmountAutoShowHideListener = ( ) => {
259
+ $ ( document ) . off ( 'mousemove' , openSidebarUponMouseOverWindowEdgeEventHandler ) ;
260
+ $ ( document ) . off (
261
+ 'mouseenter' ,
262
+ `#${ SIDEBAR_CONTAINER_ID } ` ,
263
+ mouseEnteredSidebarHandler
264
+ ) ;
265
+ $ ( document ) . off (
266
+ 'mouseleave' ,
267
+ `#${ SIDEBAR_CONTAINER_ID } ` ,
268
+ mouseLeftSidebarHandler
269
+ ) ;
270
+ $ ( document ) . off ( 'blur' , `#${ SIDEBAR_CONTAINER_ID } ` , focusOffSidebarHandler ) ;
271
+ } ;
272
+
273
+ /**
274
+ * Chrome runtime event listener
275
+ */
154
276
chrome . runtime . onMessage . addListener ( ( request , sender , sendResponse ) => {
155
277
if ( request . from === 'background' && request . msg === 'TOGGLE_SIDEBAR' ) {
156
278
if ( Frame . isReady ( ) ) {
279
+ isToggledOpenGloballyFromBackground =
280
+ request . toStatus === true ? true : false ;
281
+
157
282
Frame . toggle ( request . toStatus ) ;
158
283
}
159
284
} else if (
@@ -178,6 +303,11 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
178
303
) {
179
304
const { toStatus } = request ;
180
305
autoShowHide = toStatus ;
306
+ if ( autoShowHide ) {
307
+ mountAutoShowHideListener ( ) ;
308
+ } else {
309
+ unmountAutoShowHideListener ( ) ;
310
+ }
181
311
}
182
312
} ) ;
183
313
@@ -195,25 +325,3 @@ window.addEventListener('keydown', (event) => {
195
325
} ) ;
196
326
}
197
327
} ) ;
198
-
199
- const openSidebarUponMouseOverWindowEdge = ( ) => {
200
- chrome . runtime . sendMessage ( {
201
- from : 'content' ,
202
- msg : 'REQUEST_OPEN_SIDEBAR_UPON_MOUSE_OVER_WINDOW_EDGE' ,
203
- } ) ;
204
- } ;
205
-
206
- $ ( document ) . on ( 'mousemove' , ( event ) => {
207
- // console.log(event.clientX);
208
- const delta = 5 ;
209
- if ( sidebarLocation === 'left' && event . clientX < delta ) {
210
- // console.log('reached left side');
211
- openSidebarUponMouseOverWindowEdge ( ) ;
212
- } else if (
213
- sidebarLocation === 'right' &&
214
- event . clientX > $ ( document ) . width ( ) - delta
215
- ) {
216
- // console.log('reached right side');
217
- openSidebarUponMouseOverWindowEdge ( ) ;
218
- }
219
- } ) ;
0 commit comments