All Downloads are FREE. Search and download functionalities are using the official Maven repository.

static.help.js Maven / Gradle / Ivy

function showHelp() {
	const httpRequest = new XMLHttpRequest()
	if (httpRequest != null) {
		httpRequest.onreadystatechange = () => createAndShowHelp(httpRequest)
		httpRequest.open('GET', document.head.baseURI + 'metadata')
		httpRequest.setRequestHeader('Accept', 'application/fhir+json')
		httpRequest.send()
	} else {
		createAndShowHelp(null)
	}
}

function closeHelp() {
	const help = document.getElementById('help')
	help.style.display = 'none'
}

function createAndShowHelp(httpRequest) {
	if (httpRequest != null && httpRequest.readyState === XMLHttpRequest.DONE) {
		if (httpRequest.status === 200) {
			const metadata = JSON.parse(httpRequest.responseText)
			const resourceType = getResourceTypeForCurrentUrl()

			/* /, /metadata, /_history */
			if (resourceType == null) {
				const searchParam = metadata.rest[0].resource[0].searchParam
				if (window.location.pathname.endsWith('/metadata')) {
					createHelp(searchParam.filter(p => ['_format', '_pretty', '_summary'].includes(p.name)))
				} else if (window.location.pathname.endsWith('/_history')) {
					createHelp(searchParam.filter(p => ['_count', '_format', '_page', '_pretty', '_summary', '_at', '_since'].includes(p.name)))
				} else {
					createHelp(searchParam.filter(p => ['_format', '_pretty', '_summary'].includes(p.name)))
				}
			}
			else {
				const searchParam = metadata.rest[0].resource.filter(r => r.type === resourceType[1])[0].searchParam
				//Resource
				if (resourceType[1] !== undefined && resourceType[2] === undefined && resourceType[3] === undefined && resourceType[4] === undefined) {
					createHelp(searchParam.filter(p => !['_at', '_since'].includes(p.name)))
				}
				//Resource/_history
				else if (resourceType[1] !== undefined && resourceType[2] === undefined && resourceType[3] !== undefined && resourceType[4] === undefined) {
					createHelp(searchParam.filter(p => ['_count', '_format', '_page', '_pretty', '_summary', '_at', '_since'].includes(p.name)))
				}
				//Resource/id
				else if (resourceType[1] !== undefined && resourceType[2] !== undefined && resourceType[3] === undefined && resourceType[4] === undefined) {
					createHelp(searchParam.filter(p => ['_format', '_pretty', '_summary'].includes(p.name)))
				}
				//Resource/id/_history
				else if (resourceType[1] !== undefined && resourceType[2] !== undefined && resourceType[3] !== undefined && resourceType[4] === undefined) {
					createHelp(searchParam.filter(p => ['_count', '_format', '_page', '_pretty', '_summary', '_at', '_since'].includes(p.name)))
				}
				//Resource/id/_history/version
				else if (resourceType[1] !== undefined && resourceType[2] !== undefined && resourceType[3] !== undefined && resourceType[4] !== undefined) {
					createHelp(searchParam.filter(p => ['_format', '_pretty', '_summary'].includes(p.name)))
				}
			}
		}
	}

	const help = document.getElementById('help')
	help.style.display = 'block'

	const click = e => {
		if (!help.contains(e.target) && !document.getElementById('help-icon').contains(e.target)) {
			closeHelp()
			document.removeEventListener('click', click)
		}
	}
	document.addEventListener('click', click)
}

function createHelp(searchParam) {
	const helpList = document.getElementById('help-list')
	helpList.innerHTML = null

	for (let i = 0; i < searchParam.length; i++) {
		const param = searchParam[i]
		const div = document.createElement("div")
		const span1 = document.createElement("span")
		const span2 = document.createElement("span")
		const p = document.createElement("p")

		div.appendChild(span1)
		div.appendChild(span2)
		div.appendChild(p)
		helpList.appendChild(div)

		div.setAttribute('class', 'help-param')
		span1.innerText = param.name
		span1.setAttribute('class', 'help-param-name')
		span2.innerText = param.type
		span2.setAttribute('class', 'help-param-type')
		p.innerText = param.documentation
		p.setAttribute('class', 'help-param-documentation')
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy