Select Git revision
displays.ts
urls.ts 2.96 KiB
import type { DisplayMode } from "./displays"
export interface SelfTargetAProps {
href: string
"data-sveltekit-prefetch"?: boolean
"data-sveltekit-noscroll"?: boolean
}
export function newSelfTargetAProps(url: string): SelfTargetAProps {
return {
href: url,
"data-sveltekit-prefetch": true,
}
}
export function newSimulationUrl(displayMode: DisplayMode): string {
const query: URLSearchParams = new URLSearchParams()
if (displayMode.compact) {
query.append("compact", "true")
}
if (displayMode.edit !== undefined) {
query.append("edit", displayMode.edit.toString())
}
if (displayMode.mobileLaw) {
query.append("law", "true")
}
if (
displayMode.testCasesIndex.length !== 1 ||
displayMode.testCasesIndex[0] !== 0
) {
for (const testCaseIndex of displayMode.testCasesIndex) {
query.append("test_case", testCaseIndex.toString())
}
}
if (displayMode.variableName !== undefined) {
query.append("variable", displayMode.variableName)
}
if (displayMode.parameterName !== undefined) {
query.append("parameter", displayMode.parameterName)
}
if (displayMode.parametersVariableName !== undefined) {
query.append("parameters", displayMode.parametersVariableName)
}
const queryString = query.toString()
return `/${queryString ? "?" + queryString : ""}`
}
// export function parseQuery(
// queryString?: string,
// ): { [key: string]: string | string[] } {
// return (queryString ?? "")
// .replace(/\+/g, " ")
// .split("&")
// .filter(Boolean)
// .reduce(
// (
// queryParameters: { [key: string]: string | string[] },
// keyAndValue: string,
// ): { [key: string]: string | string[] } => {
// const keyAndValueCouple = keyAndValue.split("=")
// const key: string = decodeURIComponent(keyAndValueCouple[0] ?? "")
// const value = decodeURIComponent(keyAndValueCouple[1] ?? "")
// const existingValue = queryParameters[key]
// queryParameters[key] =
// existingValue === undefined
// ? value
// : (Array.isArray(existingValue)
// ? existingValue
// : [existingValue]
// ).concat([value])
// return queryParameters
// },
// {},
// )
// }
export function stringifyQuery(queryParameters?: {
[key: string]: string | string[]
}): string {
return Object.entries(queryParameters ?? {})
.reduce(
(
queryArray: string[],
[key, value]: [string, string | string[]],
): string[] => {
if (Array.isArray(value)) {
for (const item of value) {
queryArray.push(
`${encodeURIComponent(key)}=${encodeURIComponent(item)}`,
)
}
} else {
queryArray.push(
`${encodeURIComponent(key)}=${encodeURIComponent(value ?? "")}`,
)
}
return queryArray
},
[],
)
.join("&")
.replace(/\s/g, "+")
}