mirror of https://github.com/IoTcat/docsify.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.2 KiB
62 lines
1.2 KiB
import {cached} from '../util/core' |
|
|
|
const decode = decodeURIComponent |
|
const encode = encodeURIComponent |
|
|
|
export function parseQuery(query) { |
|
const res = {} |
|
|
|
query = query.trim().replace(/^(\?|#|&)/, '') |
|
|
|
if (!query) { |
|
return res |
|
} |
|
|
|
// Simple parse |
|
query.split('&').forEach(function (param) { |
|
const parts = param.replace(/\+/g, ' ').split('=') |
|
|
|
res[parts[0]] = parts[1] && decode(parts[1]) |
|
}) |
|
|
|
return res |
|
} |
|
|
|
export function stringifyQuery(obj, ignores = []) { |
|
const qs = [] |
|
|
|
for (const key in obj) { |
|
if (ignores.indexOf(key) > -1) { |
|
continue |
|
} |
|
qs.push( |
|
obj[key] ? |
|
`${encode(key)}=${encode(obj[key])}`.toLowerCase() : |
|
encode(key) |
|
) |
|
} |
|
|
|
return qs.length ? `?${qs.join('&')}` : '' |
|
} |
|
|
|
export const isAbsolutePath = cached(path => { |
|
return /(:|(\/{2}))/g.test(path) |
|
}) |
|
|
|
export const getParentPath = cached(path => { |
|
return /\/$/g.test(path) ? |
|
path : |
|
(path = path.match(/(\S*\/)[^/]+$/)) ? path[1] : '' |
|
}) |
|
|
|
export const cleanPath = cached(path => { |
|
return path.replace(/^\/+/, '/').replace(/([^:])\/{2,}/g, '$1/') |
|
}) |
|
|
|
export function getPath(...args) { |
|
return cleanPath(args.join('/')) |
|
} |
|
|
|
export const replaceSlug = cached(path => { |
|
return path.replace('#', '?id=') |
|
})
|
|
|