diff options
| author | Shulhan <ms@kilabit.info> | 2026-02-04 22:10:42 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2026-02-04 22:58:10 +0700 |
| commit | fa31e0a656d03fe3744c70a1171e3831647923c9 (patch) | |
| tree | 42f982767a0166b94213cfe51f4c442f4a778d8c /brokenlinks/worker.go | |
| parent | b36d6e1f423bc405895d1b72e9a5915c4aa74ecc (diff) | |
| download | jarink-fa31e0a656d03fe3744c70a1171e3831647923c9.tar.xz | |
brokenlinks: fix generating relative URL
If the parent URL end with .html or .htm, join the directory of parent
instead of the current path with the relative path.
Diffstat (limited to 'brokenlinks/worker.go')
| -rw-r--r-- | brokenlinks/worker.go | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/brokenlinks/worker.go b/brokenlinks/worker.go index 3e089fc..7683730 100644 --- a/brokenlinks/worker.go +++ b/brokenlinks/worker.go @@ -12,6 +12,7 @@ import ( "net/http" "net/url" "os" + "path" "slices" "strings" "time" @@ -396,7 +397,7 @@ func (wrk *worker) processLink(parentUrl *url.URL, val string, kind int) ( newUrl = wrk.baseUrl.JoinPath(newUrl.Path) } else { // val is relative to parent URL. - newUrl = parentUrl.JoinPath(`/`, newUrl.Path) + newUrl = genURLRelative(parentUrl, newUrl.Path) } } linkq.Url = strings.TrimSuffix(newUrl.String(), `/`) @@ -405,3 +406,16 @@ func (wrk *worker) processLink(parentUrl *url.URL, val string, kind int) ( } return linkq } + +// genURLRelative generate new URL from parent URL and relative path +// `relPath`. +func genURLRelative(parentUrl *url.URL, relPath string) (newUrl *url.URL) { + var parentPath = parentUrl.Path + var ext = strings.ToLower(path.Ext(parentPath)) + if ext == `.html` || ext == `.htm` { + parentPath = path.Dir(parentPath) + } + newUrl, _ = url.Parse(parentUrl.String()) + newUrl.Path = path.Join(parentPath, relPath) + return newUrl +} |
