mirror of
https://github.com/miniflux/v2.git
synced 2025-07-12 16:58:36 +00:00
Avoid stretched image if specified width is larger than Miniflux's layout
This commit is contained in:
parent
f0a698c6fe
commit
c0eab5ebc5
2 changed files with 39 additions and 3 deletions
|
@ -100,6 +100,12 @@ func Sanitize(baseURL, input string) string {
|
||||||
func sanitizeAttributes(baseURL, tagName string, attributes []html.Attribute) ([]string, string) {
|
func sanitizeAttributes(baseURL, tagName string, attributes []html.Attribute) ([]string, string) {
|
||||||
var htmlAttrs, attrNames []string
|
var htmlAttrs, attrNames []string
|
||||||
var err error
|
var err error
|
||||||
|
var isImageLargerThanLayout bool
|
||||||
|
|
||||||
|
if tagName == "img" {
|
||||||
|
imgWidth := getIntegerAttributeValue("width", attributes)
|
||||||
|
isImageLargerThanLayout = imgWidth > 750
|
||||||
|
}
|
||||||
|
|
||||||
for _, attribute := range attributes {
|
for _, attribute := range attributes {
|
||||||
value := attribute.Val
|
value := attribute.Val
|
||||||
|
@ -112,8 +118,14 @@ func sanitizeAttributes(baseURL, tagName string, attributes []html.Attribute) ([
|
||||||
value = sanitizeSrcsetAttr(baseURL, value)
|
value = sanitizeSrcsetAttr(baseURL, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
if tagName == "img" && (attribute.Key == "width" || attribute.Key == "height") && !isPositiveInteger(value) {
|
if tagName == "img" && (attribute.Key == "width" || attribute.Key == "height") {
|
||||||
continue
|
if !isPositiveInteger(value) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if isImageLargerThanLayout {
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if isExternalResourceAttribute(attribute.Key) {
|
if isExternalResourceAttribute(attribute.Key) {
|
||||||
|
@ -486,3 +498,17 @@ func isPositiveInteger(value string) bool {
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getAttributeValue(name string, attributes []html.Attribute) string {
|
||||||
|
for _, attribute := range attributes {
|
||||||
|
if attribute.Key == name {
|
||||||
|
return attribute.Val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func getIntegerAttributeValue(name string, attributes []html.Attribute) int {
|
||||||
|
number, _ := strconv.Atoi(getAttributeValue(name, attributes))
|
||||||
|
return number
|
||||||
|
}
|
||||||
|
|
|
@ -25,6 +25,16 @@ func TestImgWithWidthAndHeightAttribute(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestImgWithWidthAndHeightAttributeLargerThanMinifluxLayout(t *testing.T) {
|
||||||
|
input := `<img src="https://example.org/image.png" width="1200" height="675">`
|
||||||
|
expected := `<img src="https://example.org/image.png" loading="lazy">`
|
||||||
|
output := Sanitize("http://example.org/", input)
|
||||||
|
|
||||||
|
if output != expected {
|
||||||
|
t.Errorf(`Wrong output: %s`, output)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestImgWithIncorrectWidthAndHeightAttribute(t *testing.T) {
|
func TestImgWithIncorrectWidthAndHeightAttribute(t *testing.T) {
|
||||||
input := `<img src="https://example.org/image.png" width="10px" height="20px">`
|
input := `<img src="https://example.org/image.png" width="10px" height="20px">`
|
||||||
expected := `<img src="https://example.org/image.png" loading="lazy">`
|
expected := `<img src="https://example.org/image.png" loading="lazy">`
|
||||||
|
@ -77,7 +87,7 @@ func TestSourceWithSrcsetAndMedia(t *testing.T) {
|
||||||
|
|
||||||
func TestMediumImgWithSrcset(t *testing.T) {
|
func TestMediumImgWithSrcset(t *testing.T) {
|
||||||
input := `<img alt="Image for post" class="t u v ef aj" src="https://miro.medium.com/max/5460/1*aJ9JibWDqO81qMfNtqgqrw.jpeg" srcset="https://miro.medium.com/max/552/1*aJ9JibWDqO81qMfNtqgqrw.jpeg 276w, https://miro.medium.com/max/1000/1*aJ9JibWDqO81qMfNtqgqrw.jpeg 500w" sizes="500px" width="2730" height="3407">`
|
input := `<img alt="Image for post" class="t u v ef aj" src="https://miro.medium.com/max/5460/1*aJ9JibWDqO81qMfNtqgqrw.jpeg" srcset="https://miro.medium.com/max/552/1*aJ9JibWDqO81qMfNtqgqrw.jpeg 276w, https://miro.medium.com/max/1000/1*aJ9JibWDqO81qMfNtqgqrw.jpeg 500w" sizes="500px" width="2730" height="3407">`
|
||||||
expected := `<img alt="Image for post" src="https://miro.medium.com/max/5460/1*aJ9JibWDqO81qMfNtqgqrw.jpeg" srcset="https://miro.medium.com/max/552/1*aJ9JibWDqO81qMfNtqgqrw.jpeg 276w, https://miro.medium.com/max/1000/1*aJ9JibWDqO81qMfNtqgqrw.jpeg 500w" sizes="500px" width="2730" height="3407" loading="lazy">`
|
expected := `<img alt="Image for post" src="https://miro.medium.com/max/5460/1*aJ9JibWDqO81qMfNtqgqrw.jpeg" srcset="https://miro.medium.com/max/552/1*aJ9JibWDqO81qMfNtqgqrw.jpeg 276w, https://miro.medium.com/max/1000/1*aJ9JibWDqO81qMfNtqgqrw.jpeg 500w" sizes="500px" loading="lazy">`
|
||||||
output := Sanitize("http://example.org/", input)
|
output := Sanitize("http://example.org/", input)
|
||||||
|
|
||||||
if output != expected {
|
if output != expected {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue