Advertisement
Guest User

simbio-scriptable

a guest
Jan 23rd, 2025
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Variables used by Scriptable.
  2. // These must be at the very top of the file. Do not edit.
  3. // icon-color: deep-green; icon-glyph: leaf;
  4. let req = new Request("https://www.simbio.si/sl/moj-dan-odvoza-odpadkov");
  5. req.method = "POST";
  6. req.headers = {
  7.     "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
  8. };
  9. req.addParameterToMultipart("action", "simbioOdvozOdpadkov");
  10. req.addParameterToMultipart("query", "ULICA 12 CELJE");
  11.  
  12. let res = await req.loadJSON();
  13.  
  14. /*
  15.     response:
  16.  
  17.     [{
  18.         "_id": "665fc62c8a7f6faa",
  19.         "id": "11222264",
  20.         "name": "ULICA 12 ",
  21.         "query": "ulica 12 celje",
  22.         "city": "CELJE",
  23.         "next_mko": "četrtek, 13. 6. 2024",
  24.         "next_emb": "četrtek, 6. 6. 2024",
  25.         "next_bio": "ponedeljek, 10. 6. 2024"
  26.     }]
  27. */
  28.  
  29. let data = res[0];
  30.  
  31. let now = new Date();
  32. now.setHours(- now.getTimezoneOffset()/60,0,0,0);
  33.  
  34. let date_mko = data.next_mko.replace(/[^\d\.]/g, "").split('.');
  35. let next_mko = new Date(date_mko[2], date_mko[1] - 1, date_mko[0]);
  36. next_mko.setHours(- next_mko.getTimezoneOffset()/60);
  37. if (next_mko < now) {
  38.     next_mko.setDate(next_mko.getDate() + 14);
  39. }
  40.  
  41. let date_emb = data.next_emb.replace(/[^\d\.]/g, "").split('.');
  42. let next_emb = new Date(date_emb[2], date_emb[1] - 1, date_emb[0]);
  43. next_emb.setHours(- next_emb.getTimezoneOffset()/60);
  44. if (next_emb < now) {
  45.     next_emb.setDate(next_emb.getDate() + 14);
  46. }
  47.  
  48. let date_bio = data.next_bio.replace(/[^\d\.]/g, "").split('.');
  49. let next_bio = new Date(date_bio[2], date_bio[1] - 1, date_bio[0]);
  50. next_bio.setHours(- next_bio.getTimezoneOffset()/60);
  51. if (next_bio < now) {
  52.     next_bio.setDate(next_bio.getDate() + 14);
  53. }
  54.  
  55. let widget_data = [
  56.     {
  57.         name: 'Mešani odpadki', // 'MKO'
  58.         date: next_mko,
  59.         diff: Math.floor((next_mko - now) / 86400000),
  60.         day: next_mko.toLocaleDateString('sl-SI', { weekday: 'long' }),
  61.         color1: '#4cb300',
  62.         color2: '#407000',
  63.     },
  64.     {
  65.         name: 'Embalaža', // 'EMB'
  66.         date: next_emb,
  67.         diff: Math.floor((next_emb - now) / 86400000),
  68.         day: next_emb.toLocaleDateString('sl-SI', { weekday: 'long' }),
  69.         color1: '#ffd600',
  70.         color2: '#ffa600',
  71.     },
  72.     {
  73.         name: 'Biološki odpadki', // 'BIO'
  74.         date: next_bio,
  75.         diff: Math.floor((next_bio - now) / 86400000),
  76.         day: next_bio.toLocaleDateString('sl-SI', { weekday: 'long' }),
  77.         color1: '#b37800',
  78.         color2: '#704500',
  79.     }
  80. ];
  81.  
  82. // sort by date
  83. widget_data.sort((a, b) => a.date - b.date);
  84.  
  85. const widget = new ListWidget();
  86. let nextRefresh = Date.now() + 1000 * 60 * 60 * 3; // 3 hours
  87. widget.refreshAfterDate = new Date(nextRefresh);
  88.  
  89. const padding = 16;
  90. widget.setPadding(padding * 2, padding, padding, padding);
  91.  
  92. const gradient = new LinearGradient()
  93. gradient.locations = [0, 1]
  94. gradient.colors = [
  95.     new Color(widget_data[0].color1),
  96.     new Color(widget_data[0].color2)
  97. ]
  98. widget.backgroundGradient = gradient
  99.  
  100. widget_data.forEach(element => {
  101.     const header = widget.addText(element.name);
  102.     header.font = Font.mediumSystemFont(12);
  103.     header.textColor = Color.white();
  104.     header.shadowColor = new Color("#000000", 0.3);
  105.     header.shadowRadius = 1;
  106.     header.shadowOffset = new Point(2, 2);
  107.     header.minimumScaleFactor = 1;
  108.  
  109.     let day;
  110.  
  111.     if (element.diff > 7) {
  112.         day = 'čez ' + element.diff + ' dni';
  113.     } else {
  114.         day = element.diff == 0 ? 'danes' : element.diff == 1 ? 'jutri' : element.day;
  115.     }
  116.  
  117.     const disclaimer = widget.addText(day);
  118.     disclaimer.font = Font.boldSystemFont(14);
  119.     disclaimer.textColor = Color.white();
  120.     disclaimer.shadowColor = new Color("#000000", 0.3);
  121.     disclaimer.shadowRadius = 1;
  122.     disclaimer.shadowOffset = new Point(2, 2);
  123.     disclaimer.minimumScaleFactor = 1;
  124.  
  125.     widget.addSpacer(padding);
  126. });
  127.  
  128. Script.setWidget(widget);
  129. Script.complete();
  130. widget.presentSmall();
  131.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement