iOS-Widgets/Countdown/Countdown.js
Benny Samir Hierl 33e846b9c9
version number changed
Signed-off-by: Benny Samir Hierl <bennysamir@posteo.de>
2020-11-01 21:05:11 +01:00

118 lines
3 KiB
JavaScript

// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// icon-color: orange; icon-glyph: hourglass-half;
// Version 1.1.0
let dateForCountdown = ''
let icon = ''
let widgetInputRAW = args.widgetParameter;
let widgetInput = null;
if (widgetInputRAW !== null) {
widgetInput = widgetInputRAW.toString().split(";");
if (/^\d{4}-\d{2}-\d{2}$/.test(widgetInput[0].trim()) === false) {
throw new Error('Invalid Date format. Please use the ISO8601 format: 2020-12-31')
}
dateForCountdown = widgetInput[0].trim()
icon = widgetInput[1] || '⏳';
} else {
throw new Error('No Date set! Please set a Date via Widget parameter like 2020-12-31')
}
////////////////////////////////////////////////////////////////////////////////
const localeText = {
default: ['Day', 'Days'],
en: ['Day', 'Days'],
de: ['Tag', 'Tage'],
fr: ['Jour', 'Jours'],
es: ['día', 'días'],
it: ['giorno', 'giorni']
}
////////////////////////////////////////////////////////////////////////////////
let backColor; //Widget background color
let backColor2; //Widget background color
let textColor; //Widget text color
if (Device.isUsingDarkAppearance()) {
backColor = '111111';
backColor2 = '222222';
textColor = 'EDEDED';
} else {
backColor = 'A04000';
backColor2 = 'DC7633';
textColor = 'EDEDED';
}
function getTimeRemaining(endtime){
const total = Date.parse(endtime) - Date.parse(new Date());
const seconds = Math.floor( (total/1000) % 60 );
const minutes = Math.floor( (total/1000/60) % 60 );
const hours = Math.floor( (total/(1000*60*60)) % 24 );
const days = Math.floor( total/(1000*60*60*24) );
return {
total,
days,
hours,
minutes,
seconds
};
}
let remainingDays = getTimeRemaining(dateForCountdown).days + 1;
// Create Widget
let widget = new ListWidget();
widget.setPadding(10, 10, 10, 10)
const gradient = new LinearGradient()
gradient.locations = [0, 1]
gradient.colors = [
new Color(backColor),
new Color(backColor2)
]
widget.backgroundGradient = gradient
let provider = widget.addText(icon + " Countdown")
provider.font = Font.mediumSystemFont(12)
provider.textColor = new Color(textColor)
widget.addSpacer()
let textStack = widget.addStack();
textStack.layoutHorizontally()
textStack.addSpacer()
textStack.centerAlignContent()
let dayText = textStack.addText(`${remainingDays}`)
dayText.font = Font.regularSystemFont(50)
dayText.textColor = new Color(textColor);
dayText.minimumScaleFactor = 0.5;
textStack.addSpacer(5)
const languageCode = Device.language().match(/^[\a-z]{2}/)
const t = (localeText[languageCode]) ? localeText[languageCode] : localeText.default
let postfixText;
if (remainingDays === 1) {
postfixText = textStack.addText(t[0])
} else {
postfixText = textStack.addText(t[1])
}
postfixText.font = Font.regularSystemFont(20)
postfixText.textColor = new Color(textColor);
textStack.addSpacer()
widget.addSpacer()
if(!config.runsInWidget) {
await widget.presentSmall()
} else {
// Tell the system to show the widget.
Script.setWidget(widget)
Script.complete()
}