{ "version": 3, "sources": ["../client/src/dom.ts", "../client/src/jsx.ts", "../client/src/audit.ts", "../client/src/menu.ts", "../client/src/mode.ts", "../client/src/flash.ts", "../client/src/link.ts", "../client/src/time.ts", "../client/src/autocomplete.ts", "../client/src/modal.ts", "../client/src/util.ts", "../client/src/tags.ts", "../client/src/form.ts", "../client/src/theme.ts", "../client/src/socket.ts", "../client/src/members.tsx", "../client/src/member.ts", "../client/src/comments.tsx", "../client/src/comment.ts", "../client/src/workspace.ts", "../client/src/permission.ts", "../client/src/team.ts", "../client/src/sprint.ts", "../client/src/stories.tsx", "../client/src/storymodal.ts", "../client/src/votes.tsx", "../client/src/vote.ts", "../client/src/story.ts", "../client/src/estimate.ts", "../client/src/reports.tsx", "../client/src/report.ts", "../client/src/standup.ts", "../client/src/feedbacks.tsx", "../client/src/feedback.ts", "../client/src/retro.ts", "../client/src/handle.ts", "../client/src/app.ts", "../client/src/client.ts"], "sourcesContent": ["export function els(selector: string, context?: Element): readonly T[] {\n let result: NodeListOf;\n if (context) {\n result = context.querySelectorAll(selector);\n } else {\n result = document.querySelectorAll(selector);\n }\n const ret: T[] = [];\n result.forEach((v) => {\n ret.push(v as T);\n });\n return ret;\n}\n\nexport function opt(selector: string, context?: Element): T | undefined {\n const e = els(selector, context);\n switch (e.length) {\n case 0:\n return undefined;\n case 1:\n return e[0];\n default:\n console.warn(`found [${e.length}] elements with selector [${selector}], wanted zero or one`);\n }\n}\n\nexport function req(selector: string, context?: Element): T {\n const res = opt(selector, context);\n if (!res) {\n throw new Error(`no element found for selector [${selector}]`);\n }\n return res;\n}\n\nexport function setHTML(el: string | HTMLElement, html: string) {\n if (typeof el === \"string\") {\n el = req(el);\n }\n el.innerHTML = html;\n return el;\n}\n\nexport function setDisplay(el: string | HTMLElement, condition: boolean, v = \"block\") {\n if (typeof el === \"string\") {\n el = req(el);\n }\n\n el.style.display = condition ? v : \"none\";\n return el;\n}\n\nexport function clear(el: string | HTMLElement) {\n return setHTML(el, \"\");\n}\n\nexport function setText(el: string | HTMLElement, text: string): HTMLElement {\n if (typeof el === \"string\") {\n el = req(el);\n }\n el.innerText = text;\n return el;\n}\n", "import {setHTML} from \"./dom\";\n\ndeclare global {\n namespace JSX { // eslint-disable-line @typescript-eslint/no-namespace, no-shadow\n type IntrinsicElements = {\n [elemName: string]: unknown;\n }\n }\n}\n\n// noinspection JSUnusedGlobalSymbols\nexport function JSX(tag: string, attrs: any[], ...args: Node[]) { // eslint-disable-line @typescript-eslint/no-explicit-any\n const e = document.createElement(tag);\n for (let name in attrs) {\n if (name === \"for\") {\n name = \"for\";\n }\n if (name === \"className\") {\n name = \"class\";\n }\n if (name && attrs.hasOwnProperty(name)) { // eslint-disable-line no-prototype-builtins\n const v = attrs[name];\n if (name === \"dangerouslySetInnerHTML\") {\n setHTML(e, v.__html); // eslint-disable-line no-underscore-dangle\n } else if (v === true) {\n e.setAttribute(name, name);\n } else if (v !== false && v !== null && v !== undefined) {\n e.setAttribute(name, v.toString());\n }\n }\n }\n for (let child of args) {\n if (Array.isArray(child)) {\n child.forEach((c) => {\n if (child === undefined || child === null) {\n throw new Error(`child array for tag [${tag}] is ${child}\\n${e.outerHTML}`);\n }\n if (c === undefined || c === null) {\n throw new Error(`child for tag [${tag}] is ${c}\\n${e.outerHTML}`);\n }\n if (typeof c === \"string\") {\n c = document.createTextNode(c);\n }\n e.appendChild(c);\n });\n } else if (child === undefined || child === null) {\n throw new Error(`child for tag [${tag}] is ${child}\\n${e.outerHTML}`);\n } else {\n if (!child.nodeType) {\n child = document.createTextNode(child.toString());\n }\n e.appendChild(child);\n }\n }\n return e;\n}\n", "import {opt} from \"./dom\";\n\nfunction renderAudit(msg: string, ...codes: unknown[]) {\n const li = document.createElement(\"li\");\n li.innerText = msg;\n for (const code of codes) {\n const pre = document.createElement(\"pre\");\n if (typeof code === \"string\") {\n pre.innerText = code;\n } else {\n pre.innerText = JSON.stringify(code, null, 2);\n }\n li.appendChild(pre);\n }\n return li;\n}\n\nexport function audit(msg: string, ...codes: any) { // eslint-disable-line @typescript-eslint/no-explicit-any\n const el = opt(\"#audit-log\");\n if (el) {\n el.appendChild(renderAudit(msg, ...codes));\n } else {\n console.log(\"### Audit ###\\n\" + msg, ...codes);\n }\n}\n", "import {els} from \"./dom\";\n\nexport function menuInit() {\n for (const n of els(\".menu-container .final\")) {\n n.scrollIntoView({block: \"center\"});\n }\n}\n", "import {els} from \"./dom\";\n\nconst l = \"mode-light\";\nconst d = \"mode-dark\";\n\nexport function modeInit() {\n for (const el of els(\".mode-input\")) {\n el.onclick = () => {\n switch (el.value) {\n case \"\":\n document.body.classList.remove(l);\n document.body.classList.remove(d);\n break;\n case \"light\":\n document.body.classList.add(l);\n document.body.classList.remove(d);\n break;\n case \"dark\":\n document.body.classList.remove(l);\n document.body.classList.add(d);\n break;\n }\n };\n }\n}\n", "function fade(el: HTMLElement) {\n setTimeout(() => {\n el.style.opacity = \"0\";\n setTimeout(() => el.remove(), 500);\n }, 5000);\n}\n\nexport function flashCreate(key: string, level: \"success\" | \"error\", msg: string) {\n let container = document.getElementById(\"flash-container\");\n if (container === null) {\n container = document.createElement(\"div\");\n container.id = \"flash-container\";\n document.body.insertAdjacentElement(\"afterbegin\", container);\n }\n const fl = document.createElement(\"div\");\n fl.className = \"flash\";\n\n const radio = document.createElement(\"input\");\n radio.type = \"radio\";\n radio.style.display = \"none\";\n radio.id = \"hide-flash-\" + key;\n fl.appendChild(radio);\n\n const label = document.createElement(\"label\");\n label.htmlFor = \"hide-flash-\" + key;\n const close = document.createElement(\"span\");\n close.innerHTML = \"\u00D7\";\n label.appendChild(close);\n fl.appendChild(label);\n\n const content = document.createElement(\"div\");\n content.className = \"content flash-\" + level;\n content.innerText = msg;\n fl.appendChild(content);\n\n container.appendChild(fl);\n fade(fl);\n}\n\nexport function flashInit() {\n const container = document.getElementById(\"flash-container\");\n if (container === null) {\n return flashCreate;\n }\n const x = container.querySelectorAll(\".flash\");\n if (x.length > 0) {\n for (const f of x) {\n fade(f);\n }\n }\n return flashCreate;\n}\n", "import {els} from \"./dom\";\n\nexport function linkInit() {\n for (const el of els(\".link-confirm\")) {\n el.onclick = () => {\n let msg = el.dataset.message as string;\n if (msg && msg.length === 0) {\n msg = \"Are you sure?\";\n }\n return confirm(msg);\n };\n }\n}\n", "import {els} from \"./dom\";\n\nexport function utc(date: Date) {\n const u = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());\n return new Date(u).toISOString().substring(0, 19).replace(\"T\", \" \");\n}\n\nexport function wireTime(el: HTMLElement) {\n const tsStr = el.dataset.timestamp;\n if (!tsStr) {\n console.log(\"invalid timestamp [\" + tsStr + \"]\", el);\n return;\n }\n const ts = new Date(tsStr);\n\n const tsEl = document.createElement(\"span\");\n tsEl.title = ts.toISOString();\n if (el.classList.contains(\"millis\")) {\n tsEl.innerText = ts.toISOString();\n } else {\n tsEl.innerText = ts.toLocaleString();\n }\n el.replaceChildren(tsEl);\n}\n\nexport function relativeTime(el: HTMLElement): string {\n const timestamp = el.dataset.timestamp;\n const str = (timestamp || \"\").replace(/-/gu, \"/\").replace(/[TZ]/gu, \" \") + \" UTC\";\n const date = new Date(str);\n const diff = (new Date().getTime() - date.getTime()) / 1000;\n const dayDiff = Math.floor(diff / 86400);\n const year = date.getFullYear();\n const month = date.getMonth() + 1;\n const day = date.getDate();\n\n if (isNaN(dayDiff) || dayDiff < 0 || dayDiff >= 31) {\n return year.toString() + \"-\" + (month < 10 ? \"0\" + month.toString() : month.toString()) + \"-\" + (day < 10 ? \"0\" + day.toString() : day.toString());\n }\n\n let ret: string;\n let timeoutSeconds: number;\n if (dayDiff === 0) {\n if (diff < 5) {\n timeoutSeconds = 1;\n ret = \"just now\";\n } else if (diff < 60) {\n timeoutSeconds = 1;\n ret = Math.floor(diff) + \" seconds ago\";\n } else if (diff < 120) {\n timeoutSeconds = 10;\n ret = \"1 minute ago\";\n } else if (diff < 3600) {\n timeoutSeconds = 30;\n ret = Math.floor(diff / 60) + \" minutes ago\";\n } else if (diff < 7200) {\n timeoutSeconds = 60;\n ret = \"1 hour ago\";\n } else {\n timeoutSeconds = 60;\n ret = Math.floor(diff / 3600) + \" hours ago\";\n }\n } else if (dayDiff === 1) {\n timeoutSeconds = 600;\n ret = \"yesterday\";\n } else if (dayDiff < 7) {\n timeoutSeconds = 600;\n ret = dayDiff + \" days ago\";\n } else {\n timeoutSeconds = 6000;\n ret = Math.ceil(dayDiff / 7) + \" weeks ago\";\n }\n if (el) {\n el.innerText = ret;\n setTimeout(() => relativeTime(el), timeoutSeconds * 1000);\n }\n return ret;\n}\n\nexport function timeInit(): [(el: HTMLElement) => void, (el: HTMLElement) => string] {\n els(\".timestamp\").forEach((el) => {\n wireTime(el);\n });\n els(\".reltime\").forEach((el) => {\n relativeTime(el);\n });\n return [wireTime, relativeTime];\n}\n", "function debounce(callback: (...args: unknown[]) => void, wait: number) {\n let timeoutId = 0;\n return (...args: unknown[]) => {\n if (timeoutId !== 0) {\n window.clearTimeout(timeoutId);\n }\n timeoutId = window.setTimeout(() => {\n callback(null, ...args);\n }, wait);\n };\n}\n\nfunction autocomplete(el: HTMLInputElement, url: string, field: string, title: (x: unknown) => string, val: (x: unknown) => string) {\n if (!el) {\n return;\n }\n const listId = el.id + \"-list\";\n const list = document.createElement(\"datalist\");\n\n const loadingOpt = document.createElement(\"option\");\n loadingOpt.value = \"\";\n loadingOpt.innerText = \"Loading...\";\n list.appendChild(loadingOpt);\n\n list.id = listId;\n el.parentElement?.prepend(list);\n\n el.setAttribute(\"autocomplete\", \"off\");\n el.setAttribute(\"list\", listId);\n\n const cache: {\n [_: string]: {\n url: string;\n complete: boolean;\n data: unknown[];\n frag: DocumentFragment;\n }\n } = {};\n let lastQuery = \"\";\n\n function getURL(q: string): string {\n const dest = url;\n if (dest.includes(\"?\")) {\n return dest + \"&t=json&\" + field + \"=\" + encodeURIComponent(q);\n }\n return dest + \"?t=json&\" + field + \"=\" + encodeURIComponent(q);\n }\n\n function datalistUpdate(q: string) {\n const c = cache[q];\n if (!c || !c.frag) {\n return;\n }\n lastQuery = q;\n list.replaceChildren(c.frag.cloneNode(true));\n }\n\n function f() {\n const q = el.value;\n if (q.length === 0) {\n return;\n }\n const dest = getURL(q);\n let proceed: boolean = !q || !lastQuery;\n if (!proceed) {\n const l = cache[lastQuery];\n if (l) {\n proceed = !l.data.find((d) => q === val(d));\n }\n }\n if (!proceed) {\n return;\n }\n if (cache[q] && cache[q].url === dest) {\n datalistUpdate(q);\n return;\n }\n\n fetch(dest, {credentials: \"include\"}).then((res) => res.json()).then((data) => {\n if (!data) {\n return;\n }\n const arr = Array.isArray(data) ? data : [data];\n const frag = document.createDocumentFragment();\n let optMax = 10;\n for (let d = 0; d < arr.length && optMax > 0; d++) {\n const v = val(arr[d]);\n const t = title(arr[d]);\n if (v) {\n const option = document.createElement(\"option\");\n option.value = v;\n option.innerText = t;\n frag.appendChild(option);\n optMax--;\n }\n }\n cache[q] = {url: dest, data: arr, frag: frag, complete: false};\n datalistUpdate(q);\n });\n }\n\n el.oninput = debounce(f, 250);\n console.log(\"managing [\" + el.id + \"] autocomplete\");\n}\n\nexport function autocompleteInit() {\n return autocomplete;\n}\n", "import {els} from \"./dom\";\n\nexport function modalInit() {\n document.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Escape\") {\n if (document.location.hash.substring(0, 7) === \"#modal-\") {\n // document.location.hash = \"\";\n window.history.back();\n }\n }\n });\n els(\".backdrop, .modal-close\").forEach((el) => {\n el.addEventListener(\"click\", (ev) => {\n ev.preventDefault();\n window.history.back();\n });\n });\n}\nexport function modalNew(key: string, title: string) {\n const el = document.createElement(\"div\");\n el.classList.add(\"modal\");\n el.id = \"modal-\" + key;\n el.style.display = \"none\";\n\n const backdrop = document.createElement(\"a\");\n backdrop.classList.add(\"backdrop\");\n backdrop.href = \"#\";\n el.appendChild(backdrop);\n\n const content = document.createElement(\"div\");\n content.classList.add(\"modal-content\");\n el.appendChild(content);\n\n const hd = document.createElement(\"div\");\n hd.classList.add(\"modal-header\");\n content.appendChild(hd);\n\n const hdClose = document.createElement(\"a\");\n hdClose.classList.add(\"modal-close\");\n hdClose.href = \"#\";\n hdClose.innerText = \"\u00D7\";\n hd.appendChild(hdClose);\n\n const hdTitle = document.createElement(\"h2\");\n hdTitle.innerText = title;\n hd.appendChild(hdTitle);\n\n const bd = document.createElement(\"div\");\n bd.classList.add(\"modal-body\");\n content.appendChild(bd);\n\n document.body.appendChild(el);\n return el;\n}\n\nexport function modalGetOrCreate(key: string, title: string): HTMLElement {\n const el = document.getElementById(\"modal-\" + key);\n if (el) {\n const bodies = el.getElementsByClassName(\"modal-body\");\n if (bodies.length !== 1) {\n throw new Error(\"unable to find modal body\");\n }\n return el;\n }\n return modalNew(key, title);\n}\n\nexport function modalGetBody(m: HTMLElement) {\n const bodies = m.getElementsByClassName(\"modal-body\");\n if (bodies.length !== 1) {\n throw new Error(\"unable to find modal body\");\n }\n return bodies[0];\n}\n\nexport function modalGetHeader(m: HTMLElement) {\n const bodies = m.getElementsByClassName(\"modal-header\");\n if (bodies.length !== 1) {\n throw new Error(\"unable to find modal header\");\n }\n return bodies[0];\n}\n\nexport function modalSetTitle(m: HTMLElement, title: string) {\n const hd = modalGetHeader(m);\n const t = hd.getElementsByTagName(\"h2\");\n if (t.length !== 1) {\n throw new Error(\"unable to find modal title\");\n }\n t[0].innerText = title;\n}\n", "export const appKey = \"rituals\";\nexport const appName = \"rituals.dev\";\n\nexport function svgRef(key: string, size?: number, cls?: string): string {\n if (!size) {\n size = 18;\n }\n if (cls === undefined || cls === null) {\n cls = \"icon\";\n }\n return ``;\n}\n\nexport function svg(key: string, size?: number, cls?: string) {\n return {\"__html\": svgRef(key, size, cls)};\n}\n\nexport function expandCollapse(extra?: string) {\n if (!extra) {\n extra = \"\";\n }\n const e = svgRef(\"right\", 15, \"expand-collapse\");\n return {\"__html\": e + extra};\n}\n\nexport function focusDelay(el: HTMLInputElement | HTMLTextAreaElement) {\n setTimeout(() => {\n el.setSelectionRange(el.value.length, el.value.length);\n el.focus();\n }, 100);\n return true;\n}\n", "import {els, opt, req, setDisplay} from \"./dom\";\nimport {svgRef} from \"./util\";\n\nfunction compareOrder(elem1: HTMLElement, elem2: HTMLElement) {\n if (elem1.parentElement !== elem2.parentElement) {\n return null;\n }\n if (elem1 === elem2) {\n return 0;\n }\n if (elem1.compareDocumentPosition(elem2) & Node.DOCUMENT_POSITION_FOLLOWING) {\n return -1;\n }\n return 1;\n}\n\nlet draggedElement: HTMLElement;\n\nfunction tagsUpdate(editorEl: HTMLElement) {\n const values: string[] = [];\n const elements = els(\".item .value\", editorEl);\n for (const el of elements) {\n values.push(el.innerText);\n }\n const inputEl = req(\"input.result\", editorEl);\n inputEl.value = values.join(\", \");\n}\n\nfunction tagsRemove(itemEl: HTMLElement) {\n const editorEl = itemEl.parentElement?.parentElement;\n itemEl.remove();\n if (editorEl) {\n tagsUpdate(editorEl);\n }\n}\n\nfunction tagsEdit(itemEl: HTMLElement) {\n const value = req(\".value\", itemEl);\n const edit = req(\".editor\", itemEl);\n edit.value = value.innerText;\n const apply = () => {\n if (edit.value === \"\") {\n itemEl.remove();\n return;\n }\n value.innerText = edit.value;\n setDisplay(value, true);\n setDisplay(edit, false);\n const editorEl = itemEl.parentElement?.parentElement;\n if (editorEl) {\n tagsUpdate(editorEl);\n }\n };\n edit.onblur = apply;\n edit.onkeydown = (event) => {\n if (event.code === \"Enter\") {\n event.preventDefault();\n apply();\n return false;\n }\n };\n setDisplay(value, false);\n setDisplay(edit, true);\n edit.focus();\n}\n\nfunction tagsRender(v: string, editorEl: HTMLElement): HTMLDivElement {\n const item = document.createElement(\"div\");\n item.className = \"item\";\n item.draggable = true;\n item.ondragstart = (e) => {\n e.dataTransfer?.setDragImage(document.createElement(\"div\"), 0, 0);\n item.classList.add(\"dragging\");\n draggedElement = item;\n };\n item.ondragover = () => {\n const order = compareOrder(item, draggedElement);\n if (!order) {\n return;\n }\n const baseElement = order === -1 ? item : item.nextSibling;\n draggedElement.parentElement?.insertBefore(draggedElement, baseElement);\n tagsUpdate(editorEl);\n };\n item.ondrop = (e) => {\n e.preventDefault();\n };\n item.ondragend = (e) => {\n item.classList.remove(\"dragging\");\n e.preventDefault();\n };\n\n const value = document.createElement(\"div\");\n value.innerText = v;\n value.className = \"value\";\n value.onclick = () => {\n tagsEdit(item);\n };\n item.appendChild(value);\n\n const editor = document.createElement(\"input\");\n editor.className = \"editor\";\n item.appendChild(editor);\n\n const close = document.createElement(\"div\");\n close.innerHTML = svgRef(\"times\", 13);\n close.className = \"close\";\n close.onclick = () => {\n tagsRemove(item);\n };\n item.appendChild(close);\n\n return item;\n}\n\nfunction tagsAdd(tagContainerEl: HTMLElement, editorEl: HTMLElement) {\n const itemEl = tagsRender(\"\", editorEl);\n tagContainerEl.appendChild(itemEl);\n tagsEdit(itemEl);\n}\n\nexport function tagsWire(el: HTMLElement) {\n const input = opt(\"input.result\", el);\n if (!input) {\n return;\n }\n const tagContainer = req(\".tags\", el);\n const vals = input.value.split(\",\").map((x) => x.trim()).filter((k) => k !== \"\");\n\n setDisplay(input, false);\n tagContainer.innerHTML = \"\";\n for (const v of vals) {\n tagContainer.appendChild(tagsRender(v, el));\n }\n\n opt(\".add-item\", el)?.remove();\n\n const add = document.createElement(\"div\");\n add.className = \"add-item\";\n add.innerHTML = svgRef(\"plus\", 22);\n add.onclick = () => {\n tagsAdd(tagContainer, el);\n };\n el.insertBefore(add, req(\".clear\", el));\n}\n\nexport function tagsInit() {\n for (const el of els(\".tag-editor\")) {\n tagsWire(el);\n }\n return tagsWire;\n}\n", "import {els} from \"./dom\";\n\nconst selected = \"--selected\";\n\nexport function setSiblingToNull(el: HTMLElement) {\n const i = el.parentElement?.parentElement?.querySelector(\"input\");\n if (!i) {\n throw new Error(\"no associated input found\");\n }\n i.value = \"\u2205\";\n}\n\nexport function initForm(frm: HTMLFormElement) {\n frm.onreset = () => initForm(frm);\n const editorCache: { [key: string]: string; } = {};\n const selectedCache: { [key: string]: HTMLInputElement; } = {};\n for (const el of frm.elements) {\n const input = el as HTMLInputElement;\n if (input.name.length > 0) {\n if (input.name.endsWith(selected)) {\n selectedCache[input.name] = input;\n } else {\n if (input.type !== \"radio\" || input.checked) {\n editorCache[input.name] = input.value;\n }\n const evt = () => {\n const cv = selectedCache[input.name + selected];\n if (cv) {\n cv.checked = editorCache[input.name] !== input.value;\n }\n };\n input.onchange = evt;\n input.onkeyup = evt;\n }\n }\n }\n}\n\nexport function formInit(): [(el: HTMLElement) => void, (frm: HTMLFormElement) => void] {\n for (const n of els(\"form.editor\")) {\n initForm(n);\n }\n return [setSiblingToNull, initForm];\n}\n", "import {els} from \"./dom\";\n\nconst keys: string[] = [];\n\nfunction call(mockup: Element, sel: string, f: (el: HTMLElement) => void) {\n const q = mockup.querySelectorAll(sel);\n if (q.length === 0) {\n throw new Error(\"empty query selector [\" + sel + \"]\");\n }\n q.forEach((x) => f(x as HTMLElement));\n}\n\nfunction setBG(mockup: Element, sel: string, v: string) {\n call(mockup, sel, (el) => {\n el.style.backgroundColor = v;\n });\n}\n\nfunction setFG(mockup: Element, sel: string, v: string) {\n call(mockup, sel, (el) => {\n el.style.color = v;\n });\n}\n\nfunction set(mode: string, key: string, v: string) {\n const mockup = document.querySelector(\"#mockup-\" + mode);\n if (!mockup) {\n console.error(\"can't find mockup for mode [\" + mode + \"]\");\n return;\n }\n switch (key) {\n case \"color-foreground\":\n setFG(mockup, \".mock-main\", v);\n break;\n case \"color-background\":\n setBG(mockup, \".mock-main\", v);\n break;\n case \"color-foreground-muted\":\n setFG(mockup, \".mock-main .mock-muted\", v);\n break;\n case \"color-background-muted\":\n setBG(mockup, \".mock-main .mock-muted\", v);\n break;\n case \"color-link-foreground\":\n setFG(mockup, \".mock-main .mock-link\", v);\n break;\n case \"color-link-visited-foreground\":\n setFG(mockup, \".mock-main .mock-link-visited\", v);\n break;\n case \"color-nav-foreground\":\n setFG(mockup, \".mock-nav\", v);\n setFG(mockup, \".mock-nav .mock-link\", v);\n break;\n case \"color-nav-background\":\n setBG(mockup, \".mock-nav\", v);\n break;\n case \"color-menu-foreground\":\n setFG(mockup, \".mock-menu\", v);\n setFG(mockup, \".mock-menu .mock-link\", v);\n break;\n case \"color-menu-background\":\n setBG(mockup, \".mock-menu\", v);\n break;\n case \"color-menu-selected-foreground\":\n setFG(mockup, \".mock-menu .mock-link-selected\", v);\n break;\n case \"color-menu-selected-background\":\n setBG(mockup, \".mock-menu .mock-link-selected\", v);\n break;\n default:\n console.error(\"invalid key [\" + key + \"]\");\n }\n}\n\nexport function themeInit() {\n for (const el of els(\".color-var\")) {\n const v = el.dataset.var as string;\n const m = el.dataset.mode as string;\n keys.push(v);\n if (!v || v.length === 0) {\n continue;\n }\n el.oninput = () => {\n set(m, v, el.value);\n };\n }\n}\n", "let appUnloading = false;\n\nexport type Message = {\n readonly channel: string;\n readonly cmd: string;\n readonly param: unknown;\n}\n\nfunction socketUrl(u?: string) {\n if (!u) {\n u = \"/connect\";\n }\n if (u.indexOf(\"ws\") === 0) {\n return u;\n }\n const l = document.location;\n let protocol = \"ws\";\n if (l.protocol === \"https:\") {\n protocol = \"wss\";\n }\n if (u.indexOf(\"/\") !== 0) {\n u = \"/\" + u;\n }\n return protocol + `://${l.host}${u}`;\n}\n\nexport class Socket {\n readonly debug: boolean;\n private readonly open: () => void;\n private readonly recv: (m: Message) => void;\n private readonly err: (svc: string, err: string) => void;\n readonly url?: string;\n connected: boolean;\n pauseSeconds: number;\n pendingMessages: Message[];\n connectTime?: number;\n closed?: boolean;\n sock?: WebSocket;\n\n constructor(debug: boolean, o: () => void, r: (m: Message) => void, e: (svc: string, err: string) => void, url?: string) {\n this.debug = debug;\n this.open = o;\n this.recv = r;\n this.err = e;\n this.url = socketUrl(url);\n this.connected = false;\n this.pauseSeconds = 1;\n this.pendingMessages = [];\n\n this.connect();\n }\n\n connect() {\n window.onbeforeunload = () => {\n appUnloading = true;\n };\n this.connectTime = Date.now();\n this.sock = new WebSocket(socketUrl(this.url));\n const s = this; // eslint-disable-line @typescript-eslint/no-this-alias\n this.sock.onopen = () => {\n s.connected = true;\n s.pendingMessages.forEach(s.send);\n s.pendingMessages = [];\n if (s.debug) {\n console.log(\"WebSocket connected\");\n }\n s.open();\n };\n this.sock.onmessage = (event) => {\n const msg = JSON.parse(event.data) as Message;\n if (s.debug) {\n console.debug(\"[socket]: receive\", msg);\n }\n if (msg.cmd === \"close-connection\") {\n s.disconnect();\n } else {\n s.recv(msg);\n }\n };\n this.sock.onerror = (event) => () => {\n s.err(\"socket\", event.type);\n };\n this.sock.onclose = () => {\n if (appUnloading || s.closed) {\n return;\n }\n s.connected = false;\n const elapsed = s.connectTime ? Date.now() - s.connectTime : 0;\n if (elapsed > 0 && elapsed < 2000) {\n s.pauseSeconds = s.pauseSeconds * 2;\n if (s.debug) {\n console.debug(`socket closed immediately, reconnecting in ${s.pauseSeconds} seconds`);\n }\n setTimeout(() => {\n s.connect();\n }, s.pauseSeconds * 1000);\n } else {\n console.debug(\"socket closed after [\" + elapsed + \"ms]\");\n setTimeout(() => {\n s.connect();\n }, s.pauseSeconds * 500);\n }\n };\n }\n\n disconnect() {\n this.closed = true;\n setTimeout(() => {\n this.sock?.close();\n console.debug(\"[socket] closed\");\n }, 500);\n }\n\n send(msg: Message) {\n if (this.debug) {\n console.debug(\"out\", msg);\n }\n if (!this.sock) {\n throw new Error(\"socket not initialized\");\n }\n if (this.connected) {\n const m = JSON.stringify(msg, null, 2);\n this.sock.send(m);\n } else {\n this.pendingMessages.push(msg);\n }\n }\n}\n\nexport function socketInit() {\n return Socket;\n}\n", "import {JSX} from \"./jsx\";\nimport {svg, svgRef} from \"./util\";\n\nexport function memberPictureFor(picture: string, size: number, cls: string) {\n if (!picture) {\n return svgRef(\"profile\", size, cls);\n }\n return ``;\n}\n\nexport function snippetMember(userID: string, name: string, role: string, picture: string): HTMLElement {\n return \n \n \n
\n {name}\n
\n \n {role}\n \n ;\n}\n\nexport function snippetMemberModalView(userID: string, name: string, role: string, picture: string): HTMLElement {\n return
\n \n
\n
\n \u00D7\n

\n \n {name}\n

\n
\n
\n Role
\n {role}\n
\n
\n
;\n}\n\nexport function snippetMemberModalEdit(userID: string, name: string, role: string, picture: string): HTMLElement {\n const cfrm = \"return confirm('Are you sure you wish to remove this user?');\";\n const roles = [[\"owner\", \"Owner\"], [\"member\", \"Member\"], [\"observer\", \"Observer\"]];\n return
\n \n
\n
\n \u00D7\n

\n \n {name}\n

\n
\n
\n
\n \n Role
\n \n
\n
\n \n
\n \n
\n
\n
\n
;\n}\n", "import {els, opt, req} from \"./dom\";\nimport {send} from \"./app\";\nimport {memberPictureFor, snippetMember, snippetMemberModalEdit, snippetMemberModalView} from \"./members.jsx\";\nimport {focusDelay, svgRef} from \"./util\";\n\nexport type Member = {\n id: string;\n name: string;\n role: string;\n}\n\nexport function getSelfID() {\n return req(\"#self-id\").innerText;\n}\n\nfunction isAdmin() {\n return req(\"#self-role\").innerText === \"owner\";\n}\n\nfunction wireSelfForm() {\n const selfModal = req(\"#modal-member-\" + getSelfID());\n const selfForm = opt(\"form\", selfModal);\n if (selfForm) {\n selfForm.onsubmit = () => {\n const nameInput = req(\"input[name=\\\"name\\\"]\", selfForm);\n const choiceInput = req(\"input[name=\\\"choice\\\"]:checked\", selfForm);\n const pictureInput = opt(\"input[name=\\\"picture\\\"]:checked\", selfForm);\n\n const msg: { name: string, choice: string, picture?: string } = {\"name\": nameInput.value, \"choice\": choiceInput.value};\n if (pictureInput) {\n msg.picture = pictureInput.value;\n }\n send(\"self\", msg);\n els(\".member-\" + getSelfID() + \"-name\").forEach((x) => {\n x.innerText = nameInput.value;\n });\n req(\"#self-picture\").innerHTML = memberPictureFor(pictureInput ? pictureInput.value : \"\", 20, \"icon\");\n document.location.hash = \"\";\n return false;\n };\n }\n}\n\nexport function getMemberName(id: string) {\n if (id === getSelfID()) {\n return req(\"#self-name\").innerText;\n }\n return req(\"#member-\" + id + \" .member-name\").innerText;\n}\n\nexport function username(id?: string) {\n if (!id) {\n return \"System\";\n }\n const ret = getMemberName(id);\n if (ret) {\n return ret;\n }\n return \"Unknown User\";\n}\n\nexport function getMemberRole(id: string) {\n if (id === getSelfID()) {\n return req(\"#self-role\").innerText;\n }\n return req(\"#member-\" + id + \" .member-role\").innerText;\n}\n\nexport function memberList(): Member[] {\n const ret: Member[] = [];\n const slID = getSelfID();\n const sl: Member = {id: slID, name: getMemberName(slID), role: getMemberRole(slID)};\n ret.push(sl);\n els(\"#panel-members .member\").forEach((e) => {\n if (e.dataset.id) {\n const id = e.dataset.id;\n ret.push({id: id, name: getMemberName(id), role: getMemberRole(id)});\n }\n });\n ret.sort((l, r) => {\n return l.name.localeCompare(r.name, undefined, {sensitivity: \"accent\"});\n });\n return ret;\n}\n\nfunction wireMemberForm(modal: HTMLElement) {\n const form = opt(\"form\", modal);\n if (!form) {\n return;\n }\n const f = (cmd: string) => {\n const userID = req(\"input[name=\\\"userID\\\"]\", form).value;\n const role = req(\"select[name=\\\"role\\\"]\", form).value;\n send(cmd, {\"userID\": userID, \"role\": role});\n const panel = req(\"#member-\" + userID);\n if (cmd === \"member-update\") {\n req(\".member-role\", panel).innerText = role;\n } else if (cmd === \"member-remove\") {\n panel.remove();\n }\n document.location.hash = \"\";\n return false;\n };\n req(\".member-update\", form).onclick = () => f(\"member-update\");\n req(\".member-remove\", form).onclick = () => {\n if (confirm(\"Are you sure you wish to remove this user?\")) {\n return f(\"member-remove\");\n }\n return false;\n };\n}\n\nfunction wireMemberForms() {\n const modals = els(\".modal-member\");\n for (const modal of modals) {\n wireMemberForm(modal);\n }\n}\n\nexport type MemberMessage = {\n userID: string;\n name: string;\n role: string;\n picture?: string;\n}\n\nexport function memberUpdate(param: MemberMessage) {\n els(\".member-\" + param.userID + \"-name\").forEach((x) => {\n x.innerText = param.name;\n });\n if (param.userID === getSelfID()) {\n req(\"#self-role\").innerText = param.role;\n req(\"#self-picture\").innerHTML = memberPictureFor(param.picture ? param.picture : \"\", 20, \"icon\");\n } else {\n const panel = req(\"#member-\" + param.userID);\n req(\".member-role\", panel).innerText = param.role;\n req(\".member-picture\", panel).innerHTML = memberPictureFor(param.picture ? param.picture : \"\", 18, \"\");\n\n const modal = req(\"#modal-member-\" + param.userID);\n const rd = opt(\".member-role\", modal);\n if (rd) {\n rd.innerText = param.role;\n }\n const rs = opt(\"select[name=\\\"role\\\"]\", modal);\n if (rs) {\n rs.value = param.role;\n }\n req(\".member-picture\", modal).innerHTML = memberPictureFor(param.picture ? param.picture : \"\", 18, \"\");\n }\n if (getMemberName(param.userID) !== param.name) {\n const tbl = req(\"#panel-members table tbody\");\n const items = tbl.children;\n const itemsArr: Element[] = [...items];\n itemsArr.sort((l, r) => {\n const ln = req(\".member-name\", l).innerText;\n const rn = req(\".member-name\", r).innerText;\n return ln.localeCompare(rn, undefined, {sensitivity: \"accent\"});\n });\n tbl.replaceChildren(...itemsArr);\n }\n}\n\nexport function memberAdd(param: MemberMessage) {\n const panel = opt(\"#member-\" + param.userID);\n if (panel || param.userID === getSelfID()) {\n return memberUpdate(param);\n }\n\n const tbl = req(\"#panel-members table tbody\");\n let idx = -1;\n for (let i = 0; i < tbl.children.length; i++) {\n const n = tbl.children.item(i);\n const nm = req(\".member-name\", n as HTMLElement).innerText;\n if (nm.localeCompare(param.name, undefined, {sensitivity: \"accent\"}) > 0) {\n idx = i;\n break;\n }\n }\n const tr = snippetMember(param.userID, param.name, param.role, param.picture ? param.picture : \"\");\n if (idx === -1) {\n tbl.appendChild(tr);\n } else {\n tbl.insertBefore(tr, tbl.children[idx]);\n }\n\n const modals = req(\"#member-modals\");\n let modal: HTMLElement;\n if (isAdmin()) {\n modal = snippetMemberModalEdit(param.userID, param.name, param.role, param.picture ? param.picture : \"\");\n } else {\n modal = snippetMemberModalView(param.userID, param.name, param.role, param.picture ? param.picture : \"\");\n }\n modals.appendChild(modal);\n req(\".member-picture\", modal).innerHTML = memberPictureFor(param.picture ? param.picture : \"\", 24, \"icon\");\n wireMemberForm(modal);\n}\n\nexport function memberRemove(userID: string) {\n const panel = req(\"#member-\" + userID);\n panel.remove();\n}\n\nexport function onlineUpdate(param: { userID: string; connected: boolean; }) {\n if (param.userID === getSelfID()) {\n return;\n }\n const mel = opt(\"#member-\" + param.userID + \" .online-status\");\n if (!mel) {\n throw new Error(\"missing panel #member-\" + param.userID);\n }\n mel.title = param.connected ? \"online\" : \"offline\";\n const svg = param.connected ? \"check-circle\" : \"circle\";\n mel.innerHTML = svgRef(svg, 18, \"right\");\n}\n\nexport function initMembers() {\n req(\"#self-edit-link\").onclick = () => {\n focusDelay(req(\"#self-name-input\"));\n };\n wireSelfForm();\n wireMemberForms();\n}\n", "import {JSX} from \"./jsx\";\nimport {Comment, initCommentsLink} from \"./comment\";\nimport {relativeTime, utc} from \"./time\";\nimport {svg} from \"./util\";\n\nexport function snippetComment(c: Comment, un: string) {\n const li =
  • ;\n\n const d = utc(new Date());\n const timeSpan = just now;\n relativeTime(d, timeSpan);\n\n const time =
    ;\n time.appendChild(timeSpan);\n li.appendChild(time);\n\n li.appendChild(
    {c.content}
    );\n li.appendChild(
    {un}
    );\n return li;\n}\n\nexport function snippetCommentsModalLink(svc: string, id: string) {\n const x = \"comment-link-\" + svc + \"-\" + id;\n const href = \"#modal-\" + svc + \"-\" + id + \"-comments\";\n const a = ;\n initCommentsLink(a);\n return a;\n}\n\nexport function snippetCommentsModal(svc: string, id: string, title: string) {\n return
    \n \n
    \n
    \n \u00D7\n

    {title} Comments

    \n
    \n
    \n
      \n
    \n
    \n \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    ;\n}\n", "import {els, req} from \"./dom\";\nimport {send} from \"./app\";\nimport {getSelfID, username} from \"./member\";\nimport {snippetComment} from \"./comments\";\nimport {focusDelay, svgRef} from \"./util\";\n\nexport class Comment {\n svc?: string;\n modelID?: string;\n content?: string;\n userID?: string;\n}\n\nexport function initCommentsLink(link: HTMLElement) {\n link.onclick = () => focusDelay(req(\"#modal-\" + link.dataset.key + \"-comments form textarea\"));\n}\n\nexport function commentAdd(c: Comment) {\n const ul = req(\"#comment-list-\" + c.svc + \"-\" + c.modelID);\n const un = username(c.userID);\n const li = snippetComment(c, un);\n ul.appendChild(li);\n\n const count = ul.children.length;\n const link = req(\"#comment-link-\" + c.svc + \"-\" + c.modelID);\n link.title = count + (count === 1 ? \" comment\" : \" comments\");\n if (link.innerHTML.indexOf(\"comment-dots\") === -1) {\n link.innerHTML = svgRef(\"comment-dots\", 18, \"right\");\n }\n}\n\nexport function initCommentsModal(modal: HTMLElement) {\n const form = req(\"form\", modal);\n form.onsubmit = () => {\n const c: Comment = {\n svc: req(\"input[name=\\\"svc\\\"]\", form).value,\n modelID: req(\"input[name=\\\"modelID\\\"]\", form).value\n };\n const ta = req(\"textarea\", form);\n c.content = ta.value;\n c.userID = getSelfID();\n send(\"comment\", c);\n commentAdd(c);\n ta.value = \"\";\n return false;\n };\n}\n\nexport function initComments() {\n for (const link of els(\".comment-link\")) {\n initCommentsLink(link);\n }\n for (const modal of els(\".modal.comments\")) {\n initCommentsModal(modal);\n }\n}\n", "import {els, opt, req} from \"./dom\";\nimport {snippetCommentsModal, snippetCommentsModalLink} from \"./comments\";\nimport {initCommentsModal} from \"./comment\";\nimport {focusDelay, svgRef} from \"./util\";\n\nexport type ChildAdd = {\n \"type\": string;\n \"id\": string;\n \"title\": string;\n \"path\": string;\n \"icon\": string;\n}\n\nexport type ChildUpdate = {\n \"type\": string;\n \"model\": { id: string; title: string; icon: string };\n}\n\nexport type ChildRemove = {\n \"type\": string;\n \"id\": string;\n}\n\nexport function getSelectName(key: string, panel: HTMLElement, id: string | null) {\n if (id) {\n const el = opt(`select[name=\"${key}\"] option[value=\"${id}\"]`, panel);\n if (el) {\n const s = el.innerText;\n return `${s} `;\n }\n return `${id} `;\n }\n return \"\";\n}\n\nexport function modelBanner(key: string, panel: HTMLElement, teamID: string, sprintID: string) {\n let ret = \"\";\n ret += getSelectName(\"sprint\", panel, sprintID);\n ret += key === \"retro\" ? \"retrospective\" : key;\n if (teamID) {\n ret += \" in \" + getSelectName(\"team\", panel, teamID);\n }\n return ret;\n}\n\nexport function onChildAddModel(param: ChildAdd) {\n const tbody = req(`#${param.type}-list tbody`);\n const empty = opt(\".empty\", tbody);\n if (empty) {\n empty.remove();\n }\n\n const tr = document.createElement(\"tr\");\n tr.id = `${param.type}-list-${param.id}`;\n const td = document.createElement(\"td\");\n\n const commentsDiv = document.createElement(\"div\");\n commentsDiv.classList.add(\"right\");\n commentsDiv.appendChild(snippetCommentsModalLink(param.type, param.id));\n commentsDiv.appendChild(snippetCommentsModal(param.type, param.id, param.title));\n td.appendChild(commentsDiv);\n\n const a = document.createElement(\"a\");\n a.href = param.path;\n\n const iconSpan = document.createElement(\"span\");\n iconSpan.classList.add(\"model-span-icon\");\n iconSpan.innerHTML = svgRef(param.icon, 16, \"icon\");\n a.appendChild(iconSpan);\n\n const titleSpan = document.createElement(\"span\");\n titleSpan.classList.add(\"model-span-title\");\n titleSpan.innerText = param.title;\n a.appendChild(titleSpan);\n\n td.appendChild(a);\n tr.appendChild(td);\n tbody.appendChild(tr);\n initCommentsModal(req(\".modal\", commentsDiv));\n}\n\nexport function onChildUpdateModel(param: ChildUpdate) {\n const tr = req(`#${param.type}-list-${param.model.id}`);\n req(\".model-span-icon\", tr).innerHTML = svgRef(param.model.icon);\n req(\".model-span-title\", tr).innerText = param.model.title;\n}\n\nexport function onChildRemoveModel(param: ChildRemove) {\n req(`#${param.type}-list-${param.id}`).remove();\n const tbody = req(`#${param.type}-list tbody`);\n if (tbody.children.length === 0) {\n const empty = document.createElement(\"tr\");\n empty.classList.add(\"empty\");\n const em = document.createElement(\"em\");\n em.innerText = \"no \" + param.type + \"s\";\n empty.appendChild(em);\n tbody.appendChild(empty);\n }\n}\n\nexport function setTeamSprint(key: string, panel: HTMLElement, teamID: string | null, sprintID: string | null, title: string, icon: string) {\n const tEl = opt(\"input[name=\\\"title\\\"]\", panel);\n if (tEl) {\n tEl.value = title;\n }\n for (const pt of els(\".config-panel-team\", panel)) {\n pt.innerHTML = getSelectName(\"team\", panel, teamID);\n }\n for (const ps of els(\".config-panel-sprint\", panel)) {\n ps.innerHTML = getSelectName(\"sprint\", panel, sprintID);\n }\n for (const vi of els(\".view-icon\", panel)) {\n vi.innerHTML = svgRef(icon, 24, \"icon\");\n }\n for (const vt of els(\".view-title\", panel)) {\n vt.innerText = title;\n }\n for (const r of els(\"input[name=\\\"icon\\\"]\", panel)) {\n r.checked = icon === r.value;\n }\n const t = opt(\"select[name=\\\"team\\\"]\", panel);\n if (t !== null && t !== undefined) {\n t.value = teamID ? teamID : \"\";\n }\n const s = opt(\"select[name=\\\"sprint\\\"]\", panel);\n if (s !== null && s !== undefined) {\n s.value = sprintID ? sprintID : \"\";\n }\n req(\"#model-title\").innerText = title;\n req(\"#model-icon\").innerHTML = svgRef(icon, 20);\n req(\"#model-banner\").innerHTML = modelBanner(key, panel, teamID ? teamID : \"\", sprintID ? sprintID : \"\");\n // flashCreate(key, \"success\", key + \" updated\");\n}\n\nexport function configFocus(k: string) {\n req(`#modal-${k}-config-link`).onclick = () => {\n const i = opt(`#modal-${k}-config form input[name=\"title\"]`);\n if (i) {\n focusDelay(i);\n }\n };\n}\n", "import {els, req} from \"./dom\";\n\nexport type Permission = {\n key: string;\n value: string;\n}\n\nexport function permissionsUpdate(perms: Permission[]) {\n console.log(\"TODO: permissionsUpdate\", perms);\n}\n\nexport function permissionsTeamToggle(set: boolean) {\n req(\".permission-config-team\").style.display = set ? \"block\" : \"none\";\n}\n\nexport function permissionsSprintToggle(set: boolean) {\n req(\".permission-config-sprint\").style.display = set ? \"block\" : \"none\";\n}\n\nexport function loadPermsForm(frm: HTMLFormElement) {\n type StrMap = { [key: string]: string };\n const ret: StrMap = {};\n for (const el of els(\".perm-option\", frm)) {\n if (el.checked) {\n ret[el.name] = el.value;\n }\n }\n return ret;\n}\n\nexport function initPermissions(t: HTMLSelectElement, s?: HTMLSelectElement) {\n permissionsTeamToggle(t.value !== \"\");\n if (s) {\n permissionsSprintToggle(s.value !== \"\");\n }\n}\n", "import type {Message} from \"./socket\";\nimport {opt, req} from \"./dom\";\nimport {send} from \"./app\";\nimport {ChildAdd, ChildRemove, ChildUpdate, configFocus, onChildAddModel, onChildRemoveModel, onChildUpdateModel, setTeamSprint} from \"./workspace\";\nimport {loadPermsForm, Permission, permissionsUpdate} from \"./permission\";\n\nexport type Team = {\n id: string;\n slug: string;\n title: string;\n icon: string;\n status: string;\n}\n\nexport function initTeam() {\n configFocus(\"team\");\n const frm = opt(\"#modal-team-config form\");\n if (frm) {\n frm.onsubmit = () => {\n const title = req(\"input[name=\\\"title\\\"]\", frm).value;\n const icon = req(\"input[name=\\\"icon\\\"]:checked\", frm).value;\n send(\"update\", {\"title\": title, \"icon\": icon, ...loadPermsForm(frm)});\n document.location.hash = \"\";\n return false;\n };\n }\n}\n\nfunction onUpdate(param: Team) {\n const frm = req(\"#modal-team-config\");\n setTeamSprint(\"team\", frm, null, null, param.title, param.icon);\n}\n\nexport function handleTeam(m: Message) {\n switch (m.cmd) {\n case \"update\":\n return onUpdate(m.param as Team);\n case \"child-add\":\n return onChildAddModel(m.param as ChildAdd);\n case \"child-update\":\n return onChildUpdateModel(m.param as ChildUpdate);\n case \"child-remove\":\n return onChildRemoveModel(m.param as ChildRemove);\n case \"permissions\":\n return permissionsUpdate(m.param as Permission[]);\n default:\n throw new Error(\"invalid team command [\" + m.cmd + \"]\");\n }\n}\n", "import type {Message} from \"./socket\";\nimport {opt, req} from \"./dom\";\nimport {send} from \"./app\";\nimport {ChildAdd, ChildRemove, ChildUpdate, configFocus, onChildAddModel, onChildRemoveModel, onChildUpdateModel, setTeamSprint} from \"./workspace\";\nimport {initPermissions, loadPermsForm, Permission, permissionsTeamToggle, permissionsUpdate} from \"./permission\";\n\nexport type Sprint = {\n id: string;\n slug: string;\n title: string;\n startDate: string;\n endDate: string;\n icon: string;\n status: string;\n teamID: string;\n}\n\nexport function initSprint() {\n configFocus(\"sprint\");\n const frm = opt(\"#modal-sprint-config form\");\n if (frm) {\n const teamEl = req(\"select[name=\\\"team\\\"]\", frm);\n teamEl.onchange = () => {\n permissionsTeamToggle(teamEl.value !== \"\");\n };\n initPermissions(teamEl);\n frm.onsubmit = () => {\n const title = req(\"input[name=\\\"title\\\"]\", frm).value;\n const icon = req(\"input[name=\\\"icon\\\"]:checked\", frm).value;\n const startDate = req(\"input[name=\\\"startDate\\\"]\", frm).value;\n const endDate = req(\"input[name=\\\"endDate\\\"]\", frm).value;\n send(\"update\", {\"title\": title, \"icon\": icon, \"startDate\": startDate, \"endDate\": endDate, \"team\": teamEl.value, ...loadPermsForm(frm)});\n document.location.hash = \"\";\n return false;\n };\n }\n}\n\nfunction ds(s: string) {\n return `${s}`.split(\"T\")[0];\n}\n\nfunction summary(param: Sprint) {\n let ret = \"\";\n if (param.startDate) {\n ret += \"starts \";\n ret += ds(param.startDate);\n if (param.endDate) {\n ret += \", \";\n }\n }\n if (param.endDate) {\n ret += \"ends \";\n ret += ds(param.endDate);\n }\n return ret;\n}\n\nfunction onUpdate(param: Sprint) {\n const panel = req(\"#modal-sprint-config\");\n const frm = opt(\"form\", panel);\n if (frm) {\n req(\"input[name=\\\"startDate\\\"]\", frm).value = ds(param.startDate);\n req(\"input[name=\\\"endDate\\\"]\", frm).value = ds(param.endDate);\n } else {\n req(\".config-panel-startDate\", panel).innerText = ds(param.startDate);\n req(\".config-panel-endDate\", panel).innerText = ds(param.endDate);\n }\n req(\"#model-summary\").innerText = summary(param);\n setTeamSprint(\"sprint\", panel, param.teamID, null, param.title, param.icon);\n}\n\nexport function handleSprint(m: Message) {\n switch (m.cmd) {\n case \"update\":\n return onUpdate(m.param as Sprint);\n case \"child-add\":\n return onChildAddModel(m.param as ChildAdd);\n case \"child-update\":\n return onChildUpdateModel(m.param as ChildUpdate);\n case \"child-remove\":\n return onChildRemoveModel(m.param as ChildRemove);\n case \"permissions\":\n return permissionsUpdate(m.param as Permission[]);\n default:\n throw new Error(\"invalid sprint command [\" + m.cmd + \"]\");\n }\n}\n", "import {JSX} from \"./jsx\";\nimport {snippetCommentsModal, snippetCommentsModalLink} from \"./comments\";\nimport type {Story} from \"./story\";\nimport {svg} from \"./util\";\n\nexport function snippetStory(s: Story, memberName: string): HTMLElement {\n return \n
    { s.title }
    \n { memberName }\n { s.status }\n { !Object.hasOwn(s, \"finalVote\") || s.finalVote === \"\" ? \"-\" : s.finalVote }\n \n { snippetCommentsModalLink(\"story\", s.id)}\n { snippetCommentsModal(\"story\", s.id, s.title)}\n \n ;\n}\n\nexport function memberItem(id: string, name: string) {\n return
    \n
    \n
    { name }
    \n
    ;\n}\n\nexport function choiceItem(ch: string) {\n return
    \n \n
    ;\n}\n\n", "import {els, req} from \"./dom\";\nimport {send} from \"./app\";\nimport {focusDelay, svgRef} from \"./util\";\nimport {getSelfID} from \"./member\";\n\nfunction wireStoryModalFormEdit(id: string, a: HTMLAnchorElement) {\n a.onclick = () => {\n focusDelay(req(\"#modal-story-\" + id + \"-edit form input[name=\\\"title\\\"]\"));\n };\n}\n\nfunction wireStoryModalFormToNew(id: string, frm: HTMLFormElement) {\n frm.onsubmit = () => {\n send(\"child-status\", {\"storyID\": id, \"status\": \"new\"});\n return false;\n };\n}\n\nfunction wireStoryModalFormToActive(id: string, frm: HTMLFormElement) {\n frm.onsubmit = () => {\n send(\"child-status\", {\"storyID\": id, \"status\": \"active\"});\n return false;\n };\n}\n\nfunction wireStoryModalFormToComplete(id: string, frm: HTMLFormElement) {\n frm.onsubmit = () => {\n send(\"child-status\", {\"storyID\": id, \"status\": \"complete\"});\n return false;\n };\n}\n\nfunction wireStoryModalFormVote(id: string, e: HTMLElement) {\n els(\".vote-option\", e).forEach((opt) => {\n opt.onclick = () => {\n req(\"input[name=\\\"vote\\\"]\", opt).checked = true;\n send(\"vote\", {\"storyID\": id, \"vote\": opt.dataset.choice});\n els(\"#modal-story-\" + id + \" .story-members .member\").forEach((m) => {\n if (m.dataset.member === getSelfID()) {\n req(\".choice\", m).innerHTML = svgRef(\"check\", 18, \"\");\n }\n });\n return false;\n };\n });\n}\n\nexport function wireStoryModalFormDelete(id: string, frm: HTMLFormElement) {\n frm.onsubmit = () => {\n if (!confirm(\"Are you sure you want to delete this story?\")) {\n return false;\n }\n send(\"child-remove\", {\"storyID\": id});\n document.location.hash = \"\";\n return false;\n };\n}\n\nexport function wireStoryModal(el: HTMLElement) {\n const id = el.dataset.id;\n if (!id) {\n console.warn(\"no id in dataset\", el);\n return;\n }\n els(\".vote-submit-button\", el).forEach((e) => {\n e.style.display = \"none\";\n });\n els(\".link-edit\", el).forEach((e) => wireStoryModalFormEdit(id, e));\n els(\".status-new-form-delete\", el).forEach((e) => wireStoryModalFormDelete(id, e));\n els(\".status-new-form-next\", el).forEach((e) => wireStoryModalFormToActive(id, e));\n els(\".status-active-form-prev\", el).forEach((e) => wireStoryModalFormToNew(id, e));\n els(\".status-active-form-next\", el).forEach((e) => wireStoryModalFormToComplete(id, e));\n els(\".story-vote-options\", el).forEach((e) => wireStoryModalFormVote(id, e));\n els(\".status-complete-form-prev\", el).forEach((e) => wireStoryModalFormToActive(id, e));\n}\n", "import {JSX} from \"./jsx\";\nimport type {Vote} from \"./vote\";\nimport type {Member} from \"./member\";\n\nexport function snippetVote(storyID: string, m: Member, v: Vote | undefined): HTMLElement {\n if (!v) {\n return
    \n
    -
    \n
    { m.name }
    \n
    ;\n }\n return
    \n
    \n \n \n \n \n \n
    \n
    { m.name }
    \n
    ;\n}\n", "import {els, req} from \"./dom\";\nimport {svgRef} from \"./util\";\nimport {memberList} from \"./member\";\nimport {snippetVote} from \"./votes\";\nimport {send} from \"./app\";\n\nexport type Vote = {\n storyID: string;\n userID: string;\n choice: string;\n}\n\nexport type VoteResults = {\n floats: number[];\n count: number;\n min: number;\n max: number;\n range: number;\n sum: number;\n mean: number;\n median: number;\n mode: number[];\n modeString: string;\n}\n\nexport function onVote(v: Vote) {\n els(\"#modal-story-\" + v.storyID + \" .story-members .member\").forEach((m) => {\n if (m.dataset.member === v.userID) {\n req(\".choice\", m).innerHTML = svgRef(\"check\", 18, \"\");\n }\n });\n}\n\nfunction wireFinalVote(f: HTMLFormElement) {\n f.onsubmit = () => {\n const storyID = req(\"input[name=\\\"storyID\\\"]\", f).value;\n const typ = req(\"input[name=\\\"typ\\\"]\", f).value;\n const value = req(\"input[name=\\\"value\\\"]\", f).value;\n\n const storyEl = req(\"#modal-story-\" + storyID);\n req(\".final-vote .value\", storyEl).innerText = value;\n\n send(\"vote\", {storyID, typ, value});\n return false;\n };\n}\n\nexport function applyCalcs(storyID: string, votes: Vote[], results: VoteResults, finalVote: string) {\n const items = memberList().map((member) => {\n const v = votes.find((vote) => {\n return vote.userID === member.id;\n });\n return snippetVote(storyID, member, v);\n });\n\n const storyEl = req(\"#modal-story-\" + storyID);\n\n req(\" .vote-results\", storyEl).replaceChildren(...items);\n const fv = req(\".final-vote\", storyEl);\n req(\".value\", fv).innerText = finalVote;\n req(\".value\", fv).style.display = \"inline-block\";\n req(\".message\", fv).style.display = \"none\";\n req(\".description\", fv).style.display = \"block\";\n\n const calcEl = req(\".vote-calculations\", storyEl);\n req(\".calc-counted .value\", calcEl).innerText = results.count + \"/\" + results.floats.length;\n req(\".calc-range .value\", calcEl).innerText = results.min + \"-\" + results.max;\n req(\".calc-mean .value\", calcEl).innerText = results.mean.toString(10);\n req(\".calc-mean input[name=\\\"value\\\"]\", calcEl).value = results.mean.toString(10);\n req(\".calc-median .value\", calcEl).innerText = results.median.toString(10);\n req(\".calc-median input[name=\\\"value\\\"]\", calcEl).value = results.median.toString(10);\n req(\".calc-mode .value\", calcEl).innerText = results.modeString === \"\" ? \"0\" : results.modeString;\n req(\".calc-mode input[name=\\\"value\\\"]\", calcEl).value = results.modeString === \"\" ? \"0\" : results.modeString;\n\n els(\".final-vote-form\", storyEl).forEach((frm) => {\n wireFinalVote(frm);\n });\n}\n", "import {els, req} from \"./dom\";\nimport {send} from \"./app\";\nimport {choiceItem, memberItem, snippetStory} from \"./stories\";\nimport {wireStoryModal, wireStoryModalFormDelete} from \"./storymodal\";\nimport {initCommentsModal} from \"./comment\";\nimport {flashCreate} from \"./flash\";\nimport {focusDelay} from \"./util\";\nimport {applyCalcs, type Vote, type VoteResults} from \"./vote\";\nimport {estimateChoices} from \"./estimate\";\nimport {memberList, username} from \"./member\";\n\nexport type Story = {\n id: string;\n idx: number;\n estimateID: string;\n title: string;\n status: string;\n finalVote: string;\n userID: string;\n updated: string;\n created: string;\n}\n\nexport type StoryStatusResult = {\n story: Story;\n votes?: Vote[];\n results?: VoteResults;\n}\n\nfunction onEditSubmit(frm: HTMLElement) {\n const btn = req(\".story-delete-button\", frm);\n btn.onclick = () => {\n if (confirm(\"Are you sure you want to delete this story?\")) {\n send(\"child-remove\", {\"storyID\": btn.dataset.id});\n document.location.hash = \"\";\n }\n return false;\n };\n frm.onsubmit = () => {\n const storyID = req(\"input[name=\\\"storyID\\\"]\", frm).value;\n const title = req(\"input[name=\\\"title\\\"]\", frm).value;\n send(\"child-update\", {\"storyID\": storyID, \"title\": title});\n document.location.hash = \"\";\n return false;\n };\n}\n\nexport function initStories() {\n els(\".add-story-link\").forEach((x) => {\n x.onclick = () => {\n return focusDelay(req(\"#story-add-title\"));\n };\n });\n\n const storyAddModal = req(\"#modal-story--add\");\n const storyAddForm = req(\"form\", storyAddModal);\n storyAddForm.onsubmit = () => {\n const input = req(\"input[name=\\\"title\\\"]\", storyAddForm);\n const title = input.value;\n input.value = \"\";\n send(\"child-add\", {\"title\": title});\n document.location.hash = \"\";\n return false;\n };\n for (const editor of els(\".modal-story-edit\")) {\n onEditSubmit(req(\"form\", editor));\n }\n els(\"#story-modals .modal-story\").forEach(wireStoryModal);\n}\n\nexport function storyUpdate(s: Story) {\n const tr = req(\"#story-row-\" + s.id);\n req(\".story-status\", tr).innerText = s.status;\n req(\".story-title\", tr).innerText = s.title;\n req(\".story-final-vote\", tr).innerText = s.finalVote === \"\" ? \"-\" : s.finalVote;\n\n const editModal = req(\"#modal-story-\" + s.id + \"-edit\");\n req(\"form input[name=\\\"title\\\"]\", editModal).innerText = s.title;\n\n const viewModal = req(\"#modal-story-\" + s.id);\n const fv = req(\".final-vote\", viewModal);\n req(\".value\", fv).innerText = s.finalVote === \"\" ? \"-\" : s.finalVote;\n req(\"#story-row-\" + s.id + \" .story-final-vote\").innerText = s.finalVote === \"\" ? \"-\" : s.finalVote;\n if (s.finalVote === \"\") {\n req(\".message\", fv).style.display = \"block\";\n req(\".description\", fv).style.display = \"none\";\n } else {\n req(\".message\", fv).style.display = \"none\";\n req(\".description\", fv).style.display = \"block\";\n }\n\n els(\"input[name=\\\"storyID\\\"]\", viewModal).forEach((el) => {\n el.value = s.id;\n });\n\n req(\"h2.billboard\", viewModal).innerText = s.title;\n}\n\nexport function storyAdd(s: Story) {\n const tbl = req(\"#panel-detail table tbody\");\n let idx = -1;\n for (let i = 0; i < tbl.children.length; i++) {\n const n = tbl.children.item(i) as HTMLElement;\n const title = req(\".story-title\", n).innerText;\n const currIdxStr = n.dataset.index;\n if (currIdxStr) {\n const currIdx = parseInt(currIdxStr, 10);\n if (currIdx >= s.idx) {\n idx = i;\n break;\n } else if (title.localeCompare(s.title, undefined, {sensitivity: \"accent\"}) >= 0) {\n idx = i;\n break;\n }\n }\n }\n const tr = snippetStory(s, username(s.userID));\n if (idx === -1) {\n tbl.appendChild(tr);\n } else {\n tbl.insertBefore(tr, tbl.children[idx]);\n }\n\n initCommentsModal(req(\".modal\", tr));\n\n const editPrototype = req(\".modal-story-edit-new\");\n const editModal = editPrototype.cloneNode(true) as HTMLDivElement;\n editModal.id = \"modal-story-\" + s.id + \"-edit\";\n editModal.classList.remove(\"modal-story-edit-new\");\n els(\"input[name=\\\"storyID\\\"]\", editModal).forEach((e) => {\n e.value = s.id;\n });\n req(\"input[name=\\\"title\\\"]\", editModal).value = s.title;\n req(\".story-delete-button\", editModal).dataset.id = s.id;\n onEditSubmit(req(\"form\", editModal));\n els(\".edit-form-delete\", editModal).forEach((e) => wireStoryModalFormDelete(s.id, e));\n req(\"#story-modals\").appendChild(editModal);\n\n const prototype = req(\"#modal-story-new\");\n const modal = prototype.cloneNode(true) as HTMLDivElement;\n modal.id = \"modal-story-\" + s.id;\n modal.dataset.id = s.id;\n modal.dataset.status = s.status;\n modal.classList.add(\"modal-story\");\n const editLink = req(\".link-edit\", modal);\n editLink.href = \"#modal-story-\" + s.id + \"-edit\";\n editLink.dataset.id = s.id;\n\n const memberItems = memberList().map((x) => {\n return memberItem(x.id, x.name);\n });\n req(\".story-members\", modal).replaceChildren(...memberItems);\n\n const choiceItems = estimateChoices().map((x) => {\n return choiceItem(x);\n });\n req(\".story-vote-options\", modal).replaceChildren(...choiceItems);\n\n req(\"#story-modals\").appendChild(modal);\n wireStoryModal(modal);\n storyUpdate(s);\n if (document.location.hash === \"modal-story--add\" || document.location.hash === \"\") {\n document.location.hash = \"modal-story-\" + s.id;\n }\n}\n\nexport function storyStatus(s: StoryStatusResult) {\n const tr = req(\"#story-row-\" + s.story.id);\n req(\".story-status\", tr).innerText = s.story.status;\n const modal = req(\"#modal-story-\" + s.story.id);\n req(\".status-new\", modal).style.display = s.story.status === \"new\" ? \"block\" : \"none\";\n req(\".status-active\", modal).style.display = s.story.status === \"active\" ? \"block\" : \"none\";\n req(\".status-complete\", modal).style.display = s.story.status === \"complete\" ? \"block\" : \"none\";\n if (s.story.status === \"complete\" && s.votes !== undefined && s.results !== undefined) {\n applyCalcs(s.story.id, s.votes, s.results, s.story.finalVote);\n }\n}\n\nexport function storyRemove(id: string) {\n const tr = req(\"#story-row-\" + id);\n const title = req(\".story-title\", tr).innerText;\n flashCreate(id + \"-removed\", \"success\", `story [${title}] has been removed`);\n tr.remove();\n req(\"#modal-story-\" + id).remove();\n}\n\n", "import {initStories, Story, storyAdd, storyRemove, storyStatus, StoryStatusResult, storyUpdate} from \"./story\";\nimport type {Message} from \"./socket\";\nimport {els, opt, req} from \"./dom\";\nimport {send} from \"./app\";\nimport {configFocus, setTeamSprint} from \"./workspace\";\nimport {tagsWire} from \"./tags\";\nimport {initPermissions, loadPermsForm, Permission, permissionsSprintToggle, permissionsTeamToggle, permissionsUpdate} from \"./permission\";\nimport {onVote, Vote} from \"./vote\";\nimport type {MemberMessage} from \"./member\";\nimport {memberItem} from \"./stories\";\n\nexport type Estimate = {\n id: string;\n slug: string;\n title: string;\n choices: string[];\n icon: string;\n status: string;\n teamID: string;\n sprintID: string;\n}\n\nexport function initEstimate() {\n configFocus(\"estimate\");\n const frm = opt(\"#modal-estimate-config form\");\n if (frm) {\n const teamEl = req(\"select[name=\\\"team\\\"]\", frm);\n teamEl.onchange = () => {\n permissionsTeamToggle(teamEl.value !== \"\");\n };\n const sprintEl = req(\"select[name=\\\"sprint\\\"]\", frm);\n sprintEl.onchange = () => {\n permissionsSprintToggle(sprintEl.value !== \"\");\n };\n initPermissions(teamEl, sprintEl);\n frm.onsubmit = () => {\n const title = req(\"input[name=\\\"title\\\"]\", frm).value;\n const icon = req(\"input[name=\\\"icon\\\"]:checked\", frm).value;\n const choices = req(\"input[name=\\\"choices\\\"]\", frm).value;\n send(\"update\", {\"title\": title, \"icon\": icon, \"choices\": choices, \"team\": teamEl.value, \"sprint\": sprintEl.value, ...loadPermsForm(frm)});\n document.location.hash = \"\";\n return false;\n };\n }\n initStories();\n}\n\nexport function estimateChoices() {\n const choiceEL = req(\"#modal-estimate-config input[name=\\\"choices\\\"]\");\n return choiceEL.value.split(\",\").map((x) => x.trim());\n}\n\nfunction onMemberAdd(param: MemberMessage) {\n els(\".modal-story\").forEach((m) => {\n req(\".story-members\", m).appendChild(memberItem(param.userID, param.name));\n });\n}\n\nfunction onUpdate(param: Estimate) {\n const panel = req(\"#modal-estimate-config\");\n const frm = opt(\"form\", panel);\n if (frm) {\n const ch = req(\"input[name=\\\"choices\\\"]\", frm);\n ch.value = param.choices.join(\",\");\n if (ch.parentElement) {\n tagsWire(ch.parentElement);\n }\n } else {\n req(\".config-panel-choices\", panel).innerText = param.choices.join(\", \");\n }\n setTeamSprint(\"estimate\", panel, param.teamID, param.sprintID, param.title, param.icon);\n}\n\nexport function handleEstimate(m: Message) {\n switch (m.cmd) {\n case \"member-add\":\n return onMemberAdd(m.param as MemberMessage);\n case \"update\":\n return onUpdate(m.param as Estimate);\n case \"child-add\":\n return storyAdd(m.param as Story);\n case \"child-update\":\n return storyUpdate(m.param as Story);\n case \"child-status\":\n return storyStatus(m.param as StoryStatusResult);\n case \"child-remove\":\n return storyRemove(m.param as string);\n case \"vote\":\n return onVote(m.param as Vote);\n case \"permissions\":\n return permissionsUpdate(m.param as Permission[]);\n default:\n throw new Error(\"invalid estimate command [\" + m.cmd + \"]\");\n }\n}\n", "import {JSX} from \"./jsx\";\nimport type {Report} from \"./report\";\nimport {username} from \"./member\";\nimport {snippetCommentsModal, snippetCommentsModalLink} from \"./comments\";\nimport {expandCollapse} from \"./util\";\n\nexport function snippetReportContainer(day: string) {\n return
  • \n \n \n
    \n
  • ;\n}\n\nexport function snippetReport(r: Report): HTMLElement {\n return
    \n
    \n
    {snippetCommentsModalLink(\"report\", r.id)}
    \n {snippetCommentsModal(\"report\", r.id, r.id)}\n \n

    {username(r.userID)}

    \n
    {r.html}
    \n
    \n
    \n
    ;\n}\n\nexport function snippetReportModalView(r: Report): HTMLElement {\n return
    \n \n
    \n
    \n \u00D7\n

    {r.day}: {username(r.userID)}

    \n
    \n
    \n
    \n
    ;\n}\n\nexport function snippetReportModalEdit(r: Report): HTMLElement {\n return
    \n \n
    \n
    \n \u00D7\n

    {r.day}: {username(r.userID)}

    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    ;\n}\n", "import {els, opt, req} from \"./dom\";\nimport {send} from \"./app\";\nimport {snippetReport, snippetReportContainer, snippetReportModalEdit, snippetReportModalView} from \"./reports\";\nimport {getSelfID, username} from \"./member\";\nimport {initCommentsModal} from \"./comment\";\nimport {flashCreate} from \"./flash\";\nimport {focusDelay} from \"./util\";\n\nexport type Report = {\n id: string;\n day: string;\n userID: string;\n content: string;\n html?: string\n}\n\nfunction initEditModal(modal: HTMLElement) {\n const frm = req(\"form\", modal);\n const reportID = req(\"input[name=\\\"reportID\\\"]\", frm).value;\n req(\".report-edit-delete\", frm).onclick = () => {\n if (confirm(\"Are you sure you want to delete this report?\")) {\n send(\"child-remove\", {\"reportID\": reportID});\n document.location.hash = \"\";\n }\n return false;\n };\n frm.onsubmit = () => {\n const day = req(\"input[name=\\\"day\\\"]\", frm).value;\n const input = req(\"textarea[name=\\\"content\\\"]\", frm);\n const content = input.value;\n send(\"child-update\", {\"reportID\": reportID, \"day\": day, \"content\": content});\n document.location.hash = \"\";\n return false;\n };\n}\n\nexport function initReports() {\n els(\".add-report-link\").forEach((x) => {\n x.onclick = () => {\n return focusDelay(req(\"#report-add-content\"));\n };\n });\n els(\".modal-report-edit-link\").forEach((x) => {\n x.onclick = () => {\n return focusDelay(req(\"#input-content-\" + x.dataset.id));\n };\n });\n\n const reportAddModal = req(\"#modal-report--add\");\n const reportAddForm = req(\"form\", reportAddModal);\n reportAddForm.onsubmit = () => {\n const day = req(\"input[name=\\\"day\\\"]\", reportAddForm).value;\n const input = req(\"textarea[name=\\\"content\\\"]\", reportAddForm);\n const content = input.value;\n input.value = \"\";\n send(\"child-add\", {\"day\": day, \"content\": content});\n document.location.hash = \"\";\n return false;\n };\n\n els(\".modal-report-edit\").forEach(initEditModal);\n}\n\nexport function reportAdd(r: Report) {\n if (r.day.length > 10) {\n r.day = r.day.substring(0, 10);\n }\n let list = opt(\"#report-group-\" + r.day + \" .bd\");\n\n if (!list) {\n const x = snippetReportContainer(r.day);\n req(\"#report-groups\").appendChild(x);\n list = req(\".bd\", x);\n }\n\n let idx = -1;\n const u = username(r.userID);\n for (let i = 0; i < list.children.length; i++) {\n const n = list.children.item(i) as HTMLElement;\n const tgt = req(\".username\", n).innerText;\n if (tgt.localeCompare(u, undefined, {sensitivity: \"accent\"}) >= 0) {\n idx = i;\n break;\n }\n }\n const div = snippetReport(r);\n if (idx === -1) {\n list.appendChild(div);\n } else {\n list.insertBefore(div, list.children[idx]);\n }\n if (getSelfID() === r.userID) {\n const modal = snippetReportModalEdit(r);\n initEditModal(modal);\n req(\"#report-modals\").appendChild(modal);\n } else {\n req(\"#report-modals\").appendChild(snippetReportModalView(r));\n }\n initCommentsModal(req(\".modal\", div));\n}\n\nexport function reportUpdate(r: Report) {\n if (r.day.length > 10) {\n r.day = r.day.substring(0, 10);\n }\n const div = opt(\"#report-\" + r.id);\n if (!div) {\n return reportAdd(r);\n }\n const body = req(\".pt\", div);\n if (r.html) {\n body.innerHTML = r.html;\n } else {\n body.innerText = r.content;\n }\n}\n\nexport function reportRemove(id: string) {\n const rpt = req(\"#report-\" + id);\n if (rpt.parentElement) {\n const bd = rpt.parentElement;\n rpt.remove();\n if (bd.children.length === 0) {\n bd.parentElement?.remove();\n }\n }\n flashCreate(id + \"-removed\", \"success\", `report has been removed`);\n req(\"#modal-report-\" + id).remove();\n}\n", "import type {Message} from \"./socket\";\nimport {opt, req} from \"./dom\";\nimport {send} from \"./app\";\nimport {configFocus, setTeamSprint} from \"./workspace\";\nimport {initReports, Report, reportAdd, reportRemove, reportUpdate} from \"./report\";\nimport {initPermissions, loadPermsForm, Permission, permissionsSprintToggle, permissionsTeamToggle, permissionsUpdate} from \"./permission\";\n\nexport type Standup = {\n id: string;\n slug: string;\n title: string;\n icon: string;\n status: string;\n teamID: string;\n sprintID: string;\n}\n\nexport function initStandup() {\n configFocus(\"standup\");\n const frm = opt(\"#modal-standup-config form\");\n if (frm) {\n const teamEl = req(\"select[name=\\\"team\\\"]\", frm);\n teamEl.onchange = () => {\n permissionsTeamToggle(teamEl.value !== \"\");\n };\n const sprintEl = req(\"select[name=\\\"sprint\\\"]\", frm);\n sprintEl.onchange = () => {\n permissionsSprintToggle(sprintEl.value !== \"\");\n };\n initPermissions(teamEl, sprintEl);\n frm.onsubmit = () => {\n const title = req(\"input[name=\\\"title\\\"]\", frm).value;\n const icon = req(\"input[name=\\\"icon\\\"]:checked\", frm).value;\n send(\"update\", {\"title\": title, \"icon\": icon, \"team\": teamEl.value, \"sprint\": sprintEl.value, ...loadPermsForm(frm)});\n document.location.hash = \"\";\n return false;\n };\n }\n initReports();\n}\n\nfunction onUpdate(param: Standup) {\n const frm = req(\"#modal-standup-config\");\n setTeamSprint(\"standup\", frm, param.teamID, param.sprintID, param.title, param.icon);\n}\n\nexport function handleStandup(m: Message) {\n switch (m.cmd) {\n case \"update\":\n return onUpdate(m.param as Standup);\n case \"child-add\":\n return reportAdd(m.param as Report);\n case \"child-update\":\n return reportUpdate(m.param as Report);\n case \"child-remove\":\n return reportRemove(m.param as string);\n case \"permissions\":\n return permissionsUpdate(m.param as Permission[]);\n default:\n throw new Error(\"invalid standup command [\" + m.cmd + \"]\");\n }\n}\n", "import {JSX} from \"./jsx\";\nimport type {Feedback} from \"./feedback\";\nimport {username} from \"./member\";\nimport {snippetCommentsModal, snippetCommentsModalLink} from \"./comments\";\nimport {els} from \"./dom\";\n\nexport function snippetFeedbackContainer(cat: string) {\n return
    \n \n

    {cat}

    \n
    \n
    \n
    \n \n
    \n
    \n \u00D7\n

    New Feedback

    \n
    \n
    \n
    \n \n \n
    \n \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    ;\n}\n\nexport function snippetFeedback(f: Feedback) {\n return
    \n
    {snippetCommentsModalLink(\"feedback\", f.id)}
    \n {snippetCommentsModal(\"feedback\", f.id, f.id)}\n \n
    {username(f.userID)}
    \n
    {f.html}
    \n
    \n
    ;\n}\n\nexport function snippetFeedbackModalView(r: Feedback): HTMLElement {\n return
    \n \n
    \n
    \n \u00D7\n

    {r.category + \" :: \" + username(r.userID)}

    \n
    \n
    \n
    \n
    ;\n}\n\nconst oc = \"return confirm('Are you sure you want to delete this feedback?');\";\n\nfunction categoryOptions(selected: string) {\n return els(\".category\").map((x) => x.dataset.category).map((x) => {\n if (x === selected) {\n return ;\n }\n return ;\n });\n}\n\nexport function snippetFeedbackModalEdit(r: Feedback): HTMLElement {\n return
    \n \n
    \n
    \n \u00D7\n

    {r.category + \" :: \" + username(r.userID)}

    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    ;\n}\n", "import {els, opt, req} from \"./dom\";\nimport {send} from \"./app\";\nimport {snippetFeedback, snippetFeedbackContainer, snippetFeedbackModalEdit, snippetFeedbackModalView} from \"./feedbacks\";\nimport {initCommentsModal} from \"./comment\";\nimport {flashCreate} from \"./flash\";\nimport {focusDelay} from \"./util\";\nimport {getSelfID} from \"./member\";\n\nexport type Feedback = {\n id: string;\n category: string;\n idx: number;\n userID: string;\n content: string;\n html?: string\n}\n\nfunction initAddModal(feedbackAddModal: HTMLElement) {\n const feedbackAddForm = req(\"form\", feedbackAddModal);\n feedbackAddForm.onsubmit = () => {\n const category = req(\"select[name=\\\"category\\\"]\", feedbackAddForm).value;\n const input = req(\"textarea[name=\\\"content\\\"]\", feedbackAddForm);\n const content = input.value;\n input.value = \"\";\n send(\"child-add\", {\"category\": category, \"content\": content});\n document.location.hash = \"\";\n return false;\n };\n}\n\nfunction initEditModal(feedbackEditModal: HTMLElement) {\n const frm = req(\"form\", feedbackEditModal);\n const feedbackID = req(\"input[name=\\\"feedbackID\\\"]\", frm).value;\n req(\".feedback-edit-delete\", frm).onclick = () => {\n if (confirm(\"Are you sure you want to delete this feedback?\")) {\n send(\"child-remove\", {\"feedbackID\": feedbackID});\n document.location.hash = \"\";\n }\n return false;\n };\n frm.onsubmit = () => {\n const category = req(\"select[name=\\\"category\\\"]\", frm).value;\n const input = req(\"textarea[name=\\\"content\\\"]\", frm);\n const content = input.value;\n send(\"child-update\", {\"feedbackID\": feedbackID, \"category\": category, \"content\": content});\n document.location.hash = \"\";\n return false;\n };\n}\n\nexport function initFeedbacks() {\n els(\".add-feedback-link\").forEach((x) => {\n x.onclick = () => {\n return focusDelay(req(\"#feedback-add-content-\" + x.dataset.category));\n };\n });\n els(\".modal-feedback-edit-link\").forEach((x) => {\n x.onclick = () => {\n return focusDelay(req(\"#input-content-\" + x.dataset.id));\n };\n });\n for (const feedbackAddModal of els(\".modal-feedback-add\")) {\n initAddModal(feedbackAddModal);\n }\n els(\".modal-feedback-edit\").forEach(initEditModal);\n}\n\nexport function feedbackAdd(f: Feedback) {\n let list = opt(\"#category-\" + f.category + \" .feedback-list\");\n\n if (!list) {\n const x = snippetFeedbackContainer(f.category);\n req(\"#category-list\").appendChild(x);\n list = req(\".feedback-list\", x);\n }\n\n let idx = -1;\n for (let i = 0; i < list.children.length; i++) {\n const n = list.children.item(i) as HTMLElement;\n const title = req(\".feedback-content\", n).innerText;\n const currIdxStr = n.dataset.index;\n if (currIdxStr) {\n const currIdx = parseInt(currIdxStr, 10);\n if (currIdx >= f.idx) {\n idx = i;\n break;\n } else if (title.localeCompare(f.content, undefined, {sensitivity: \"accent\"}) >= 0) {\n idx = i;\n break;\n }\n }\n }\n const tr = snippetFeedback(f);\n if (idx === -1) {\n list.appendChild(tr);\n } else {\n list.insertBefore(tr, list.children[idx]);\n }\n if (getSelfID() === f.userID) {\n const modal = snippetFeedbackModalEdit(f);\n initEditModal(modal);\n req(\"#feedback-modals\").appendChild(modal);\n } else {\n req(\"#feedback-modals\").appendChild(snippetFeedbackModalView(f));\n }\n\n initCommentsModal(req(\".modal\", tr));\n}\n\nexport function feedbackUpdate(f: Feedback) {\n const div = opt(\"#feedback-\" + f.id);\n if (!div) {\n return feedbackAdd(f);\n }\n const body = req(\".pt\", div);\n if (f.html) {\n body.innerHTML = f.html;\n } else {\n body.innerText = f.content;\n }\n}\n\nexport function feedbackRemove(id: string) {\n req(\"#feedback-\" + id).remove();\n flashCreate(id + \"-removed\", \"success\", `feedback has been removed`);\n req(\"#modal-feedback-\" + id).remove();\n}\n", "import type {Message} from \"./socket\";\nimport {opt, req} from \"./dom\";\nimport {send} from \"./app\";\nimport {configFocus, setTeamSprint} from \"./workspace\";\nimport {tagsWire} from \"./tags\";\nimport {Feedback, feedbackAdd, feedbackRemove, feedbackUpdate, initFeedbacks} from \"./feedback\";\nimport {initPermissions, loadPermsForm, Permission, permissionsSprintToggle, permissionsTeamToggle, permissionsUpdate} from \"./permission\";\n\nexport type Retro = {\n id: string;\n slug: string;\n title: string;\n categories: string[];\n icon: string;\n status: string;\n teamID: string;\n sprintID: string;\n}\n\nexport function initRetro() {\n configFocus(\"retro\");\n const frm = opt(\"#modal-retro-config form\");\n if (frm) {\n const teamEl = req(\"select[name=\\\"team\\\"]\", frm);\n teamEl.onchange = () => {\n permissionsTeamToggle(teamEl.value !== \"\");\n };\n const sprintEl = req(\"select[name=\\\"sprint\\\"]\", frm);\n sprintEl.onchange = () => {\n permissionsSprintToggle(sprintEl.value !== \"\");\n };\n initPermissions(teamEl, sprintEl);\n frm.onsubmit = () => {\n const title = req(\"input[name=\\\"title\\\"]\", frm).value;\n const icon = req(\"input[name=\\\"icon\\\"]:checked\", frm).value;\n const categories = req(\"input[name=\\\"categories\\\"]\", frm).value;\n send(\"update\", {\"title\": title, \"icon\": icon, \"categories\": categories, \"team\": teamEl.value, \"sprint\": sprintEl.value, ...loadPermsForm(frm)});\n document.location.hash = \"\";\n return false;\n };\n }\n initFeedbacks();\n}\n\nfunction onUpdate(param: Retro) {\n const panel = req(\"#modal-retro-config\");\n const frm = opt(\"form\", panel);\n if (frm) {\n const cat = req(\"input[name=\\\"categories\\\"]\", frm);\n cat.value = param.categories.join(\",\");\n if (cat.parentElement) {\n tagsWire(cat.parentElement);\n }\n } else {\n req(\".config-panel-categories\", panel).innerText = param.categories.join(\", \");\n }\n setTeamSprint(\"retro\", panel, param.teamID, param.sprintID, param.title, param.icon);\n // const listEl = req(\"#category-list\");\n // for (const catEl of els(\" .category\", listEl)) {\n // TODO\n // }\n}\n\nexport function handleRetro(m: Message) {\n switch (m.cmd) {\n case \"update\":\n return onUpdate(m.param as Retro);\n case \"child-add\":\n return feedbackAdd(m.param as Feedback);\n case \"child-update\":\n return feedbackUpdate(m.param as Feedback);\n case \"child-remove\":\n return feedbackRemove(m.param as string);\n case \"permissions\":\n return permissionsUpdate(m.param as Permission[]);\n default:\n throw new Error(\"invalid retro command [\" + m.cmd + \"]\");\n }\n}\n", "import type {Message} from \"./socket\";\nimport {commentAdd, Comment} from \"./comment\";\nimport {memberAdd, MemberMessage, memberRemove, memberUpdate, onlineUpdate} from \"./member\";\nimport {flashCreate} from \"./flash\";\nimport {handleTeam} from \"./team\";\nimport {handleSprint} from \"./sprint\";\nimport {handleEstimate} from \"./estimate\";\nimport {handleStandup} from \"./standup\";\nimport {handleRetro} from \"./retro\";\n\nfunction onMessage(x: { level: \"success\" | \"error\", message: string }) {\n flashCreate(\"adhoc-message\", x.level, x.message);\n}\n\nfunction handleService(svc: string, m: Message) {\n switch (svc) {\n case \"team\":\n return handleTeam(m);\n case \"sprint\":\n return handleSprint(m);\n case \"estimate\":\n return handleEstimate(m);\n case \"standup\":\n return handleStandup(m);\n case \"retro\":\n return handleRetro(m);\n default:\n throw new Error(\"invalid service [\" + svc + \"]\");\n }\n}\n\nexport function handle(svc: string, m: Message) {\n switch (m.cmd) {\n case \"reset\":\n document.location.href = \"/\";\n return;\n case \"message\":\n return onMessage(m.param as { level: \"success\" | \"error\", message: string });\n case \"comment\":\n return commentAdd(m.param as Comment);\n case \"online-update\":\n return onlineUpdate(m.param as { userID: string; connected: boolean; });\n case \"member-add\":\n if (svc === \"estimate\") {\n handleEstimate(m);\n }\n return memberAdd(m.param as MemberMessage);\n case \"member-update\":\n return memberUpdate(m.param as MemberMessage);\n case \"member-remove\":\n return memberRemove(m.param as string);\n default:\n return handleService(svc, m);\n }\n}\n", "import {initComments} from \"./comment\";\nimport {handle} from \"./handle\";\nimport {initMembers} from \"./member\";\nimport {Message, Socket} from \"./socket\";\nimport {initEstimate} from \"./estimate\";\nimport {initTeam} from \"./team\";\nimport {initSprint} from \"./sprint\";\nimport {initStandup} from \"./standup\";\nimport {initRetro} from \"./retro\";\n\nlet sock: Socket;\nlet svc: string;\nlet id: string;\n\nfunction open() {\n console.log(\"[socket]: open\");\n}\n\nfunction recv(m: Message) {\n const list = document.getElementById(\"socket-list\");\n if (list) {\n const pre = document.createElement(\"pre\");\n pre.innerText = JSON.stringify(m, null, 2);\n list.append(pre);\n }\n handle(svc, m);\n}\n\nfunction err(e: unknown) {\n console.log(`[socket error]: ${e}`);\n}\n\nexport function initWorkspace(t: string, idStr: string) {\n svc = t;\n id = idStr;\n initComments();\n initMembers();\n switch (svc) {\n case \"team\":\n initTeam();\n break;\n case \"sprint\":\n initSprint();\n break;\n case \"estimate\":\n initEstimate();\n break;\n case \"standup\":\n initStandup();\n break;\n case \"retro\":\n initRetro();\n break;\n }\n sock = new Socket(true, open, recv, err, \"/\" + svc + \"/\" + id + \"/connect\");\n console.log(\"loaded [\" + svc + \"] workspace [\" + id + \"]\");\n}\n\nexport function send(cmd: string, param: unknown) {\n sock.send({channel: svc + \":\" + id, cmd: cmd, param: param});\n}\n\ndeclare global {\n interface Window { // eslint-disable-line @typescript-eslint/consistent-type-definitions\n initWorkspace: (t: string, idStr: string) => void\n }\n}\n\nexport function appInit(): void {\n window.initWorkspace = initWorkspace;\n}\n", "import \"./client.css\";\nimport {JSX} from \"./jsx\";\nimport {audit} from \"./audit\";\nimport {menuInit} from \"./menu\";\nimport {modeInit} from \"./mode\";\nimport {flashInit} from \"./flash\";\nimport {linkInit} from \"./link\";\nimport {timeInit} from \"./time\";\nimport {autocompleteInit} from \"./autocomplete\";\nimport {modalInit} from \"./modal\";\nimport {tagsInit} from \"./tags\";\nimport {formInit} from \"./form\";\nimport {themeInit} from \"./theme\";\nimport {Message, socketInit} from \"./socket\";\nimport {appInit} from \"./app\";\n\ndeclare global {\n interface Window { // eslint-disable-line @typescript-eslint/consistent-type-definitions\n \"rituals\": {\n wireTime: (el: HTMLElement) => void;\n relativeTime: (el: HTMLElement) => string;\n autocomplete: (el: HTMLInputElement, url: string, field: string, title: (x: unknown) => string, val: (x: unknown) => string) => void;\n setSiblingToNull: (el: HTMLElement) => void;\n initForm: (frm: HTMLFormElement) => void;\n flash: (key: string, level: \"success\" | \"error\", msg: string) => void;\n tags: (el: HTMLElement) => void;\n Socket: unknown;\n };\n audit: (s: string, ...args: any) => void; // eslint-disable-line @typescript-eslint/no-explicit-any\n JSX: (tag: string, attrs: unknown[]) => HTMLElement;\n }\n}\n\nexport function init(): void {\n const [s, i] = formInit();\n const [wireTime, relativeTime] = timeInit();\n window.rituals = {\n wireTime: wireTime,\n relativeTime: relativeTime,\n autocomplete: autocompleteInit(),\n setSiblingToNull: s,\n initForm: i,\n flash: flashInit(),\n tags: tagsInit(),\n Socket: socketInit()\n };\n menuInit();\n modeInit();\n linkInit();\n modalInit();\n themeInit();\n window.audit = audit;\n window.JSX = JSX;\n appInit();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", init);\n"], "mappings": "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", "names": ["els", "selector", "context", "result", "ret", "v", "opt", "e", "req", "res", "setHTML", "el", "html", "setDisplay", "condition", "JSX", "tag", "attrs", "args", "e", "name", "v", "setHTML", "child", "c", "renderAudit", "msg", "codes", "li", "code", "pre", "audit", "el", "opt", "menuInit", "n", "els", "l", "d", "modeInit", "el", "els", "fade", "el", "flashCreate", "key", "level", "msg", "container", "fl", "radio", "label", "close", "content", "flashInit", "x", "f", "linkInit", "el", "els", "msg", "utc", "date", "u", "wireTime", "el", "tsStr", "ts", "tsEl", "relativeTime", "str", "diff", "dayDiff", "year", "month", "day", "ret", "timeoutSeconds", "timeInit", "els", "debounce", "callback", "wait", "timeoutId", "args", "autocomplete", "el", "url", "field", "title", "val", "listId", "list", "loadingOpt", "cache", "lastQuery", "getURL", "q", "dest", "datalistUpdate", "c", "f", "proceed", "l", "d", "res", "data", "arr", "frag", "optMax", "v", "t", "option", "autocompleteInit", "modalInit", "event", "els", "el", "ev", "svgRef", "key", "size", "cls", "svg", "expandCollapse", "extra", "focusDelay", "el", "compareOrder", "elem1", "elem2", "draggedElement", "tagsUpdate", "editorEl", "values", "elements", "els", "el", "inputEl", "req", "tagsRemove", "itemEl", "tagsEdit", "value", "edit", "apply", "setDisplay", "event", "tagsRender", "v", "item", "e", "order", "baseElement", "editor", "close", "svgRef", "tagsAdd", "tagContainerEl", "tagsWire", "input", "opt", "tagContainer", "vals", "x", "k", "add", "tagsInit", "selected", "setSiblingToNull", "el", "i", "initForm", "frm", "editorCache", "selectedCache", "input", "evt", "cv", "formInit", "n", "els", "keys", "call", "mockup", "sel", "f", "q", "x", "setBG", "v", "el", "setFG", "set", "mode", "key", "themeInit", "els", "m", "appUnloading", "socketUrl", "u", "l", "protocol", "Socket", "debug", "o", "r", "e", "url", "s", "event", "msg", "elapsed", "m", "socketInit", "memberPictureFor", "picture", "size", "cls", "svgRef", "snippetMember", "userID", "name", "role", "JSX", "svg", "snippetMemberModalView", "snippetMemberModalEdit", "cfrm", "roles", "x", "getSelfID", "req", "isAdmin", "wireSelfForm", "selfModal", "selfForm", "opt", "nameInput", "choiceInput", "pictureInput", "msg", "send", "els", "x", "memberPictureFor", "getMemberName", "id", "username", "ret", "getMemberRole", "memberList", "slID", "sl", "e", "l", "r", "wireMemberForm", "modal", "form", "f", "cmd", "userID", "role", "panel", "wireMemberForms", "modals", "memberUpdate", "param", "rd", "rs", "tbl", "itemsArr", "ln", "rn", "memberAdd", "idx", "i", "n", "tr", "snippetMember", "snippetMemberModalEdit", "snippetMemberModalView", "memberRemove", "onlineUpdate", "mel", "svg", "svgRef", "initMembers", "focusDelay", "snippetComment", "c", "un", "li", "JSX", "d", "utc", "timeSpan", "relativeTime", "time", "snippetCommentsModalLink", "svc", "id", "x", "href", "a", "svg", "initCommentsLink", "snippetCommentsModal", "title", "initCommentsLink", "link", "focusDelay", "req", "commentAdd", "c", "ul", "un", "username", "li", "snippetComment", "count", "svgRef", "initCommentsModal", "modal", "form", "ta", "getSelfID", "send", "initComments", "els", "getSelectName", "key", "panel", "id", "el", "opt", "modelBanner", "teamID", "sprintID", "ret", "onChildAddModel", "param", "tbody", "req", "empty", "tr", "td", "commentsDiv", "snippetCommentsModalLink", "snippetCommentsModal", "a", "iconSpan", "svgRef", "titleSpan", "initCommentsModal", "onChildUpdateModel", "onChildRemoveModel", "em", "setTeamSprint", "title", "icon", "tEl", "pt", "els", "ps", "vi", "vt", "r", "t", "s", "configFocus", "k", "i", "focusDelay", "permissionsUpdate", "perms", "permissionsTeamToggle", "set", "req", "permissionsSprintToggle", "loadPermsForm", "frm", "ret", "el", "els", "initPermissions", "t", "s", "initTeam", "configFocus", "frm", "opt", "title", "req", "icon", "send", "loadPermsForm", "onUpdate", "param", "setTeamSprint", "handleTeam", "m", "onChildAddModel", "onChildUpdateModel", "onChildRemoveModel", "permissionsUpdate", "initSprint", "configFocus", "frm", "opt", "teamEl", "req", "permissionsTeamToggle", "initPermissions", "title", "icon", "startDate", "endDate", "send", "loadPermsForm", "ds", "s", "summary", "param", "ret", "onUpdate", "panel", "setTeamSprint", "handleSprint", "m", "onChildAddModel", "onChildUpdateModel", "onChildRemoveModel", "permissionsUpdate", "snippetStory", "s", "memberName", "JSX", "snippetCommentsModalLink", "snippetCommentsModal", "memberItem", "id", "name", "svg", "choiceItem", "ch", "wireStoryModalFormEdit", "id", "a", "focusDelay", "req", "wireStoryModalFormToNew", "frm", "send", "wireStoryModalFormToActive", "wireStoryModalFormToComplete", "wireStoryModalFormVote", "e", "els", "opt", "m", "getSelfID", "svgRef", "wireStoryModalFormDelete", "wireStoryModal", "el", "snippetVote", "storyID", "m", "v", "JSX", "onVote", "v", "els", "m", "req", "svgRef", "wireFinalVote", "f", "storyID", "typ", "value", "storyEl", "send", "applyCalcs", "votes", "results", "finalVote", "items", "memberList", "member", "vote", "snippetVote", "fv", "calcEl", "frm", "onEditSubmit", "frm", "btn", "req", "send", "storyID", "title", "initStories", "els", "x", "focusDelay", "storyAddModal", "storyAddForm", "input", "editor", "wireStoryModal", "storyUpdate", "s", "tr", "editModal", "viewModal", "fv", "el", "storyAdd", "tbl", "idx", "i", "n", "currIdxStr", "snippetStory", "username", "initCommentsModal", "e", "wireStoryModalFormDelete", "modal", "editLink", "memberItems", "memberList", "memberItem", "choiceItems", "estimateChoices", "choiceItem", "storyStatus", "applyCalcs", "storyRemove", "id", "flashCreate", "initEstimate", "configFocus", "frm", "opt", "teamEl", "req", "permissionsTeamToggle", "sprintEl", "permissionsSprintToggle", "initPermissions", "title", "icon", "choices", "send", "loadPermsForm", "initStories", "estimateChoices", "x", "onMemberAdd", "param", "els", "m", "memberItem", "onUpdate", "panel", "ch", "tagsWire", "setTeamSprint", "handleEstimate", "storyAdd", "storyUpdate", "storyStatus", "storyRemove", "onVote", "permissionsUpdate", "snippetReportContainer", "day", "JSX", "expandCollapse", "snippetReport", "r", "snippetCommentsModalLink", "snippetCommentsModal", "username", "snippetReportModalView", "snippetReportModalEdit", "initEditModal", "modal", "frm", "req", "reportID", "send", "day", "content", "initReports", "els", "x", "focusDelay", "reportAddModal", "reportAddForm", "input", "reportAdd", "r", "list", "opt", "snippetReportContainer", "idx", "u", "username", "i", "n", "div", "snippetReport", "getSelfID", "snippetReportModalEdit", "snippetReportModalView", "initCommentsModal", "reportUpdate", "body", "reportRemove", "id", "rpt", "bd", "flashCreate", "initStandup", "configFocus", "frm", "opt", "teamEl", "req", "permissionsTeamToggle", "sprintEl", "permissionsSprintToggle", "initPermissions", "title", "icon", "send", "loadPermsForm", "initReports", "onUpdate", "param", "setTeamSprint", "handleStandup", "m", "reportAdd", "reportUpdate", "reportRemove", "permissionsUpdate", "snippetFeedbackContainer", "cat", "JSX", "snippetFeedback", "f", "snippetCommentsModalLink", "snippetCommentsModal", "username", "snippetFeedbackModalView", "r", "oc", "categoryOptions", "selected", "els", "x", "snippetFeedbackModalEdit", "initAddModal", "feedbackAddModal", "feedbackAddForm", "req", "category", "input", "content", "send", "initEditModal", "feedbackEditModal", "frm", "feedbackID", "initFeedbacks", "els", "x", "focusDelay", "feedbackAdd", "f", "list", "opt", "snippetFeedbackContainer", "idx", "i", "n", "title", "currIdxStr", "tr", "snippetFeedback", "getSelfID", "modal", "snippetFeedbackModalEdit", "snippetFeedbackModalView", "initCommentsModal", "feedbackUpdate", "div", "body", "feedbackRemove", "id", "flashCreate", "initRetro", "configFocus", "frm", "opt", "teamEl", "req", "permissionsTeamToggle", "sprintEl", "permissionsSprintToggle", "initPermissions", "title", "icon", "categories", "send", "loadPermsForm", "initFeedbacks", "onUpdate", "param", "panel", "cat", "tagsWire", "setTeamSprint", "handleRetro", "m", "feedbackAdd", "feedbackUpdate", "feedbackRemove", "permissionsUpdate", "onMessage", "x", "flashCreate", "handleService", "svc", "m", "handleTeam", "handleSprint", "handleEstimate", "handleStandup", "handleRetro", "handle", "commentAdd", "onlineUpdate", "memberAdd", "memberUpdate", "memberRemove", "sock", "svc", "id", "open", "recv", "m", "list", "pre", "handle", "err", "initWorkspace", "t", "idStr", "initComments", "initMembers", "initTeam", "initSprint", "initEstimate", "initStandup", "initRetro", "Socket", "send", "cmd", "param", "appInit", "init", "s", "i", "formInit", "wireTime", "relativeTime", "timeInit", "autocompleteInit", "flashInit", "tagsInit", "socketInit", "menuInit", "modeInit", "linkInit", "modalInit", "themeInit", "audit", "JSX", "appInit"] }