{ "version": 3, "sources": ["../../../javascript/lib/cookie.js", "../../../javascript/all/sections/calendar/frame_url.js", "../../../javascript/lib/browser_time_zone.js", "../../../javascript/calendar_preload.js"], "sourcesContent": ["export function getCookie(name) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : []\n const prefix = `${encodeURIComponent(name)}=`\n const cookie = cookies.find(cookie => cookie.startsWith(prefix))\n\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\")\n return value ? decodeURIComponent(value) : undefined\n }\n}\n\nconst twentyYears = 20 * 365 * 24 * 60 * 60 * 1000\n\nexport function setCookie(name, value) {\n const body = [ name, value ].map(encodeURIComponent).join(\"=\")\n const expires = new Date(Date.now() + twentyYears).toUTCString()\n const cookie = `${body}; path=/; expires=${expires}`\n document.cookie = cookie\n}\n\nexport function removeCookie(name) {\n document.cookie = `${encodeURIComponent(name)}=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT`\n}\n", "import { getCookie, removeCookie } from \"../../../lib/cookie\"\n\nexport function frameUrl(path, { filters = {}, windowStart = null } = {}) {\n const url = new URL(path, window.location.origin)\n\n for (const [ name, value ] of Object.entries(filters)) {\n url.searchParams.set(name, value)\n }\n\n if (windowStart) {\n url.searchParams.set(\"window_starts_on\", windowStart)\n }\n\n return url\n}\n\nconst VIEW_KEY = \"calendar/view\"\n\nexport const viewPreference = {\n get() {\n return getItem(localStorage, VIEW_KEY) || migrateCookieView() || \"calendar\"\n },\n set(view) {\n setItem(localStorage, VIEW_KEY, view)\n }\n}\n\n// The view preference used to live in a permanent cookie the server read.\nfunction migrateCookieView() {\n const LEGACY_VIEW_COOKIE = \"calendar_view\"\n const view = getCookie(LEGACY_VIEW_COOKIE)\n\n if ([\"calendar\", \"agenda\"].includes(view)) {\n viewPreference.set(view)\n removeCookie(LEGACY_VIEW_COOKIE)\n return view\n }\n}\n\nconst FILTERS_KEY = \"calendar/global/filters\"\n\nexport const filterPreference = {\n defaults: {\n people: \"me\", // \"me\", \"all\"\n items: \"entries\", // \"all\", \"entries,assignables,projects\"\n buckets: \"all\" // \"all\", \"starred\", \"id,id,id\"\n },\n\n get() {\n return { ...this.defaults, ...JSON.parse(getItem(localStorage, FILTERS_KEY) || \"{}\") }\n },\n set(filters) {\n setItem(localStorage, FILTERS_KEY, JSON.stringify(filters))\n }\n}\n\nexport const windowStartPreference = {\n get(path) {\n return getItem(sessionStorage, windowStartsOnKey(path))\n },\n set(path, day) {\n setItem(sessionStorage, windowStartsOnKey(path), day)\n },\n take(path) {\n return takeItem(sessionStorage, windowStartsOnKey(path))\n }\n}\n\nfunction windowStartsOnKey(path) {\n return `calendar/window_starts_on:${path}`\n}\n\nfunction getItem(storage, key) { try { return storage.getItem(key) } catch { return null } }\nfunction setItem(storage, key, value) { try { storage.setItem(key, value) } catch { /* ignore */ } }\nfunction takeItem(storage, key) { const value = getItem(storage, key); removeItem(storage, key); return value }\nfunction removeItem(storage, key) { try { storage.removeItem(key) } catch { /* ignore */ } }\n", "import { getCookie, setCookie } from \"./cookie\"\n\nconst COOKIE = \"bc3_time_zone\"\n\nexport function rememberBrowserTimeZone() {\n const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone\n\n if (timeZone && getCookie(COOKIE) !== timeZone) {\n setCookie(COOKIE, timeZone)\n }\n}\n", "import { frameUrl, viewPreference, filterPreference, windowStartPreference } from \"./all/sections/calendar/frame_url\"\nimport { rememberBrowserTimeZone } from \"./lib/browser_time_zone\"\n\nconst script = document.currentScript\n\ntry {\n preloadCalendarFrame()\n} catch {\n // The calendar-frame controller loads the frame the regular way.\n}\n\nfunction preloadCalendarFrame() {\n // Loaded async, so bail if the calendar-frame controller won the race.\n if (document.querySelector(\"turbo-frame#calendar[src]\")) return\n\n rememberBrowserTimeZone()\n\n const link = document.createElement(\"link\")\n link.rel = \"preload\"\n link.as = \"fetch\"\n link.crossOrigin = \"anonymous\"\n link.href = frameUrl(urlFor(viewPreference.get()), {\n filters: filters(),\n windowStart: windowStartPreference.get(window.location.pathname)\n })\n document.head.append(link)\n}\n\nfunction urlFor(view) {\n if (view === \"agenda\") {\n return script.dataset.agendaUrl\n } else {\n return script.dataset.displayUrl\n }\n}\n\nfunction filters() {\n if (script.dataset.filtered) {\n return filterPreference.get()\n }\n}\n"], "mappings": "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", "names": ["getCookie", "name", "cookies", "prefix", "cookie", "value", "twentyYears", "setCookie", "body", "expires", "removeCookie", "frameUrl", "path", "filters", "windowStart", "url", "name", "value", "VIEW_KEY", "viewPreference", "getItem", "migrateCookieView", "view", "setItem", "LEGACY_VIEW_COOKIE", "getCookie", "removeCookie", "FILTERS_KEY", "filterPreference", "__spreadValues", "windowStartPreference", "windowStartsOnKey", "day", "takeItem", "storage", "key", "e", "removeItem", "COOKIE", "rememberBrowserTimeZone", "timeZone", "getCookie", "setCookie", "script", "preloadCalendarFrame", "rememberBrowserTimeZone", "link", "frameUrl", "urlFor", "viewPreference", "filters", "windowStartPreference", "view", "filterPreference"] }