Skip to content

Instantly share code, notes, and snippets.

@RickyCook
Last active August 8, 2017 08:03
Show Gist options
  • Save RickyCook/b584f211181db4e0a45502d32c936c23 to your computer and use it in GitHub Desktop.
Save RickyCook/b584f211181db4e0a45502d32c936c23 to your computer and use it in GitHub Desktop.
var smartFormsStaticPrefix = '/_smart_forms/static',
smartFormsApiPrefix = '/_smart_forms/api'
function smartFormsInit() {
var req = new XMLHttpRequest()
function transformElementUrls(el) {
var href = el.getAttribute('href'),
src = el.getAttribute('src')
if (href !== null) el.setAttribute('href', smartFormsStaticPrefix + '/' + href)
if (src !== null) el.setAttribute('src', smartFormsStaticPrefix + '/' + src)
}
req.onreadystatechange = function() {
var i, dom, container, containerFirst, newEl, stylesheets, scripts, overlays, others
if (req.readyState !== XMLHttpRequest.DONE) return
if (req.status !== 200) alert('An error occurred')
dom = new DOMParser().parseFromString(req.responseText, 'text/html')
stylesheets = dom.querySelectorAll('link[rel="stylesheet"]')
scripts = dom.querySelectorAll('script')
overlays = dom.querySelectorAll('body > .overlay')
others = dom.querySelectorAll('body > *')
container = document.getElementsByTagName('head')[0]
for (i = 0; i < stylesheets.length; i++) {
transformElementUrls(stylesheets[i])
container.appendChild(stylesheets[i])
}
for (i = 0; i < scripts.length; i++) {
transformElementUrls(scripts[i])
newEl = document.createElement('script')
newEl.setAttribute('src', scripts[i].getAttribute('src'))
newEl.innerText = scripts[i].innerText
container.appendChild(newEl)
}
container = document.getElementsByTagName('body')[0]
containerFirst = container.firstChild
for (i = 0; i < overlays.length; i++) {
transformElementUrls(overlays[i])
containerFirst.parentElement.insertBefore(overlays[i], containerFirst)
}
container = document.getElementById('smart-forms-content-marker')
for (i = 0; i < others.length; i++) {
if (others[i].classList.contains('overlay')) continue
if (others[i].tagName.toUpperCase() === 'SCRIPT') continue
transformElementUrls(others[i])
container.parentElement.insertBefore(others[i], container)
}
}
req.open('GET', smartFormsStaticPrefix + '/index.html', true)
req.send()
}
smartFormsInit()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment