-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathSplatoon - Salmon Run - Small.scriptable
12 lines (11 loc) · 8.15 KB
/
Splatoon - Salmon Run - Small.scriptable
1
2
3
4
5
6
7
8
9
10
11
12
{
"always_run_in_app" : false,
"icon" : {
"color" : "orange",
"glyph" : "brush"
},
"name" : "Splatoon - Salmon Run - Small",
"script" : "\/\/ Variables used by Scriptable.\n\/\/ These must be at the very top of the file. Do not edit.\n\/\/ icon-color: cyan; icon-glyph: magic;\n\/\/ Variables used by Scriptable.\n\/\/ These must be at the very top of the file. Do not edit.\n\/\/ icon-color: orange; icon-glyph: brush;\n\/\/ Thank you for downloading this script. To get started with it make sure\n\/\/ you are running Scriptable 1.5.1, after that add the Scriptable widget\n\/\/ to your Home Screen and select this script in the editing panel.\n\n\/\/ You can put in \"0\" or \"1\" in the parameter field to\n\/\/ select which stage you want to display.\n\/\/ \"0\" displays current\/upcoming\n\/\/ \"1\" displays stage after current\/upcoming\n\n\/\/ Feel free to make changes to this script as you need it. Please don't\n\/\/ redistribute without permission. Instead submit a change request to the\n\/\/ Github project (https:\/\/github.com\/trevormkay\/splatoon-widgets) so everyone\n\/\/ can benefit.\n\n\/\/ All data comes from https:\/\/splatoon2.ink\/ and Splatoon content Copyright\n\/\/ 2015 Nintendo. No copyright or trademark infringement is intended in using\n\/\/ Splatoon content.\n\nlet json = await loadJson()\nlet merchandiseJson = await loadMerchandiseJson()\nlet widget = await createWidget(json)\n\n\/\/ Check if the script is running in a widget. If not, show a preview of the widget to easier debug it\nif (!config.runsInWidget) {\n await widget.presentSmall()\n}\n\n\/\/ Tell the system to show the widget\nScript.setWidget(widget)\nScript.complete()\n\n\/\/ Generate widget\nasync function createWidget(json) {\n \n var stageIndex = '0' \/\/ stage can either be 0 (current\/upcoming) or 1 (next)\n var parameter = args.widgetParameter;\n if (parameter == null) { stageIndex = '0' }\n if (parameter == '1') { stageIndex = '1' }\n \n let dateFormatter = new DateFormatter()\n dateFormatter.useShortDateStyle()\n dateFormatter.useShortTimeStyle()\n\n let bgColor = \"#ff5600\"\n \n \/\/ Create widget frame\n let w = new ListWidget()\n w.setPadding(10, 10, 10, 10)\n w.backgroundColor = new Color(bgColor)\n\n \/\/ Display Stage 1 image as the background\n let bgImage = new Request('https:\/\/splatoon2.ink\/assets\/img\/bg-spots.fc2fe88f.png')\n let retrvBgImage = await bgImage.loadImage()\n w.backgroundImage = retrvBgImage\n \n \n \/\/\n \/\/ TITLE\n \/\/\n\n let titleStack = w.addStack()\n titleStack.spacing = 5\n\n \/\/ Logo\n let logoReq = new Request('https:\/\/splatoon2.ink\/assets\/img\/mr-grizz.a87af81b.png')\n let logoImage = await logoReq.loadImage()\n let logo = titleStack.addImage(logoImage)\n logo.imageSize = new Size(20, 20)\n\n let modeTxt = titleStack.addText('Salmon Run')\n modeTxt.font = Font.boldRoundedSystemFont(16)\n modeTxt.textColor = Color.white()\n modeTxt.shadowRadius = 1\n modeTxt.shadowOffset = new Point(0,1)\n \n \/\/\n \/\/ STAGES\n \/\/\n\n let now = Date.now()\n\n let schedules = json[\"details\"]\n let schedule = schedules[stageIndex]\n\n \/\/ Current mode data\n const stage = schedule.stage\n const stageName = stage.name\n const stageImgUrl = stage.image\n\n \/\/ Display Stage image\n let stageReq = new Request('https:\/\/splatoon2.ink\/assets\/splatnet' + stageImgUrl)\n let stageImage = await stageReq.loadImage()\n w.backgroundImage = stageImage\n\n \/\/ Gradient overlay\n let gradient = new LinearGradient()\n gradient.locations = [0, 1]\n gradient.colors = [\n new Color(\"00000000\"),\n new Color(\"000000AA\")\n ]\n w.backgroundGradient = gradient\n\n let stageNameTxt = w.addText(stageName)\n stageNameTxt.font = Font.boldRoundedSystemFont(12)\n stageNameTxt.textColor = Color.white()\n stageNameTxt.shadowRadius = 1\n stageNameTxt.shadowOffset = new Point(0,1)\n\n let gear = merchandiseJson[\"coop\"][\"reward_gear\"][\"gear\"]\n let gearImageUrl = 'https:\/\/splatoon2.ink\/assets\/splatnet'+gear.image\n let gearImageReq = new Request(gearImageUrl)\n let gearImage = await gearImageReq.loadImage()\n \n let gearStack = w.addStack()\n gearStack.addSpacer()\n let gearContainer = gearStack.addStack()\n gearContainer.backgroundColor = new Color(\"FFFFFF55\")\n gearContainer.setPadding(2,2,2,2)\n gearContainer.cornerRadius = 4\n let gearImageDisplay = gearContainer.addImage(gearImage)\n gearImageDisplay.imageSize = new Size(20, 20)\n\n let spacer = w.addSpacer()\n\n \/\/ Time display\n let startDate = new Date(schedule.start_time * 1000)\n let endDate = new Date(schedule.end_time * 1000)\n let startDateText = dateFormatter.string(startDate)\n let endDateText = dateFormatter.string(endDate)\n let isOpen = (schedule.start_time * 1000) < now && now < (schedule.end_time * 1000)\n let isSoon = now < (schedule.start_time * 1000) && stageIndex == 0\n \n let stageStack = w.addStack()\n stageStack.spacing = 5\n \n \/\/ Stage info\n let stageInfoStack = stageStack.addStack()\n stageInfoStack.layoutVertically()\n\n let stageTitleStack = stageInfoStack.addStack()\n stageTitleStack.spacing = 5\n if (isOpen || isSoon) {\n let relativeDateStack = stageTitleStack.addStack()\n let relativeDateContainer = relativeDateStack.addStack() \/\/ container\n relativeDateContainer.backgroundColor = new Color(bgColor)\n relativeDateContainer.cornerRadius = 4\n let text = isSoon ? 'Soon' : 'Open'\n let relativeDateTxt = relativeDateContainer.addText(text)\n relativeDateTxt.font = Font.boldRoundedSystemFont(12)\n relativeDateTxt.textColor = Color.white()\n\n if (isSoon) {\n relativeDateStack.addSpacer()\n \n let relativeStartDateDisplay = relativeDateStack.addDate(startDate)\n relativeStartDateDisplay.font = Font.boldRoundedSystemFont(11)\n relativeStartDateDisplay.textColor = Color.white()\n relativeStartDateDisplay.lineLimit = 1\n relativeStartDateDisplay.minimumScaleFactor = 0.5\n relativeStartDateDisplay.applyRelativeStyle()\n }\n }\n\n let dateTxt = isOpen ? '- '+endDateText : (startDateText+' - '+endDateText)\n let stageDateTxt = stageInfoStack.addText(dateTxt)\n stageDateTxt.font = Font.boldRoundedSystemFont(11)\n stageDateTxt.textColor = Color.white()\n stageDateTxt.lineLimit = 2\n stageDateTxt.minimumScaleFactor = 0.8\n stageDateTxt.shadowRadius = 1\n stageDateTxt.shadowOffset = new Point(0,1)\n\n let stageWeaponsStack = stageInfoStack.addStack()\n stageWeaponsStack.spacing = 5\n let stageWeapons = schedule.weapons\n for (j=0; j<stageWeapons.length; j++) {\n let weaponDetails = stageWeapons[j]\n let weapon = weaponDetails.weapon != null ? weaponDetails.weapon : (weaponDetails.coop_special_weapon != null ? weaponDetails.coop_special_weapon : null)\n if (weapon != null) {\n var weaponURL = 'https:\/\/splatoon2.ink\/assets\/splatnet' + weapon.image\n if (weapon.image.startsWith(\"assets\")) {\n weaponURL = 'https:\/\/splatoon2.ink\/' + weapon.image\n }\n let weaponReq = new Request(weaponURL)\n let weaponImage = await weaponReq.loadImage()\n weaponImageDisplay = stageWeaponsStack.addImage(weaponImage)\n weaponImageDisplay.imageSize = new Size(24, 24)\n }\n }\n \n return w\n}\n\n\/\/Load the Splatoon 2 Salmon Run Schedule JSON\nasync function loadJson() {\n let url = \"https:\/\/splatoon2.ink\/data\/coop-schedules.json\"\n let req = new Request(url)\n let textres = await req.loadString()\n let json = JSON.parse(textres)\n return json\n}\n\n\/\/Load the Splatoon 2 Salmon Run Timeline JSON\nasync function loadMerchandiseJson() {\n let url = \"https:\/\/splatoon2.ink\/data\/timeline.json\"\n let req = new Request(url)\n let textres = await req.loadString()\n let json = JSON.parse(textres)\n return json\n}\n",
"share_sheet_inputs" : [
]
}