...

Source file src/github.com/99designs/gqlgen/graphql/playground/altair_playground.go

Documentation: github.com/99designs/gqlgen/graphql/playground

     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  }
    85  

View as plain text