33var Popup = ( function ( ) {
44 // variables ----------------------------------------------------------------
55 var _this = { } ,
6+ _settingsTable = null ,
7+ _title = null ,
68 _website = null ,
79 _websiteUrl = null ,
810 _enableForSite = null ,
911 _enableChat = null ,
1012 _keyComboInput = null ,
1113 _settingsTimeout = null ,
12- _userColor = null ;
14+ _userColor = null ,
15+ _pauseTable = null ,
16+ _countdownTimeout = null ,
17+ _pausedUntil = null ,
18+ _pausedUntilTimeout = null ;
1319
1420 // initialize ---------------------------------------------------------------
1521 _this . init = function ( ) {
@@ -20,10 +26,19 @@ var Popup = (function() {
2026
2127 // Get document elements
2228
29+ _title = document . getElementById ( 'if-title' ) ;
2330 _website = document . getElementById ( 'website' ) ;
2431 _enableForSite = document . getElementById ( 'enableForSite' ) ;
2532 _enableChat = document . getElementById ( 'enableChat' ) ;
2633 _keyComboInput = document . getElementById ( 'keyComboInput' ) ;
34+ _pauseTable = document . getElementById ( 'pauseTable' ) ;
35+ _settingsTable = document . getElementById ( 'settingsTable' ) ;
36+
37+ // Set website click event
38+
39+ _title . addEventListener ( 'click' , function ( ) {
40+ window . open ( 'https://internetfriends.social' , '_blank' ) ;
41+ } ) ;
2742
2843 // Populate values
2944
@@ -102,6 +117,21 @@ var Popup = (function() {
102117
103118 _cursorColorButton . addEventListener ( "click" , onCursorButtonClicked ) ;
104119 _colorWheelContainerBackground . addEventListener ( "click" , onPopupContainerClicked ) ;
120+
121+ // Handle Pause Timer
122+
123+ _pausedUntil = IFSettings . pausedUntil
124+ setupPauseButtons ( ) ;
125+
126+ // Handle Table Display
127+
128+ // if currently paused
129+ if ( _pausedUntil > Date . now ( ) ) {
130+ _settingsTable . classList . add ( "hidden" ) ;
131+ updateCountdown ( ) ;
132+ } else {
133+ _pauseTable . classList . add ( "hidden" ) ;
134+ }
105135 } ;
106136
107137 // private functions --------------------------------------------------------
@@ -208,6 +238,79 @@ var Popup = (function() {
208238 _refreshText . style . visibility = "visible" ;
209239 } ;
210240
241+ function updateCountdown ( ) {
242+ var countdownTimer = document . getElementById ( 'countdownTimer' ) ;
243+ const timeLeft = _pausedUntil - new Date ( ) . getTime ( ) ;
244+
245+ if ( timeLeft <= 0 ) {
246+ _pauseTable . classList . add ( "hidden" ) ;
247+ _settingsTable . classList . remove ( "hidden" ) ;
248+ clearTimeout ( _countdownTimeout ) ;
249+ } else {
250+ const days = Math . floor ( timeLeft / ( 24 * 60 * 60 * 1000 ) ) ;
251+ const hours = Math . floor ( ( timeLeft % ( 24 * 60 * 60 * 1000 ) ) / ( 60 * 60 * 1000 ) ) ;
252+ const minutes = Math . floor ( ( timeLeft % ( 60 * 60 * 1000 ) ) / ( 60 * 1000 ) ) ;
253+ const seconds = Math . floor ( ( timeLeft % ( 60 * 1000 ) ) / 1000 ) ;
254+
255+ countdownTimer . textContent = `${ days } d ${ hours } h ${ minutes } m ${ seconds } s` ;
256+ _countdownTimeout = setTimeout ( updateCountdown , 1000 ) ;
257+ }
258+ }
259+
260+ function setupPauseButtons ( ) {
261+ var pauseButtons = document . querySelectorAll ( ".pauseButton" ) ;
262+ var unpauseButton = document . getElementById ( 'unpauseButton' ) ;
263+
264+ pauseButtons . forEach ( button => {
265+ button . addEventListener ( "click" , function ( ) {
266+ const duration = button . id === "pause15m" ? 15 * 60 * 1000 : // 15m
267+ button . id === "pause3h" ? 3 * 60 * 60 * 1000 : // 3h
268+ 24 * 60 * 60 * 1000 ; // 24hr
269+
270+ // Clear any existing countdown
271+ if ( _countdownTimeout ) {
272+ clearTimeout ( _countdownTimeout ) ;
273+ }
274+
275+ // If extension is already paused
276+ if ( _pausedUntil > new Date ( ) . getTime ( ) ) {
277+ // Add time
278+ _pausedUntil += duration
279+ } else {
280+ // Set time
281+ _pausedUntil = new Date ( ) . getTime ( ) + duration
282+
283+ // Set refresh text
284+ var _refreshText = document . getElementById ( 'refresh' ) ;
285+ _refreshText . style . visibility = "visible" ;
286+ }
287+
288+ // use timeout to prevent settings from being updated too quickly
289+ if ( _pausedUntilTimeout )
290+ clearTimeout ( _pausedUntilTimeout ) ;
291+ _pausedUntilTimeout = setTimeout ( updatePausedUntil , 100 ) ;
292+ _pauseTable . classList . remove ( "hidden" ) ;
293+ _settingsTable . classList . add ( "hidden" ) ;
294+
295+ updateCountdown ( ) ;
296+ } ) ;
297+ } ) ;
298+
299+ unpauseButton . addEventListener ( "click" , function ( ) {
300+ _pausedUntil = - 1
301+ updatePausedUntil ( ) ;
302+ _pauseTable . classList . add ( "hidden" ) ;
303+ _settingsTable . classList . remove ( "hidden" ) ;
304+
305+ var _refreshText = document . getElementById ( 'refresh' ) ;
306+ _refreshText . style . visibility = "visible" ;
307+ } ) ;
308+ }
309+
310+ function updatePausedUntil ( ) {
311+ chrome . storage . sync . set ( { 'pausedUntil' : _pausedUntil } ) ;
312+ }
313+
211314 return _this ;
212315} ( ) ) ;
213316
0 commit comments