This repository was archived by the owner on Nov 14, 2017. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 8
isActiveUrl
Ivan Kleshnin edited this page Apr 18, 2016
·
2 revisions
let {curry} = require("ramda")
let Url = require("url")
let trailWithSlash = (s) => {
if (s.endsWith("/")) { return s }
else { return s + "/" }
}
let isActiveUrl = curry((baseUrl, currentUrl, url) => {
baseUrl = trailWithSlash(Url.parse(baseUrl).pathname)
currentUrl = trailWithSlash(Url.parse(currentUrl).pathname)
url = trailWithSlash(Url.parse(url).pathname)
if (url == baseUrl) {
return url == currentUrl // link to "home" is active only on "home"
} else {
return currentUrl.startsWith(url) // link to "page" is active on "page" and "page" subpages TODO handle trailing slashes, etc.
}
})
let isActive = isActiveUrl("/")
// `isActive` answers the question: "does being on page {1} implies being on page {2}?"
console.log(isActive("/complex/", "/complex/jac")) // assert false
console.log(isActive("/complex/jac", "/complex/")) // assert true
console.log(isActive("/complex/", "/complex2/")) // assert false
console.log(isActive("/complex2/", "/complex/")) // assert false
console.log(isActive("/complex", "/complex2")) // assert false
console.log(isActive("/complex2", "/complex")) // assert false
console.log(isActive("/complex/jac#s", "/complex/#s")) // assert true
console.log(isActive("/complex/jac?x=2#s", "/complex?y=3/#s")) // assert true