Pass siteinfo through code; show sitename in title
This commit is contained in:
		
							parent
							
								
									9aba3ad432
								
							
						
					
					
						commit
						59332fd9d1
					
				
					 5 changed files with 30 additions and 24 deletions
				
			
		| 
						 | 
				
			
			@ -48,8 +48,8 @@
 | 
			
		|||
                ,(if source-url
 | 
			
		||||
                     `(div (p "This page displays proxied content from "
 | 
			
		||||
                              (a (@ (href ,source-url) (rel "noreferrer")) ,source-url)
 | 
			
		||||
                              ,(format ". Text content is available under the ~a license, " (license-text license))
 | 
			
		||||
                              (a (@ (href ,(license-url license))) "see license info.")
 | 
			
		||||
                              ,(format ". Text content is available under the ~a license, " (license^-text license))
 | 
			
		||||
                              (a (@ (href ,(license^-url license))) "see license info.")
 | 
			
		||||
                              " Media files may have different copying restrictions.")
 | 
			
		||||
                           (p ,(format "Fandom is a trademark of Fandom, Inc. ~a is not affiliated with Fandom." (config-get 'application_name))))
 | 
			
		||||
                     `(div (p "Text content on wikis run by Fandom is available under the Creative Commons Attribution-Share Alike License 3.0 (Unported), "
 | 
			
		||||
| 
						 | 
				
			
			@ -63,7 +63,8 @@
 | 
			
		|||
         #:wikiname wikiname
 | 
			
		||||
         #:title title
 | 
			
		||||
         #:body-class [body-class-in #f]
 | 
			
		||||
         #:license [license #f])
 | 
			
		||||
         #:siteinfo [siteinfo-in #f])
 | 
			
		||||
  (define siteinfo (or siteinfo-in siteinfo-default))
 | 
			
		||||
  (define body-class (if (not body-class-in)
 | 
			
		||||
                         "skin-fandomdesktop"
 | 
			
		||||
                         body-class-in))
 | 
			
		||||
| 
						 | 
				
			
			@ -82,7 +83,10 @@
 | 
			
		|||
  `(html
 | 
			
		||||
    (head
 | 
			
		||||
     (meta (@ (name "viewport") (content "width=device-width, initial-scale=1")))
 | 
			
		||||
     (title ,(format "~a | ~a" title (config-get 'application_name)))
 | 
			
		||||
     (title ,(format "~a | ~a+~a"
 | 
			
		||||
                     title
 | 
			
		||||
                     (regexp-replace #rx" ?Wiki$" (siteinfo^-sitename siteinfo) "")
 | 
			
		||||
                     (config-get 'application_name)))
 | 
			
		||||
     ,@(map (λ (url)
 | 
			
		||||
              `(link (@ (rel "stylesheet") (type "text/css") (href ,url))))
 | 
			
		||||
            (required-styles (format "https://~a.fandom.com" wikiname)))
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +105,7 @@
 | 
			
		|||
                          (div (@ (id "content") #;(class "page-content"))
 | 
			
		||||
                               (div (@ (id "mw-content-text"))
 | 
			
		||||
                                    ,content))
 | 
			
		||||
                          ,(application-footer source-url #:license license)))))))
 | 
			
		||||
                          ,(application-footer source-url #:license (siteinfo^-license siteinfo))))))))
 | 
			
		||||
(module+ test
 | 
			
		||||
  (define page
 | 
			
		||||
    (parameterize ([(config-parameter 'strict_proxy) "true"])
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										20
									
								
								src/data.rkt
									
										
									
									
									
								
							
							
						
						
									
										20
									
								
								src/data.rkt
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -6,15 +6,17 @@
 | 
			
		|||
         "xexpr-utils.rkt")
 | 
			
		||||
 | 
			
		||||
(provide
 | 
			
		||||
 (struct-out siteinfo)
 | 
			
		||||
 (struct-out license)
 | 
			
		||||
 (struct-out siteinfo^)
 | 
			
		||||
 (struct-out license^)
 | 
			
		||||
 siteinfo-fetch
 | 
			
		||||
 siteinfo-default
 | 
			
		||||
 license-default)
 | 
			
		||||
 | 
			
		||||
(struct siteinfo (sitename basepage license) #:transparent)
 | 
			
		||||
(struct license (text url) #:transparent)
 | 
			
		||||
(struct siteinfo^ (sitename basepage license) #:transparent)
 | 
			
		||||
(struct license^ (text url) #:transparent)
 | 
			
		||||
 | 
			
		||||
(define license-default (license "CC-BY-SA" "https://www.fandom.com/licensing"))
 | 
			
		||||
(define license-default (license^ "CC-BY-SA" "https://www.fandom.com/licensing"))
 | 
			
		||||
(define siteinfo-default (siteinfo^ "Test Wiki" "Main_Page" license-default))
 | 
			
		||||
 | 
			
		||||
(define/memoize (siteinfo-fetch wikiname) #:hash hash
 | 
			
		||||
  (define dest-url
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +30,7 @@
 | 
			
		|||
  (log-outgoing dest-url)
 | 
			
		||||
  (define res (easy:get dest-url))
 | 
			
		||||
  (define data (easy:response-json res))
 | 
			
		||||
  (siteinfo (jp "/query/general/sitename" data)
 | 
			
		||||
            (second (regexp-match #rx"/wiki/(.*)" (jp "/query/general/base" data)))
 | 
			
		||||
            (license (jp "/query/rightsinfo/text" data)
 | 
			
		||||
                     (jp "/query/rightsinfo/url" data))))
 | 
			
		||||
  (siteinfo^ (jp "/query/general/sitename" data)
 | 
			
		||||
             (second (regexp-match #rx"/wiki/(.*)" (jp "/query/general/base" data)))
 | 
			
		||||
             (license^ (jp "/query/rightsinfo/text" data)
 | 
			
		||||
                       (jp "/query/rightsinfo/url" data))))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,14 +35,14 @@
 | 
			
		|||
         #:members-data members-data
 | 
			
		||||
         #:page page
 | 
			
		||||
         #:body-class [body-class #f]
 | 
			
		||||
         #:license [license #f])
 | 
			
		||||
         #:siteinfo [siteinfo #f])
 | 
			
		||||
  (define members (jp "/query/categorymembers" members-data))
 | 
			
		||||
  (generate-wiki-page
 | 
			
		||||
   #:source-url source-url
 | 
			
		||||
   #:wikiname wikiname
 | 
			
		||||
   #:title title
 | 
			
		||||
   #:body-class body-class
 | 
			
		||||
   #:license license
 | 
			
		||||
   #:siteinfo siteinfo
 | 
			
		||||
   `(div
 | 
			
		||||
     ,(update-tree-wiki page wikiname)
 | 
			
		||||
     (hr)
 | 
			
		||||
| 
						 | 
				
			
			@ -89,7 +89,7 @@
 | 
			
		|||
                (log-outgoing dest-url)
 | 
			
		||||
                (define dest-res (easy:get dest-url #:timeouts timeouts))
 | 
			
		||||
                (easy:response-json dest-res)]
 | 
			
		||||
     [license (siteinfo-license (siteinfo-fetch wikiname))])
 | 
			
		||||
     [siteinfo (siteinfo-fetch wikiname)])
 | 
			
		||||
 | 
			
		||||
    (define title (preprocess-html-wiki (jp "/parse/title" page-data prefixed-category)))
 | 
			
		||||
    (define page-html (preprocess-html-wiki (jp "/parse/text" page-data "")))
 | 
			
		||||
| 
						 | 
				
			
			@ -105,7 +105,7 @@
 | 
			
		|||
                  #:members-data members-data
 | 
			
		||||
                  #:page page
 | 
			
		||||
                  #:body-class body-class
 | 
			
		||||
                  #:license license))
 | 
			
		||||
                  #:siteinfo siteinfo))
 | 
			
		||||
 | 
			
		||||
    (when (config-true? 'debug)
 | 
			
		||||
      ; used for its side effects
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,13 +25,13 @@
 | 
			
		|||
  (define search-json-data
 | 
			
		||||
    '#hasheq((batchcomplete . #t) (query . #hasheq((search . (#hasheq((ns . 0) (pageid . 219) (size . 1482) (snippet . "") (timestamp . "2022-08-21T08:54:23Z") (title . "Gacha Capsule") (wordcount . 214)) #hasheq((ns . 0) (pageid . 201) (size . 1198) (snippet . "") (timestamp . "2022-07-11T17:52:47Z") (title . "Badges") (wordcount . 181)))))))))
 | 
			
		||||
 | 
			
		||||
(define (generate-results-page dest-url wikiname query data #:license [license #f])
 | 
			
		||||
(define (generate-results-page dest-url wikiname query data #:siteinfo [siteinfo #f])
 | 
			
		||||
  (define search-results (jp "/query/search" data))
 | 
			
		||||
  (generate-wiki-page
 | 
			
		||||
   #:source-url dest-url
 | 
			
		||||
   #:wikiname wikiname
 | 
			
		||||
   #:title "Search Results"
 | 
			
		||||
   #:license license
 | 
			
		||||
   #:siteinfo siteinfo
 | 
			
		||||
   `(div (@ (class "mw-parser-output"))
 | 
			
		||||
         (p ,(format "~a results found for " (length search-results))
 | 
			
		||||
            (strong ,query))
 | 
			
		||||
| 
						 | 
				
			
			@ -70,11 +70,11 @@
 | 
			
		|||
   (thread-let
 | 
			
		||||
    ([dest-res (log-outgoing dest-url)
 | 
			
		||||
               (easy:get dest-url #:timeouts timeouts)]
 | 
			
		||||
     [license (siteinfo-license (siteinfo-fetch wikiname))])
 | 
			
		||||
     [siteinfo (siteinfo-fetch wikiname)])
 | 
			
		||||
 | 
			
		||||
    (define data (easy:response-json dest-res))
 | 
			
		||||
 | 
			
		||||
    (define body (generate-results-page dest-url wikiname query data #:license license))
 | 
			
		||||
    (define body (generate-results-page dest-url wikiname query data #:siteinfo siteinfo))
 | 
			
		||||
    (when (config-true? 'debug)
 | 
			
		||||
      ; used for its side effects
 | 
			
		||||
      ; convert to string with error checking, error will be raised if xexp is invalid
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -248,7 +248,7 @@
 | 
			
		|||
                                         ("format" . "json")))))
 | 
			
		||||
              (log-outgoing dest-url)
 | 
			
		||||
              (easy:get dest-url #:timeouts timeouts)]
 | 
			
		||||
    [license (siteinfo-license (siteinfo-fetch wikiname))])
 | 
			
		||||
    [siteinfo (siteinfo-fetch wikiname)])
 | 
			
		||||
 | 
			
		||||
   (cond
 | 
			
		||||
     [(eq? 200 (easy:response-status-code dest-res))
 | 
			
		||||
| 
						 | 
				
			
			@ -271,7 +271,7 @@
 | 
			
		|||
                #:wikiname wikiname
 | 
			
		||||
                #:title title
 | 
			
		||||
                #:body-class body-class
 | 
			
		||||
                #:license license))
 | 
			
		||||
                #:siteinfo siteinfo))
 | 
			
		||||
             (define redirect-msg ((query-selector (attribute-selector 'class "redirectMsg") body)))
 | 
			
		||||
             (define headers (if redirect-msg
 | 
			
		||||
                                 (let* ([dest (get-attribute 'href (bits->attributes ((query-selector (λ (t a c) (eq? t 'a)) redirect-msg))))]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue