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.
79 lines
3.5 KiB
79 lines
3.5 KiB
"use strict"; |
|
|
|
function findRelation_upToPath(urlObj, siteUrlObj, options) |
|
{ |
|
// Path- or root-relative URL |
|
var pathOnly = urlObj.extra.hrefInfo.minimumPathOnly; |
|
|
|
// Matching scheme, scheme-relative or path-only |
|
var minimumScheme = (urlObj.scheme===siteUrlObj.scheme || !urlObj.scheme); |
|
|
|
// Matching auth, ignoring auth or path-only |
|
var minimumAuth = minimumScheme && (urlObj.auth===siteUrlObj.auth || options.removeAuth || pathOnly); |
|
|
|
// Matching host or path-only |
|
var www = options.ignore_www ? "stripped" : "full"; |
|
var minimumHost = minimumAuth && (urlObj.host[www]===siteUrlObj.host[www] || pathOnly); |
|
|
|
// Matching port or path-only |
|
var minimumPort = minimumHost && (urlObj.port===siteUrlObj.port || pathOnly); |
|
|
|
urlObj.extra.relation.minimumScheme = minimumScheme; |
|
urlObj.extra.relation.minimumAuth = minimumAuth; |
|
urlObj.extra.relation.minimumHost = minimumHost; |
|
urlObj.extra.relation.minimumPort = minimumPort; |
|
|
|
urlObj.extra.relation.maximumScheme = !minimumScheme || minimumScheme && !minimumAuth; |
|
urlObj.extra.relation.maximumAuth = !minimumScheme || minimumScheme && !minimumHost; |
|
urlObj.extra.relation.maximumHost = !minimumScheme || minimumScheme && !minimumPort; |
|
} |
|
|
|
|
|
|
|
function findRelation_pathOn(urlObj, siteUrlObj, options) |
|
{ |
|
var queryOnly = urlObj.extra.hrefInfo.minimumQueryOnly; |
|
var hashOnly = urlObj.extra.hrefInfo.minimumHashOnly; |
|
var empty = urlObj.extra.hrefInfo.empty; // not required, but self-documenting |
|
|
|
// From upToPath() |
|
var minimumPort = urlObj.extra.relation.minimumPort; |
|
var minimumScheme = urlObj.extra.relation.minimumScheme; |
|
|
|
// Matching port and path |
|
var minimumPath = minimumPort && urlObj.path.absolute.string===siteUrlObj.path.absolute.string; |
|
|
|
// Matching resource or query/hash-only or empty |
|
var matchingResource = (urlObj.resource===siteUrlObj.resource || !urlObj.resource && siteUrlObj.extra.resourceIsIndex) || (options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex && !siteUrlObj.resource); |
|
var minimumResource = minimumPath && (matchingResource || queryOnly || hashOnly || empty); |
|
|
|
// Matching query or hash-only/empty |
|
var query = options.removeEmptyQueries ? "stripped" : "full"; |
|
var urlQuery = urlObj.query.string[query]; |
|
var siteUrlQuery = siteUrlObj.query.string[query]; |
|
var minimumQuery = (minimumResource && !!urlQuery && urlQuery===siteUrlQuery) || ((hashOnly || empty) && !urlObj.extra.hrefInfo.separatorOnlyQuery); |
|
|
|
var minimumHash = minimumQuery && urlObj.hash===siteUrlObj.hash; |
|
|
|
urlObj.extra.relation.minimumPath = minimumPath; |
|
urlObj.extra.relation.minimumResource = minimumResource; |
|
urlObj.extra.relation.minimumQuery = minimumQuery; |
|
urlObj.extra.relation.minimumHash = minimumHash; |
|
|
|
urlObj.extra.relation.maximumPort = !minimumScheme || minimumScheme && !minimumPath; |
|
urlObj.extra.relation.maximumPath = !minimumScheme || minimumScheme && !minimumResource; |
|
urlObj.extra.relation.maximumResource = !minimumScheme || minimumScheme && !minimumQuery; |
|
urlObj.extra.relation.maximumQuery = !minimumScheme || minimumScheme && !minimumHash; |
|
urlObj.extra.relation.maximumHash = !minimumScheme || minimumScheme && !minimumHash; // there's nothing after hash, so it's the same as maximumQuery |
|
|
|
// Matching path and/or resource with existing but non-matching site query |
|
urlObj.extra.relation.overridesQuery = minimumPath && urlObj.extra.relation.maximumResource && !minimumQuery && !!siteUrlQuery; |
|
} |
|
|
|
|
|
|
|
module.exports = |
|
{ |
|
pathOn: findRelation_pathOn, |
|
upToPath: findRelation_upToPath |
|
};
|
|
|