123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- <!--
- * Copyright (c) 2019 GraphQL Contributors
- * All rights reserved.
- *
- * This source code is licensed under the license found in the
- * LICENSE file in the root directory of this source tree.
- -->
- <!DOCTYPE html>
- <html>
- <head>
- <style>
- body {
- height: 100%;
- margin: 0;
- width: 100%;
- overflow: hidden;
- }
- #graphiql {
- height: 100vh;
- }
- </style>
- <!--
- This GraphiQL example depends on Promise and fetch, which are available in
- modern browsers, but can be "polyfilled" for older browsers.
- GraphiQL itself depends on React DOM.
- If you do not want to rely on a CDN, you can host these files locally or
- include them directly in your favored resource bunder.
- -->
- <script src="es6-promise.auto.min.js"></script>
- <script src="fetch.min.js"></script>
- <script src="react.min.js"></script>
- <script src="react-dom.min.js"></script>
- <script src="subscription-transport-ws-client.js"></script>
- <script src="graphql-subscriptions-fetcher-client.js"></script>
- <!--
- These two files can be found in the npm module, however you may wish to
- copy them directly into your environment, or perhaps include them in your
- favored resource bundler.
- -->
- <link rel="stylesheet" href="graphiql.css" />
- <script src="graphiql.js" charset="utf-8"></script>
- </head>
- <body>
- <div id="graphiql">Loading...</div>
- <script>
- /**
- * This GraphiQL example illustrates how to use some of GraphiQL's props
- * in order to enable reading and updating the URL parameters, making
- * link sharing of queries a little bit easier.
- *
- * This is only one example of this kind of feature, GraphiQL exposes
- * various React params to enable interesting integrations.
- */
- // Parse the search string to get url parameters.
- var search = window.location.search;
- var parameters = {};
- search.substr(1).split('&').forEach(function (entry) {
- var eq = entry.indexOf('=');
- if (eq >= 0) {
- parameters[decodeURIComponent(entry.slice(0, eq))] =
- decodeURIComponent(entry.slice(eq + 1));
- }
- });
- // if variables was provided, try to format it.
- if (parameters.variables) {
- try {
- parameters.variables =
- JSON.stringify(JSON.parse(parameters.variables), null, 2);
- } catch (e) {
- // Do nothing, we want to display the invalid JSON as a string, rather
- // than present an error.
- }
- }
- // When the query and variables string is edited, update the URL bar so
- // that it can be easily shared
- function onEditQuery(newQuery) {
- parameters.query = newQuery;
- updateURL();
- }
- function onEditVariables(newVariables) {
- parameters.variables = newVariables;
- updateURL();
- }
- function onEditOperationName(newOperationName) {
- parameters.operationName = newOperationName;
- updateURL();
- }
- function updateURL() {
- var newSearch = '?' + Object.keys(parameters).filter(function (key) {
- return Boolean(parameters[key]);
- }).map(function (key) {
- return encodeURIComponent(key) + '=' +
- encodeURIComponent(parameters[key]);
- }).join('&');
- history.replaceState(null, null, newSearch);
- }
- // Defines a GraphQL fetcher using the fetch API. You're not required to
- // use fetch, and could instead implement graphQLFetcher however you like,
- // as long as it returns a Promise or Observable.
- function graphQLFetcher(graphQLParams) {
- // When working locally, the example expects a GraphQL server at the path /graphql.
- // In a PR preview, it connects to the Star Wars API externally.
- // Change this to point wherever you host your GraphQL server.
- const isDev = !window.location.hostname.match(/(^|\.)netlify\.com$|(^|\.)graphql\.org$/)
- const api = isDev ? '/db/v1/graphql/main' : 'https://swapi.graph.cool/'
- return fetch(api, {
- method: 'post',
- headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify(graphQLParams),
- credentials: 'include',
- }).then(function (response) {
- return response.text();
- }).then(function (responseBody) {
- try {
- return JSON.parse(responseBody);
- } catch (error) {
- return responseBody;
- }
- });
- }
- var subscriptionsURL = 'wss://' + location.hostname + ':' + location.port + '/db/v1/graphql-subscriptions/main';
- var subscriptionsClient = new window.SubscriptionsTransportWs.SubscriptionClient(subscriptionsURL, {
- reconnect: true
- });
- var fetcher = window.GraphiQLSubscriptionsFetcher.graphQLFetcher(subscriptionsClient, graphQLFetcher);
- // Render <GraphiQL /> into the body.
- // See the README in the top level of this module to learn more about
- // how you can customize GraphiQL by providing different values or
- // additional child elements.
- ReactDOM.render(
- React.createElement(GraphiQL, {
- fetcher: fetcher,
- query: parameters.query,
- variables: parameters.variables,
- operationName: parameters.operationName,
- onEditQuery: onEditQuery,
- onEditVariables: onEditVariables,
- onEditOperationName: onEditOperationName
- }),
- document.getElementById('graphiql')
- );
- </script>
- </body>
- </html>
|