reprogl

Форк
0
/
article.go 
64 строки · 1.7 Кб
1
package style
2

3
import (
4
	"strconv"
5
	"strings"
6

7
	"xelbot.com/reprogl/models"
8
)
9

10
func GenerateArticleStyles(article *models.Article, acceptAvif, acceptWebp bool) string {
11
	style := "<style>\n"
12

13
	style += commonStyle() + "\n"
14
	if article.HasImage() {
15
		style += styleWithImage(article.FeaturedImage, acceptAvif, acceptWebp)
16
	} else {
17
		style += defaultStyleWithoutImage() + "\n"
18
	}
19
	style += "    </style>"
20

21
	return cdnReplace(style)
22
}
23

24
func styleWithImage(image models.FeaturedImage, acceptAvif, acceptWebp bool) string {
25
	var cssRules string
26

27
	srcSet := image.DecodeSrcSet()
28
	if acceptAvif && image.HasAvif() {
29
		cssRules = stylesImagesByFormat(srcSet, "avif")
30
	} else if acceptWebp && image.HasWebp() {
31
		cssRules = stylesImagesByFormat(srcSet, "webp")
32
	} else {
33
		cssRules = stylesImagesByFormat(srcSet, "origin")
34
		if image.HasWebp() {
35
			srcSetItem, _ := srcSet["webp"]
36
			cssRules += "      @supports (background-image:url(%cdn%/uploads/"
37
			cssRules += srcSetItem.Items[0].Path + ")){\n"
38
			cssRules += strings.TrimRight(stylesImagesByFormat(srcSet, "webp"), "\n") + "}\n"
39
		}
40
	}
41

42
	return cssRules
43
}
44

45
func stylesImagesByFormat(srcSet map[string]models.SrcSetItem, format string) string {
46
	var cssRules string
47
	var firstImage = true
48

49
	if srcSetItem, found := srcSet[format]; found {
50
		for _, srcImage := range srcSetItem.Items {
51
			if firstImage {
52
				cssRules += "      .post-view .post-view-sidebar{background-image:url(%cdn%/uploads/"
53
				cssRules += srcImage.Path + ")}\n"
54
				firstImage = false
55
			} else {
56
				cssRules += "      @media only screen and (max-width:" + strconv.Itoa(srcImage.Width) + "px){"
57
				cssRules += ".post-view .post-view-sidebar{background-image:url(%cdn%/uploads/"
58
				cssRules += srcImage.Path + ")}}\n"
59
			}
60
		}
61
	}
62

63
	return cssRules
64
}
65

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.