...
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
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 }
85
View as plain text