Files
rootandClaude Opus 4.7 79ac89b458 Initial commit
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-11-07 10:47:18 +08:00

123 lines
2.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Package h5path 统一拼装黄豆 H5(91dj-h5)的页面路径。
// 页面地址与线上 canonical 一致,不追加尾斜杠。
package h5path
import (
"strconv"
"strings"
"videoweb/pub/common/utils"
)
func Segment(slug string, id int64) string {
return utils.PathSegment(slug, id)
}
// Entity 拼 /{prefix}/{slug|id},无有效段时只返回 prefix。
func Entity(prefix, slug string, id int64) string {
prefix = "/" + strings.Trim(prefix, "/")
if segment := Segment(slug, id); segment != "" {
return prefix + "/" + segment
}
return prefix
}
func Playlet(slug string, id int64) string {
if Segment(slug, id) == "" {
return ""
}
return Entity("/short-drama", slug, id)
}
// PlayletPlay 播放页:/short-drama/{slug}/play/{集数}。集数是 CurrentEpisode,不是剧集文档 id。
func PlayletPlay(slug string, id, episode int64) string {
base := Playlet(slug, id)
if base == "" || episode <= 0 {
return ""
}
return base + "/play/" + strconv.FormatInt(episode, 10)
}
func PlayletChapter(slug string, playletID, episode int64) string {
return PlayletPlay(slug, playletID, episode)
}
func TopicDetail(slug string, id int64) string {
if isReservedTopicSlug(slug) {
slug = ""
}
if Segment(slug, id) == "" {
return "/topics"
}
return Entity("/topics", slug, id)
}
func Tag(slug string, id int64) string {
if Segment(slug, id) == "" {
return ""
}
return Entity("/topics/tag", slug, id)
}
func ListTheme(slug string, id int64) string {
return TopicDetail(slug, id)
}
func isReservedTopicSlug(slug string) bool {
switch strings.ToLower(strings.TrimSpace(slug)) {
case "tag", "page":
return true
default:
return false
}
}
func VideoPlay(slug string, id int64) string {
if Segment(slug, id) == "" {
return ""
}
return Entity("/series-play", slug, id)
}
func MoreList(slug string, id int64) string {
if Segment(slug, id) == "" {
return ""
}
return Entity("/shorts/more", slug, id)
}
func MoreSeriesList(slug string, id int64) string {
if Segment(slug, id) == "" {
return ""
}
return Entity("/more-series-list", slug, id)
}
func SeriesTopic(topicID int64) string {
if topicID <= 0 {
return "/series"
}
return "/series/all/" + strconv.FormatInt(topicID, 10) + "/1"
}
// Abs 拼绝对地址。首页保留尾斜杠,其余页面与 H5 路由一致、不带尾斜杠。
func Abs(webAddr, path string) string {
path = strings.TrimSpace(path)
if path == "" || path == "/" {
return utils.JoinUrlPathKeepSlash(webAddr, "/")
}
return utils.JoinUrlPathKeepSlash(webAddr, "/"+strings.Trim(path, "/"))
}
// SitemapAbs 拼 sitemap 绝对地址,与 H5 canonical 一致,不追加尾斜杠。
func SitemapAbs(webAddr, path string) string {
webAddr = strings.TrimRight(strings.TrimSpace(webAddr), "/")
path = strings.TrimSpace(path)
if webAddr == "" {
return ""
}
if path == "" || path == "/" {
return webAddr
}
return webAddr + "/" + strings.Trim(path, "/")
}