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