Skip to content

Instantly share code, notes, and snippets.

@andreasRedeker
Last active July 11, 2023 20:50
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andreasRedeker/cfd88fd87641e0764f5fceb4ebd75c8b to your computer and use it in GitHub Desktop.
Save andreasRedeker/cfd88fd87641e0764f5fceb4ebd75c8b to your computer and use it in GitHub Desktop.
Parqet widget but with background blur
// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// icon-color: teal; icon-glyph: chart-line;
// Script by Andreas Redeker <hello@andreasredeker.de>
let portfolioId;
const apiUrl = "https://api.parqet.com/v1/portfolios/";
const backgroundColor = new Color("374151");
const titleColor = Color.gray();
const titleFont = Font.mediumSystemFont(10);
const titleMinimumScaleFactor = 1;
const valueFont = Font.boldSystemFont(16)
const valueMinimumScaleFactor = 0.8;
if (config.runsInWidget && args.widgetParameter) {
portfolioId = args.widgetParameter;
} else if (config.runsInWidget && !args.widgetParameter) {
throw Error('Bitte Portfolio-Id in den Widget Parametern eintragen');
}
if (config.runsInApp) {
portfolioId = "5f55425d139fc90007978e75";
}
const portfolio = await getPortfolio(portfolioId);
async function getPortfolio(id) {
const data = await new Request(apiUrl + id).loadJSON();
const obj = {
name: data.portfolio.name,
currency: data.portfolio.currency,
value: data.performance.portfolioValue,
gainGrossValue: data.performance.unrealized.gainGross,
returnGrossPercent: data.performance.unrealized.returnGross,
dividendsGainNet: data.performance.dividends.gainNet,
public: data.portfolio.public,
perfStartDate: data.portfolio.perfStartDate,
range: data.portfolio.range
};
return obj;
}
console.log(portfolio.perfStartDate)
console.log(portfolio.range)
if (!portfolio.public) {
throw Error('Portfolio ist nicht öffentlich');
}
function toLocaleCurrencyString(value) {
return value.toLocaleString("de-DE", {style: "currency", currency: portfolio.currency});
}
let widget = await createWidget();
async function createWidget() {
let w = new ListWidget();
w.backgroundImage = loadBackgrundImage();
let portfolioName = w.addText(portfolio.name);
portfolioName.font = titleFont;
portfolioName.textColor = titleColor;
portfolioName.minimumScaleFactor = titleMinimumScaleFactor;
let portfolioValue = w.addText(toLocaleCurrencyString(portfolio.value));
portfolioValue.font = Font.boldSystemFont(20);
portfolioValue.minimumScaleFactor = 0.9;
w.addSpacer()
let gainTitle = w.addText("Kursgewinn");
gainTitle.font = titleFont;
gainTitle.textColor = titleColor;
gainTitle.minimumScaleFactor = titleMinimumScaleFactor;
let gainGross = w.addText(toLocaleCurrencyString(portfolio.gainGrossValue));
gainGross.textColor = portfolio.returnGrossPercent > 0 ? Color.green() : Color.red();
gainGross.font = valueFont;
gainGross.minimumScaleFactor = valueMinimumScaleFactor;
let returnNet = w.addText(portfolio.returnGrossPercent.toLocaleString() + " %");
returnNet.textColor = portfolio.gainGrossValue > 0 ? Color.green() : Color.red();
returnNet.font = valueFont;
returnNet.minimumScaleFactor = valueMinimumScaleFactor;
w.addSpacer()
let dividendsTitle = w.addText("Dividenden");
dividendsTitle.font = titleFont;
dividendsTitle.textColor = titleColor;
dividendsTitle.minimumScaleFactor = titleMinimumScaleFactor;
let dividends = w.addText(toLocaleCurrencyString(portfolio.dividendsGainNet));
dividends.font = valueFont;
dividends.minimumScaleFactor = valueMinimumScaleFactor;
w.addSpacer()
let updateTimestamp = w.addText("Stand " + new Date().toLocaleTimeString().slice(0,5));
updateTimestamp.textColor = titleColor;
updateTimestamp.font = Font.mediumSystemFont(8);
updateTimestamp.centerAlignText();
return w;
}
function loadBackgrundImage() {
let fm = FileManager.iCloud();
let dir = fm.documentsDirectory();
let path = fm.joinPath(dir, "image.jpg");
let img;
if (fm.fileExists(path)) {
fm.downloadFileFromiCloud(path).then(img = fm.readImage(path));
return img;
} else {
throw Error(`Das Hintergrundbild konnte nicht gefunden werden. Das Bild muss in iCloud Dive/Scriptable/image.jpg liegen`);
}
}
if (config.runsInApp) {
await widget.presentSmall();
}
Script.setWidget(widget);
Script.complete();
@andreasRedeker
Copy link
Author

andreasRedeker commented May 23, 2022

IMG_8205

  1. Das Script Widger-Blur in Scriptable hinzufügen und ausführen um das Hintergrundbild zu erstellen
  2. Das Hintergrundbild mit dem Namen "image" in den iCloud Ordner "Scriptable" speichern ("Export to the Files app")
  3. Das Parqet Widget mit dem Code von oben installieren

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment