Skip to content
This repository was archived by the owner on Nov 14, 2017. It is now read-only.

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
Clone this wiki locally