Skip to content

Instantly share code, notes, and snippets.

@Reinachan
Last active January 7, 2022 21:44
Show Gist options
  • Select an option

  • Save Reinachan/c7467696bd5cd8f9c0c0a4551c029893 to your computer and use it in GitHub Desktop.

Select an option

Save Reinachan/c7467696bd5cd8f9c0c0a4551c029893 to your computer and use it in GitHub Desktop.
Pressfire Widget - iOS

Pressfire Widget - iOS

Enkel widget som viser de siste nye Pressfire artiklene.

widget preview

Oppsett

Les gjennom koden for å sjekke at jeg ikke finner på noe fanteri )

Installer appen ScriptWidget. I skrivende stund er også in-app kjøpet som gir deg tilgang til framtidige nye funksjoner gratis.

klikk pluss-knappen i øvre hjørnet i appen og kopier og lim in koden nedenfor der.

Klikk på edit knappen for å endre navn på widgetten til noe forståelig for deg.

Gå til hjemskjermen, legg til widget fra ScriptWidget (hold inne på hjemskjermen til ikonene rister og klikk pluss i venstre hjørne)

Velg den størrelsen du ønsker og plasser den hvor du vil.

Gå tilbake til ScriptWidget, åpne widgetfilen, og rediger 10 til den størrelsen widget du valgte.

Hold inne på widgetten, velg edit "". Sett Script til det du navnga widgetten i ScriptWidget. Sett frequency til noe ansvarlig som hver time eller noe.

// Set w_size til størrelsen på widgetten du bruker.
// For øyeblikket funker ikke $getenv("widget-size") som den skal,
// derfor må vi sette det manuelt.
// Størrelser:
// "small"
// "medium"
// "large"
// const w_size = $getenv("widget-size")
const w_size = "large"
const rssuri = "https://www.pressfire.no/rss.xml";
const rss = await fetch(rssuri);
const [titleRegex, linkRegex, imageRegex] = ["<title>(.+)</title>", "<guid>(.+)</guid>", `<media:content url="(.+)" medium="image"/>`];
const titles = [...rss.matchAll(titleRegex)];
const images = [...rss.matchAll(imageRegex)];
const links = [...rss.matchAll(linkRegex)];
const regexSelector = (elements, group) => {
return elements.map((element) => {
return element[group];
});
}
const {parsedText, parsedImage, parsedLink} = {parsedText: regexSelector(titles, 1), parsedImage: regexSelector(images, 1), parsedLink: regexSelector(links, 1)}
const title = (num) => {
const isSmall = w_size === "small";
if (isSmall) {
return <vstack>{titleImg(num)}{titleContent(num)}</vstack>
} else {
return <hstack>{titleImg(num)}{titleContent(num)}</hstack>
}
}
const titleImg = (num) => {
const imgSize = w_size === "small" ? "160,80" : "90,45";
return <image url={parsedImage[num - 1]} frame={imgSize}/>
}
const titleContent = (num) => {
const textSize = w_size === "small" ? "12" : "14";
return(
<hstack background="#000000,0.5" frame="max"><text font={textSize}>{parsedText[num]}</text></hstack>
);
}
if (w_size === "large") {
$render(
<vstack>
{title(1)}{title(2)}{title(3)}{title(4)}{title(5)}{title(6)}
</vstack>
);
}
if (w_size === "medium") {
$render(
<vstack>
{title(1)}{title(2)}{title(3)}
</vstack>
);
}
if (w_size === "small") {
$render(
<vstack>
{title(1)}
</vstack>
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment