github.com/99designs/gqlgen@v0.17.45/graphql/playground/altair_playground.go (about) 1 package playground 2 3 import ( 4 "html/template" 5 "net/http" 6 ) 7 8 var altairPage = template.Must(template.New("altair").Parse(`<!doctype html> 9 <html> 10 11 <head> 12 <meta charset="utf-8"> 13 <title>{{.title}}</title> 14 <base href="https://cdn.jsdelivr.net/npm/altair-static@{{.version}}/build/dist/"> 15 <meta name="viewport" content="width=device-width,initial-scale=1"> 16 <link rel="icon" type="image/x-icon" href="favicon.ico"> 17 <link href="styles.css" rel="stylesheet" crossorigin="anonymous" integrity="{{.cssSRI}}"/> 18 </head> 19 20 <body> 21 <app-root> 22 <style> 23 .loading-screen { 24 display: none; 25 } 26 </style> 27 <div class="loading-screen styled"> 28 <div class="loading-screen-inner"> 29 <div class="loading-screen-logo-container"> 30 <img src="assets/img/logo_350.svg" alt="Altair"> 31 </div> 32 <div class="loading-screen-loading-indicator"> 33 <span class="loading-indicator-dot"></span> 34 <span class="loading-indicator-dot"></span> 35 <span class="loading-indicator-dot"></span> 36 </div> 37 </div> 38 </div> 39 </app-root> 40 41 <script rel="preload" as="script" type="text/javascript" crossorigin="anonymous" integrity="{{.mainSRI}}" src="main.js"></script> 42 <script rel="preload" as="script" type="text/javascript" crossorigin="anonymous" integrity="{{.polyfillsSRI}}" src="polyfills.js"></script> 43 <script rel="preload" as="script" type="text/javascript" crossorigin="anonymous" integrity="{{.runtimeSRI}}" src="runtime.js"></script> 44 45 <script> 46 {{- if .endpointIsAbsolute}} 47 const url = {{.endpoint}}; 48 const subscriptionUrl = {{.subscriptionEndpoint}}; 49 {{- else}} 50 const url = location.protocol + '//' + location.host + {{.endpoint}}; 51 const wsProto = location.protocol == 'https:' ? 'wss:' : 'ws:'; 52 const subscriptionUrl = wsProto + '//' + location.host + {{.endpoint}}; 53 {{- end}} 54 var altairOptions = { 55 endpointURL: url, 56 subscriptionsEndpoint: subscriptionUrl, 57 }; 58 window.addEventListener("load", function() { 59 AltairGraphQL.init(altairOptions); 60 }); 61 </script> 62 </body> 63 64 </html>`)) 65 66 // AltairHandler responsible for setting up the altair playground 67 func AltairHandler(title, endpoint string) http.HandlerFunc { 68 return func(w http.ResponseWriter, r *http.Request) { 69 err := altairPage.Execute(w, map[string]interface{}{ 70 "title": title, 71 "endpoint": endpoint, 72 "endpointIsAbsolute": endpointHasScheme(endpoint), 73 "subscriptionEndpoint": getSubscriptionEndpoint(endpoint), 74 "version": "5.0.5", 75 "cssSRI": "sha256-kZ35e5mdMYN5ALEbnsrA2CLn85Oe4hBodfsih9BqNxs=", 76 "mainSRI": "sha256-nWdVTcGTlBDV1L04UQnqod+AJedzBCnKHv6Ct65liHE=", 77 "polyfillsSRI": "sha256-1aVEg2sROcCQ/RxU3AlcPaRZhZdIWA92q2M+mdd/R4c=", 78 "runtimeSRI": "sha256-cK2XhXqQr0WS1Z5eKNdac0rJxTD6miC3ubd+aEVMQDk=", 79 }) 80 if err != nil { 81 panic(err) 82 } 83 } 84 }