Last active
November 21, 2024 18:13
-
-
Save Leibinger015/093a0d832eae45a621538dda9173dbfe to your computer and use it in GitHub Desktop.
An LockScreen widget for your iPhone, it’s shows a mnml calendar.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This code is a script for the iPhone app Scriptable. | |
// It's shows a mnml “tileCAL” calendar-widget on your iPhone LockScreen. | |
// | |
// Script-Code: ©️anb030.de | |
// Script-Date: 02.11.2024 | |
// Script-Last-Edit: 14.11.2024 | |
// Version: 1.2g - BugFixes: Minor fixes, dark mode adjustments, country code for weekdays with only 2 letters and fine-tuning. | |
// | |
// | |
// Set the language code for the short weekdays here, "de-DE" for German, "en-US" for English, "tr-TR" for Turkish ... and so on! | |
const languageCode = "de-DE"; | |
// | |
// | |
// Start of the script as mnml calendar “tileCAL” for the iPhone lockscreen widget | |
// | |
// | |
// Widget Hintergrundfarbe | |
let widget = new ListWidget(); | |
widget.backgroundColor = Color.dynamic(new Color("#ffffff"), new Color("#000000")); | |
// Farben und Schriftarten für Light Mode und Dark Mode | |
const bgColorToday = Color.dynamic(new Color("#e5e5e5"), new Color("#ffffff")); // Weiße Kachel für heute im Light Mode, Dunkelgrau im Dark Mode | |
const bgColorOther = Color.dynamic(new Color("#404040"), new Color("#606060")); // Graue Kacheln für gestern und morgen, noch dunkler im Dark Mode | |
const textColorToday = Color.dynamic(new Color("#000000"), new Color("#000000")); // Schwarzer Text für Wochentag heute im Light Mode, weiß im Dark Mode | |
const textColorOther = new Color("#FFFFFF"); // Weißer Text für Wochentag gestern und morgen | |
const textColorNumberToday = Color.dynamic(new Color("#000000"), new Color("#000000")); // Schwarzer Text für Datum heute im Light Mode, weiß im Dark Mode | |
const fontSizeMain = 32; // Größere Schriftgröße für heute | |
const fontSizeOther = 18; // Kleinere Schriftgröße für gestern und morgen | |
// Berechne gestriges, heutiges und morgiges Datum | |
let dateToday = new Date(); | |
let dateYesterday = new Date(dateToday); | |
let dateTomorrow = new Date(dateToday); | |
dateYesterday.setDate(dateToday.getDate() - 1); | |
dateTomorrow.setDate(dateToday.getDate() + 1); | |
// Erstelle einen horizontalen Stack für die Kacheln | |
let mainStack = widget.addStack(); | |
mainStack.layoutHorizontally(); | |
mainStack.centerAlignContent(); | |
// Funktion für die Kachel | |
function createDateTile(date, bgColor, textColorDay, textColorNumber, isToday = false, isYesterday = false, isTomorrow = false) { | |
// Äußere Stack-Ebene, um die Kachel zu erstellen | |
let outerStack = mainStack.addStack(); | |
outerStack.layoutVertically(); | |
outerStack.size = new Size(isToday ? 60 : 40, isToday ? 60 : 40); | |
outerStack.cornerRadius = 6; | |
outerStack.backgroundColor = bgColor; | |
outerStack.centerAlignContent(); | |
// Zusätzliche Einrückung des Wochentags-Textes | |
if (isYesterday) { | |
outerStack.setPadding(0, 8, 0, 0); | |
} | |
if (isToday) { | |
outerStack.setPadding(0, 10, 0, 0); | |
} | |
if (isTomorrow) { | |
outerStack.setPadding(0, 10, 0, 0); | |
} | |
// Wochentag (z.B., "MO", "DI") mit dem Euro-Symbol versehen | |
let dayName = date.toLocaleDateString(languageCode, { weekday: 'short' }).toUpperCase(); | |
dayName = dayName.slice(0, 2); // Verkürzt auf zwei Buchstaben, unabhängig von der Sprache | |
let dayNamePrefix = isToday ? " " : isYesterday ? " " : isTomorrow ? " " : " "; // Unterschiedliche Leerzeichen für gestern, heute und morgen | |
let dayNameText = outerStack.addText(dayNamePrefix + dayName); | |
dayNameText.font = Font.boldSystemFont(isToday ? 12 : 9); // Größerer Wochentag für heute | |
dayNameText.textColor = textColorDay; | |
dayNameText.centerAlignText(); | |
// Zusätzlicher Stack speziell für die Datumsnummer, um individuelles Padding zu setzen | |
let dateNumberStack = outerStack.addStack(); | |
dateNumberStack.layoutVertically(); | |
// Individuelles Padding für das numerische Datum in den jeweiligen Kacheln | |
if (isYesterday) { | |
dateNumberStack.setPadding(0, 0, 0, 0); // Beispiel: Verschiebung für gestern nach rechts | |
} else if (isToday) { | |
dateNumberStack.setPadding(0, 0, 0, 0); // Beispiel: Verschiebung für heute | |
} else if (isTomorrow) { | |
dateNumberStack.setPadding(0, 0, 0, 0); // Beispiel: Verschiebung für morgen nach rechts | |
} | |
// Datum (Tag des Monats) zweistellig formatiert hinzufügen | |
let dayNumberText = String(date.getDate()).padStart(2, '0'); // Fügt führende 0 hinzu | |
let dayNumber = dateNumberStack.addText(dayNumberText); | |
dayNumber.font = Font.boldSystemFont(isToday ? fontSizeMain : fontSizeOther); // Größerer Text für heutiges Datum | |
dayNumber.textColor = textColorNumber; | |
dayNumber.centerAlignText(); | |
return outerStack; | |
} | |
// Erstelle die Kacheln ohne Abstände, sodass sie direkt nebeneinander liegen | |
createDateTile(dateYesterday, bgColorOther, textColorOther, textColorOther, false, true); // Linke Kachel (gestern) | |
createDateTile(dateToday, bgColorToday, textColorToday, textColorNumberToday, true); // Mittlere Kachel (heute) mit Verschiebung | |
createDateTile(dateTomorrow, bgColorOther, textColorOther, textColorOther, false, false, true); // Rechte Kachel (morgen) | |
// Widget anzeigen | |
if (config.runsInWidget) { | |
Script.setWidget(widget); | |
} else { | |
widget.presentSmall(); | |
} | |
Script.complete(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
In version 1.2g: Minor BugFixes, adjustment of the dynamic dark mode, introduction of country codes for the days of the week with only 2 letters and various fine-tuning.
The language can be changed in the widget script itself, e.g. "de-DE" for German, "en-US" for English, "tr-TR" for Turkish and so on.