{
"version": 3,
"sources": ["../site.js"],
"sourcesContent": ["\uFEFFvar snipMarker = \"--8<--\";\n\nfunction setUpOverridableFonts(scriptBits) {\n var toggleOverrideFonts = document.createElement('span');\n toggleOverrideFonts.innerHTML = \" · \";\n /*var toggleOverrideFontsLink = document.createElement('a');\n toggleOverrideFonts.appendChild(toggleOverrideFontsLink);\n toggleOverrideFontsLink.setAttribute('href', '#');\n toggleOverrideFontsLink.textContent = 'Toggle Lexia';*/\n\n var fontToOverrideWith = null;\n var fontTokens = ['LEXIE', 'OPENDYSLEXIC', 'OPENDYSLEXICMONO', 'ATKINSONHYPERLEGIBLE', 'ATKINSONHYPERLEGIBLENEXT', 'ATKINSONHYPERLEGIBLEMONO'];\n var fontLabels = ['Lexie Readable', 'OpenDyslexic', 'OpenDyslexic Mono', 'Atkinson Hyperlegible', 'Atkinson Hyperlegible Next', 'Atkinson Hyperlegible Mono'];\n var fontFamilies = { 'LEXIE': 'Lexie Readable', 'OPENDYSLEXIC': 'OpenDyslexic', 'OPENDYSLEXICMONO': 'OpenDyslexicMono', 'ATKINSONHYPERLEGIBLE': 'Atkinson Hyperlegible', 'ATKINSONHYPERLEGIBLENEXT': 'Atkinson Hyperlegible Next', 'ATKINSONHYPERLEGIBLEMONO': 'Atkinson Hyperlegible Mono' };\n var fontTokenGroupStarters = { 'LEXIE': true, 'ATKINSONHYPERLEGIBLE': true };\n\n // Deploy the dog?\n try {\n var annoyingWhiteDog = 'undertale';\n var dogResidue = '1';\n if (localStorage.getItem(annoyingWhiteDog) == dogResidue) {\n fontTokens.push('SANS');\n fontLabels.push('Sans');\n fontTokens.push('PAPYRUS');\n fontLabels.push('Papyrus');\n fontFamilies['SANS'] = 'Comic Sans MS';\n fontFamilies['PAPYRUS'] = 'Papyrus';\n fontTokenGroupStarters['SANS'] = true;\n }\n } catch {}\n\n var fontSelect = document.createElement('select');\n var notOverriding = document.createElement('option');\n notOverriding.textContent = 'Original font';\n notOverriding.value = '';\n fontSelect.appendChild(notOverriding);\n for (var fi = 0; fi < fontTokens.length; fi++) {\n var ftoken = fontTokens[fi];\n var flabel = fontLabels[fi];\n \n if (fontTokenGroupStarters[ftoken] === true) {\n var breaker = document.createElement('hr');\n fontSelect.appendChild(breaker);\n }\n\n var overrideFont = document.createElement('option');\n overrideFont.textContent = flabel;\n overrideFont.value = ftoken;\n fontSelect.appendChild(overrideFont);\n }\n\n toggleOverrideFonts.appendChild(fontSelect);\n\n const KEY_OVERRIDEFONT = \"OVERRIDEFONT\";\n\n const reactToFontSelectValue = () => {\n var existingOverrider = document.querySelector('#font-overrider');\n if (existingOverrider != null) {\n existingOverrider.remove();\n }\n var fontFamily = fontFamilies[fontSelect.value];\n if (fontFamily != null) {\n var overrideFontStyle = document.createElement('style');\n overrideFontStyle.setAttribute('id', 'font-overrider');\n overrideFontStyle.innerHTML = \".markdown-script-text, .script-text { font-family: '\" + fontFamily + \"' !important; }\";\n\n document.head.appendChild(overrideFontStyle);\n }\n\n if (window.cb_hasLocalStorage === true) {\n const pref = window.localStorage.getItem(KEY_OVERRIDEFONT);\n if (pref != fontSelect.value) {\n if (pref == '') {\n window.localStorage.removeItem(KEY_OVERRIDEFONT);\n } else {\n window.localStorage.setItem(KEY_OVERRIDEFONT, fontSelect.value);\n }\n }\n }\n };\n\n fontSelect.addEventListener('input', (ev) => {\n //console.log('changed; ', fontSelect, fontSelect.value);\n\n reactToFontSelectValue();\n });\n\n\n if (window.cb_hasLocalStorage === true) {\n const pref = window.localStorage.getItem(KEY_OVERRIDEFONT);\n if (fontTokens.indexOf(pref) > -1) {\n fontSelect.value = pref;\n reactToFontSelectValue();\n }\n }\n\n\n /*\n toggleOverrideFontsLink.addEventListener('click', (ev) => {\n //debugger;\n ev.preventDefault();\n if (document.querySelector('#font-overrider') == null) {\n var overrideFontStyle = document.createElement('style');\n overrideFontStyle.setAttribute('id', 'font-overrider');\n overrideFontStyle.innerHTML = \".script-text { font-family: 'Lexie Readable' !important; }\";\n\n document.head.appendChild(overrideFontStyle);\n }\n });*/\n scriptBits.appendChild(toggleOverrideFonts);\n}\n\nconst scriptText = document.querySelector('.script-text-real');\nif (scriptText != null) {\n\n var scriptBits = document.querySelector('#script-bits');\n\n if (scriptText.dataset.scripttext == \"newmode\") {\n function transformIntoLinesTable(container, containerMode, maxLineRaw) {\n if (container == null) {\n return null;\n }\n var lines = container.querySelectorAll('.line-raw');\n var table = document.createElement('table');\n table.classList.add('wln');\n table.classList.add('wln-' + containerMode);\n var tableBody = document.createElement('tbody');\n table.appendChild(tableBody);\n\n\n for (let idx = 0; idx < lines.length; idx++) {\n var line = lines[idx];\n var lineRow = document.createElement('tr');\n var lineNumCell = document.createElement('td');\n lineNumCell.classList.add('ln');\n if (line.dataset.isblank == \"yes\") {\n lineNumCell.classList.add('ln-blank');\n }\n lineNumCell.textContent = line.dataset.linenum;\n var lineTextCell = document.createElement('td');\n lineTextCell.classList.add('lt');\n lineTextCell.innerHTML = line.innerHTML;\n lineRow.appendChild(lineNumCell);\n lineRow.appendChild(lineTextCell);\n tableBody.appendChild(lineRow);\n\n if (idx == 0 && maxLineRaw != null) {\n\n if (line.dataset.linenum.length < maxLineRaw.length) {\n var neededNBSPs = (maxLineRaw.length - line.dataset.linenum.length);\n var nbsps = \"\";\n for (var j = 0; j < neededNBSPs; j++) {\n nbsps += \"\\u00a0\";\n }\n lineNumCell.textContent = nbsps + line.dataset.linenum;\n }\n /*\n var stretcherSpan = document.createElement('span');\n stretcherSpan.classList.add('stretcher-span');\n stretcherSpan.textContent = maxLineRaw;\n lineNumCell.appendChild(stretcherSpan);*/\n /*var stretcherRow = document.createElement('tr');\n stretcherRow.classList.add('stretcher');\n var stretcherCell = document.createElement('td');\n stretcherCell.classList.add('ln');\n stretcherCell.textContent = maxLineRaw;\n stretcherRow.appendChild(stretcherCell);\n tableBody.appendChild(stretcherRow);*/\n\n }\n\n }\n return table;\n }\n\n var allLineRaws = scriptText.querySelectorAll('.line-raw');\n var lastLineRaw = allLineRaws[allLineRaws.length - 1];\n var maxLineRaw = lastLineRaw.dataset.linenum;\n\n var intro = scriptText.querySelector('.lines-line-instruction');\n var introTable = transformIntoLinesTable(intro, 'instruction', maxLineRaw);\n\n var proper = scriptText.querySelector('.lines-line-proper');\n var properTable = transformIntoLinesTable(proper, 'proper');\n\n if (introTable != null) {\n scriptText.appendChild(introTable);\n }\n if (properTable != null) {\n scriptText.appendChild(properTable);\n }\n\n const toggler = document.createElement('a');\n toggler.setAttribute('href', '#');\n toggler.textContent = \"Show line numbers\";\n\n toggler.addEventListener('click', (ev) => {\n ev.preventDefault();\n document.body.classList.toggle('shown-line-numbers-nogrid');\n const isShown = document.body.classList.contains('shown-line-numbers-nogrid');\n toggler.textContent = (isShown) ? \"Hide line numbers\" : \"Show line numbers\";\n });\n\n scriptBits.appendChild(toggler);\n\n } else {\n if ('gridAutoColumns' in document.body.style) {\n\n const toggler = document.createElement('a');\n toggler.setAttribute('href', '#');\n toggler.textContent = \"Show line numbers\";\n \n toggler.addEventListener('click', (ev) => {\n ev.preventDefault();\n document.body.classList.toggle('shown-line-numbers');\n const isShown = document.body.classList.contains('shown-line-numbers');\n toggler.textContent = (isShown) ? \"Hide line numbers\" : \"Show line numbers\";\n });\n\n scriptBits.appendChild(toggler);\n\n }\n }\n\n var scriptProper = document.querySelector('.script-text-real');\n\n window.syncWordCountScriptProper = function syncWordCountScriptProper() {\n var count;\n var chars;\n if (scriptBits.dataset.readycharcount != null && scriptBits.dataset.readywordcount != null) {\n count = parseInt(scriptBits.dataset.readywordcount);\n chars = parseInt(scriptBits.dataset.readycharcount);\n } else {\n\n const scriptText = (scriptProper.dataset.scripttext == \"newmode\") ? scriptProper.querySelectorAll('.lines-line-proper .line-raw') : scriptProper.querySelectorAll('.line-txt.line-proper');\n var joined = [];\n for (let line of scriptText) {\n joined.push(line.textContent);\n }\n var joinedText = joined.join('\\n');\n\n var value = joinedText;\n var indexOfSnip = value.indexOf(snipMarker);\n if (indexOfSnip > -1) {\n value = value.substring(indexOfSnip + snipMarker.length);\n }\n count = window.countwords(value);\n chars = window.countcharacters(value);\n }\n\n var stats = document.createElement('span');\n stats.textContent = ' \u00B7 ' + ('text stats', (count == 1 ? '1 word' : (count + ' words')) + ' \u00B7 ' + (chars == 1 ? '1 character' : (chars + ' characters')));\n\n scriptBits.appendChild(stats);\n\n }\n\n syncWordCountScriptProper();\n setUpOverridableFonts(scriptBits);\n\n}\n\nvar markdownScriptText = document.querySelector('.markdown-script-proper.markdown-script-real');\nif (markdownScriptText != null) {\n var scriptBits = document.querySelector('#script-bits');\n\n window.syncWordCountScriptProperMD = function syncWordCountScriptProperMD() {\n var count;\n var chars;\n if (scriptBits.dataset.readycharcount != null && scriptBits.dataset.readywordcount != null) {\n count = parseInt(scriptBits.dataset.readywordcount);\n chars = parseInt(scriptBits.dataset.readycharcount);\n } else \n {\n const scriptText = markdownScriptText.textContent;\n\n var count = window.countwords(scriptText);\n var chars = window.countcharacters(scriptText);\n }\n\n var stats = document.createElement('span');\n stats.textContent = ('text stats', (count == 1 ? '1 word' : (count + ' words')) + ' \u00B7 ' + (chars == 1 ? '1 character' : (chars + ' characters')));\n\n scriptBits.appendChild(stats);\n\n }\n\n\n syncWordCountScriptProperMD();\n setUpOverridableFonts(scriptBits);\n}\n\nconst togglerShower = document.querySelector('.mode-toggler-shower');\nconst togglerShowerLink = document.createElement('a');\ntogglerShowerLink.href = '#';\ntogglerShowerLink.textContent = '\u2600\uFE0F\uD83C\uDF12';\ntogglerShowerLink.addEventListener('click', function (ev) {\n ev.preventDefault();\n var showing = document.body.classList.toggle('mode-toggler-showing');\n});\ntogglerShower.appendChild(togglerShowerLink);\nconst tmd = document.createElement('span');\ntmd.innerHTML = ' · ';\ntogglerShower.appendChild(tmd);\n \nconst modeToggler = document.querySelector('#mode-toggler');\n\nvar supportsCSSTransitions = (document.createElement('span').style.transitionProperty !== undefined);\n\nvar supportFancy = true; //supportsCSSTransitions;\n\n\nvar adoptSupportFancy = function () {\n if (supportFancy) {\n modeToggler.classList.add('fancypants');\n document.body.classList.add('supports-fancypants-toggler');\n var canHover = !(matchMedia('(hover: none)').matches);\n if (canHover) {\n modeToggler.classList.add('can-hover');\n }\n\n modeToggler.innerHTML = '';\n togglerShower.innerHTML = '\u2600\uFE0F\u2600\uFE0F\uD83C\uDF12\uD83C\uDF12';\n //togglerShower.appendChild(modeToggler);\n\n var switchThing = document.querySelector('#switch-thing-toggle');\n var switchThingModes = document.querySelectorAll('#switch-thing-toggle a');\n\n var switchThingLinks = document.querySelectorAll('#switch-thing-toggle a');\n \n switchThingLinks.forEach(link => {\n link.addEventListener('click', (ev) => {\n ev.preventDefault();\n\n clickSwitcherLink(link, true);\n });\n });\n\n \n\n function clickSwitcherLink(link, set) {\n\n switchThingLinks.forEach(ol => {\n ol.classList.remove('sel');\n });\n link.classList.add('sel');\n var modeToSwitchTo = link.getAttribute('data-switchto');\n\n if (set) {\n if (modeToSwitchTo == \"light\") {\n window.setSchemePreference(window.SCHEME_LIGHT);\n window.syncEffectiveScheme();\n syncModeToggler();\n } else if (modeToSwitchTo == \"dark\") {\n window.setSchemePreference(window.SCHEME_DARK);\n window.syncEffectiveScheme();\n syncModeToggler();\n } else {\n window.setSchemePreference(window.SCHEME_AUTO);\n window.syncEffectiveScheme();\n syncModeToggler();\n }\n }\n }\n var initialLink = null;\n var fallbackAutoLink = null;\n switchThingLinks.forEach(link => {\n const effectiveScheme = window.getEffectiveScheme();\n const isAuto = effectiveScheme[0];\n const scheme = effectiveScheme[1];\n if (isAuto) {\n fallbackAutoLink = link;\n }\n var modeToSwitchTo = link.getAttribute('data-switchto');\n if (modeToSwitchTo == \"auto\" && isAuto) {\n initialLink = link;\n } else if (modeToSwitchTo == \"light\" && !isAuto && scheme == window.SCHEME_LIGHT) {\n initialLink = link;\n } else if (modeToSwitchTo == \"dark\" && !isAuto && scheme == window.SCHEME_DARK) {\n initialLink = link;\n }\n });\n if (initialLink == null) {\n initialLink = fallbackAutoLink;\n }\n\n clickSwitcherLink(initialLink, false);\n}\n};\n\nadoptSupportFancy();\n//setTimeout(adoptSupportFancy, 1600);\n\nfunction syncModeToggler() {\n const effectiveScheme = window.getEffectiveScheme();\n\n const isAuto = effectiveScheme[0];\n const scheme = effectiveScheme[1];\n\n if (!supportFancy) {\n modeToggler.innerHTML = \"\";\n }\n\n if (!window.cb_hasLocalStorage) {\n return;\n }\n\n if (supportFancy) {\n \n } else {\n if (isAuto) {\n const useOtherMode = document.createElement('a');\n useOtherMode.setAttribute('href', '#');\n let schemeToChangeTo = null;\n if (scheme == window.SCHEME_DARK) {\n useOtherMode.textContent = \"use \u2600\uFE0F light mode\";\n togglerShowerLink.textContent = \"\u2600\uFE0F\";\n schemeToChangeTo = window.SCHEME_LIGHT;\n } else {\n useOtherMode.textContent = \"use \uD83C\uDF12 dark mode\";\n togglerShowerLink.textContent = \"\uD83C\uDF12\";\n schemeToChangeTo = window.SCHEME_DARK;\n }\n\n useOtherMode.addEventListener('click', ev => {\n ev.preventDefault();\n\n window.setSchemePreference(schemeToChangeTo);\n window.syncEffectiveScheme();\n syncModeToggler();\n });\n\n modeToggler.appendChild(useOtherMode);\n } else {\n const useOtherMode = document.createElement('a');\n useOtherMode.setAttribute('href', '#');\n let schemeToChangeTo = null;\n if (scheme == window.SCHEME_DARK) {\n useOtherMode.textContent = \"use \u2600\uFE0F light mode\";\n togglerShowerLink.textContent = \"\u2600\uFE0F\";\n schemeToChangeTo = window.SCHEME_LIGHT;\n } else {\n useOtherMode.textContent = \"use \uD83C\uDF12 dark mode\";\n togglerShowerLink.textContent = \"\uD83C\uDF12\";\n schemeToChangeTo = window.SCHEME_DARK;\n }\n\n useOtherMode.addEventListener('click', ev => {\n ev.preventDefault();\n\n window.setSchemePreference(schemeToChangeTo);\n window.syncEffectiveScheme();\n syncModeToggler();\n });\n\n const middot = document.createTextNode(' \u00B7 ');\n\n const followOSScheme = document.createElement('a');\n followOSScheme.setAttribute('href', '#');\n followOSScheme.textContent = 'automatic mode';\n followOSScheme.setAttribute('title', 'Follow the dark/light mode setting of the device/operating system');\n\n followOSScheme.addEventListener('click', ev => {\n ev.preventDefault();\n\n window.setSchemePreference(window.SCHEME_AUTO);\n window.syncEffectiveScheme();\n syncModeToggler();\n });\n\n modeToggler.appendChild(useOtherMode);\n modeToggler.appendChild(middot);\n modeToggler.appendChild(followOSScheme);\n }\n }\n}\n\nsyncModeToggler();\n\nif (window.matchedScheme !== undefined && window.matchedScheme.addEventListener !== undefined) {\n window.matchedScheme.addEventListener('change', ev => {\n window.syncEffectiveScheme();\n syncModeToggler();\n });\n}\n\n\nconst togglable = document.querySelectorAll('.expl-togglable');\n\ntogglable.forEach((to) => {\n let isShown = false;\n to.hidden = true;\n\n const togglerShow = document.createElement('a');\n togglerShow.href = '#';\n togglerShow.textContent = 'More...';\n togglerShow.classList.add('expl-toggler');\n\n const toParent = to.parentElement;\n toParent.insertBefore(togglerShow, to);\n\n togglerShow.addEventListener('click', ev => {\n ev.preventDefault();\n isShown = true;\n to.hidden = false;\n togglerShow.hidden = true;\n })\n\n});\n\n\nconst performerAndAudience = document.querySelector('#performer-and-audience');\n\nif (performerAndAudience != null) {\n\n var validAudienceTokens = [\"F\", \"M\", \"TF\", \"TM\", \"NB\", \"A\"];\n\n function tryConsumeSingleAudienceToken(needle, haystack) {\n if (haystack.indexOf(needle) === 0) {\n return { success: true, rest: haystack.substring(needle.length) };\n } else {\n return { success: false, rest: haystack };\n }\n }\n\n function parseAudiencePortion(fullText) {\n const found = [];\n let work = fullText;\n while (work.length > 0) {\n let anyMatched = false;\n for (let tok of validAudienceTokens) {\n const { success, rest } = tryConsumeSingleAudienceToken(tok, work);\n if (success) {\n anyMatched = true;\n found.push(tok);\n work = rest;\n break;\n }\n }\n if (!anyMatched && work.length >= 1) {\n work = work.substring(1);\n }\n }\n\n if (found.length == 0) {\n found.push(\"?\");\n }\n\n return found;\n }\n\n function parseAudienceString(audience) {\n if (audience.indexOf('4') === -1) {\n return {\n performers: ['?'],\n listeners: ['?']\n };\n }\n\n const splitBy4 = audience.split('4', 2);\n const performerPart = splitBy4[0].trim();\n const performer = parseAudiencePortion(performerPart);\n const listenerPart = splitBy4[1].trim();\n const listener = parseAudiencePortion(listenerPart);\n\n return { performers: performer, listeners: listener };\n }\n\n var performersInfoPrototype = {\n addReflect(cb) {\n if (this.reflectors === undefined) {\n this.reflectors = [];\n }\n this.reflectors.push(cb);\n },\n setFromText(txt, source) {\n const list = parseAudiencePortion(txt);\n this.setFromList(list, source);\n },\n setFromList(list, source) {\n this.value = list;\n if (this.reflectors !== undefined) {\n for (let r of this.reflectors) {\n r(list, source);\n }\n }\n }\n };\n\n var performersInfo = Object.create(performersInfoPrototype);\n\n var listenersInfo = Object.create(performersInfoPrototype);\n\n\n var showingSimpleMode = true;\n\n const simpleModeParagraph = document.createElement('p');\n simpleModeParagraph.classList.add('shown-with-simple-mode');\n simpleModeParagraph.classList.add('simple-mode-audience-tag-p');\n const simpleModeLabel = document.createElement('label');\n simpleModeLabel.classList.add('flabel');\n simpleModeLabel.textContent = \"Audience:\\u00A0\";\n simpleModeLabel.htmlFor = \"audience-simple-inp\";\n simpleModeParagraph.appendChild(simpleModeLabel);\n var simpleModeTextField = document.createElement('input');\n simpleModeTextField.type = 'text';\n simpleModeTextField.maxLength = 50;\n simpleModeParagraph.appendChild(simpleModeTextField);\n const simpleModePreSwitchBr = document.createElement('br');\n const simpleModeInstructions = document.createElement('span');\n simpleModeInstructions.textContent = \" (Like F4M, M4A, etc.) \";\n const simpleModeSwitchToBuilder = document.createElement('a');\n simpleModeSwitchToBuilder.setAttribute('href', '#');\n simpleModeSwitchToBuilder.textContent = 'Choose without writing tag\u2026';\n simpleModeSwitchToBuilder.classList.add('like-toggler');\n\n /*const simpleModeSwitchToBuilderParagraph = document.createElement('p');\n simpleModeSwitchToBuilderParagraph.classList.add('shown-with-simple-mode');\n simpleModeSwitchToBuilderParagraph.classList.add('simple-mode-audience-tag-switch-to-builder-p');\n simpleModeSwitchToBuilderParagraph.classList.add('field-explanation');\n simpleModeSwitchToBuilderParagraph.append(simpleModeSwitchToBuilder);*/\n\n simpleModeParagraph.appendChild(simpleModeInstructions);\n //simpleModeParagraph.appendChild(simpleModePreSwitchBr);\n simpleModeParagraph.appendChild(simpleModeSwitchToBuilder);\n\n simpleModeSwitchToBuilder.addEventListener('click', ev => {\n ev.preventDefault();\n document.body.classList.add('not-showing-simple-mode');\n });\n\n \n\n\n const notSimpleModeParagraph = document.createElement('p');\n notSimpleModeParagraph.classList.add('not-shown-with-simple-mode');\n const notSimpleModeLabel = document.createElement('label');\n notSimpleModeLabel.textContent = \"Performer and audience tag: \";\n notSimpleModeParagraph.appendChild(notSimpleModeLabel);\n const notSimpleModeValue = document.createElement('span');\n notSimpleModeValue.textContent = \"\";\n notSimpleModeParagraph.appendChild(notSimpleModeValue);\n const notSimpleModePreSwitchBr = document.createElement('br');\n const notSimpleModeSwitchToBuilder = document.createElement('a');\n notSimpleModeSwitchToBuilder.setAttribute('href', '#');\n notSimpleModeSwitchToBuilder.textContent = 'Choose by writing tag\u2026';\n notSimpleModeSwitchToBuilder.classList.add('like-toggler');\n notSimpleModeParagraph.appendChild(notSimpleModePreSwitchBr);\n notSimpleModeParagraph.appendChild(notSimpleModeSwitchToBuilder);\n\n notSimpleModeSwitchToBuilder.addEventListener('click', ev => {\n ev.preventDefault();\n document.body.classList.remove('not-showing-simple-mode');\n });\n\n\n\n\n function whenSimpleModeChanged(source) {\n let parsed = parseAudienceString(simpleModeTextField.value);\n //console.log('simple mode text', simpleModeTextField.value, parsed);\n performersInfo.setFromList(parsed.performers, source);\n listenersInfo.setFromList(parsed.listeners, source);\n }\n\n simpleModeTextField.addEventListener('input', ev => {\n whenSimpleModeChanged(SOURCE_PERFORMER_TEXT);\n });\n\n performerAndAudience.appendChild(simpleModeParagraph);\n performerAndAudience.appendChild(notSimpleModeParagraph);\n\n var simpleModePerformersAndListenersParagraph = document.createElement('p');\n simpleModePerformersAndListenersParagraph.classList.add('shown-with-simple-mode');\n simpleModePerformersAndListenersParagraph.classList.add('audience-tag-component-summary');\n simpleModePerformersAndListenersParagraph.classList.add('field-explanation');\n\n var simpleModePerformersSpan = document.createElement('span');\n var simpleModeListenersSpan = document.createElement('span');\n\n simpleModePerformersAndListenersParagraph.appendChild(simpleModePerformersSpan);\n simpleModePerformersAndListenersParagraph.appendChild(document.createTextNode(' \\u00b7 '));\n simpleModePerformersAndListenersParagraph.appendChild(simpleModeListenersSpan);\n\n performerAndAudience.appendChild(simpleModePerformersAndListenersParagraph);\n\n //performerAndAudience.appendChild(simpleModeSwitchToBuilderParagraph);\n\n var isCurrentlySyncing = false;\n\n var SOURCE_PERFORMER_TEXT = 'text';\n var SOURCE_PERFORMER_RADIO = 'radio';\n var SOURCE_PERFORMER_INITIAL = 'initial';\n\n function getCombinedText() {\n const currentPerformers = performersInfo.value;\n const currentListeners = listenersInfo.value;\n if (currentPerformers == null || currentListeners == null) {\n return null;\n }\n const combined = currentPerformers.join('') + '4' + currentListeners.join('');\n return (combined == \"?4?\") ? \"\" : combined;\n }\n\n\n performersInfo.addReflect((list, source) => {\n const tallied = tallyPerformers(list);\n const talliedStr = tallied == null ? \"Unspecified\" : tallied.join(\"; \");\n simpleModePerformersSpan.textContent = 'Performers: ' + talliedStr;\n\n const combined = getCombinedText();\n if (combined == null) {\n return;\n }\n if (source != SOURCE_PERFORMER_TEXT) {\n simpleModeTextField.value = combined;\n }\n notSimpleModeValue.textContent = combined;\n updateAudienceValue(combined);\n\n });\n listenersInfo.addReflect((list, source) => {\n const tallied = tallyPerformers(list);\n const talliedStr = tallied == null ? \"Unspecified\" : tallied.join(\"; \");\n simpleModeListenersSpan.textContent = 'Listeners: ' + talliedStr;\n\n \n const combined = getCombinedText();\n if (combined == null) {\n return;\n }\n if (source != SOURCE_PERFORMER_TEXT) {\n simpleModeTextField.value = combined;\n }\n notSimpleModeValue.textContent = combined;\n updateAudienceValue(combined);\n \n });\n var optionsPerformers = [\n { performer: \"Any\", value: \"A\", def: true },\n { performer: \"Female\", value: \"F\", def: false },\n { performer: \"Male\", value: \"M\", def: false },\n { performer: \"Trans female\", value: \"TF\", def: false },\n { performer: \"Trans male\", value: \"TM\", def: false },\n { performer: \"Non-binary\", value: \"NB\", def: false }\n ];\n\n var performerTokenLookup = {};\n for (let op of optionsPerformers) {\n performerTokenLookup[op.value] = op.performer;\n }\n\n\n function tallyPerformers(list) {\n if (list == null || (list.length == 1 && list[0] == \"?\")) {\n return null;\n }\n const t = {};\n const k = [];\n let anyCountable = false;\n for (let tok of list) {\n if (t[tok] === undefined) {\n t[tok] = 1;\n k.push(tok);\n } else {\n anyCountable = true;\n t[tok] += 1;\n }\n }\n\n const tl = [];\n\n for (let tok of k) {\n const perf = performerTokenLookup[tok];\n if (anyCountable) {\n tl.push(t[tok] + \"\u00D7 \" + perf);\n } else {\n tl.push(perf);\n }\n \n }\n\n return tl;\n }\n\n const performerRows = [];\n const listenerRows = [];\n\n\n\n\n\n\n\n const performerParagraph = document.createElement('p');\n performerParagraph.classList.add('not-shown-with-simple-mode');\n performerParagraph.textContent = \"Performers: \";\n\n performerAndAudience.appendChild(performerParagraph);\n\n var performerContainer = document.createElement('div');\n performerContainer.classList.add('audience-container');\n\n\n var performerRowIdx = 0;\n\n const performerBase = document.createElement('span');\n var performerUnspecified = document.createElement('span');\n performerUnspecified.textContent = 'Unspecified';\n performerBase.appendChild(performerUnspecified);\n\n performersInfo.addReflect((list, source) => {\n const anyRows = (performerContainer.childNodes.length > 0);\n performerUnspecified.style.display = (anyRows ? 'none' : 'inline');\n\n if (source == SOURCE_PERFORMER_RADIO) {\n return;\n }\n\n performerContainer.innerText = \"\";\n if (list != null && list.length == 1 && list[0] == \"?\") {\n list = [];\n }\n for (let p of list) {\n addPerformerRow(false, p);\n }\n\n const anyRowsZ = (performerContainer.childNodes.length > 0);\n performerUnspecified.style.display = (anyRowsZ ? 'none' : 'inline');\n });\n\n function syncPerformersFromRadio() {\n const checked = performerContainer.querySelectorAll('input.a-radio:checked');\n const performers = [];\n for (let ch of checked) {\n performers.push(ch.value);\n }\n if (performers.length == 0) {\n performers.push('?');\n }\n\n performersInfo.setFromList(performers, SOURCE_PERFORMER_RADIO);\n }\n\n function addPerformerRow(useDefault, selected) {\n const performerRow = document.createElement('div');\n performerRow.classList.add('audience-row');\n const radios = [];\n for (let opt of optionsPerformers) {\n const lbl = document.createElement('label');\n const radio = document.createElement('input');\n radio.classList.add('a-radio');\n radio.setAttribute('type', 'radio');\n radio.setAttribute('name', 'performer-' + performerRowIdx);\n radio.setAttribute('value', opt.value);\n if ((useDefault && opt.def) || (selected == opt.value)) {\n radio.setAttribute('checked', 'checked');\n }\n lbl.appendChild(radio);\n const txt = document.createTextNode(' ' + opt.performer);\n lbl.appendChild(txt);\n performerRow.appendChild(lbl);\n radios.push(radio);\n }\n performerRowIdx++;\n\n for (let r of radios) {\n r.addEventListener('click', ev => {\n syncPerformersFromRadio();\n });\n }\n \n\n const removeButton = document.createElement('button');\n removeButton.textContent = 'Remove';\n performerRow.appendChild(removeButton);\n removeButton.addEventListener('click', ev => {\n ev.preventDefault();\n performerContainer.removeChild(performerRow);\n syncPerformersFromRadio();\n });\n\n performerContainer.appendChild(performerRow);\n }\n\n const performerAddButton = document.createElement('button');\n performerAddButton.textContent = 'Add performer';\n //performerBase.appendChild(performerAddButton);\n\n performerParagraph.appendChild(performerBase);\n performerParagraph.appendChild(performerContainer);\n performerParagraph.appendChild(performerAddButton);\n\n performerAddButton.addEventListener('click', ev => {\n ev.preventDefault();\n addPerformerRow(true);\n syncPerformersFromRadio();\n });\n\n\n\n\n\n\n\n\n\n const listenerParagraph = document.createElement('p');\n listenerParagraph.classList.add('not-shown-with-simple-mode');\n listenerParagraph.textContent = \"Listeners: \";\n\n performerAndAudience.appendChild(listenerParagraph);\n\n var listenerContainer = document.createElement('div');\n listenerContainer.classList.add('audience-container');\n\n\n var listenerRowIdx = 0;\n\n const listenerBase = document.createElement('span');\n var listenerUnspecified = document.createElement('span');\n listenerUnspecified.textContent = 'Unspecified';\n listenerBase.appendChild(listenerUnspecified);\n\n listenersInfo.addReflect((list, source) => {\n const anyRows = (listenerContainer.childNodes.length > 0);\n listenerUnspecified.style.display = (anyRows ? 'none' : 'inline');\n\n if (source == SOURCE_PERFORMER_RADIO) {\n return;\n }\n\n listenerContainer.innerText = \"\";\n if (list != null && list.length == 1 && list[0] == \"?\") {\n list = [];\n }\n for (let p of list) {\n addListenerRow(false, p);\n }\n\n const anyRowsZ = (listenerContainer.childNodes.length > 0);\n listenerUnspecified.style.display = (anyRowsZ ? 'none' : 'inline');\n });\n\n function syncListenersFromRadio() {\n const checked = listenerContainer.querySelectorAll('input.a-radio:checked');\n const listeners = [];\n for (let ch of checked) {\n listeners.push(ch.value);\n }\n if (listeners.length == 0) {\n listeners.push('?');\n }\n\n listenersInfo.setFromList(listeners, SOURCE_PERFORMER_RADIO);\n }\n\n function addListenerRow(useDefault, selected) {\n const listenerRow = document.createElement('div');\n listenerRow.classList.add('audience-row');\n const radios = [];\n for (let opt of optionsPerformers) {\n const lbl = document.createElement('label');\n const radio = document.createElement('input');\n radio.classList.add('a-radio');\n radio.setAttribute('type', 'radio');\n radio.setAttribute('name', 'listener-' + listenerRowIdx);\n radio.setAttribute('value', opt.value);\n if ((useDefault && opt.def) || (selected == opt.value)) {\n radio.setAttribute('checked', 'checked');\n }\n lbl.appendChild(radio);\n const txt = document.createTextNode(' ' + opt.performer);\n lbl.appendChild(txt);\n listenerRow.appendChild(lbl);\n radios.push(radio);\n }\n listenerRowIdx++;\n\n for (let r of radios) {\n r.addEventListener('click', ev => {\n syncListenersFromRadio();\n });\n }\n\n\n const removeButton = document.createElement('button');\n removeButton.textContent = 'Remove';\n listenerRow.appendChild(removeButton);\n removeButton.addEventListener('click', ev => {\n ev.preventDefault();\n listenerContainer.removeChild(listenerRow);\n syncListenersFromRadio();\n });\n\n listenerContainer.appendChild(listenerRow);\n }\n\n const listenerAddButton = document.createElement('button');\n listenerAddButton.textContent = 'Add listener';\n //listenerBase.appendChild(listenerAddButton);\n\n listenerParagraph.appendChild(listenerBase);\n listenerParagraph.appendChild(listenerContainer);\n listenerParagraph.appendChild(listenerAddButton);\n\n listenerAddButton.addEventListener('click', ev => {\n ev.preventDefault();\n addListenerRow(true);\n syncListenersFromRadio();\n });\n\n\n\n var inputid = performerAndAudience.getAttribute('data-inputid');\n const inputvalue = document.querySelector('#' + inputid).value;\n\n function updateAudienceValue(txt) {\n document.querySelector('#' + inputid).value = txt;\n }\n\n simpleModeTextField.value = inputvalue;\n whenSimpleModeChanged(SOURCE_PERFORMER_INITIAL);\n\n\n\n\n\n\n\n\n\n\n}\n\n\nvar postContents = document.querySelector('textarea.post-contents');\nif (postContents != null && !(window.__markdownScriptAlways == 'yes')) {\n var tools = postContents.parentNode.querySelector('.tools-for-post');\n\n var wcWrap = document.createElement('div');\n wcWrap.textContent = \"\";\n var wcSpan = document.createElement('span');\n wcWrap.appendChild(wcSpan);\n\n \n var sniphtmlize = document.createElement('span');\n sniphtmlize.textContent = snipMarker;\n var snipMarkerHTMLed = sniphtmlize.innerHTML;\n\n var snipSpan = document.createElement('span');\n snipSpan.innerHTML = 'If including instructions or an introduction before the text, insert ' + snipMarkerHTMLed + ' on the line before the start of the script text itself. Instructions will be formatted differently and will not be included in the word count.'\n\n tools.appendChild(snipSpan);\n\n tools.appendChild(wcWrap);\n\n window.syncWordCount = function syncWordCount() {\n var value = postContents.value;\n if (window.__getTextForWordCount !== undefined) {\n value = window.__getTextForWordCount();\n } else {\n var indexOfSnip = value.indexOf(snipMarker);\n if (indexOfSnip > -1) {\n value = value.substring(indexOfSnip + snipMarker.length);\n }\n }\n\n var count = window.countwords(value);\n var chars = window.countcharacters(value);\n wcSpan.textContent = (count == 1 ? '1 word' : (count + ' words')) + ' \u00B7 ' + (chars == 1 ? '1 character' : (chars + ' characters'));\n }\n\n\n postContents.addEventListener('input', ev => {\n syncWordCount();\n });\n\n syncWordCount();\n\n}\n\n\nfunction hexToRgb(hex) {\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, function (m, r, g, b) {\n return r + r + g + g + b + b;\n });\n\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : null;\n}\n\n// adapted from https://stackoverflow.com/questions/13789163/how-to-know-if-html5-input-type-color-is-available-as-a-color-picker\nfunction detectColorInputFieldSupport() {\n const span = document.createElement('span');\n span.innerHTML = '';\n var input = span.childNodes[0];\n if (input.type === 'color' && input.value !== '!') {\n return true;\n }\n\n return false;\n}\n\nconst allColorPreviews = document.querySelectorAll('.preview-colors');\n\nif (allColorPreviews.length > 0) {\n\n const colorInputFieldsSupported = detectColorInputFieldSupport();\n\n if (colorInputFieldsSupported) {\n const whenNotSupported =\n document.querySelector('.when-color-input-not-supported');\n if (whenNotSupported != null) {\n whenNotSupported.style.display = 'none';\n } else {\n whenNotSupported.style.display = 'inherit';\n }\n }\n\n var themeValuesObject = {};\n var themeValuesInput = document.querySelector('input.theme-values');\n\n function updateThemeValuesObject(mergein) {\n for (let key in mergein) {\n themeValuesObject[key] = mergein[key];\n }\n\n themeValuesInput.value = JSON.stringify(themeValuesObject);\n }\n\n const allFontSettables = document.querySelectorAll('.theme-font-settable');\n\n var fontSettableRoot = document.querySelector('.font-settable-root');\n\n allFontSettables.forEach(fontSettable => {\n var which = fontSettable.getAttribute('data-fontwhich');\n if (which == null) {\n return;\n }\n\n var allPossibleValues = [];\n var allOptions = fontSettable.querySelectorAll('option');\n for (let opt of allOptions) {\n allPossibleValues.push(opt.value);\n }\n\n function updatePreview() {\n const selectedValue = fontSettable.value;\n for (let v of allPossibleValues) {\n var className = 'show-' + which + '-as-' + v;\n if (v == selectedValue) {\n fontSettableRoot.classList.add(className);\n } else {\n fontSettableRoot.classList.remove(className);\n }\n }\n var diff = {};\n diff['font-' + which] = selectedValue;\n updateThemeValuesObject(diff);\n }\n\n var events = ['change', 'input'];\n\n for (let evt of events) {\n fontSettable.addEventListener(evt, (ev) => {\n updatePreview();\n });\n }\n\n updatePreview();\n\n });\n\n\n allColorPreviews.forEach(colorPreview => {\n const mode = colorPreview.getAttribute('data-colormode');\n if (mode == null) {\n return;\n }\n\n const textColorField = document.querySelector('#' + mode + \"-text\");\n const backgroundColorField = document.querySelector('#' + mode + \"-background\");\n\n var resetLinks = {};\n\n const legibilityGrade = colorPreview.querySelector('.legibility-grade');\n\n for (let fieldX of [{ field: textColorField, id: 'text' }, { field: backgroundColorField, id: 'background' }]) {\n const field = fieldX.field;\n const id = fieldX.id;\n const surroundingLabel = field.parentNode;\n const resetLink = document.createElement('a');\n resetLink.classList.add('reset-color-link')\n resetLink.setAttribute('href', '#');\n resetLink.textContent = '\u21A9\uFE0F default';\n\n resetLinks[id] = resetLink;\n\n const defColor = field.getAttribute('data-defcolor');\n resetLink.addEventListener('click', (ev) => {\n ev.preventDefault();\n field.value = defColor;\n updatePreview();\n });\n const labelContainer = surroundingLabel.parentNode;\n labelContainer.insertBefore(resetLink, surroundingLabel.nextSibling);\n }\n\n function updatePreview() {\n const textColor = textColorField.value;\n const defTextColor = textColorField.getAttribute('data-defcolor');\n const backgroundColor = backgroundColorField.value;\n const defBackgroundColor = backgroundColorField.getAttribute('data-defcolor');\n\n const ratio = calculateContrastRatio(textColor, backgroundColor);\n\n if (ratio == null || (textColor == defTextColor && backgroundColor == defBackgroundColor)) {\n legibilityGrade.textContent = \"The default colors are being used.\";\n colorPreview.style.color = defTextColor;\n colorPreview.style.backgroundColor = defBackgroundColor;\n\n var diff = {};\n diff[mode + '-text'] = defTextColor;\n diff[mode + '-background'] = defBackgroundColor;\n updateThemeValuesObject(diff);\n\n } else {\n legibilityGrade.textContent = \"The color contrast is \" + (ratio.great ? \"great\" : (ratio.okay ? \"okay\" : \"\u26A0\uFE0F poor!\")) + \" (\uD83E\uDD13 the contrast ratio is: \" + (1 / ratio.ratio).toFixed(2) + \":1).\";\n colorPreview.style.color = ratio.color1Hex;\n colorPreview.style.backgroundColor = ratio.color2Hex;\n\n var diff = {};\n diff[mode + '-text'] = ratio.color1Hex;\n diff[mode + '-background'] = ratio.color2Hex;\n updateThemeValuesObject(diff);\n }\n\n if (ratio == null || textColor == defTextColor) {\n resetLinks['text'].style.display = 'none';\n } else {\n resetLinks['text'].style.display = 'inline';\n }\n\n if (ratio == null || backgroundColor == defBackgroundColor) {\n resetLinks['background'].style.display = 'none';\n } else {\n resetLinks['background'].style.display = 'inline';\n }\n\n }\n\n var events = ['change', 'keypress', 'input'];\n\n for (let field of [textColorField, backgroundColorField]) {\n for (let evt of events) {\n field.addEventListener(evt, (ev) => {\n updatePreview();\n });\n }\n }\n\n updatePreview();\n\n\n });\n\n updateThemeValuesObject({});\n\n}\n\n"],
"mappings": "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",
"names": []
}