<html>
<head>
  <title>Clock</title>
  <style>
    body { padding: 5dip; }

    #clocks {
      size: *;
      flow: horizontal-flow;
    }

    .city {
      flow: vertical;
      size: *;
    }

    .city > caption {
      width: *;
      padding: 5dip;
      flow:horizontal;
      horizontal-align: center;
      font-size: 11pt;
      font-weight: 700;
    }

    .city > clock, .edit {
      margin-right: *;
      margin-left: *;
      margin-bottom: 5dip;
    }

    .city > .edit {
      flow: horizontal;
      width: max-content;
    }

    clock {
      behavior: native-clock;
      display: block;
      min-width: 150dip;
      min-height: 150dip;
    }

    .native-text {
      behavior: native-text;
      display: block;
      min-height: 100dip;
      min-width: 100dip;
      outline: 1px solid orange;
    }

    .italic {
      font-style: italic;
    }
    .bold {
      font-weight: bold;
    }
  </style>
  <script type="text/tiscript">

    // called from Rust
    function getLocalTime() {
      var d = new Date();
      return [d.hour, d.minute, d.second];
    }

    function getUtcTime(offset) {
      var d = new Date();
      d.UTChour += offset;
      return [d.UTChour, d.UTCminute, d.UTCsecond];
    }

    var timeSet = $(#set-time);
    var timeEdit = $(#edit-time);
    var timeShow = $(#show-time);

    timeEdit << event change {
      var now = this.value;
      var local = [now.hour, now.minute, now.second];
      stdout.printf("timeEdit: %v %v\n", now, local);
      timeShow.value = local;
    }

    timeSet << event click {
      var now = new Date();
      var local = [now.hour, now.minute, now.second];
      stdout.printf("timeSet: %v %v\n", now, local);
      timeEdit.value = now;
      timeShow.value = local;
    }

    function self.ready() {
      var now = new Date();
      var local = [now.hour, now.minute, now.second];
      stdout.printf("initial time: %v %v\n", now, local);
      timeShow.value = local;
    }

    // update window icon
    function setIcon() {
      var clock = $(clock);

      // get clock element size
      var (w, h) = clock.box(#dimension, #border);
      if (w == 0 || h == 0)
        return;

      // make a snapshot of it with 32x32 size
      var img = new Image(clock, w, h, 32, 32);
      var png = img.toBytes();
      img.destroy();

      // make an icon from the snapshot
      var icon = Image.fromBytes(png);
      view.windowIcon = icon;

      return true; // continue to update icon ;)
    }
    self.timer(1000, setIcon);

  </script>
</head>
<body>

  <div id="clocks" some>
    <div class="city">
      <caption>London</caption>
      <clock utc="0" title="UTC+0"></clock>
    </div>

    <div class="city">
      <caption>Tokyo</caption>
      <clock utc="+9" title="UTC+9"></clock>
    </div>

    <div class="city">
      <caption>New York</caption>
      <clock utc="-4" title="UTC-4"></clock>
    </div>
  </div>

  <div id="local" some>
    <div class="city">
      <caption>Frozen time</caption>
      <clock frozen id="show-time"></clock>
      <div class="edit">
        <widget type="time" value="now" id="edit-time" title="Change time of the drawn clock" />
        <widget type="button" id="set-time" title="Reset back to local time">=</widget>
      </div>
    </div>
  </div>

  <div>
    <div class="city">
      <caption>Text</caption>
      <div class="native-text">static text</div>
    </div>
  </div>


</body>
</html>