Level editor play classroom options

This commit is contained in:
Matt Lott 2016-07-23 21:03:16 -07:00
parent 7b76180902
commit 9962ff83d4
3 changed files with 29 additions and 2 deletions

View file

@ -89,7 +89,7 @@ module.exports = class User extends CocoModel
isSessionless: -> isSessionless: ->
# TODO: Fix old users who got mis-tagged as teachers # TODO: Fix old users who got mis-tagged as teachers
# TODO: Should this just be isTeacher, eventually? # TODO: Should this just be isTeacher, eventually?
Boolean(me.isTeacher() and utils.getQueryVariable('course', false)) Boolean((utils.getQueryVariable('dev', false) or me.isTeacher()) and utils.getQueryVariable('course', false))
setRole: (role, force=false) -> setRole: (role, force=false) ->
return if me.isAdmin() return if me.isAdmin()

View file

@ -102,6 +102,11 @@ block header
a(data-toggle="coco-modal", data-target="editor/level/modals/GenerateTerrainModal", data-i18n="editor.generate_terrain", disabled=anonymous).generate-terrain-button Generate Terrain a(data-toggle="coco-modal", data-target="editor/level/modals/GenerateTerrainModal", data-i18n="editor.generate_terrain", disabled=anonymous).generate-terrain-button Generate Terrain
li(class=anonymous ? "disabled": "") li(class=anonymous ? "disabled": "")
a(data-i18n="editor.pop_i18n")#pop-level-i18n-button Populate i18n a(data-i18n="editor.pop_i18n")#pop-level-i18n-button Populate i18n
if view.courseID
li(class=anonymous ? "disabled": "")
a.play-classroom-level(data-classroom=true, data-code-language="javascript") Play Classroom JavaScript
li(class=anonymous ? "disabled": "")
a.play-classroom-level(data-classroom=true, data-code-language="python") Play Classroom Python
li.divider li.divider
li.dropdown-header(data-i18n="common.info") Info li.dropdown-header(data-i18n="common.info") Info
li#level-history-button li#level-history-button

View file

@ -6,6 +6,10 @@ World = require 'lib/world/world'
DocumentFiles = require 'collections/DocumentFiles' DocumentFiles = require 'collections/DocumentFiles'
LevelLoader = require 'lib/LevelLoader' LevelLoader = require 'lib/LevelLoader'
Campaigns = require 'collections/Campaigns'
CocoCollection = require 'collections/CocoCollection'
Course = require 'models/Course'
# in the template, but need to require them to load them # in the template, but need to require them to load them
require 'views/modal/RevertModal' require 'views/modal/RevertModal'
require 'views/editor/level/modals/GenerateTerrainModal' require 'views/editor/level/modals/GenerateTerrainModal'
@ -49,6 +53,7 @@ module.exports = class LevelEditView extends RootView
'click #play-button': 'onPlayLevel' 'click #play-button': 'onPlayLevel'
'click .play-with-team-button': 'onPlayLevel' 'click .play-with-team-button': 'onPlayLevel'
'click .play-with-team-parent': 'onPlayLevelTeamSelect' 'click .play-with-team-parent': 'onPlayLevelTeamSelect'
'click .play-classroom-level': 'onPlayLevel'
'click #commit-level-start-button': 'startCommittingLevel' 'click #commit-level-start-button': 'startCommittingLevel'
'click li:not(.disabled) > #fork-start-button': 'startForking' 'click li:not(.disabled) > #fork-start-button': 'startForking'
'click #level-history-button': 'showVersionHistory' 'click #level-history-button': 'showVersionHistory'
@ -73,6 +78,10 @@ module.exports = class LevelEditView extends RootView
@level = @levelLoader.level @level = @levelLoader.level
@files = new DocumentFiles(@levelLoader.level) @files = new DocumentFiles(@levelLoader.level)
@supermodel.loadCollection(@files, 'file_names') @supermodel.loadCollection(@files, 'file_names')
@campaigns = new Campaigns()
@supermodel.trackRequest @campaigns.fetchByType('course', { data: { project: 'levels' } })
@courses = new CocoCollection([], { url: "/db/course", model: Course})
@supermodel.loadCollection(@courses, 'courses')
destroy: -> destroy: ->
clearInterval @timerIntervalID clearInterval @timerIntervalID
@ -89,6 +98,12 @@ module.exports = class LevelEditView extends RootView
@world = @levelLoader.world @world = @levelLoader.world
@render() @render()
@timerIntervalID = setInterval @incrementBuildTime, 1000 @timerIntervalID = setInterval @incrementBuildTime, 1000
campaignCourseMap = {}
campaignCourseMap[course.get('campaignID')] = course.id for course in @courses.models
for campaign in @campaigns.models
for levelID, level of campaign.get('levels') when levelID is @level.get('original')
@courseID = campaignCourseMap[campaign.id]
break if @courseID
getRenderData: (context={}) -> getRenderData: (context={}) ->
context = super(context) context = super(context)
@ -130,9 +145,11 @@ module.exports = class LevelEditView extends RootView
onPlayLevel: (e) -> onPlayLevel: (e) ->
team = $(e.target).data('team') team = $(e.target).data('team')
opponentSessionID = $(e.target).data('opponent') opponentSessionID = $(e.target).data('opponent')
newClassMode = $(e.target).data('classroom')
newClassLanguage = $(e.target).data('code-language')
sendLevel = => sendLevel = =>
@childWindow.Backbone.Mediator.publish 'level:reload-from-data', level: @level, supermodel: @supermodel @childWindow.Backbone.Mediator.publish 'level:reload-from-data', level: @level, supermodel: @supermodel
if @childWindow and not @childWindow.closed if @childWindow and not @childWindow.closed and @playClassMode is newClassMode and @playClassLanguage is newClassLanguage
# Reset the LevelView's world, but leave the rest of the state alone # Reset the LevelView's world, but leave the rest of the state alone
sendLevel() sendLevel()
else else
@ -140,6 +157,11 @@ module.exports = class LevelEditView extends RootView
scratchLevelID = @level.get('slug') + '?dev=true' scratchLevelID = @level.get('slug') + '?dev=true'
scratchLevelID += "&team=#{team}" if team scratchLevelID += "&team=#{team}" if team
scratchLevelID += "&opponent=#{opponentSessionID}" if opponentSessionID scratchLevelID += "&opponent=#{opponentSessionID}" if opponentSessionID
@playClassMode = newClassMode
@playClassLanguage = newClassLanguage
if @playClassMode
scratchLevelID += "&course=#{@courseID}"
scratchLevelID += "&codeLanguage=#{@playClassLanguage}"
if me.get('name') is 'Nick' if me.get('name') is 'Nick'
@childWindow = window.open("/play/level/#{scratchLevelID}", 'child_window', 'width=2560,height=1080,left=0,top=-1600,location=1,menubar=1,scrollbars=1,status=0,titlebar=1,toolbar=1', true) @childWindow = window.open("/play/level/#{scratchLevelID}", 'child_window', 'width=2560,height=1080,left=0,top=-1600,location=1,menubar=1,scrollbars=1,status=0,titlebar=1,toolbar=1', true)
else else