#= 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">'