Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var lang = Device.language();
- var widgetArgs;
- if (config.runsInApp) {
- let alert = new Alert();
- alert.title = "Choose an action";
- alert.addAction("Customize widget");
- alert.addAction("View example");
- alert.addCancelAction("Cancel");
- let option = await alert.presentAlert();
- if (option == 0){
- let imageAlert = new Alert();
- imageAlert.title = (lang == "es") ? "Imagen de fondo" : "Background image";
- imageAlert.message = (lang == "es") ? "Si no se provee una imagen se utilizarán los fondos default (deben descargarse primero y colocarse en la carpeta de Scriptable)." : "If no image is provided, default backgrounds will be used (must be downloaded first and placed inside the Scriptable folder).";
- imageAlert.addAction((lang == "es") ? "Seleccionar de la galería" : "Choose from gallery");
- imageAlert.addAction((lang == "es") ? "Utilizar fondos default" : "Use default backgrounds");
- imageAlert.addAction((lang == "es") ? "Descargar fondos default" : "Download default backgrounds");
- imageAlert.addCancelAction((lang == "es") ? "Cancelar" : "Cancel");
- let imageOption = await imageAlert.presentAlert();
- switch (imageOption){
- case 0:
- let imageSelected = await Photos.fromLibrary();
- let dp = await DocumentPicker.exportImage(imageSelected);
- var pathElements = dp[0].split("/");
- break;
- case 1:
- break;
- case 2:
- Safari.open("https://mega.nz/folder/tZJXxSDR#gHBnSzCfSdpOR0jdMfhQAA");
- break;
- default:
- return;
- }
- let paramsAlert = new Alert();
- paramsAlert.title = (lang == "es") ? "Escribe tus preferencias" : "Write down your preferences";
- paramsAlert.message = (lang == "es") ? "El contenido entre paréntesis representa ejemplos de posibles valores para ese parámetro." : "The content between parenthesis represent possible values for that parameter.";
- paramsAlert.addTextField(((lang == "es") ? "Margen superior" : "Top margin") + " (20)");
- paramsAlert.addTextField(((lang == "es") ? "Color del texto" : "Text color") + " (white, black, etc.)");
- paramsAlert.addTextField(((lang == "es") ? "Tamaño del texto" : "Text size") + " (small, medium, big)");
- paramsAlert.addTextField(((lang == "es") ? "Listado de Pokemon" : "Pokemon list") + " (1-151)");
- paramsAlert.addTextField(((lang == "es") ? "Probabilidad Shiny" : "Shiny chance") + " (496)");
- paramsAlert.addTextField(((lang == "es") ? "Tamaño del widget" : "Widget size") + " (small, medium)");
- paramsAlert.addAction((lang == "es") ? "Listo" : "Done");
- paramsAlert.addCancelAction((lang == "es") ? "Cancelar" : "Cancel");
- let params = await paramsAlert.presentAlert();
- if (params == -1)
- return;
- for (i=0; i<6; i++) {
- if (paramsAlert.textFieldValue(i) == "")
- throw Error("All parameters are required.");
- }
- widgetArgs = paramsAlert.textFieldValue(0) + "|" +
- paramsAlert.textFieldValue(1) + "|" +
- paramsAlert.textFieldValue(2) + "|" +
- paramsAlert.textFieldValue(3) + "|" +
- paramsAlert.textFieldValue(4) + "|" +
- paramsAlert.textFieldValue(5);
- if (pathElements !== undefined){
- widgetArgs = widgetArgs + "|" + pathElements[pathElements.length - 1];
- }
- let finalAlert = new Alert();
- finalAlert.title = (lang == "es") ? "Estos son tus parámetros" : "These are your parameters";
- finalAlert.message = (lang == "es") ? "Agrega un widget de Scriptable en tu pantalla de inicio. En las opciones, agrega el nombre de tu script y pega estos parámetros." : "Add a Scriptable widget to your homescreen. On settings, add the name of your script and paste these parameters.";
- finalAlert.addTextField("", widgetArgs);
- finalAlert.addAction((lang == "es") ? "Ver resultado" : "View result");
- finalAlert.addCancelAction((lang == "es") ? "Salir" : "Exit");
- let final = await finalAlert.presentAlert();
- if (final == 1)
- return;
- }
- else if (option == -1){
- return;
- }
- }
- if (config.runsInWidget)
- widgetArgs = args.widgetParameter;
- log(widgetArgs)
- //Default parameters for testing
- if (widgetArgs === undefined)
- widgetArgs = "45|black|medium|1-650|496|medium";
- log(widgetArgs)
- var argsArray = widgetArgs.split("|");
- var argsCount = argsArray.length;
- if (argsCount < 6 || argsCount > 7)
- throw new Error("Number of parameters must be beween 6 and 7. " + argsCount + " given.");
- /* --------------- */
- /* Text settings */
- /* --------------- */
- // Set text color
- var textColor = argsArray[1];
- switch (textColor) {
- case "black":
- textColor = Color.black();
- break;
- case "blue":
- textColor = Color.blue();
- break;
- case "brown":
- textColor = Color.brown();
- break;
- case "cyan":
- textColor = Color.cyan();
- break;
- case "green":
- textColor = Color.green();
- break;
- case "orange":
- textColor = Color.orange();
- break;
- case "purple":
- textColor = Color.purple();
- break;
- case "red":
- textColor = Color.red();
- break;
- case "white":
- textColor = Color.white();
- break;
- case "yellow":
- textColor = Color.yellow();
- break;
- default:
- throw new Error("Invalid color.");
- }
- //Set date
- var today = new Date();
- var days, months = [];
- if (lang == "es") {
- days = ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'];
- months = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];
- }
- else if (lang == "de"){
- days = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'];
- months = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'July', 'August', 'September', 'Oktober', 'November', 'Dezember'];
- }
- else {
- days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
- months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
- }
- var currentWeekday = days[today.getDay()];
- var currentMonth = months[today.getMonth()];
- var currentDay = today.getDate();
- var hour = today.getHours();
- var fullDate = currentMonth + " " + currentDay;
- /* --------------- */
- /* Pokemon code */
- /* --------------- */
- var pokemonLimits = argsArray[3].split("-");
- var randomPoke = Math.floor(Math.random() * (parseInt(pokemonLimits[1]) - parseInt(pokemonLimits[0]))) + parseInt(pokemonLimits[0]);
- var shinyChance = argsArray[4];
- var shinyResult = Math.floor(Math.random() * shinyChance);
- var isShiny = false;
- if (shinyResult == 0)
- isShiny = true;
- const r = new Request("https://pokeapi.co/api/v2/pokemon/" + randomPoke);
- var apiResult = await r.loadJSON();
- var pokemon = [];
- pokemon.name = apiResult.name.charAt(0).toUpperCase() + apiResult.name.slice(1);
- pokemon.sprite = (apiResult.sprites.versions["generation-v"]["black-white"].front_default != null)
- ? apiResult.sprites.versions["generation-v"]["black-white"].front_default
- : apiResult.sprites.versions["generation-vii"]["ultra-sun-ultra-moon"].front_default;
- pokemon.type = apiResult.types[0].type.name;
- if (isShiny)
- pokemon.sprite = apiResult.sprites.front_shiny;
- var sprRequest = new Request(pokemon.sprite);
- pokemon.sprite = await sprRequest.loadImage();
- /* ---------------- */
- /* Background image */
- /* ---------------- */
- var scriptablePath = "/var/mobile/Library/Mobile Documents/iCloud~dk~simonbs~Scriptable/Documents/";
- var imageName, imageFullPath;
- var widgetSize = argsArray[5];
- if (argsCount == 7)
- imageName = argsArray[6];
- else {
- if (widgetSize == "small") {
- if (hour >= 6 && hour < 18)
- imageName = "poke_small_day.JPG";
- else
- imageName = "poke_small_night.JPG";
- } else {
- if (hour >= 6 && hour < 18) {
- switch(pokemon.type) {
- case "rock":
- imageName = "rock_day.JPG";
- break;
- case "ground":
- imageName = "rock_day.JPG";
- break;
- case "bug":
- imageName = "bug_day.JPG";
- break;
- case "ice":
- imageName = "ice_day.JPG";
- break;
- case "water":
- imageName = "water_day.JPG";
- break;
- case "ghost":
- imageName = "ghost_day.JPG";
- break;
- case "dark":
- imageName = "ghost_day.JPG";
- break;
- case "steel":
- imageName = "rock_day.JPG";
- break;
- default:
- imageName = "poke_day.JPG";
- break;
- }
- }
- else {
- switch(pokemon.type) {
- case "rock":
- imageName = "rock_night.JPG";
- break;
- case "ground":
- imageName = "rock_night.JPG";
- break;
- case "bug":
- imageName = "bug_night.JPG";
- break;
- case "ice":
- imageName = "ice_night.JPG";
- break;
- case "water":
- imageName = "water_night.JPG";
- break;
- case "ghost":
- imageName = "ghost_night.JPG";
- break;
- case "dark":
- imageName = "ghost_night.JPG";
- break;
- case "steel":
- imageName = "rock_night.JPG";
- break;
- default:
- imageName = "poke_night.JPG";
- break;
- }
- }
- }
- }
- imagePath = scriptablePath + imageName;
- var fm = FileManager.iCloud();
- if (fm.fileExists(imagePath)) {
- //Download image from iCloud if it exists but it's not downloaded
- if (!fm.isFileDownloaded(imagePath)) {
- fm.downloadFileFromiCloud(imagePath);
- }
- } else {
- throw new Error("Image not found. Remember that file name AND format are case-sensitive.");
- }
- /* --------------- */
- /* Widget Creation */
- /* --------------- */
- var pokemonWidget = new ListWidget();
- pokemonWidget.setPadding(Number(argsArray[0]), 25, 10, 10);
- log(Number(argsArray[0]))
- //pokemonWidget.setPadding(top, leading, bottom, trailing)
- pokemonWidget.url = "https://pokemondb.net/pokedex/" + pokemon.name;
- //Top margin
- if (fontSize == "medium")
- fontSizeValues = [12, 16];
- else if (fontSize == "big")
- fontSizesValues = [14, 24];
- var fontSize = argsArray[2];
- var fontSizeValues = [10,14];
- // Add shiny icon to text
- if (isShiny)
- fullDate = fullDate + " \u2728";
- let mainStack = pokemonWidget.addStack()
- let textStack = mainStack.addStack()
- let imageStack = mainStack.addStack()
- mainStack.layoutHorizontally()
- textStack.layoutVertically()
- //pokemonWidget.addSpacer(71);
- // Weekday label
- //var weekdayLabel = pokemonWidget.addText(currentWeekday);
- var weekdayLabel = textStack.addText(currentWeekday);
- weekdayLabel.font = Font.systemFont(fontSizeValues[0]);
- weekdayLabel.textColor = textColor;
- // Date label
- //var dateLabel = pokemonWidget.addText(fullDate);
- var dateLabel = textStack.addText(fullDate);
- dateLabel.font = Font.boldSystemFont(fontSizeValues[1]);
- dateLabel.textColor = textColor;
- //var pokenumber = pokemonWidget.addText(pokemon.name+" #: "+ randomPoke.toString());
- var pokenumber = textStack.addText(pokemon.name+" #: "+ randomPoke.toString());
- pokenumber.font = Font.boldSystemFont(fontSizeValues[0]);
- pokenumber.textColor = textColor;
- // Background image
- pokemonWidget.backgroundImage = Image.fromFile(imagePath);
- // Pokemon sprite
- //var widgetImg = pokemonWidget.addImage(pokemon.sprite);
- imageStack.addSpacer()
- var widgetImg = imageStack.addImage(pokemon.sprite);
- widgetImg.rightAlignImage();
- widgetImg.imageSize = new Size(150, 150);
- if (widgetSize == "small"){
- pokemonWidget.presentSmall();
- }else{
- pokemonWidget.presentMedium();
- }
- Script.setWidget(pokemonWidget);
Add Comment
Please, Sign In to add comment