MCPcopy
hub / github.com/CodeboxIDE/codebox / extractUrlParts

Function extractUrlParts

core/cb.addons/require-tools/less/lessc.js:6562–6614  ·  view source on GitHub ↗
(url, baseUrl)

Source from the content-addressed store, hash-verified

6560}
6561
6562function extractUrlParts(url, baseUrl) {
6563 // urlParts[1] = protocol&hostname || /
6564 // urlParts[2] = / if path relative to host base
6565 // urlParts[3] = directories
6566 // urlParts[4] = filename
6567 // urlParts[5] = parameters
6568
6569 var urlPartsRegex = /^((?:[a-z-]+:)?\/+?(?:[^\/\?#]*\/)|([\/\\]))?((?:[^\/\\\?#]*[\/\\])*)([^\/\\\?#]*)([#\?].*)?$/i,
6570 urlParts = url.match(urlPartsRegex),
6571 returner = {}, directories = [], i, baseUrlParts;
6572
6573 if (!urlParts) {
6574 throw new Error("Could not parse sheet href - '"+url+"'");
6575 }
6576
6577 // Stylesheets in IE don't always return the full path
6578 if (!urlParts[1] || urlParts[2]) {
6579 baseUrlParts = baseUrl.match(urlPartsRegex);
6580 if (!baseUrlParts) {
6581 throw new Error("Could not parse page url - '"+baseUrl+"'");
6582 }
6583 urlParts[1] = urlParts[1] || baseUrlParts[1] || "";
6584 if (!urlParts[2]) {
6585 urlParts[3] = baseUrlParts[3] + urlParts[3];
6586 }
6587 }
6588
6589 if (urlParts[3]) {
6590 directories = urlParts[3].replace(/\\/g, "/").split("/");
6591
6592 // extract out . before .. so .. doesn't absorb a non-directory
6593 for(i = 0; i < directories.length; i++) {
6594 if (directories[i] === ".") {
6595 directories.splice(i, 1);
6596 i -= 1;
6597 }
6598 }
6599
6600 for(i = 0; i < directories.length; i++) {
6601 if (directories[i] === ".." && i > 0) {
6602 directories.splice(i-1, 2);
6603 i -= 2;
6604 }
6605 }
6606 }
6607
6608 returner.hostPart = urlParts[1];
6609 returner.directories = directories;
6610 returner.path = urlParts[1] + directories.join("/");
6611 returner.fileUrl = returner.path + (urlParts[4] || "");
6612 returner.url = returner.fileUrl + (urlParts[5] || "");
6613 return returner;
6614}
6615
6616function pathDiff(url, baseUrl) {
6617 // diff between two paths to create a relative path

Callers 2

pathDiffFunction · 0.85
loadFileFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected