Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2241x 2241x 2241x 2241x 2241x 2241x 2241x 2241x 2241x 3376x 3376x 3376x 3376x 3376x 3376x 3376x 2241x 2241x 2241x 1x 1x 1x 1x 1x 1x | import { omitUndefinedValues } from "../Util" export interface QueryParams { [key: string]: string | undefined } // Deprecated. Use getWindowQueryParams() to get the params from the global URL, // or strToQueryParams(str) to parse an arbtirary query string. export const getQueryParams = (queryStr?: string): QueryParams => strToQueryParams(queryStr || getWindowQueryStr()) export const getWindowQueryParams = (): QueryParams => strToQueryParams(getWindowQueryStr()) /** * Converts a query string into an object of key-value pairs. * Handles URI-decoding of the values. * @param queryStr * @param doNotDecode Passing `true` will return a QueryParams object with URI-encoded values. * Only use when absolutely necessary, for example, to distinguish between * `+` and `%20` for legacy URLs. */ export const strToQueryParams = ( queryStr = "", doNotDecode: boolean = false ): QueryParams => { if (queryStr[0] === "?") queryStr = queryStr.substring(1) const querySplit = queryStr.split("&").filter((s) => s) const params: QueryParams = {} for (const param of querySplit) { const [key, value] = param.split("=", 2) const decodedKey = decodeURIComponent(key.replace(/\+/g, "%20")) const decoded = value !== undefined ? decodeURIComponent(value.replace(/\+/g, "%20")) : undefined params[decodedKey] = doNotDecode ? value : decoded } return params } /** * Converts an object to a query string. * Expects the input object to not be encoded already, and handles the URI-encoding of the values. */ export const queryParamsToStr = (params: QueryParams) => { const queryParams = new URLSearchParams(omitUndefinedValues(params)) // we're relying on `~` (%7E) to not be encoded in some places, so make sure that it never is const newQueryStr = queryParams.toString().replace(/%7E/g, "~") return newQueryStr.length ? `?${newQueryStr}` : "" } export const getWindowQueryStr = () => window.location.search export const setWindowQueryStr = (str: string) => history.replaceState( null, document.title, window.location.pathname + str + window.location.hash ) |