diff --git a/helper/strings/strings.go b/helper/strings/strings.go index 51f30b5..38781c1 100644 --- a/helper/strings/strings.go +++ b/helper/strings/strings.go @@ -82,3 +82,8 @@ func (b *Builder) Sprintf(format string, a ...any) int { i, _ := fmt.Fprintf(b, format, a...) return i } + +// CutSpecialDuplicate '\t', '\n', '\v', '\f', '\r', ' ', U+0085 (NEL), U+00A0 (NBSP) +func CutSpecialDuplicate(s, char string) string { + return strings.Join(strings.Fields(s), char) +} diff --git a/helper/strings/strings_test.go b/helper/strings/strings_test.go index 5531bf2..6fe0eef 100644 --- a/helper/strings/strings_test.go +++ b/helper/strings/strings_test.go @@ -126,3 +126,33 @@ func BenchmarkBuilderJoinXX(b *testing.B) { _ = s.String() } } + +func TestCutSpecialDuplicate(t *testing.T) { + type args struct { + s string + char string + } + tests := []struct { + name string + args args + want string + }{ + { + name: "t1", + args: args{s: "1 2 3", char: " "}, + want: "1 2 3", + }, + { + name: "t2", + args: args{s: "1\t\t2\t\t3", char: "\t"}, + want: "1\t2\t3", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := CutSpecialDuplicate(tt.args.s, tt.args.char); got != tt.want { + t.Errorf("CutDuplicate() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/internal/pkg/constraints/const.go b/internal/pkg/constraints/const.go index ddd8252..3d3ec87 100644 --- a/internal/pkg/constraints/const.go +++ b/internal/pkg/constraints/const.go @@ -15,4 +15,6 @@ const ( InternalErr Defaults = "default" + + HeadScript = "headScript" ) diff --git a/internal/theme/common/bodyclass.go b/internal/theme/common/bodyclass.go index c911eb0..39e4907 100644 --- a/internal/theme/common/bodyclass.go +++ b/internal/theme/common/bodyclass.go @@ -53,17 +53,19 @@ func (h *Handle) BodyClass(class ...string) string { s = str.Join(s, " single-format-standard") } } - class = append(class, s) + if s != "" { + class = append(class, s) + } if wpconfig.IsCustomBackground(h.Theme) { class = append(class, "custom-background") } - if h.ThemeMods.CustomLogo > 0 { + if h.ThemeMods.CustomLogo > 0 || str.ToInteger(wpconfig.GetOption("site_logo"), 0) > 0 { class = append(class, "wp-custom-logo") } if h.ThemeMods.ThemeSupport.ResponsiveEmbeds { class = append(class, "wp-embed-responsive") } - - return str.Join(commonClass[h.Scene], strings.Join(class, " ")) + class = append(class, strings.Fields(commonClass[h.Scene])...) + return strings.Join(slice.Reverse(class), " ") } diff --git a/internal/theme/common/common.go b/internal/theme/common/common.go index 6a3ea88..bea546d 100644 --- a/internal/theme/common/common.go +++ b/internal/theme/common/common.go @@ -10,6 +10,7 @@ import ( "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" "net/http" + "strings" ) type Handle struct { @@ -25,6 +26,7 @@ type Handle struct { Stats int Templ string Class []string + Scripts map[string][]func(*Handle) string ThemeMods wpconfig.ThemeMods HandleFns []func(*Handle) } @@ -41,6 +43,7 @@ func NewHandle(c *gin.Context, scene int, theme string) *Handle { Code: http.StatusOK, Stats: constraints.Ok, ThemeMods: mods, + Scripts: make(map[string][]func(*Handle) string), } } @@ -57,6 +60,10 @@ func (h *Handle) AutoCal(name string, fn func(*Handle) string) { h.GinH[name] = v } +func (h *Handle) PushHeadScript(name string, fn ...func(*Handle) string) { + h.Scripts[name] = append(h.Scripts[name], fn...) +} + func Default[T any](t T) T { return t } @@ -78,14 +85,28 @@ func (h *Handle) Render() { for _, fn := range h.HandleFns { fn(h) } - h.AutoCal("siteIcon", CalSiteIcon) + h.PushHeadScript(constraints.HeadScript, CalSiteIcon, CalCustomCss) h.AutoCal("customLogo", CalCustomLogo) - h.AutoCal("customCss", CalCustomCss) + h.CalMultipleScript() h.CalBodyClass() h.C.HTML(h.Code, h.Templ, h.GinH) } +func (h *Handle) CalMultipleScript() { + for k, ss := range h.Scripts { + v, ok := reload.GetStr(k) + if !ok { + v = strings.Join(slice.FilterAndMap(ss, func(t func(*Handle) string) (string, bool) { + s := t(h) + return s, s != "" + }), "\n") + reload.SetStr(k, v) + } + h.GinH[k] = v + } +} + type HandleFn[T any] func(T) type HandlePipeFn[T any] func(HandleFn[T], T) diff --git a/internal/theme/common/template.gohtml b/internal/theme/common/template.gohtml index d5c621e..1148039 100644 --- a/internal/theme/common/template.gohtml +++ b/internal/theme/common/template.gohtml @@ -3,12 +3,10 @@ {{.customHeader|unescaped}} {{end}} - {{if .siteIcon}} - {{.siteIcon|unescaped}} - {{end}} - {{if .customCss}} - {{.customCss|unescaped}} + {{if .headScript}} + {{.headScript|unescaped}} {{end}} + {{if .externHead}} {{.externHead|unescaped}} {{end}} diff --git a/internal/theme/twentyfifteen/twentyfifteen.go b/internal/theme/twentyfifteen/twentyfifteen.go index d73ac20..108173a 100644 --- a/internal/theme/twentyfifteen/twentyfifteen.go +++ b/internal/theme/twentyfifteen/twentyfifteen.go @@ -37,8 +37,7 @@ func Hook(h *common.Handle) { func dispatch(next common.HandleFn[*common.Handle], h *common.Handle) { h.WidgetAreaData() h.GetPassword() - h.AutoCal("colorScheme", colorSchemeCss) - h.AutoCal("customBackground", CalCustomBackGround) + h.PushHeadScript(constraints.HeadScript, CalCustomBackGround, colorSchemeCss) h.PushHandleFn(customHeader) switch h.Scene { case constraints.Detail: diff --git a/internal/theme/twentyseventeen/colorscheme.go b/internal/theme/twentyseventeen/colorscheme.go new file mode 100644 index 0000000..668f3ee --- /dev/null +++ b/internal/theme/twentyseventeen/colorscheme.go @@ -0,0 +1,576 @@ +package twentyseventeen + +import ( + "fmt" + "github.com/fthvgb1/wp-go/helper/number" + str "github.com/fthvgb1/wp-go/helper/strings" + "github.com/fthvgb1/wp-go/internal/theme/common" + "github.com/fthvgb1/wp-go/internal/wpconfig" + "strings" +) + +func colorScheme(h *common.Handle) (r string) { + if "custom" != wpconfig.GetThemeModsVal(h.Theme, "colorscheme", "light") { + return + } + s := str.NewBuilder() + hue := number.ToString(wpconfig.GetThemeModsVal[int64](h.Theme, "colorscheme_hue", 250)) + saturation := fmt.Sprintf("%d%%", int(.8*50)) + css := customCss + for k, v := range map[string]string{ + "' . $hue . '": hue, + "' . esc_attr( $hue ) . '": hue, + "' . $saturation . '": saturation, + "' . esc_attr( $saturation ) .' ": saturation, + } { + css = strings.ReplaceAll(css, k, v) + } + s.Sprintf(``, css) + r = s.String() + return +} + +var customCss = ` +/** + * Twenty Seventeen: Color Patterns + * + * Colors are ordered from dark to light. + */ + +.colors-custom a:hover, +.colors-custom a:active, +.colors-custom .entry-content a:focus, +.colors-custom .entry-content a:hover, +.colors-custom .entry-summary a:focus, +.colors-custom .entry-summary a:hover, +.colors-custom .comment-content a:focus, +.colors-custom .comment-content a:hover, +.colors-custom .widget a:focus, +.colors-custom .widget a:hover, +.colors-custom .site-footer .widget-area a:focus, +.colors-custom .site-footer .widget-area a:hover, +.colors-custom .posts-navigation a:focus, +.colors-custom .posts-navigation a:hover, +.colors-custom .comment-metadata a:focus, +.colors-custom .comment-metadata a:hover, +.colors-custom .comment-metadata a.comment-edit-link:focus, +.colors-custom .comment-metadata a.comment-edit-link:hover, +.colors-custom .comment-reply-link:focus, +.colors-custom .comment-reply-link:hover, +.colors-custom .widget_authors a:focus strong, +.colors-custom .widget_authors a:hover strong, +.colors-custom .entry-title a:focus, +.colors-custom .entry-title a:hover, +.colors-custom .entry-meta a:focus, +.colors-custom .entry-meta a:hover, +.colors-custom.blog .entry-meta a.post-edit-link:focus, +.colors-custom.blog .entry-meta a.post-edit-link:hover, +.colors-custom.archive .entry-meta a.post-edit-link:focus, +.colors-custom.archive .entry-meta a.post-edit-link:hover, +.colors-custom.search .entry-meta a.post-edit-link:focus, +.colors-custom.search .entry-meta a.post-edit-link:hover, +.colors-custom .page-links a:focus .page-number, +.colors-custom .page-links a:hover .page-number, +.colors-custom .entry-footer a:focus, +.colors-custom .entry-footer a:hover, +.colors-custom .entry-footer .cat-links a:focus, +.colors-custom .entry-footer .cat-links a:hover, +.colors-custom .entry-footer .tags-links a:focus, +.colors-custom .entry-footer .tags-links a:hover, +.colors-custom .post-navigation a:focus, +.colors-custom .post-navigation a:hover, +.colors-custom .pagination a:not(.prev):not(.next):focus, +.colors-custom .pagination a:not(.prev):not(.next):hover, +.colors-custom .comments-pagination a:not(.prev):not(.next):focus, +.colors-custom .comments-pagination a:not(.prev):not(.next):hover, +.colors-custom .logged-in-as a:focus, +.colors-custom .logged-in-as a:hover, +.colors-custom a:focus .nav-title, +.colors-custom a:hover .nav-title, +.colors-custom .edit-link a:focus, +.colors-custom .edit-link a:hover, +.colors-custom .site-info a:focus, +.colors-custom .site-info a:hover, +.colors-custom .widget .widget-title a:focus, +.colors-custom .widget .widget-title a:hover, +.colors-custom .widget ul li a:focus, +.colors-custom .widget ul li a:hover { + color: hsl( ' . $hue . ', ' . $saturation . ', 0% ); /* base: #000; */ +} + +.colors-custom .entry-content a, +.colors-custom .entry-summary a, +.colors-custom .comment-content a, +.colors-custom .widget a, +.colors-custom .site-footer .widget-area a, +.colors-custom .posts-navigation a, +.colors-custom .widget_authors a strong { + -webkit-box-shadow: inset 0 -1px 0 hsl( ' . $hue . ', ' . $saturation . ', 6% ); /* base: rgba(15, 15, 15, 1); */ + box-shadow: inset 0 -1px 0 hsl( ' . $hue . ', ' . $saturation . ', 6% ); /* base: rgba(15, 15, 15, 1); */ +} + +.colors-custom button, +.colors-custom input[type="button"], +.colors-custom input[type="submit"], +.colors-custom .entry-footer .edit-link a.post-edit-link { + background-color: hsl( ' . $hue . ', ' . $saturation . ', 13% ); /* base: #222; */ +} + +.colors-custom input[type="text"]:focus, +.colors-custom input[type="email"]:focus, +.colors-custom input[type="url"]:focus, +.colors-custom input[type="password"]:focus, +.colors-custom input[type="search"]:focus, +.colors-custom input[type="number"]:focus, +.colors-custom input[type="tel"]:focus, +.colors-custom input[type="range"]:focus, +.colors-custom input[type="date"]:focus, +.colors-custom input[type="month"]:focus, +.colors-custom input[type="week"]:focus, +.colors-custom input[type="time"]:focus, +.colors-custom input[type="datetime"]:focus, +.colors-custom .colors-custom input[type="datetime-local"]:focus, +.colors-custom input[type="color"]:focus, +.colors-custom textarea:focus, +.colors-custom button.secondary, +.colors-custom input[type="reset"], +.colors-custom input[type="button"].secondary, +.colors-custom input[type="reset"].secondary, +.colors-custom input[type="submit"].secondary, +.colors-custom a, +.colors-custom .site-title, +.colors-custom .site-title a, +.colors-custom .navigation-top a, +.colors-custom .dropdown-toggle, +.colors-custom .menu-toggle, +.colors-custom .page .panel-content .entry-title, +.colors-custom .page-title, +.colors-custom.page:not(.twentyseventeen-front-page) .entry-title, +.colors-custom .page-links a .page-number, +.colors-custom .comment-metadata a.comment-edit-link, +.colors-custom .comment-reply-link .icon, +.colors-custom h2.widget-title, +.colors-custom mark, +.colors-custom .post-navigation a:focus .icon, +.colors-custom .post-navigation a:hover .icon, +.colors-custom .site-content .site-content-light, +.colors-custom .twentyseventeen-panel .recent-posts .entry-header .edit-link { + color: hsl( ' . $hue . ', ' . $saturation . ', 13% ); /* base: #222; */ +} + +.colors-custom .entry-content a:focus, +.colors-custom .entry-content a:hover, +.colors-custom .entry-summary a:focus, +.colors-custom .entry-summary a:hover, +.colors-custom .comment-content a:focus, +.colors-custom .comment-content a:hover, +.colors-custom .widget a:focus, +.colors-custom .widget a:hover, +.colors-custom .site-footer .widget-area a:focus, +.colors-custom .site-footer .widget-area a:hover, +.colors-custom .posts-navigation a:focus, +.colors-custom .posts-navigation a:hover, +.colors-custom .comment-metadata a:focus, +.colors-custom .comment-metadata a:hover, +.colors-custom .comment-metadata a.comment-edit-link:focus, +.colors-custom .comment-metadata a.comment-edit-link:hover, +.colors-custom .comment-reply-link:focus, +.colors-custom .comment-reply-link:hover, +.colors-custom .widget_authors a:focus strong, +.colors-custom .widget_authors a:hover strong, +.colors-custom .entry-title a:focus, +.colors-custom .entry-title a:hover, +.colors-custom .entry-meta a:focus, +.colors-custom .entry-meta a:hover, +.colors-custom.blog .entry-meta a.post-edit-link:focus, +.colors-custom.blog .entry-meta a.post-edit-link:hover, +.colors-custom.archive .entry-meta a.post-edit-link:focus, +.colors-custom.archive .entry-meta a.post-edit-link:hover, +.colors-custom.search .entry-meta a.post-edit-link:focus, +.colors-custom.search .entry-meta a.post-edit-link:hover, +.colors-custom .page-links a:focus .page-number, +.colors-custom .page-links a:hover .page-number, +.colors-custom .entry-footer .cat-links a:focus, +.colors-custom .entry-footer .cat-links a:hover, +.colors-custom .entry-footer .tags-links a:focus, +.colors-custom .entry-footer .tags-links a:hover, +.colors-custom .post-navigation a:focus, +.colors-custom .post-navigation a:hover, +.colors-custom .pagination a:not(.prev):not(.next):focus, +.colors-custom .pagination a:not(.prev):not(.next):hover, +.colors-custom .comments-pagination a:not(.prev):not(.next):focus, +.colors-custom .comments-pagination a:not(.prev):not(.next):hover, +.colors-custom .logged-in-as a:focus, +.colors-custom .logged-in-as a:hover, +.colors-custom a:focus .nav-title, +.colors-custom a:hover .nav-title, +.colors-custom .edit-link a:focus, +.colors-custom .edit-link a:hover, +.colors-custom .site-info a:focus, +.colors-custom .site-info a:hover, +.colors-custom .widget .widget-title a:focus, +.colors-custom .widget .widget-title a:hover, +.colors-custom .widget ul li a:focus, +.colors-custom .widget ul li a:hover { + -webkit-box-shadow: inset 0 0 0 hsl( ' . $hue . ', ' . $saturation . ', 13% ), 0 3px 0 hsl( ' . $hue . ', ' . $saturation . ', 13% ); + box-shadow: inset 0 0 0 hsl( ' . $hue . ', ' . $saturation . ' , 13% ), 0 3px 0 hsl( ' . $hue . ', ' . $saturation . ', 13% ); +} + +body.colors-custom, +.colors-custom button, +.colors-custom input, +.colors-custom select, +.colors-custom textarea, +.colors-custom h3, +.colors-custom h4, +.colors-custom h6, +.colors-custom label, +.colors-custom .entry-title a, +.colors-custom.twentyseventeen-front-page .panel-content .recent-posts article, +.colors-custom .entry-footer .cat-links a, +.colors-custom .entry-footer .tags-links a, +.colors-custom .format-quote blockquote, +.colors-custom .nav-title, +.colors-custom .comment-body, +.colors-custom .site-content .wp-playlist-light .wp-playlist-current-item .wp-playlist-item-album { + color: hsl( ' . $hue . ', ' . $reduced_saturation . ', 20% ); /* base: #333; */ +} + +.colors-custom .social-navigation a:hover, +.colors-custom .social-navigation a:focus { + background: hsl( ' . $hue . ', ' . $reduced_saturation . ', 20% ); /* base: #333; */ +} + +.colors-custom input[type="text"]:focus, +.colors-custom input[type="email"]:focus, +.colors-custom input[type="url"]:focus, +.colors-custom input[type="password"]:focus, +.colors-custom input[type="search"]:focus, +.colors-custom input[type="number"]:focus, +.colors-custom input[type="tel"]:focus, +.colors-custom input[type="range"]:focus, +.colors-custom input[type="date"]:focus, +.colors-custom input[type="month"]:focus, +.colors-custom input[type="week"]:focus, +.colors-custom input[type="time"]:focus, +.colors-custom input[type="datetime"]:focus, +.colors-custom input[type="datetime-local"]:focus, +.colors-custom input[type="color"]:focus, +.colors-custom textarea:focus, +.bypostauthor > .comment-body > .comment-meta > .comment-author .avatar { + border-color: hsl( ' . $hue . ', ' . $reduced_saturation . ', 20% ); /* base: #333; */ +} + +.colors-custom h2, +.colors-custom blockquote, +.colors-custom input[type="text"], +.colors-custom input[type="email"], +.colors-custom input[type="url"], +.colors-custom input[type="password"], +.colors-custom input[type="search"], +.colors-custom input[type="number"], +.colors-custom input[type="tel"], +.colors-custom input[type="range"], +.colors-custom input[type="date"], +.colors-custom input[type="month"], +.colors-custom input[type="week"], +.colors-custom input[type="time"], +.colors-custom input[type="datetime"], +.colors-custom input[type="datetime-local"], +.colors-custom input[type="color"], +.colors-custom textarea, +.colors-custom .site-description, +.colors-custom .entry-content blockquote.alignleft, +.colors-custom .entry-content blockquote.alignright, +.colors-custom .colors-custom .taxonomy-description, +.colors-custom .site-info a, +.colors-custom .wp-caption, +.colors-custom .gallery-caption { + color: hsl( ' . $hue . ', ' . $saturation . ', 40% ); /* base: #666; */ +} + +.colors-custom abbr, +.colors-custom acronym { + border-bottom-color: hsl( ' . $hue . ', ' . $saturation . ', 40% ); /* base: #666; */ +} + +.colors-custom h5, +.colors-custom .entry-meta, +.colors-custom .entry-meta a, +.colors-custom.blog .entry-meta a.post-edit-link, +.colors-custom.archive .entry-meta a.post-edit-link, +.colors-custom.search .entry-meta a.post-edit-link, +.colors-custom .nav-subtitle, +.colors-custom .comment-metadata, +.colors-custom .comment-metadata a, +.colors-custom .no-comments, +.colors-custom .comment-awaiting-moderation, +.colors-custom .page-numbers.current, +.colors-custom .page-links .page-number, +.colors-custom .navigation-top .current-menu-item > a, +.colors-custom .navigation-top .current_page_item > a, +.colors-custom .main-navigation a:hover, +.colors-custom .site-content .wp-playlist-light .wp-playlist-current-item .wp-playlist-item-artist { + color: hsl( ' . $hue . ', ' . $saturation . ', 46% ); /* base: #767676; */ +} + +.colors-custom :not( .mejs-button ) > button:hover, +.colors-custom :not( .mejs-button ) > button:focus, +.colors-custom input[type="button"]:hover, +.colors-custom input[type="button"]:focus, +.colors-custom input[type="submit"]:hover, +.colors-custom input[type="submit"]:focus, +.colors-custom .entry-footer .edit-link a.post-edit-link:hover, +.colors-custom .entry-footer .edit-link a.post-edit-link:focus, +.colors-custom .social-navigation a, +.colors-custom .prev.page-numbers:focus, +.colors-custom .prev.page-numbers:hover, +.colors-custom .next.page-numbers:focus, +.colors-custom .next.page-numbers:hover, +.colors-custom .site-content .wp-playlist-light .wp-playlist-item:hover, +.colors-custom .site-content .wp-playlist-light .wp-playlist-item:focus { + background: hsl( ' . esc_attr( $hue ) . ', ' . esc_attr( $saturation ) . ', 46% ); /* base: #767676; */ +} + +.colors-custom button.secondary:hover, +.colors-custom button.secondary:focus, +.colors-custom input[type="reset"]:hover, +.colors-custom input[type="reset"]:focus, +.colors-custom input[type="button"].secondary:hover, +.colors-custom input[type="button"].secondary:focus, +.colors-custom input[type="reset"].secondary:hover, +.colors-custom input[type="reset"].secondary:focus, +.colors-custom input[type="submit"].secondary:hover, +.colors-custom input[type="submit"].secondary:focus, +.colors-custom hr { + background: hsl( ' . $hue . ', ' . $saturation . ', 73% ); /* base: #bbb; */ +} + +.colors-custom input[type="text"], +.colors-custom input[type="email"], +.colors-custom input[type="url"], +.colors-custom input[type="password"], +.colors-custom input[type="search"], +.colors-custom input[type="number"], +.colors-custom input[type="tel"], +.colors-custom input[type="range"], +.colors-custom input[type="date"], +.colors-custom input[type="month"], +.colors-custom input[type="week"], +.colors-custom input[type="time"], +.colors-custom input[type="datetime"], +.colors-custom input[type="datetime-local"], +.colors-custom input[type="color"], +.colors-custom textarea, +.colors-custom select, +.colors-custom fieldset, +.colors-custom .widget .tagcloud a:hover, +.colors-custom .widget .tagcloud a:focus, +.colors-custom .widget.widget_tag_cloud a:hover, +.colors-custom .widget.widget_tag_cloud a:focus, +.colors-custom .wp_widget_tag_cloud a:hover, +.colors-custom .wp_widget_tag_cloud a:focus { + border-color: hsl( ' . $hue . ', ' . $saturation . ', 73% ); /* base: #bbb; */ +} + +.colors-custom thead th { + border-bottom-color: hsl( ' . $hue . ', ' . $saturation . ', 73% ); /* base: #bbb; */ +} + +.colors-custom .entry-footer .cat-links .icon, +.colors-custom .entry-footer .tags-links .icon { + color: hsl( ' . $hue . ', ' . $saturation . ', 73% ); /* base: #bbb; */ +} + +.colors-custom button.secondary, +.colors-custom input[type="reset"], +.colors-custom input[type="button"].secondary, +.colors-custom input[type="reset"].secondary, +.colors-custom input[type="submit"].secondary, +.colors-custom .prev.page-numbers, +.colors-custom .next.page-numbers { + background-color: hsl( ' . $hue . ', ' . $saturation . ', 87% ); /* base: #ddd; */ +} + +.colors-custom .widget .tagcloud a, +.colors-custom .widget.widget_tag_cloud a, +.colors-custom .wp_widget_tag_cloud a { + border-color: hsl( ' . $hue . ', ' . $saturation . ', 87% ); /* base: #ddd; */ +} + +.colors-custom.twentyseventeen-front-page article:not(.has-post-thumbnail):not(:first-child), +.colors-custom .widget ul li { + border-top-color: hsl( ' . $hue . ', ' . $saturation . ', 87% ); /* base: #ddd; */ +} + +.colors-custom .widget ul li { + border-bottom-color: hsl( ' . $hue . ', ' . $saturation . ', 87% ); /* base: #ddd; */ +} + +.colors-custom pre, +.colors-custom mark, +.colors-custom ins { + background: hsl( ' . $hue . ', ' . $saturation . ', 93% ); /* base: #eee; */ +} + +.colors-custom .navigation-top, +.colors-custom .main-navigation > div > ul, +.colors-custom .pagination, +.colors-custom .comments-pagination, +.colors-custom .entry-footer, +.colors-custom .site-footer { + border-top-color: hsl( ' . $hue . ', ' . $saturation . ', 93% ); /* base: #eee; */ +} + +.colors-custom .navigation-top, +.colors-custom .main-navigation li, +.colors-custom .entry-footer, +.colors-custom .single-featured-image-header, +.colors-custom .site-content .wp-playlist-light .wp-playlist-item, +.colors-custom tr { + border-bottom-color: hsl( ' . $hue . ', ' . $saturation . ', 93% ); /* base: #eee; */ +} + +.colors-custom .site-content .wp-playlist-light { + border-color: hsl( ' . $hue . ', ' . $saturation . ', 93% ); /* base: #eee; */ +} + +.colors-custom .site-header, +.colors-custom .single-featured-image-header { + background-color: hsl( ' . $hue . ', ' . $saturation . ', 98% ); /* base: #fafafa; */ +} + +.colors-custom button, +.colors-custom input[type="button"], +.colors-custom input[type="submit"], +.colors-custom .entry-footer .edit-link a.post-edit-link, +.colors-custom .social-navigation a, +.colors-custom .site-content .wp-playlist-light a.wp-playlist-caption:hover, +.colors-custom .site-content .wp-playlist-light .wp-playlist-item:hover a, +.colors-custom .site-content .wp-playlist-light .wp-playlist-item:focus a, +.colors-custom .site-content .wp-playlist-light .wp-playlist-item:hover, +.colors-custom .site-content .wp-playlist-light .wp-playlist-item:focus, +.colors-custom .prev.page-numbers:focus, +.colors-custom .prev.page-numbers:hover, +.colors-custom .next.page-numbers:focus, +.colors-custom .next.page-numbers:hover, +.colors-custom.has-header-image .site-title, +.colors-custom.has-header-video .site-title, +.colors-custom.has-header-image .site-title a, +.colors-custom.has-header-video .site-title a, +.colors-custom.has-header-image .site-description, +.colors-custom.has-header-video .site-description { + color: hsl( ' . $hue . ', ' . $saturation . ', 100% ); /* base: #fff; */ +} + +body.colors-custom, +.colors-custom .navigation-top, +.colors-custom .main-navigation ul { + background: hsl( ' . $hue . ', ' . $saturation . ', 100% ); /* base: #fff; */ +} + +.colors-custom .widget ul li a, +.colors-custom .site-footer .widget-area ul li a { + -webkit-box-shadow: inset 0 -1px 0 hsl( ' . $hue . ', ' . $saturation . ', 100% ); /* base: rgba(255, 255, 255, 1); */ + box-shadow: inset 0 -1px 0 hsl( ' . $hue . ', ' . $saturation . ', 100% ); /* base: rgba(255, 255, 255, 1); */ +} + +.colors-custom .menu-toggle, +.colors-custom .menu-toggle:hover, +.colors-custom .menu-toggle:focus, +.colors-custom .menu .dropdown-toggle, +.colors-custom .menu-scroll-down, +.colors-custom .menu-scroll-down:hover, +.colors-custom .menu-scroll-down:focus { + background-color: transparent; +} + +.colors-custom .widget .tagcloud a, +.colors-custom .widget .tagcloud a:focus, +.colors-custom .widget .tagcloud a:hover, +.colors-custom .widget.widget_tag_cloud a, +.colors-custom .widget.widget_tag_cloud a:focus, +.colors-custom .widget.widget_tag_cloud a:hover, +.colors-custom .wp_widget_tag_cloud a, +.colors-custom .wp_widget_tag_cloud a:focus, +.colors-custom .wp_widget_tag_cloud a:hover, +.colors-custom .entry-footer .edit-link a.post-edit-link:focus, +.colors-custom .entry-footer .edit-link a.post-edit-link:hover { + -webkit-box-shadow: none !important; + box-shadow: none !important; +} + +/* Reset non-customizable hover styling for links */ +.colors-custom .entry-content a:hover, +.colors-custom .entry-content a:focus, +.colors-custom .entry-summary a:hover, +.colors-custom .entry-summary a:focus, +.colors-custom .comment-content a:focus, +.colors-custom .comment-content a:hover, +.colors-custom .widget a:hover, +.colors-custom .widget a:focus, +.colors-custom .site-footer .widget-area a:hover, +.colors-custom .site-footer .widget-area a:focus, +.colors-custom .posts-navigation a:hover, +.colors-custom .posts-navigation a:focus, +.colors-custom .widget_authors a:hover strong, +.colors-custom .widget_authors a:focus strong { + -webkit-box-shadow: inset 0 0 0 rgba(0, 0, 0, 0), 0 3px 0 rgba(0, 0, 0, 1); + box-shadow: inset 0 0 0 rgba(0, 0, 0, 0), 0 3px 0 rgba(0, 0, 0, 1); +} + +.colors-custom .gallery-item a, +.colors-custom .gallery-item a:hover, +.colors-custom .gallery-item a:focus { + -webkit-box-shadow: none; + box-shadow: none; +} + +@media screen and (min-width: 48em) { + + .colors-custom .nav-links .nav-previous .nav-title .icon, + .colors-custom .nav-links .nav-next .nav-title .icon { + color: hsl( ' . $hue . ', ' . $saturation . ', 20% ); /* base: #222; */ + } + + .colors-custom .main-navigation li li:hover, + .colors-custom .main-navigation li li.focus { + background: hsl( ' . $hue . ', ' . $saturation . ', 46% ); /* base: #767676; */ + } + + .colors-custom .navigation-top .menu-scroll-down { + color: hsl( ' . $hue . ', ' . $saturation . ', 46% ); /* base: #767676; */; + } + + .colors-custom abbr[title] { + border-bottom-color: hsl( ' . $hue . ', ' . $saturation . ', 46% ); /* base: #767676; */; + } + + .colors-custom .main-navigation ul ul { + border-color: hsl( ' . $hue . ', ' . $saturation . ', 73% ); /* base: #bbb; */ + background: hsl( ' . $hue . ', ' . $saturation . ', 100% ); /* base: #fff; */ + } + + .colors-custom .main-navigation ul li.menu-item-has-children:before, + .colors-custom .main-navigation ul li.page_item_has_children:before { + border-bottom-color: hsl( ' . $hue . ', ' . $saturation . ', 73% ); /* base: #bbb; */ + } + + .colors-custom .main-navigation ul li.menu-item-has-children:after, + .colors-custom .main-navigation ul li.page_item_has_children:after { + border-bottom-color: hsl( ' . $hue . ', ' . $saturation . ', 100% ); /* base: #fff; */ + } + + .colors-custom .main-navigation li li.focus > a, + .colors-custom .main-navigation li li:focus > a, + .colors-custom .main-navigation li li:hover > a, + .colors-custom .main-navigation li li a:hover, + .colors-custom .main-navigation li li a:focus, + .colors-custom .main-navigation li li.current_page_item a:hover, + .colors-custom .main-navigation li li.current-menu-item a:hover, + .colors-custom .main-navigation li li.current_page_item a:focus, + .colors-custom .main-navigation li li.current-menu-item a:focus { + color: hsl( ' . $hue . ', ' . $saturation . ', 100% ); /* base: #fff; */ + } +} +` diff --git a/internal/theme/twentyseventeen/layout/base.gohtml b/internal/theme/twentyseventeen/layout/base.gohtml index c698b8f..bf92e71 100644 --- a/internal/theme/twentyseventeen/layout/base.gohtml +++ b/internal/theme/twentyseventeen/layout/base.gohtml @@ -1,12 +1,10 @@ {{ define "layout/base"}} - - {{template "layout/head" .}} - {{block "head" .}} - {{end}} - - + + {{template "layout/head" .}} + + {{template "svg"}}
diff --git a/internal/theme/twentyseventeen/layout/head.gohtml b/internal/theme/twentyseventeen/layout/head.gohtml index d5d874a..d8718e9 100644 --- a/internal/theme/twentyseventeen/layout/head.gohtml +++ b/internal/theme/twentyseventeen/layout/head.gohtml @@ -1,4 +1,5 @@ {{define "layout/head"}} + @@ -64,7 +65,8 @@ - + {{block "head" .}} + {{end}} {{template "common/head" .}} - + {{end}} \ No newline at end of file diff --git a/internal/theme/twentyseventeen/twentyseventeen.go b/internal/theme/twentyseventeen/twentyseventeen.go index 205b81f..3cfc8d6 100644 --- a/internal/theme/twentyseventeen/twentyseventeen.go +++ b/internal/theme/twentyseventeen/twentyseventeen.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/fthvgb1/wp-go/helper" "github.com/fthvgb1/wp-go/helper/maps" + str "github.com/fthvgb1/wp-go/helper/strings" "github.com/fthvgb1/wp-go/internal/cmd/reload" "github.com/fthvgb1/wp-go/internal/pkg/constraints" "github.com/fthvgb1/wp-go/internal/pkg/models" @@ -37,6 +38,7 @@ func dispatch(next common.HandleFn[*common.Handle], h *common.Handle) { h.WidgetAreaData() h.GetPassword() h.PushHandleFn(calClass) + h.PushHeadScript(constraints.HeadScript, colorScheme) h.GinH["HeaderImage"] = getHeaderImage(h) switch h.Scene { case constraints.Detail: @@ -121,26 +123,23 @@ var header = reload.Vars(models.PostThumbnail{}) func getHeaderImage(h *common.Handle) (r models.PostThumbnail) { img := header.Load() - r.Sizes = "100vw" - if img.Path == "" { - image, rand := h.GetCustomHeader() - if !rand { - if image.Path == "" { - r.Path = helper.CutUrlHost(h.ThemeMods.ThemeSupport.CustomHeader.DefaultImage) - r.Width = 2000 - r.Height = 1200 - header.Store(r) - return - } - r = image - r.Sizes = "100vw" - header.Store(r) - return - } - img = image + if img.Path != "" { + return r } - r = img + image, rand := h.GetCustomHeader() + if image.Path != "" { + r = image + r.Sizes = "100vw" + if !rand { + header.Store(r) + } + return + } + r.Path = helper.CutUrlHost(h.ThemeMods.ThemeSupport.CustomHeader.DefaultImage) + r.Width = 2000 + r.Height = 1200 r.Sizes = "100vw" + header.Store(r) return } @@ -149,6 +148,14 @@ func calClass(h *common.Handle) { if u != "" && u != "remove-header" { h.Class = append(h.Class, "has-header-image") } + if len(h.ThemeMods.SidebarsWidgets.Data.Sidebar1) > 0 { + h.Class = append(h.Class, "has-sidebar") + } + if h.ThemeMods.HeaderTextcolor == "blank" { + h.Class = append(h.Class, "title-tagline-hidden") + } + h.Class = append(h.Class, "hfeed") + h.Class = append(h.Class, str.Join("colors-", wpconfig.GetThemeModsVal(h.Theme, "colorscheme", "light"))) if h.Scene == constraints.Archive { if "one-column" == wpconfig.GetThemeModsVal(h.Theme, "page_layout", "") { h.Class = append(h.Class, "page-one-column") diff --git a/model/sqxquery.go b/model/sqxquery.go index 22c6784..08cf450 100644 --- a/model/sqxquery.go +++ b/model/sqxquery.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "github.com/fthvgb1/wp-go/helper/slice" + str "github.com/fthvgb1/wp-go/helper/strings" "github.com/jmoiron/sqlx" "strconv" "strings" @@ -150,5 +151,5 @@ func FormatSql(sql string, params ...any) string { sql = strings.Replace(sql, "?", fmt.Sprintf("%f", param.(float64)), 1) } } - return sql + return str.CutSpecialDuplicate(sql, " ") }