You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
devdocs/assets/javascripts/views/pages/jquery.coffee

58 lines
1.8 KiB

#= require views/pages/base
class app.views.JqueryPage extends app.views.BasePage
@demoClassName: '_jquery-demo'
afterRender: ->
# Prevent jQuery Mobile's demo iframes from scrolling the page
for iframe in @findAllByTag 'iframe'
iframe.style.display = 'none'
$.on iframe, 'load', @onIframeLoaded
@runExamples()
onIframeLoaded: (event) =>
event.target.style.display = ''
$.off event.target, 'load', @onIframeLoaded
return
runExamples: ->
for el in @findAllByClass 'entry-example'
try @runExample el catch
return
runExample: (el) ->
source = el.getElementsByClassName('syntaxhighlighter')[0]
return unless source and source.innerHTML.indexOf('!doctype') isnt -1
unless iframe = el.getElementsByClassName(@constructor.demoClassName)[0]
iframe = document.createElement 'iframe'
iframe.className = @constructor.demoClassName
iframe.width = '100%'
iframe.height = 200
el.appendChild(iframe)
doc = iframe.contentDocument
doc.write @fixIframeSource(source.textContent)
doc.close()
return
fixIframeSource: (source) ->
source = source.replace '"/resources/', '"https://api.jquery.com/resources/' # attr(), keydown()
source = source.replace '</head>', """
<style>
html, body { border: 0; margin: 0; padding: 0; }
body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; }
</style>
<script>
$.ajaxPrefilter(function(opt, opt2, xhr) {
if (opt.url.indexOf('http') !== 0) {
xhr.abort();
document.body.innerHTML = "<p><strong>This demo cannot run inside DevDocs.</strong></p>";
}
});
</script>
</head>
"""
source.replace /<script>/gi, '<script nonce="devdocs">'