@@ -197,23 +197,37 @@ async function openWindow(t, automatic = false) {
197
197
return ;
198
198
}
199
199
200
- async function dupeSnoozedTab ( tabId , snoozeTime ) {
200
+ async function editSnoozed ( tabId , snoozeTime , duplicating ) {
201
201
var t = await getSnoozedTabs ( tabId ) ;
202
202
[ 'startUp' , 'opened' , 'deleted' , 'repeat' , 'paused' ] . forEach ( prop => delete t [ prop ] ) ;
203
203
t . wakeUpTime = snoozeTime === 'startup' ? dayjs ( ) . add ( 20 , 'y' ) . valueOf ( ) : dayjs ( snoozeTime ) . valueOf ( ) ,
204
204
t . timeCreated = dayjs ( ) . valueOf ( ) ;
205
- t . id = getRandomId ( ) ;
205
+ t . id = duplicating ? getRandomId ( ) : t . id ;
206
206
if ( snoozeTime === 'startup' ) t . startUp = true ;
207
207
await saveTab ( t ) ;
208
- return { duped : true }
208
+ return duplicating ? { duped : true } : { edited : true }
209
209
}
210
210
211
- async function editSnoozeTime ( tabId , snoozeTime ) {
211
+ async function editRecurringSnoozed ( tabId , data , duplicating ) {
212
+ var t = await getSnoozedTabs ( tabId ) ;
213
+ [ 'startUp' , 'opened' , 'deleted' , 'paused' ] . forEach ( prop => delete t [ prop ] ) ;
214
+ t . wakeUpTime = await calculateNextSnoozeTime ( data ) ;
215
+ t . timeCreated = dayjs ( ) . valueOf ( ) ;
216
+ if ( data . repeat === 'startup' ) t . startUp = true ;
217
+ t . repeat = data ;
218
+ t . id = duplicating ? getRandomId ( ) : t . id ;
219
+ await saveTab ( t ) ;
220
+ return duplicating ? { duped : true } : { edited : true }
221
+ }
222
+
223
+ async function editSnoozeRecurring ( tabId , data , ) {
212
224
var t = await getSnoozedTabs ( tabId ) ;
213
225
[ 'startUp' , 'opened' , 'deleted' , 'repeat' , 'paused' ] . forEach ( prop => delete t [ prop ] ) ;
214
- t . wakeUpTime = snoozeTime === 'startup' ? dayjs ( ) . add ( 20 , 'y' ) . valueOf ( ) : dayjs ( snoozeTime ) . valueOf ( ) ,
226
+ if ( data . repeat === 'startup' ) t . startUp = true ;
227
+ t . wakeUpTime = await calculateNextSnoozeTime ( data ) ;
215
228
t . modifiedTime = dayjs ( ) . valueOf ( ) ;
216
- if ( snoozeTime === 'startup' ) t . startUp = true ;
229
+ t . repeat = data ;
230
+ t . paused = false ;
217
231
await saveTab ( t ) ;
218
232
return { edited : true }
219
233
}
@@ -224,7 +238,7 @@ async function snoozeTab(snoozeTime, overrideTab) {
224
238
if ( ! activeTab || ! activeTab . url ) return { } ;
225
239
var sleepyTab = {
226
240
id : getRandomId ( ) ,
227
- title : activeTab . title ?? getBetterUrl ( activeTab . url ) ,
241
+ title : activeTab . title || getBetterUrl ( activeTab . url ) ,
228
242
url : activeTab . url ,
229
243
...activeTab . pinned ? { pinned : true } : { } ,
230
244
wakeUpTime : snoozeTime === 'startup' ? dayjs ( ) . add ( 20 , 'y' ) . valueOf ( ) : dayjs ( snoozeTime ) . valueOf ( ) ,
@@ -290,14 +304,14 @@ async function snoozeRecurring(target, data) {
290
304
if ( data . repeat === 'startup' ) sleepyObj . startUp = true ;
291
305
292
306
sleepyObj . wakeUpTime = await calculateNextSnoozeTime ( data ) ;
293
- console . log ( dayjs ( sleepyObj . wakeUpTime ) . format ( 'DD/MM/YY HH:mm' ) ) ;
307
+ // console.log(dayjs(sleepyObj.wakeUpTime).format('DD/MM/YY HH:mm'));
294
308
295
309
if ( validTabs . length === 0 ) return { } ;
296
310
if ( validTabs . length === 1 || target === 'tab' ) {
297
311
var activeTab = validTabs && validTabs . length ? validTabs [ 0 ] : await getTabsInWindow ( true ) ;
298
312
if ( ! activeTab || ! activeTab . url ) return { } ;
299
313
Object . assign ( sleepyObj , {
300
- title : activeTab . title ?? getBetterUrl ( activeTab . url ) ,
314
+ title : activeTab . title || getBetterUrl ( activeTab . url ) ,
301
315
url : activeTab . url ,
302
316
...activeTab . pinned ? { pinned : true } : { } ,
303
317
} ) ;
@@ -325,7 +339,7 @@ async function getTimeWithModifier(choice) {
325
339
var options = await getOptions ( [ 'morning' , 'evening' , 'popup' ] ) ;
326
340
var modifier = options . popup ? options . popup [ choice ] : '' ;
327
341
options = upgradeSettings ( options ) ;
328
- var m = options [ modifier ] ?? [ dayjs ( ) . hour ( ) , dayjs ( ) . minute ( ) ] ;
342
+ var m = options [ modifier ] || [ dayjs ( ) . hour ( ) , dayjs ( ) . minute ( ) ] ;
329
343
return dayjs ( c . time ) . add ( m [ 0 ] , 'h' ) . add ( m [ 1 ] , 'm' ) ;
330
344
}
331
345
@@ -357,7 +371,7 @@ async function getChoices(which) {
357
371
} ,
358
372
'today-morning' : {
359
373
label : 'This Morning' ,
360
- repeatLabel : '- ' ,
374
+ repeatLabel : '' ,
361
375
time : NOW . startOf ( 'd' ) . add ( config . morning [ 0 ] , 'h' ) . add ( config . morning [ 1 ] , 'm' ) ,
362
376
timeString : 'Today' ,
363
377
repeatTime : '' ,
@@ -368,7 +382,7 @@ async function getChoices(which) {
368
382
} ,
369
383
'today-evening' : {
370
384
label : `Today ${ getEveningLabel ( config . evening [ 0 ] ) } ` ,
371
- repeatLabel : `Everyday` ,
385
+ repeatLabel : `Everyday, Now ` ,
372
386
time : NOW . startOf ( 'd' ) . add ( config . evening [ 0 ] , 'h' ) . add ( config . evening [ 1 ] , 'm' ) ,
373
387
timeString : 'Today' ,
374
388
repeatTime : NOW . format ( getHourFormat ( true ) ) ,
@@ -445,9 +459,10 @@ async function getChoices(which) {
445
459
}
446
460
447
461
async function calculateNextSnoozeTime ( data ) {
448
- console . log ( data ) ;
449
462
var NOW = dayjs ( ) , TYPE = data . type , [ HOUR , MINUTE ] = data . time ;
450
- if ( TYPE === 'hourly' ) {
463
+ if ( TYPE === 'startup' ) {
464
+ return NOW . add ( 20 , 'y' ) ;
465
+ } else if ( TYPE === 'hourly' ) {
451
466
var isNextHour = NOW . minute ( ) >= MINUTE ? 1 : 0 ;
452
467
return NOW . startOf ( 'h' ) . add ( isNextHour , 'h' ) . minute ( MINUTE ) . valueOf ( ) ;
453
468
} else if ( TYPE === 'daily' ) {
@@ -476,51 +491,6 @@ async function calculateNextSnoozeTime(data) {
476
491
return false ;
477
492
}
478
493
479
- // async function calculateNextSnoozeTime(repeat, start, data) {
480
- // var NOW = dayjs(), start = dayjs(start);
481
- // if (repeat === 'custom' && data) {
482
- // var days = [];
483
- // if (data.weekly) {
484
- // var thisWeek = data.weekly, nextWeek = data.weekly.map(day => day + 7);
485
- // days = nextWeek.concat(thisWeek).map(day => dayjs().startOf('w').add(day, 'd').add(start.hour(), 'h').add(start.minute(), 'm'));
486
- // } else if (data.monthly) {
487
- // var thisMonth = data.monthly.filter(d => d <= dayjs().daysInMonth()).map(d => dayjs().startOf('M').date(d).add(start.hour(), 'h').add(start.minute(), 'm'));
488
- // var nextMonth = data.monthly.filter(d => d <= dayjs().add(1, 'M').daysInMonth()).map(d => dayjs().startOf('M').add(1, 'M').date(d).add(start.hour(), 'h').add(start.minute(), 'm'));
489
- // days = nextMonth.concat(thisMonth);
490
- // }
491
- // return days.filter(d => d > NOW).pop();
492
- // } else if (repeat === 'startup') {
493
- // return NOW.add(20, 'y');
494
- // } else if (repeat === 'hourly') {
495
- // var isThisHour = NOW.minute() < start.minute();
496
- // return NOW.startOf('h').add(isThisHour ? 0 : 1, 'h').minute(start.minute());
497
- // } else if (repeat === 'daily') {
498
- // return dayjs().startOf('d').add(1, 'd').hour(NOW.hour()).minute(NOW.minute());
499
- // } else if (repeat === 'daily_morning') {
500
- // var morning = await getOptions('morning');
501
- // var isToday = NOW.hour() < morning[0] || (NOW.hour() === morning[0] && NOW.minute() < morning[1]);
502
- // return NOW.startOf('d').add(isToday ? 0 : 1, 'd').hour(morning[0]).minute(morning[1]);
503
- // } else if (repeat === 'daily_evening') {
504
- // var evening = await getOptions('evening');
505
- // var isToday = NOW.hour() < evening[0] || (NOW.hour() === evening[0] && NOW.minute() < evening[1]);
506
- // return NOW.startOf('d').add(isToday ? 0 : 1, 'd').hour(evening[0]).minute(evening[1]);
507
- // } else if (repeat === 'weekends') {
508
- // var isThisWeek = NOW.day() < 6 || (NOW.day() === 6 && (NOW.hour() < start.hour() || (NOW.hour() === start.hour() && NOW.minute() < start.minute())));
509
- // return NOW.startOf('w').add(isThisWeek ? 0 : 1, 'w').day(6).hour(start.hour()).minute(start.minute());
510
- // } else if (repeat === 'mondays') {
511
- // var isThisWeek = NOW.day() < 1 || (NOW.day() === 1 && (NOW.hour() < start.hour() || (NOW.hour() === start.hour() && NOW.minute() < start.minute())));
512
- // return NOW.startOf('w').add(isThisWeek ? 0 : 1, 'w').day(1).hour(start.hour()).minute(start.minute());
513
- // } else if (repeat === 'weekly') {
514
- // var isThisWeek = NOW.day() < start.day() || (NOW.day() === start.day() && (NOW.hour() < start.hour() || (NOW.hour() === start.hour() && NOW.minute() < start.minute())));
515
- // return NOW.startOf('w').add(isThisWeek ? 0 : 1, 'w').day(start.day()).hour(start.hour()).minute(start.minute());
516
- // } else if (repeat === 'monthly') {
517
- // var isThisMonth = NOW.date() < start.date() || (NOW.date() === start.date() && (NOW.hour() < start.hour() ||( NOW.hour() === start.hour() && NOW.minute() < start.minute()))) ? 0 : 1;
518
- // var isMonthValid = start.date() <= NOW.daysInMonth(isThisMonth, 'M') ? 0 : 1;
519
- // return NOW.startOf('M').add(isThisMonth + isMonthValid, 'M').date(start.date()).hour(start.hour()).minute(start.minute());
520
- // }
521
- // return false;
522
- // }
523
-
524
494
/* END ASYNC FUNCTIONS */
525
495
526
496
// var getFaviconUrl = url => `https://icons.duckduckgo.com/ip3/${getHostname(url)}.ico`
@@ -557,10 +527,10 @@ var sleeping = tabs => tabs.filter(t => !t.opened);
557
527
var today = tabs => tabs . filter ( t => t . wakeUpTime && dayjs ( t . wakeUpTime ) . dayOfYear ( ) === dayjs ( ) . dayOfYear ( ) && dayjs ( t . wakeUpTime ) . year ( ) === dayjs ( ) . year ( ) )
558
528
559
529
var isDefault = tabs => tabs . title && [ 'nap room | snoozz' , 'settings | snoozz' , 'rise and shine | snoozz' , 'New Tab' , 'Start Page' ] . includes ( tabs . title ) ;
560
- // var isDefault = tabs => false;
561
530
562
531
var isValid = tabs => tabs . url && [ 'http' , 'https' , 'ftp' , 'chrome-extension' , 'web-extension' , 'moz-extension' , 'extension' ] . includes ( tabs . url . substring ( 0 , tabs . url . indexOf ( ':' ) ) ) ;
563
- // var isValid = tabs => true;
532
+
533
+ var isSameYear = ( a , b ) => dayjs ( a ) . year ( ) === dayjs ( b ) . year ( ) ;
564
534
565
535
var capitalize = s => s . charAt ( 0 ) . toUpperCase ( ) + s . slice ( 1 ) ;
566
536
@@ -592,12 +562,13 @@ var clipboard = text => {
592
562
}
593
563
594
564
var formatSnoozedUntil = t => {
595
- if ( t . startUp ) return `Next ${ capitalize ( getBrowser ( ) ) } Launch` ;
565
+ if ( t . startUp || ( t . repeat && t . repeat . type === 'startup' ) ) return `Next ${ capitalize ( getBrowser ( ) ) } Launch` ;
596
566
var ts = t . wakeUpTime ;
597
567
var date = dayjs ( ts ) ;
598
568
if ( date . dayOfYear ( ) === dayjs ( ) . dayOfYear ( ) ) return ( date . hour ( ) > 17 ? 'Tonight' : 'Today' ) + date . format ( ` [@] ${ getHourFormat ( date . minute ( ) !== 0 ) } ` ) ;
599
569
if ( date . dayOfYear ( ) === dayjs ( ) . add ( 1 , 'd' ) . dayOfYear ( ) ) return 'Tomorrow' + date . format ( ` [@] ${ getHourFormat ( date . minute ( ) !== 0 ) } ` ) ;
600
570
if ( date . week ( ) === dayjs ( ) . week ( ) ) return date . format ( `dddd [@] ${ getHourFormat ( date . minute ( ) !== 0 ) } ` ) ;
571
+ if ( date . year ( ) !== dayjs ( ) . year ( ) ) return date . format ( `ddd, MMM D, YYYY` ) ;
601
572
return date . format ( `ddd, MMM D [@] ${ getHourFormat ( date . minute ( ) !== 0 ) } ` ) ;
602
573
}
603
574
@@ -650,7 +621,7 @@ var bgLog = (logs, colors, timestampColor = 'grey') => {
650
621
colors . unshift ( timestampColor ) ;
651
622
colors = colors . flatMap ( ( v , i , a ) => i !== a . length ? [ v , '' ] : v ) . map ( c => {
652
623
var colors = { green :'limegreen' , red :'crimson' , blue :'dodgerblue' , yellow :'gold' , pink :'violet' , grey :'slategrey' , white : 'navajowhite' }
653
- return 'color:' + ( colors [ c ] ?? 'unset' )
624
+ return 'color:' + ( colors [ c ] || 'unset' )
654
625
} )
655
626
console . log ( timestamp + logs , ...colors )
656
627
}
0 commit comments