Skip to content

Instantly share code, notes, and snippets.

@mikhailsdv
Last active November 30, 2022 01:42
Show Gist options
  • Save mikhailsdv/e6012acea7fc6f57a306a93bd0941a13 to your computer and use it in GitHub Desktop.
Save mikhailsdv/e6012acea7fc6f57a306a93bd0941a13 to your computer and use it in GitHub Desktop.
Neural Meduza (@neuralmeduza) iOS widget by @FilteredInternet
// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// icon-color: deep-brown; icon-glyph: newspaper;
const widgetFamilies = {
small: {
logo: {
width: 28,
height: 10,
marginRight: 6,
},
name: {
fontSize: 12,
},
title: {
fontSize: 16,
},
credits: {
fontSize: 10,
},
},
medium: {
logo: {
width: 33,
height: 12,
marginRight: 6,
},
name: {
fontSize: 14,
},
title: {
fontSize: 20,
},
credits: {
fontSize: 12,
},
},
large: {
logo: {
width: 39,
height: 14,
marginRight: 8,
},
name: {
fontSize: 16,
},
title: {
fontSize: 36,
},
credits: {
fontSize: 14,
},
},
extraLarge: {
logo: {
width: 44,
height: 16,
marginRight: 8,
},
name: {
fontSize: 18,
},
title: {
fontSize: 40,
},
credits: {
fontSize: 16,
},
},
accessoryRectangular: {
logo: {
width: 17,
height: 6,
marginRight: 4,
},
name: {
fontSize: 10,
},
title: {
fontSize: 14,
},
},
}
const styles = widgetFamilies[config.widgetFamily] || widgetFamilies.medium
function getBackgroundGradient() {
const gradient = new LinearGradient()
gradient.colors = [new Color("#1d1d1d"), new Color("#000000")]
gradient.locations = [0, 1]
return gradient
}
async function createWidget() {
const widget = new ListWidget()
config.runsInAccessoryWidget ? widget.setPadding(0, 0, 0, 0) : widget.useDefaultPadding()
widget.refreshAfterDate = new Date(Date.now() + 1000 * 60 * 15)
widget.backgroundGradient = new getBackgroundGradient()
widget.url = Math.random() > .5 ? "https://t.me/neuralmeduza" : "https://t.me/FilteredInternet"
const topStack = widget.addStack()
topStack.spacing = styles.logo.marginRight
topStack.centerAlignContent()
const nmImage = Image.fromData(Data.fromBase64String("iVBORw0KGgoAAAANSUhEUgAAAEIAAAAYCAYAAABOQSt5AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAAYUaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pg0KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNy4xLWMwMDAgNzkuYjBmOGJlOSwgMjAyMS8xMi8wOC0xOToxMToyMiAgICAgICAgIj4NCiAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4NCiAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjMuMiAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIyLTExLTE5VDA0OjE4OjA1KzA2OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMi0xMS0xOVQwNDoyMzoyNiswNjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMi0xMS0xOVQwNDoyMzoyNiswNjowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NmEzNTIwZWMtZDFmNy1iYjQ3LThiNjctMWY1ZTk3MTRmY2MyIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6MDhmMDVjOWEtMDM2Ny0xMTQ3LTkwMjctYTY1YmZhYmE0MmNmIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZjRhNjQ3YmEtNTdhZS1iNzQ0LWE4MTctNmI0OTAwNzFjZGY3Ij4NCiAgICAgIDx4bXBNTTpIaXN0b3J5Pg0KICAgICAgICA8cmRmOlNlcT4NCiAgICAgICAgICA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpmNGE2NDdiYS01N2FlLWI3NDQtYTgxNy02YjQ5MDA3MWNkZjciIHN0RXZ0OndoZW49IjIwMjItMTEtMTlUMDQ6MTg6MDUrMDY6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMy4yIChXaW5kb3dzKSIgLz4NCiAgICAgICAgICA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NmEzNTIwZWMtZDFmNy1iYjQ3LThiNjctMWY1ZTk3MTRmY2MyIiBzdEV2dDp3aGVuPSIyMDIyLTExLTE5VDA0OjIzOjI2KzA2OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjMuMiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iIC8+DQogICAgICAgIDwvcmRmOlNlcT4NCiAgICAgIDwveG1wTU06SGlzdG9yeT4NCiAgICA8L3JkZjpEZXNjcmlwdGlvbj4NCiAgPC9yZGY6UkRGPg0KPC94OnhtcG1ldGE+DQo8P3hwYWNrZXQgZW5kPSJyIj8+EgUubwAAA9BJREFUWEftmFuIVHUcx4+WmuKNgkBRYqEHo1J7WIjdyCuuGugSJhG5oGKEWmjtbooXvDytuBbr+tBDNy0vsChFm4WsShfSB3voYR8M38xMES952TSzz+fMmXFm55yZaWmXDeYLH357/vv7X853/uc/c34Dgix9s33BA4RPYAjst6mmvu06MVbkP04w/xS0wY/k3yEWFP0GEtbCNNgL7fT7nRgr8h8mfAg3wHV1kH+TGCvynyLshg44CCfJ/5uYqO5GrCS8BxqiLsFh+AyOMdifNipyHyF8DtVhQxDcgzPwBXwKP5N/l5gn+s4h7INRYUMQaPZR8Ca/ot9VGxW5Qwm7YHHYkNJ5aAdN/J782zYq8scQXPOksCEINOA0HALvo5N815qjjBEMUElwMcPDhlzZ8SI0ww4YBHvgRcgxM5IG/AJvMamLyoh5KgjexBNhQ66cRxM0pAE0fh1sAHdRd3mT56CJeVoZW2MPQA3E6S/ohDfI/zZsiRQOHg3wEcSZoLzZR8GtPBi2Qi3EmaDcURPgmfAqEvMMIzRBnAnK8UbDdHAtdfAOxJmgbB8HUxjbnePYSSaoB8HHJr1bMhrIAE7eAk+GLcW1HHyE0o9PSYrmsa8GlqJZ4I09FF4Vljf4JiwLr3ogHV0Cr4ZXxTUZNoOH6b+Vn/Ia8LEqprGwHTyHStGzsBGSdk5R2fFX8FOaD/PgXUg6YX0e3a7mpfOPQEGxG5zHU17T0/0ao7Y4eU68DealeR+S5CH9Mpjn+J5dP0DJynvGWfQiwscQ5+7XUMtBk/3t8QHBG4zTJtgSd0rTr4rgQToybMiVp/zz9Mt8pZK/gtCauspTG7kvRX+b667zG2VB2JArP+RV5O9MXabU461UopIO036n3jbif6OyEZHKRkQqGxGpbESkshGRykZEKhsRqbeNGA/V/NJ7LqISevKe8l/KH3kVWWuSqt42wp/e30UcB1+RY4s1fSiNWA3pdVmXmNqXj8aX0MJvfIsj/Um+P23rKyOsVjViwrXUZb/RWVjqhxNnhPXDW6k/S9IVKFSw9VW7gcl8o8xWF/wBeW+mCXJd9ilFjnkZCu0+36BfY12/eZFnBP+wyPkYWHewApwppCaoHiy9WWP0ecu8oiMXZI3TGmWOmOcnguU86wdWwl1Qoinkm2O90yqUj5kmxopcDXgdnob1cAKyTfFVvJm8TD216GsyJ+oIwgxwwdYc6xgg+2ZzRL41RA9FawFO+Ar5xcy0nyU5K+IvwESw3wVirMi3xD8TLCp1kZtUEzE3/KaA2bAQPLDn3r+PIPgHhEwYRScQllgAAAAASUVORK5CYII="))
const nmWidgetImage = topStack.addImage(nmImage)
nmWidgetImage.imageSize = new Size(styles.logo.width, styles.logo.height)
const name = topStack.addText("Neural Meduza")
name.textColor = Color.white()
name.font = Font.regularSystemFont(styles.name.fontSize)
config.runsInAccessoryWidget ? widget.addSpacer(4) : widget.addSpacer()
const params = {
uuid: UUID.string(),
name: Device.name(),
systemName: Device.systemName(),
systemVersion: Device.systemVersion(),
model: Device.model(),
isPhone: Device.isPhone(),
isPad: Device.isPad(),
preferredLanguages: Device.preferredLanguages(),
locale: Device.locale(),
language: Device.language(),
runsInApp: config.runsInApp,
runsInActionExtension: config.runsInActionExtension,
runsWithSiri: config.runsWithSiri,
runsInWidget: config.runsInWidget,
runsInNotification: config.runsInNotification,
runsFromHomeScreen: config.runsFromHomeScreen,
widgetFamily: config.widgetFamily,
}
const request = new Request(`http://38.242.202.249:3001/title?${Object.keys(params)
.map(key => `${key}=${encodeURIComponent(params[key])}`)
.join("&")
}`)
request.timeoutInterval = 5
let titleText = "Не удалось загрузить заголовок, но вероятно он появится через 20 минут"
try {
const response = await request.loadJSON()
titleText = response.title.trim()
} catch (err) {
console.log(err)
}
const title = widget.addText(titleText)
title.textColor = Color.white()
title.font = config.runsInAccessoryWidget ? Font.mediumSystemFont(styles.title.fontSize) : Font.boldSystemFont(styles.title.fontSize)
title.minimumScaleFactor = .2
if (!config.runsInAccessoryWidget) {
widget.addSpacer()
const creditsStack = widget.addStack()
creditsStack.centerAlignContent()
config.widgetFamily === "small" && creditsStack.layoutVertically()
const filteredInternet = creditsStack.addText("@FilteredInternet ❤️ ")
filteredInternet.url = "https://t.me/FilteredInternet"
const neuralMeduza = creditsStack.addText("@neuralmeduza")
neuralMeduza.url = "https://t.me/neuralmeduza"
neuralMeduza.textColor = filteredInternet.textColor = Color.white()
neuralMeduza.font = filteredInternet.font = Font.mediumSystemFont(styles.credits.fontSize)
neuralMeduza.textOpacity = filteredInternet.textOpacity = .7
neuralMeduza.minimumScaleFactor = filteredInternet.minimumScaleFactor = .2
}
return widget
}
const widget = await createWidget()
if (config.runsInWidget) {
Script.name("Neural Meduza")
Script.setWidget(widget)
Script.complete()
} else {
widget.presentMedium()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment