Last active
November 30, 2022 01:42
-
-
Save mikhailsdv/e6012acea7fc6f57a306a93bd0941a13 to your computer and use it in GitHub Desktop.
Neural Meduza (@neuralmeduza) iOS widget by @FilteredInternet
This file contains 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
// 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