Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
/**
* Given a source directory and a target filename, return the relative
* file path from source to target.
* @param source {String} directory path to start from for traversal
* @param target {String} directory path and filename to seek from source
* @return Relative path (e.g. "../../style.css") as {String}
*/
function getRelativePath(source, target) {
var sep = (source.indexOf("/") !== -1) ? "/" : "\\",
targetArr = target.split(sep),
sourceArr = source.split(sep),
filename = targetArr.pop(),
targetPath = targetArr.join(sep),
relativePath = "";
while (targetPath.indexOf(sourceArr.join(sep)) === -1) {
sourceArr.pop();
relativePath += ".." + sep;
}
var relPathArr = targetArr.slice(sourceArr.length);
relPathArr.length && (relativePath += relPathArr.join(sep) + sep);
return relativePath + filename;
}
console.log(getRelativePath("/users/eric/src/csslint", "/users/eric/style.css"));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment