Compare commits

...

2 commits

Author SHA1 Message Date
3ec8def5c2 Remove loading=lazy from small images 2026-06-18 14:15:59 +12:00
ebb5bf3892 Always use vendored html-parsing 2026-06-18 14:15:43 +12:00
8 changed files with 40 additions and 9 deletions

View file

@ -1,3 +1,3 @@
#lang info #lang info
(define build-deps '("rackunit-lib" "web-server-lib" "http-easy-lib" "html-parsing" "html-writing" "json-pointer" "typed-ini-lib" "memo" "net-cookies-lib" "db" "sequence-tools-lib")) (define build-deps '("rackunit-lib" "web-server-lib" "http-easy-lib" "html-writing" "json-pointer" "typed-ini-lib" "memo" "net-cookies-lib" "db" "sequence-tools-lib"))

View file

@ -20,7 +20,7 @@
title "File:Rainbow Flag1.svg" title "File:Rainbow Flag1.svg"
imageinfo imageinfo
((: timestamp "2025-03-10T07:24:50Z" ((: timestamp "2025-03-10T07:24:50Z"
user "DogeMcMeow")) user "DogeMcMeow"))
fileusage fileusage
((: pageid 191 ((: pageid 191
ns 0 ns 0

View file

@ -5,7 +5,8 @@
racket/string racket/string
"pure-utils.rkt" "pure-utils.rkt"
"url-utils.rkt" "url-utils.rkt"
"xexpr-utils.rkt") "xexpr-utils.rkt"
(for-syntax racket/base syntax/parse))
(provide (provide
preprocess-html-wiki preprocess-html-wiki
@ -72,7 +73,18 @@
(div (@ (class "reviews")) (div (@ (class "reviews"))
(header "GameSpot Expert Reviews")) (header "GameSpot Expert Reviews"))
(div (@ (data-test-ampersand) (class "mw-collapsible-content")) (div (@ (data-test-ampersand) (class "mw-collapsible-content"))
(& ndash)))))) (& ndash))
(div (img (@ (loading "lazy") (width "80") (height "80") (data-test-size "small")))
(img (@ (loading "lazy") (width "500") (height "80") (data-test-size "wide")))
(img (@ (loading "lazy") (width "500") (height "500") (data-test-size "large"))))))))
(define-syntax match?
(syntax-parser
[(_ datum:id pattern)
#'(match datum [pattern #t] [_ #f])]))
(define (image-dimension-small-enough? x)
(and (number? x) (x . <= . 200)))
(define (updater wikiname #:strict-proxy? [strict-proxy? #f]) (define (updater wikiname #:strict-proxy? [strict-proxy? #f])
;; precompute wikiurl regex for efficency ;; precompute wikiurl regex for efficency
@ -171,6 +183,15 @@
(curry u (curry u
(λ (v) (dict-has-key? v 'data-src)) (λ (v) (dict-has-key? v 'data-src))
(λ (v) (alist-overwrite v 'src (dict-ref v 'data-src)))) (λ (v) (alist-overwrite v 'src (dict-ref v 'data-src))))
; remove loading=lazy for images small enough in either dimension
(curry u
(λ (v) (match? v (list-no-order
(list 'loading "lazy")
(or
(list 'height (app string->number (? image-dimension-small-enough?)))
(list 'width (app string->number (? image-dimension-small-enough?))))
_ ...)))
(λ (v) (dict-remove v 'loading)))
; don't use srcset - TODO: use srcset? ; don't use srcset - TODO: use srcset?
(λ (v) (dict-remove v 'srcset)))) (λ (v) (dict-remove v 'srcset))))
@ -345,6 +366,16 @@
(check-equal? ((query-selector (λ (t a c) (dict-has-key? a 'data-test-ampersand)) transformed)) (check-equal? ((query-selector (λ (t a c) (dict-has-key? a 'data-test-ampersand)) transformed))
'(div (@ (data-test-ampersand) (class "mw-collapsible-content")) '(div (@ (data-test-ampersand) (class "mw-collapsible-content"))
(& ndash))) (& ndash)))
; check that loading=lazy is retained on large images
(check-equal? ((query-selector (λ (t a c) (match? a (list-no-order '(data-test-size "small")
_ ...))) transformed))
'(img (@ (width "80") (height "80") (data-test-size "small"))))
(check-equal? ((query-selector (λ (t a c) (match? a (list-no-order '(data-test-size "wide")
_ ...))) transformed))
'(img (@ (width "500") (height "80") (data-test-size "wide"))))
(check-equal? ((query-selector (λ (t a c) (match? a (list-no-order '(data-test-size "large")
_ ...))) transformed))
'(img (@ (loading "lazy") (width "500") (height "500") (data-test-size "large"))))
; benchmark ; benchmark
(when (file-exists? "../storage/Frog.html") (when (file-exists? "../storage/Frog.html")
(with-input-from-file "../storage/Frog.html" (with-input-from-file "../storage/Frog.html"

View file

@ -5,7 +5,7 @@
racket/string racket/string
json json
(prefix-in easy: net/http-easy) (prefix-in easy: net/http-easy)
html-parsing "../lib/html-parsing/main.rkt"
html-writing html-writing
web-server/http web-server/http
web-server/http/bindings web-server/http/bindings

View file

@ -607,7 +607,7 @@
(require racket/generator (require racket/generator
racket/list racket/list
net/http-easy net/http-easy
html-parsing "../lib/html-parsing/main.rkt"
"../lib/xexpr-utils.rkt") "../lib/xexpr-utils.rkt")
(define r (get "https://www.niwanetwork.org/members/")) (define r (get "https://www.niwanetwork.org/members/"))
(define x (html->xexp (bytes->string/utf-8 (response-body r)))) (define x (html->xexp (bytes->string/utf-8 (response-body r))))

View file

@ -4,7 +4,7 @@
racket/string racket/string
memo memo
net/http-easy net/http-easy
html-parsing "../lib/html-parsing/main.rkt"
"../lib/pure-utils.rkt" "../lib/pure-utils.rkt"
"../lib/syntax.rkt" "../lib/syntax.rkt"
"../lib/url-utils.rkt" "../lib/url-utils.rkt"

View file

@ -2,7 +2,7 @@
(require racket/string (require racket/string
(prefix-in easy: net/http-easy) (prefix-in easy: net/http-easy)
; html libs ; html libs
html-parsing "../lib/html-parsing/main.rkt"
html-writing html-writing
; web server libs ; web server libs
net/url net/url

View file

@ -2,7 +2,7 @@
(require racket/list (require racket/list
racket/string racket/string
; html libs ; html libs
html-parsing "../lib/html-parsing/main.rkt"
html-writing html-writing
; web server libs ; web server libs
net/url net/url