<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- Primary Meta Tags --> <title>GraphQL UI — Convert your queries into forms</title> <meta name="title" content="GraphQL — Convert your queries into forms"> <meta name="description" content="With GraphQL UI you can evade all the hassle of typing out your query manually while testing the API. Just put in your GraphQL API URL, and generate user-friendly forms on the fly."> <!-- Open Graph / Facebook --> <meta property="og:type" content="website"> <meta property="og:title" content="GraphQL UI — Convert your queries into forms"> <meta property="og:description" content="With GraphQL UI you can evade all the hassle of typing out your query manually while testing the API. Just put in your GraphQL API URL, and generate user-friendly forms on the fly."> <meta property="og:image" content="https://i.ibb.co/TgWz2c7/Screenshot-2020-05-23-at-9-56-37-PM-1.jpg"> <!-- Twitter --> <meta property="twitter:card" content="summary_large_image"> <meta property="twitter:title" content="GraphQL UI — Convert your queries into forms"> <meta property="twitter:description" content="With GraphQL UI you can evade all the hassle of typing out your query manually while testing the API. Just put in your GraphQL API URL, and generate user-friendly forms on the fly."> <meta property="twitter:image" content="https://i.ibb.co/TgWz2c7/Screenshot-2020-05-23-at-9-56-37-PM-1.jpg"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script> <script src="//cdn.jsdelivr.net/npm/graphql.js@0.6.6/graphql.min.js"></script> <script src="https://unpkg.com/prettier@2.0.5/standalone.js"></script> <script src="https://unpkg.com/prettier@2.0.5/parser-graphql.js"></script> <script>{{ index.js }}</script> <script>{{ renderHelpers.js }}</script> </head> <body> <form action="#" name="config"> <input id="endpoint" type="text" name="endpoint" id="" placeholder="Endpoint" value="http://dev5-2.stg.synup.com/graphql"> <select name="token_type" id=""> <option value="Bearer">Bearer</option> <option value="Internal">Internal</option> <option value="API">API</option> </select> <input id="token" type="text" name="token" id="" placeholder="Token" value="eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1c2VyX2lkIjoxNTcsImFjY291bnRfaWQiOjEyOCwicm9sZV9pZCI6MTgzODIsIm5hbWUiOiJMZXp3b24iLCJ1c2VyX3R5cGUiOiJBZ2VuY3kiLCJqdGkiOiJhYmMxNDJmZS02YTdhLTQwZjQtYmE4ZC02YTFhMDE2Nzc0NWMiLCJyb2xlX3R5cGUiOiJhZG1pbiIsInJvbGVfbmFtZSI6IkFkbWluIn0.gospr_-MP9topw-yKIF7niauJcerUhoxxDIxF8SJhUI2J-Cr7YrTQHmECxOB9hQU4s7lXsfzS7iNAa84JbR2lDi33A7yzYpQK1D8GBJgJSs8twsy41t-YVSxqmlJxhOMEobRTZqPJI1lFcf6UHcQppwNtK3_2B_srf70bwFlFgoimQxny1GRMXgtfJLfyrBBU6iFJBAIgOl8KVqfX0qBjs1l3LK9-7pVc7ZsUUq62fkAj8cYkf9t4LZla_wRBhUTQmMy_uGSTT0neqhqISG177EXHk-HzWtXVCrZBGKvFwO3rbtZRbueJopzGUI5K10iPwSQvFR64hzXuJz3WH1lGQ"> <input id="submit_button" type="submit" value="Submit" name="submit_button"> </form> </body> <script> document.forms.config.addEventListener('submit', (e) => { e.preventDefault() let submit_button = e.target.submit_button let endpoint = e.target.endpoint.value let tokenType = e.target.token_type.value let token = e.target.token.value submit_button.setAttribute('disabled', true) getClient(endpoint,`${tokenType} ${token}`) .then((client) => { submit_button.removeAttribute('disabled') let container = document.getElementById('container') if(container != null){ container.remove() } container = document.createElement('div') container.id = 'container' document.body.appendChild(container) let queryList = client.getFullList().sort() let querySelectElement = document.createElement('select') queryList.forEach((query) => { let option = document.createElement('option') option.setAttribute('value', query) option.innerText = query querySelectElement.appendChild(option) }) container.appendChild(querySelectElement) querySelectElement.addEventListener('change', function(e){ query = e.target.value let subContainer = document.getElementById('subContainer') if(subContainer != null){ subContainer.remove() } subContainer = document.createElement('div') subContainer.id = 'subContainer' container.appendChild(subContainer) let payload = client.resolveQueryInput(query) let output = parseObject(payload) htmlRender = renderItems(output) subContainer.appendChild(htmlRender) button = document.createElement('button') button.setAttribute('value', 'Submit') button.innerText = 'Submit' subContainer.appendChild(button) panelHeadings = document.getElementsByClassName('panel') let addPanelBody = function(e){ if (e.target.nodeName != "A"){ e.preventDefault() return } let typeName = e.target.innerText let payload = client.resolveType(typeName) let output = parseObject(payload) let htmlRender = renderItems(output) e.target.parentElement.parentElement.nextElementSibling.firstChild.appendChild(htmlRender) } for (let item of panelHeadings) { item.addEventListener('click', addPanelBody) } button.addEventListener('click', function(e){ let variables = parseInput(output) let outputPayload = client.getOutputQuery(query) let preTags = document.getElementsByTagName("pre") if(preTags.length > 0){ for (let i=preTags.length; i!= 0;) { preTags[--i].remove() } } let queryPreTag = document.createElement('pre') subContainer.appendChild(queryPreTag) queryPreTag.innerHTML = outputPayload.replace(/\n/g, "<br />") let variablesPreTag = document.createElement('pre') subContainer.appendChild(variablesPreTag) variablesPreTag.innerHTML = JSON.stringify(variables, undefined, 4).replace(/\n/g, "<br />") body = { 'query': outputPayload, 'variables': variables } client.execute(body).then(async (response) => { response = await response.json(); let responseTag = document.createElement('pre') responseTag.id = "response" subContainer.appendChild(responseTag) responseTag.innerHTML = JSON.stringify(response, undefined, 4) }).catch(e=> console.log(e)) }) }) }) }) </script> </html>