{
  "version": 3,
  "sources": ["day_strips.js"],
  "sourcesContent": ["/*\n * static/js/day_strips.js \u2014 moves the day strips' selected block\n * (SNOW-1219).\n *\n * templates/includes/_day_strips.html renders every block's figures and\n * readings, with the server's choice selected. This module moves the\n * selection when a block button is pressed or the timeline is dragged:\n * it writes `--block` on the section (the capsule and the bands follow)\n * and flips `data-selected` / `aria-pressed` on the block-indexed\n * elements. It writes no text, so every word stays server-rendered.\n *\n * Delegated from the document, because the map's weather sheet injects the\n * strips after load and re-injects them on every symbol tap; nothing needs\n * binding per render.\n *\n * Depends on day_strips_core.js, loaded before it.\n */\n\n(function dayStripsInit() {\n  'use strict';\n\n  var core = self.pwaDayStripsCore;\n  if (!core) return;\n\n  /**\n   * Select block `index` in one strips section.\n   *\n   * @param {Element} section The `[data-day-strips]` element.\n   * @param {number} index The block, 0-7.\n   */\n  function select(section, index) {\n    if (!(section instanceof HTMLElement)) return;\n    section.style.setProperty('--block', String(index));\n    section.querySelectorAll('[data-block]').forEach(function (el) {\n      var on = Number(el.getAttribute('data-block')) === index;\n      el.toggleAttribute('data-selected', on);\n      if (el.hasAttribute('aria-pressed')) {\n        el.setAttribute('aria-pressed', on ? 'true' : 'false');\n      }\n    });\n    section.querySelectorAll('[data-boundary]').forEach(function (el) {\n      var at = Number(el.getAttribute('data-boundary'));\n      el.toggleAttribute('data-selected', at === index || at === index + 1);\n    });\n  }\n\n  /**\n   * Select the block under a pointer on the timeline.\n   *\n   * @param {Element} track A `[data-day-strips-track]` element.\n   * @param {number} clientX The pointer's x.\n   */\n  function selectAt(track, clientX) {\n    var rect = track.getBoundingClientRect();\n    var index = core.blockAt(clientX, rect.left, rect.width);\n    var section = track.closest('[data-day-strips]');\n    if (index !== null && section) select(section, index);\n  }\n\n  /** @type {?Element} */\n  var dragging = null;\n\n  /**\n   * Whether the gesture under way left the block it started on. A touch\n   * keeps its implicit pointer capture, so the click that ends a scrub\n   * lands on the button it STARTED on; honouring it would put the\n   * selection back where the drag began.\n   */\n  var dragged = false;\n\n  document.addEventListener('click', function (event) {\n    var target = event.target;\n    if (!(target instanceof Element)) return;\n    // A keyboard activation has detail 0 and is always honoured.\n    if (dragged && event.detail > 0) {\n      dragged = false;\n      return;\n    }\n    var button = target.closest('[data-day-strips] button[data-block]');\n    if (!button) return;\n    var section = button.closest('[data-day-strips]');\n    if (section) select(section, Number(button.getAttribute('data-block')));\n  });\n\n  document.addEventListener('pointerdown', function (event) {\n    var target = event.target;\n    if (!(target instanceof Element)) return;\n    // Only the timeline scrubs. A chart is not a control: on a touch\n    // screen a touch there is the start of a scroll, and the chart may\n    // be in view while the timeline naming the time is not.\n    var track = target.closest('[data-day-strips-track]');\n    if (!track) return;\n    dragging = track;\n    dragged = false;\n    selectAt(track, event.clientX);\n  });\n\n  document.addEventListener('pointermove', function (event) {\n    if (!dragging) return;\n    var section = dragging.closest('[data-day-strips]');\n    var before = section && section.style.getPropertyValue('--block');\n    selectAt(dragging, event.clientX);\n    if (section && section.style.getPropertyValue('--block') !== before) {\n      dragged = true;\n    }\n  });\n\n  ['pointerup', 'pointercancel'].forEach(function (type) {\n    document.addEventListener(type, function () {\n      dragging = null;\n    });\n  });\n})();\n"],
  "mappings": "CAkBC,UAAyB,CACxB,aAEA,IAAIA,EAAO,KAAK,iBAChB,GAAI,CAACA,EAAM,OAQX,SAASC,EAAOC,EAASC,EAAO,CACxBD,aAAmB,cACzBA,EAAQ,MAAM,YAAY,UAAW,OAAOC,CAAK,CAAC,EAClDD,EAAQ,iBAAiB,cAAc,EAAE,QAAQ,SAAUE,EAAI,CAC7D,IAAIC,EAAK,OAAOD,EAAG,aAAa,YAAY,CAAC,IAAMD,EACnDC,EAAG,gBAAgB,gBAAiBC,CAAE,EAClCD,EAAG,aAAa,cAAc,GAChCA,EAAG,aAAa,eAAgBC,EAAK,OAAS,OAAO,CAEzD,CAAC,EACDH,EAAQ,iBAAiB,iBAAiB,EAAE,QAAQ,SAAUE,EAAI,CAChE,IAAIE,EAAK,OAAOF,EAAG,aAAa,eAAe,CAAC,EAChDA,EAAG,gBAAgB,gBAAiBE,IAAOH,GAASG,IAAOH,EAAQ,CAAC,CACtE,CAAC,EACH,CAQA,SAASI,EAASC,EAAOC,EAAS,CAChC,IAAIC,EAAOF,EAAM,sBAAsB,EACnCL,EAAQH,EAAK,QAAQS,EAASC,EAAK,KAAMA,EAAK,KAAK,EACnDR,EAAUM,EAAM,QAAQ,mBAAmB,EAC3CL,IAAU,MAAQD,GAASD,EAAOC,EAASC,CAAK,CACtD,CAGA,IAAIQ,EAAW,KAQXC,EAAU,GAEd,SAAS,iBAAiB,QAAS,SAAUC,EAAO,CAClD,IAAIC,EAASD,EAAM,OACnB,GAAMC,aAAkB,QAExB,IAAIF,GAAWC,EAAM,OAAS,EAAG,CAC/BD,EAAU,GACV,MACF,CACA,IAAIG,EAASD,EAAO,QAAQ,sCAAsC,EAClE,GAAKC,EACL,KAAIb,EAAUa,EAAO,QAAQ,mBAAmB,EAC5Cb,GAASD,EAAOC,EAAS,OAAOa,EAAO,aAAa,YAAY,CAAC,CAAC,GACxE,CAAC,EAED,SAAS,iBAAiB,cAAe,SAAUF,EAAO,CACxD,IAAIC,EAASD,EAAM,OACnB,GAAMC,aAAkB,QAIxB,KAAIN,EAAQM,EAAO,QAAQ,yBAAyB,EAC/CN,IACLG,EAAWH,EACXI,EAAU,GACVL,EAASC,EAAOK,EAAM,OAAO,GAC/B,CAAC,EAED,SAAS,iBAAiB,cAAe,SAAUA,EAAO,CACxD,GAAKF,EACL,KAAIT,EAAUS,EAAS,QAAQ,mBAAmB,EAC9CK,EAASd,GAAWA,EAAQ,MAAM,iBAAiB,SAAS,EAChEK,EAASI,EAAUE,EAAM,OAAO,EAC5BX,GAAWA,EAAQ,MAAM,iBAAiB,SAAS,IAAMc,IAC3DJ,EAAU,IAEd,CAAC,EAED,CAAC,YAAa,eAAe,EAAE,QAAQ,SAAUK,EAAM,CACrD,SAAS,iBAAiBA,EAAM,UAAY,CAC1CN,EAAW,IACb,CAAC,CACH,CAAC,CACH,GAAG",
  "names": ["core", "select", "section", "index", "el", "on", "at", "selectAt", "track", "clientX", "rect", "dragging", "dragged", "event", "target", "button", "before", "type"]
}
