RootView = require 'views/core/RootView' Level = require 'models/Level' LevelSession = require 'models/LevelSession' WebSurfaceView = require './WebSurfaceView' module.exports = class PlayWebDevLevelView extends RootView id: 'play-web-dev-level-view' template: require 'templates/play/level/play-web-dev-level-view' initialize: (@options, @levelID, @sessionID) -> @courseID = @getQueryVariable 'course' @level = @supermodel.loadModel(new Level _id: @levelID).model @session = @supermodel.loadModel(new LevelSession _id: @sessionID).model onLoaded: -> super() @insertSubView @webSurface = new WebSurfaceView {level: @level} Backbone.Mediator.publish 'tome:html-updated', html: @getHTML() ? '

Player has no HTML

', create: true @$el.find('#info-bar').delay(4000).fadeOut(2000) $('body').css('overflow', 'hidden') # Don't show tiny scroll bar from our minimal additions to the iframe showError: (jqxhr) -> $('h1').text jqxhr.statusText getHTML: -> playerHTML = @session.get('code')?['hero-placeholder']?.plan return playerHTML unless hero = _.find @level.get('thangs'), id: 'Hero Placeholder' return playerHTML unless programmableConfig = _.find(hero.components, (component) -> component.config?.programmableMethods).config return programmableConfig.programmableMethods.plan.languages.html.replace /[\s\S]*<\/playercode>/, playerHTML destroy: -> @webSurface?.destroy() $('body').css('overflow', 'initial') # Recover from our modifications to body overflow before we leave super()