forked from cadence/breezewiki
		
	Use <!DOCTYPE html> standards mode on all pages
This commit is contained in:
		
							parent
							
								
									1219334d06
								
							
						
					
					
						commit
						aab52bd92b
					
				
					 5 changed files with 101 additions and 82 deletions
				
			
		|  | @ -116,46 +116,48 @@ | ||||||
|            ; combine the above entries into a single request for potentially extra speed - fandom.com doesn't even do this! |            ; combine the above entries into a single request for potentially extra speed - fandom.com doesn't even do this! | ||||||
|            "~a/wikia.php?controller=ThemeApi&method=themeVariables" |            "~a/wikia.php?controller=ThemeApi&method=themeVariables" | ||||||
|            "~a/load.php?lang=en&modules=skin.fandomdesktop.styles%7Cext.fandom.PortableInfoboxFandomDesktop.css%7Cext.fandom.GlobalComponents.CommunityHeaderBackground.css%7Cext.gadget.site-styles%2Csound-styles%7Csite.styles&only=styles&skin=fandomdesktop"))) |            "~a/load.php?lang=en&modules=skin.fandomdesktop.styles%7Cext.fandom.PortableInfoboxFandomDesktop.css%7Cext.fandom.GlobalComponents.CommunityHeaderBackground.css%7Cext.gadget.site-styles%2Csound-styles%7Csite.styles&only=styles&skin=fandomdesktop"))) | ||||||
|   `(html |   `(*TOP* | ||||||
|     (head |     (*DECL* DOCTYPE html) | ||||||
|      (meta (@ (name "viewport") (content "width=device-width, initial-scale=1"))) |     (html | ||||||
|      (title ,(format "~a | ~a+~a" |      (head | ||||||
|                      title |       (meta (@ (name "viewport") (content "width=device-width, initial-scale=1"))) | ||||||
|                      (regexp-replace #rx" ?Wiki$" (siteinfo^-sitename siteinfo) "") |       (title ,(format "~a | ~a+~a" | ||||||
|                      (config-get 'application_name))) |                       title | ||||||
|      ,@(map (λ (url) |                       (regexp-replace #rx" ?Wiki$" (siteinfo^-sitename siteinfo) "") | ||||||
|               `(link (@ (rel "stylesheet") (type "text/css") (href ,url)))) |                       (config-get 'application_name))) | ||||||
|             (required-styles (format "https://~a.fandom.com" wikiname))) |       ,@(map (λ (url) | ||||||
|      (link (@ (rel "stylesheet") (type "text/css") (href ,(get-static-url "main.css")))) |                `(link (@ (rel "stylesheet") (type "text/css") (href ,url)))) | ||||||
|      (script "const BWData = " |              (required-styles (format "https://~a.fandom.com" wikiname))) | ||||||
|              ,(jsexpr->string (hasheq 'wikiname wikiname |       (link (@ (rel "stylesheet") (type "text/css") (href ,(get-static-url "main.css")))) | ||||||
|                                       'strict_proxy (config-true? 'strict_proxy)))) |       (script "const BWData = " | ||||||
|      ,(if (config-true? 'feature_search_suggestions) |               ,(jsexpr->string (hasheq 'wikiname wikiname | ||||||
|           `(script (@ (type "module") (src ,(get-static-url "search-suggestions.js")))) |                                        'strict_proxy (config-true? 'strict_proxy)))) | ||||||
|           "") |       ,(if (config-true? 'feature_search_suggestions) | ||||||
|      (link (@ (rel "icon") (href ,(u (λ (v) (config-true? 'strict_proxy)) |            `(script (@ (type "module") (src ,(get-static-url "search-suggestions.js")))) | ||||||
|                                      (λ (v) (u-proxy-url v)) |            "") | ||||||
|                                      (head-data^-icon-url head-data)))))) |       (link (@ (rel "icon") (href ,(u (λ (v) (config-true? 'strict_proxy)) | ||||||
|     (body (@ (class ,(head-data^-body-class head-data))) |                                       (λ (v) (u-proxy-url v)) | ||||||
|           (div (@ (class "main-container")) |                                       (head-data^-icon-url head-data)))))) | ||||||
|                (div (@ (class "fandom-community-header__background tileHorizontally header"))) |      (body (@ (class ,(head-data^-body-class head-data))) | ||||||
|                (div (@ (class "page")) |            (div (@ (class "main-container")) | ||||||
|                     (main (@ (class "page__main")) |                 (div (@ (class "fandom-community-header__background tileHorizontally header"))) | ||||||
|                           ,(niwa-notice wikiname title) |                 (div (@ (class "page")) | ||||||
|                           (div (@ (class "custom-top")) |                      (main (@ (class "page__main")) | ||||||
|                                (h1 (@ (class "page-title")) ,title) |                            ,(niwa-notice wikiname title) | ||||||
|                                (nav (@ (class "sitesearch")) |                            (div (@ (class "custom-top")) | ||||||
|                                     (form (@ (action ,(format "/~a/search" wikiname)) |                                 (h1 (@ (class "page-title")) ,title) | ||||||
|                                              (class "bw-search-form") |                                 (nav (@ (class "sitesearch")) | ||||||
|                                              (id "bw-pr-search-form")) |                                      (form (@ (action ,(format "/~a/search" wikiname)) | ||||||
|                                           (label (@ (for "bw-search-input")) "Search ") |                                               (class "bw-search-form") | ||||||
|                                           (div (@ (id "bw-pr-search-input")) |                                               (id "bw-pr-search-form")) | ||||||
|                                                (input (@ (type "text") (name "q") (id "bw-search-input") (autocomplete "off")))) |                                            (label (@ (for "bw-search-input")) "Search ") | ||||||
|                                           (div (@ (class "bw-ss__container") (id "bw-pr-search-suggestions")))))) |                                            (div (@ (id "bw-pr-search-input")) | ||||||
|                           (div (@ (id "content") #;(class "page-content")) |                                                 (input (@ (type "text") (name "q") (id "bw-search-input") (autocomplete "off")))) | ||||||
|                                (div (@ (id "mw-content-text")) |                                            (div (@ (class "bw-ss__container") (id "bw-pr-search-suggestions")))))) | ||||||
|                                     ,content)) |                            (div (@ (id "content") #;(class "page-content")) | ||||||
|                           ,(application-footer source-url #:license (siteinfo^-license siteinfo)))))))) |                                 (div (@ (id "mw-content-text")) | ||||||
|  |                                      ,content)) | ||||||
|  |                            ,(application-footer source-url #:license (siteinfo^-license siteinfo))))))))) | ||||||
| (module+ test | (module+ test | ||||||
|   (define page |   (define page | ||||||
|     (parameterize ([(config-parameter 'strict_proxy) "true"]) |     (parameterize ([(config-parameter 'strict_proxy) "true"]) | ||||||
|  |  | ||||||
|  | @ -60,25 +60,27 @@ | ||||||
|     (p "If you want to create your own wiki, try Miraheze!"))) |     (p "If you want to create your own wiki, try Miraheze!"))) | ||||||
| 
 | 
 | ||||||
| (define body | (define body | ||||||
|   `(html |   `(*TOP* | ||||||
|     (head |     (*DECL* DOCTYPE html) | ||||||
|      (meta (@ (name "viewport") (content "width=device-width, initial-scale=1"))) |     (html | ||||||
|      (title "About | BreezeWiki") |      (head | ||||||
|      (link (@ (rel "stylesheet") (type "text/css") (href ,(get-static-url "internal.css")))) |       (meta (@ (name "viewport") (content "width=device-width, initial-scale=1"))) | ||||||
|      (link (@ (rel "stylesheet") (type "text/css") (href ,(get-static-url "main.css")))) |       (title "About | BreezeWiki") | ||||||
|      (link (@ (rel "icon") (href ,(head-data^-icon-url head-data-default))))) |       (link (@ (rel "stylesheet") (type "text/css") (href ,(get-static-url "internal.css")))) | ||||||
|     (body (@ (class "skin-fandomdesktop theme-fandomdesktop-light internal")) |       (link (@ (rel "stylesheet") (type "text/css") (href ,(get-static-url "main.css")))) | ||||||
|           (div (@ (class "main-container")) |       (link (@ (rel "icon") (href ,(head-data^-icon-url head-data-default))))) | ||||||
|                (div (@ (class "fandom-community-header__background tileBoth header"))) |      (body (@ (class "skin-fandomdesktop theme-fandomdesktop-light internal")) | ||||||
|                (div (@ (class "page")) |            (div (@ (class "main-container")) | ||||||
|                     (main (@ (class "page__main")) |                 (div (@ (class "fandom-community-header__background tileBoth header"))) | ||||||
|                           (div (@ (class "custom-top")) |                 (div (@ (class "page")) | ||||||
|                                (h1 (@ (class "page-title")) |                      (main (@ (class "page__main")) | ||||||
|                                    "About BreezeWiki")) |                            (div (@ (class "custom-top")) | ||||||
|                           (div (@ (id "content") #;(class "page-content")) |                                 (h1 (@ (class "page-title")) | ||||||
|                                (div (@ (id "mw-content-text")) |                                     "About BreezeWiki")) | ||||||
|                                     ,@content)) |                            (div (@ (id "content") #;(class "page-content")) | ||||||
|                           ,(application-footer #f))))))) |                                 (div (@ (id "mw-content-text")) | ||||||
|  |                                      ,@content)) | ||||||
|  |                            ,(application-footer #f)))))))) | ||||||
| (module+ test | (module+ test | ||||||
|   (check-not-false (xexp->html body))) |   (check-not-false (xexp->html body))) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -175,14 +175,15 @@ | ||||||
|                 ; proxy images from inline styles, if strict_proxy is set |                 ; proxy images from inline styles, if strict_proxy is set | ||||||
|                 (curry u |                 (curry u | ||||||
|                        (λ (v) (config-true? 'strict_proxy)) |                        (λ (v) (config-true? 'strict_proxy)) | ||||||
|                        (λ (v) (attribute-maybe-update 'style |                        (λ (v) (attribute-maybe-update | ||||||
|                          (λ (style) |                                'style | ||||||
|                            (regexp-replace #rx"url\\(['\"]?(.*?)['\"]?\\)" style |                                (λ (style) | ||||||
|                                            (λ (whole url) |                                  (regexp-replace #rx"url\\(['\"]?(.*?)['\"]?\\)" style | ||||||
|                                              (string-append |                                                  (λ (whole url) | ||||||
|                                               "url(" |                                                    (string-append | ||||||
|                                               (u-proxy-url url) |                                                     "url(" | ||||||
|                                               ")")))) v))) |                                                     (u-proxy-url url) | ||||||
|  |                                                     ")")))) v))) | ||||||
|                 ; and also their links, if strict_proxy is set |                 ; and also their links, if strict_proxy is set | ||||||
|                 (curry u |                 (curry u | ||||||
|                        (λ (v) |                        (λ (v) | ||||||
|  |  | ||||||
|  | @ -12,7 +12,9 @@ | ||||||
|     (define built (simple-form-path (build-path path-static f))) |     (define built (simple-form-path (build-path path-static f))) | ||||||
|     (values built (file-or-directory-modify-seconds built)))) |     (values built (file-or-directory-modify-seconds built)))) | ||||||
| 
 | 
 | ||||||
| (: get-static-url ((U String Path) -> String)) | (: get-static-url (Path-String -> String)) | ||||||
| (define (get-static-url path-or-filename) | (define (get-static-url path-or-filename) | ||||||
|   (define the-path (simple-form-path (if (path? path-or-filename) path-or-filename (build-path path-static path-or-filename)))) |   (define the-path (simple-form-path (if (path? path-or-filename) | ||||||
|  |                                          path-or-filename | ||||||
|  |                                          (build-path path-static path-or-filename)))) | ||||||
|   (format "/static/~a?t=~a" (file-name-from-path the-path) (hash-ref static-data the-path))) |   (format "/static/~a?t=~a" (file-name-from-path the-path) (hash-ref static-data the-path))) | ||||||
|  |  | ||||||
|  | @ -157,20 +157,32 @@ | ||||||
|     (define element-type (car element)) |     (define element-type (car element)) | ||||||
|     (define attributes (bits->attributes (cdr element))) |     (define attributes (bits->attributes (cdr element))) | ||||||
|     (define contents (filter element-is-content? (cdr element))) ; provide elements and strings |     (define contents (filter element-is-content? (cdr element))) ; provide elements and strings | ||||||
|     (if (or (equal? element-type '*DECL) |     (cond | ||||||
|             (equal? element-type '@) |       [(equal? element-type '*DECL*) | ||||||
|             (equal? element-type '&)) |        ; declarations like <!DOCTYPE html> get mapped as attributes as if the element were (*DECL* (@ (DOCTYPE) (html))) | ||||||
|         ; special element, do nothing |        (match (transformer element element-type (map list (cdr element)) null) | ||||||
|         element |          [(list element-type attributes contents) | ||||||
|         ; regular element, transform it |           `(*DECL* ,@(map car attributes))] | ||||||
|         (match (transformer element element-type attributes contents) |          [#f ""])] | ||||||
|           [(list element-type attributes contents) |       [(member element-type '(@ &)) | ||||||
|            (append (list element-type) |        ; special element, do nothing | ||||||
|                    (if (pair? attributes) (list (append '(@) attributes)) (list)) |        element] | ||||||
|                    (map (λ (content) |       [#t | ||||||
|                           (if (element-is-element? content) (loop content) content)) |        ; regular element, transform it | ||||||
|                         contents))])))) |        (match (transformer element element-type attributes contents) | ||||||
|  |          [(list element-type attributes contents) | ||||||
|  |           (append (list element-type) | ||||||
|  |                   (if (pair? attributes) (list (append '(@) attributes)) (list)) | ||||||
|  |                   (map (λ (content) | ||||||
|  |                          (if (element-is-element? content) (loop content) content)) | ||||||
|  |                        contents))])]))) | ||||||
| (module+ test | (module+ test | ||||||
|  |   ; check doctype is preserved when present | ||||||
|  |   (check-equal? (update-tree (λ (e t a c) (list t a c)) '(*TOP* (*DECL* DOCTYPE html) (html (body "Hey")))) | ||||||
|  |                 '(*TOP* (*DECL* DOCTYPE html) (html (body "Hey")))) | ||||||
|  |   ; check doctype can be removed if desirable | ||||||
|  |   (check-equal? (update-tree (λ (e t a c) (if (eq? t '*DECL*) #f (list t a c))) '(*TOP* (*DECL* DOCTYPE html) (html (body "Hey")))) | ||||||
|  |                 '(*TOP* "" (html (body "Hey")))) | ||||||
|   ; check (& x) sequences are preserved |   ; check (& x) sequences are preserved | ||||||
|   (check-equal? (update-tree (λ (e t a c) (list t a c)) '(body "Hey" (& nbsp) (a (@ (href "/"))))) |   (check-equal? (update-tree (λ (e t a c) (list t a c)) '(body "Hey" (& nbsp) (a (@ (href "/"))))) | ||||||
|                 '(body "Hey" (& nbsp) (a (@ (href "/")))))) |                 '(body "Hey" (& nbsp) (a (@ (href "/")))))) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue