Skip to content
Open

v2 #3

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2023 DevVali
Copyright (c) 2024 DevVali

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Xmas Time (╯^□^)❄☃❄
# Xmas Time (╯^□^)❄☃❄: Season 2!

![Xmas Time](images/hero.png)

Expand Down
12 changes: 2 additions & 10 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 7 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@
"Christmas countdown",
"Christmas Day countdown",
"Christmas countdown 2023",
"Christmas countdown 2024",
"Christmas countdown 2025",
"Christmas countdown 2026",
"Festival countdown",
"Status bar",
"Time left until Christmas",
Expand Down Expand Up @@ -63,14 +66,11 @@
"properties": {
"xmasTime.yourXmas": {
"title": "Your Xmas",
"description": "Personalize your Xmas experience by specifying the day you celebrate. The countdown adapts to your festive schedule.",
"description": "Personalize your Xmas experience by specifying the day you celebrate. The countdown adapts to your festive schedule. Enter the date in YYYY-MM-DD format.",
"type": "string",
"enum": [
"2023-12-24",
"2023-12-25",
"2024-01-06"
],
"default": "2023-12-25"
"default": "2024-12-25",
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
"patternErrorMessage": "The given date must be in the YYYY-MM-DD format."
}
}
}
Expand Down Expand Up @@ -98,6 +98,5 @@
"webpack-cli": "^5.1.4"
},
"dependencies": {
"dayjs": "^1.11.10"
}
}
15 changes: 15 additions & 0 deletions src/dateDifference.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
function dateDifference(dateA, dateB) {
const differenceMS = dateB - dateA;
console.log(differenceMS);
const days = Math.trunc(differenceMS / 86400000);
const hours = Math.trunc((differenceMS % 86400000) / 3600000);
const minutes = Math.trunc(((differenceMS % 86400000) % 3600000 ) / 60000);

return {
days: days,
hours: hours,
minutes: minutes
}
}

export default dateDifference;
18 changes: 18 additions & 0 deletions src/extension.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
const vscode = require('vscode');
const { createStatusBar, updateStatusBar } = require('./statusBar');

/** @type {vscode.Disposable} */
let disposable;

/** @type {vscode.Disposable[]} */
let subscriptions = [];

/**
* @function
* @returns {void}
*/
function activate() {
disposable = vscode.commands.registerCommand('xmasTime.run', function () {
updateStatusBar();
Expand All @@ -29,12 +36,23 @@ function activate() {
updateStatusBar();
}

/**
* @function
* @returns {void}
*/
function deactivate() {
// Disposing
disposable.dispose();
subscriptions.forEach((subscription) => subscription.dispose());
}

/**
* @exports
* @type {{
* activate: function(): void,
* deactivate: function(): void
* }}
*/
module.exports = {
activate,
deactivate,
Expand Down
102 changes: 23 additions & 79 deletions src/getTimeLeft.js
Original file line number Diff line number Diff line change
@@ -1,88 +1,32 @@
const vscode = require('vscode');
const dayjs = require('dayjs');
const { yourXmas } = vscode.workspace.getConfiguration('xmasTime');

// Helpers

function diff(unit) {
return dayjs(yourXmas).diff(dayjs(), unit);
}

function getUnit() {
let result = '';
import dateDifference from './dateDifference';

// Less than 1 ms
if (diff('ms') < 1) {
result = 'celebrating';
if (diff('d') < -13) {
result = 'over';
}
}
// Greather than 1 ms
if (diff('ms') > 1) {
result = 'm';
if (diff('d') > 0) {
result = 'd';
} else if (diff('h') > 0) {
result = 'h';
}
}
if (result !== '') {
return result;
} else {
return console.log(
'Xmas Time could not calculate the time left until Christmas!'
);
}
}
const vscode = require('vscode');

// Get the time left and return the text

function getTimeLeft() {
const unit = getUnit();
let timeLeft = diff(unit);
let result = '';

switch (unit) {
case 'm':
timeLeft += 1;
result = `${timeLeft} ${timeLeft > 1 ? 'minutes' : 'minute'}`;
break;
case 'd':
const hoursLeft = diff('h') % 24;
if (hoursLeft > 0) {
result = `${timeLeft} ${
timeLeft > 1 ? 'days' : 'day'
} and ${hoursLeft} ${hoursLeft > 1 ? 'hours' : 'hour'}`;
} else {
result = `${timeLeft} ${timeLeft > 1 ? 'days' : 'day'}`;
}
break;
case 'h':
const minutesLeft = (diff('m') % 60) + 1;
if (minutesLeft > 0 && minutesLeft !== 60) {
result = `${timeLeft} ${
timeLeft > 1 ? 'hours' : 'hour'
} and ${minutesLeft} ${minutesLeft > 1 ? 'minutes' : 'minute'}`;
} else {
timeLeft += 1;
result = `${timeLeft} ${timeLeft > 1 ? 'hours' : 'hour'}`;
}
break;
case 'celebrating':
result = 'Merry Christmas!';
break;
case 'over':
result = 'Christmas is over!';
break;
const { yourXmas } = vscode.workspace.getConfiguration('xmasTime');
const difference = dateDifference(Date.now(), Date.parse(yourXmas));

if (difference.minutes < 0 && difference.days == 0) { // 60 * 24 minutes per day
// it is the christmas day
return "Merry Christmas!";
} else if (difference.days <= -1) {
// christmas is over
return "Christmas is over!";
}
if (result !== '') {
return result;

if (difference.days > 0) {
// days hours
return `${difference.days} ${difference.days > 1 ? "days" : "day"} and ${difference.hours} ${difference.hours > 1 ? "hours" : "hour"}`
} else {
return console.log(
'Xmas Time could not calculate the time left until Christmas!'
);
if (difference.hours > 0) {
// hours minutes
return `${difference.hours} ${difference.hours > 1 ? "hours" : "hour"} and ${difference.minutes} ${difference.minutes > 1 ? "minutes" : "minute"}`
} else {
// minutes
return `${difference.minutes} ${difference.minutes > 1 ? "minutes" : "minute"}`
}
}
}

module.exports = { getTimeLeft };
export default getTimeLeft;
23 changes: 20 additions & 3 deletions src/statusBar.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
import getTimeLeft from './getTimeLeft.js';

const vscode = require('vscode');
const { getTimeLeft } = require('./getTimeLeft');

/**
* @type {vscode.StatusBarItem}
*/
let statusBar = null;
let statusBar;

/**
* @function
* @returns {vscode.StatusBarItem}
*/
function createStatusBar() {
statusBar = vscode.window.createStatusBarItem(
vscode.StatusBarAlignment.Right
Expand All @@ -14,6 +19,10 @@ function createStatusBar() {
return statusBar;
}

/**
* @function
* @returns {void}
*/
function updateStatusBar() {
if (
getTimeLeft() !== 'Merry Christmas!' &&
Expand All @@ -23,8 +32,16 @@ function updateStatusBar() {
statusBar.tooltip = `${getTimeLeft()} left until Christmas 🎄`;
} else {
statusBar.text = `$(sparkle) ${getTimeLeft()}`;
statusBar.tooltip = null;
}
statusBar.show();
}

module.exports = { createStatusBar, updateStatusBar };
/**
* @exports
* @type {{
* createStatusBar: function(): vscode.StatusBarItem,
* updateStatusBar: function(): void
* }}
*/
export { createStatusBar, updateStatusBar };