mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-29 18:45:48 -05:00
Merge branch 'master' into production
This commit is contained in:
commit
0d4a384787
25 changed files with 62 additions and 61 deletions
|
@ -59,6 +59,9 @@ module.exports = ModuleLoader = class ModuleLoader extends CocoClass
|
||||||
|
|
||||||
onFileLoad: (e) =>
|
onFileLoad: (e) =>
|
||||||
$("#module-loading-list li[data-path='#{e.item.id}']").removeClass('loading').addClass('success')
|
$("#module-loading-list li[data-path='#{e.item.id}']").removeClass('loading').addClass('success')
|
||||||
|
|
||||||
|
# load dependencies if it's not a vendor library
|
||||||
|
if not _.string.startsWith(e.item.id, 'vendor')
|
||||||
have = window.require.list()
|
have = window.require.list()
|
||||||
console.group('Dependencies', e.item.id) if LOG
|
console.group('Dependencies', e.item.id) if LOG
|
||||||
@recentLoadedBytes += e.rawResult.length
|
@recentLoadedBytes += e.rawResult.length
|
||||||
|
@ -66,8 +69,15 @@ module.exports = ModuleLoader = class ModuleLoader extends CocoClass
|
||||||
console.groupEnd() if LOG
|
console.groupEnd() if LOG
|
||||||
missing = _.difference dependencies, have
|
missing = _.difference dependencies, have
|
||||||
@load(module, false) for module in missing
|
@load(module, false) for module in missing
|
||||||
locale.update() if _.string.startsWith(e.item.id, 'locale')
|
|
||||||
|
# update locale data
|
||||||
|
if _.string.startsWith(e.item.id, 'locale')
|
||||||
|
locale.update()
|
||||||
|
|
||||||
|
# just a bit of cleanup to get the script objects out of the body element
|
||||||
$(e.result).remove()
|
$(e.result).remove()
|
||||||
|
|
||||||
|
# a module and its dependencies have loaded!
|
||||||
if @queue.progress is 1
|
if @queue.progress is 1
|
||||||
$('#module-loading-list').modal('hide')
|
$('#module-loading-list').modal('hide')
|
||||||
@recentPaths.sort()
|
@recentPaths.sort()
|
||||||
|
@ -96,6 +106,7 @@ module.exports = ModuleLoader = class ModuleLoader extends CocoClass
|
||||||
console.groupEnd() if LOG
|
console.groupEnd() if LOG
|
||||||
return dependencies
|
return dependencies
|
||||||
|
|
||||||
|
# basically ripped out of commonjs definition
|
||||||
expand: (root, name) ->
|
expand: (root, name) ->
|
||||||
results = []
|
results = []
|
||||||
if /^\.\.?(\/|$)/.test(name)
|
if /^\.\.?(\/|$)/.test(name)
|
||||||
|
|
|
@ -84,8 +84,8 @@ module.exports = class CocoRouter extends Backbone.Router
|
||||||
|
|
||||||
'play-old': go('play/MainPlayView') # This used to be 'play'.
|
'play-old': go('play/MainPlayView') # This used to be 'play'.
|
||||||
'play': go('play/WorldMapView')
|
'play': go('play/WorldMapView')
|
||||||
'play/ladder/:levelID': go('play/ladder/LadderView')
|
'play/ladder/:levelID': go('ladder/LadderView')
|
||||||
'play/ladder': go('play/ladder/MainLadderView')
|
'play/ladder': go('ladder/MainLadderView')
|
||||||
'play/level/:levelID': go('play/level/PlayLevelView')
|
'play/level/:levelID': go('play/level/PlayLevelView')
|
||||||
'play/spectate/:levelID': go('play/SpectateView')
|
'play/spectate/:levelID': go('play/SpectateView')
|
||||||
'play/:map': go('play/WorldMapView')
|
'play/:map': go('play/WorldMapView')
|
||||||
|
@ -185,6 +185,14 @@ module.exports = class CocoRouter extends Backbone.Router
|
||||||
window.tracker?.trackPageView()
|
window.tracker?.trackPageView()
|
||||||
|
|
||||||
onNavigate: (e) ->
|
onNavigate: (e) ->
|
||||||
|
if _.isString e.viewClass
|
||||||
|
ViewClass = @tryToLoadModule e.viewClass
|
||||||
|
if not ViewClass and application.moduleLoader.load(e.viewClass)
|
||||||
|
@listenToOnce application.moduleLoader, 'load-complete', ->
|
||||||
|
@onNavigate(e)
|
||||||
|
return
|
||||||
|
e.viewClass = ViewClass
|
||||||
|
|
||||||
manualView = e.view or e.viewClass
|
manualView = e.view or e.viewClass
|
||||||
if (e.route is document.location.pathname) and not manualView
|
if (e.route is document.location.pathname) and not manualView
|
||||||
return document.location.reload()
|
return document.location.reload()
|
||||||
|
|
|
@ -89,8 +89,8 @@ module.exports = class LevelSetupManager extends CocoClass
|
||||||
|
|
||||||
onInventoryModalPlayClicked: ->
|
onInventoryModalPlayClicked: ->
|
||||||
@navigatingToPlay = true
|
@navigatingToPlay = true
|
||||||
PlayLevelView = require 'views/play/level/PlayLevelView'
|
PlayLevelView = 'views/play/level/PlayLevelView'
|
||||||
LadderView = require 'views/play/ladder/LadderView'
|
LadderView = 'views/ladder/LadderView'
|
||||||
viewClass = if @options.levelPath is 'ladder' then LadderView else PlayLevelView
|
viewClass = if @options.levelPath is 'ladder' then LadderView else PlayLevelView
|
||||||
Backbone.Mediator.publish 'router:navigate', {
|
Backbone.Mediator.publish 'router:navigate', {
|
||||||
route: "/play/#{@options.levelPath || 'level'}/#{@options.levelID}"
|
route: "/play/#{@options.levelPath || 'level'}/#{@options.levelID}"
|
||||||
|
|
|
@ -35,7 +35,7 @@ module.exports =
|
||||||
'router:navigate': c.object {required: ['route']},
|
'router:navigate': c.object {required: ['route']},
|
||||||
route: {type: 'string'}
|
route: {type: 'string'}
|
||||||
view: {type: 'object'}
|
view: {type: 'object'}
|
||||||
viewClass: {type: 'function'}
|
viewClass: {type: ['function', 'string']}
|
||||||
viewArgs: {type: 'array'}
|
viewArgs: {type: 'array'}
|
||||||
|
|
||||||
'router:navigated': c.object {required: ['route']},
|
'router:navigated': c.object {required: ['route']},
|
||||||
|
|
|
@ -320,7 +320,7 @@ $itemSlotGridHeight: 51px
|
||||||
position: relative
|
position: relative
|
||||||
width: 60px
|
width: 60px
|
||||||
|
|
||||||
&:not(.equipped):not(.restricted):not(.silhouette)
|
&:not(.equipped):not(.restricted)
|
||||||
cursor: pointer
|
cursor: pointer
|
||||||
|
|
||||||
&:hover
|
&:hover
|
||||||
|
@ -347,18 +347,6 @@ $itemSlotGridHeight: 51px
|
||||||
padding: 0
|
padding: 0
|
||||||
@include transition(0.1s ease)
|
@include transition(0.1s ease)
|
||||||
|
|
||||||
.required-level
|
|
||||||
@include opacity(0)
|
|
||||||
@include transition(0.6s ease-in)
|
|
||||||
pointer-events: none
|
|
||||||
font-size: 14px
|
|
||||||
text-align: center
|
|
||||||
width: 100%
|
|
||||||
bottom: 20px
|
|
||||||
top: inherit
|
|
||||||
position: absolute
|
|
||||||
color: white
|
|
||||||
|
|
||||||
&.active
|
&.active
|
||||||
background-color: rgb(81,153,236)
|
background-color: rgb(81,153,236)
|
||||||
|
|
||||||
|
@ -403,16 +391,6 @@ $itemSlotGridHeight: 51px
|
||||||
&.locked:not(:hover)
|
&.locked:not(:hover)
|
||||||
@include filter(contrast(75%))
|
@include filter(contrast(75%))
|
||||||
|
|
||||||
&.silhouette
|
|
||||||
img
|
|
||||||
@include filter(contrast(25%) brightness(25%))
|
|
||||||
opacity: 0.5
|
|
||||||
|
|
||||||
&:hover
|
|
||||||
.required-level
|
|
||||||
@include opacity(1)
|
|
||||||
text-shadow: 0 1px 0 black, 1px 0 0 black, 0 -1px 0 black, -1px 0 0 black
|
|
||||||
|
|
||||||
//- Hero/Play buttons
|
//- Hero/Play buttons
|
||||||
|
|
||||||
#choose-hero-button, #play-level-button
|
#choose-hero-button, #play-level-button
|
||||||
|
|
|
@ -270,14 +270,15 @@
|
||||||
.item-img
|
.item-img
|
||||||
z-index: 1
|
z-index: 1
|
||||||
|
|
||||||
.item-shadow
|
// Not performant, takes too much memory with filter.
|
||||||
left: 5px
|
//.item-shadow
|
||||||
@include filter(contrast(0%) brightness(0%))
|
// left: 5px
|
||||||
opacity: 0.2
|
// @include filter(contrast(0%) brightness(0%))
|
||||||
|
// opacity: 0.2
|
||||||
|
|
||||||
.item-silhouette
|
.item-silhouette
|
||||||
@include filter(contrast(0%) brightness(0%))
|
opacity: 0.2
|
||||||
opacity: 0.3
|
//@include filter(contrast(0%) brightness(0%))
|
||||||
|
|
||||||
.required-level
|
.required-level
|
||||||
position: absolute
|
position: absolute
|
||||||
|
|
|
@ -50,10 +50,6 @@
|
||||||
for item in itemGroups.lockedItems.models
|
for item in itemGroups.lockedItems.models
|
||||||
.item(class=item.classes, data-item-id=item.id)
|
.item(class=item.classes, data-item-id=item.id)
|
||||||
img(src=item.getPortraitURL(), draggable="false")
|
img(src=item.getPortraitURL(), draggable="false")
|
||||||
if item.level
|
|
||||||
.required-level
|
|
||||||
span(data-i18n="general.player_level")
|
|
||||||
span.spl= item.level
|
|
||||||
.clearfix
|
.clearfix
|
||||||
|
|
||||||
#item-details-view
|
#item-details-view
|
||||||
|
|
|
@ -37,7 +37,6 @@
|
||||||
|
|
||||||
if item && !item.owned
|
if item && !item.owned
|
||||||
if item.unequippable
|
if item.unequippable
|
||||||
// Temp, while we only have Warriors: prevent them from buying non-Warrior stuff
|
|
||||||
button.btn.big-font.disabled.unequippable #{item.get('heroClass')} Only
|
button.btn.big-font.disabled.unequippable #{item.get('heroClass')} Only
|
||||||
else
|
else
|
||||||
button#selected-item-unlock-button.btn.big-font.unlock-button(data-item-id=item.id)
|
button#selected-item-unlock-button.btn.big-font.unlock-button(data-item-id=item.id)
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
else
|
else
|
||||||
strong.big-font= item.name
|
strong.big-font= item.name
|
||||||
img.item-img(src=item.getPortraitURL(), draggable="false")
|
img.item-img(src=item.getPortraitURL(), draggable="false")
|
||||||
img.item-shadow(src=item.getPortraitURL(), draggable="false")
|
//img.item-shadow(src=item.getPortraitURL(), draggable="false") // Not performant, takes too much memory with filter
|
||||||
|
|
||||||
if item.owned
|
if item.owned
|
||||||
span.big-font.owned(data-i18n="play.owned")
|
span.big-font.owned(data-i18n="play.owned")
|
||||||
|
@ -50,7 +50,6 @@
|
||||||
img(src="/images/common/gem.png", draggable="false")
|
img(src="/images/common/gem.png", draggable="false")
|
||||||
span.big-font= item.get('gems')
|
span.big-font= item.get('gems')
|
||||||
if item.unequippable
|
if item.unequippable
|
||||||
// Temp, while we only have Warriors: prevent them from buying non-Warrior stuff
|
|
||||||
span.big-font.unequippable= item.get('heroClass')
|
span.big-font.unequippable= item.get('heroClass')
|
||||||
else
|
else
|
||||||
button.btn.unlock-button.big-font(data-i18n="play.unlock", data-item-id=item.id)
|
button.btn.unlock-button.big-font(data-i18n="play.unlock", data-item-id=item.id)
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
CocoView = require 'views/core/CocoView'
|
CocoView = require 'views/core/CocoView'
|
||||||
template = require 'templates/editor/delta'
|
template = require 'templates/editor/delta'
|
||||||
deltasLib = require 'core/deltas'
|
deltasLib = require 'core/deltas'
|
||||||
|
require 'vendor/diffview'
|
||||||
|
require 'vendor/difflib'
|
||||||
|
|
||||||
TEXTDIFF_OPTIONS =
|
TEXTDIFF_OPTIONS =
|
||||||
baseTextName: "Old"
|
baseTextName: "Old"
|
||||||
|
|
|
@ -26,6 +26,8 @@ SystemsDocumentationView = require 'views/editor/docs/SystemsDocumentationView'
|
||||||
LevelFeedbackView = require 'views/editor/level/LevelFeedbackView'
|
LevelFeedbackView = require 'views/editor/level/LevelFeedbackView'
|
||||||
storage = require 'core/storage'
|
storage = require 'core/storage'
|
||||||
|
|
||||||
|
require 'vendor/coffeescript' # this is tenuous, since the LevelSession and LevelComponent models are what compile the code
|
||||||
|
|
||||||
module.exports = class LevelEditView extends RootView
|
module.exports = class LevelEditView extends RootView
|
||||||
id: 'editor-level-view'
|
id: 'editor-level-view'
|
||||||
className: 'editor'
|
className: 'editor'
|
||||||
|
|
|
@ -55,7 +55,7 @@ module.exports = class LadderView extends RootView
|
||||||
ctx._ = _
|
ctx._ = _
|
||||||
if tournamentDate = {greed: 1402444800000, 'criss-cross': 1410912000000}[@levelID]
|
if tournamentDate = {greed: 1402444800000, 'criss-cross': 1410912000000}[@levelID]
|
||||||
ctx.tournamentTimeLeft = moment(new Date(tournamentDate)).fromNow()
|
ctx.tournamentTimeLeft = moment(new Date(tournamentDate)).fromNow()
|
||||||
ctx.winners = require('views/play/ladder/tournament_results')[@levelID]
|
ctx.winners = require('./tournament_results')[@levelID]
|
||||||
ctx
|
ctx
|
||||||
|
|
||||||
afterRender: ->
|
afterRender: ->
|
|
@ -63,18 +63,18 @@ module.exports = class ControlBarView extends CocoView
|
||||||
if @level.get('type', true) in ['ladder', 'ladder-tutorial', 'hero-ladder']
|
if @level.get('type', true) in ['ladder', 'ladder-tutorial', 'hero-ladder']
|
||||||
levelID = @level.get('slug').replace /\-tutorial$/, ''
|
levelID = @level.get('slug').replace /\-tutorial$/, ''
|
||||||
@homeLink = c.homeLink = '/play/ladder/' + levelID
|
@homeLink = c.homeLink = '/play/ladder/' + levelID
|
||||||
@homeViewClass = require 'views/play/ladder/LadderView'
|
@homeViewClass = 'views/ladder/LadderView'
|
||||||
@homeViewArgs.push levelID
|
@homeViewArgs.push levelID
|
||||||
else if @level.get('type', true) in ['hero', 'hero-coop']
|
else if @level.get('type', true) in ['hero', 'hero-coop']
|
||||||
@homeLink = c.homeLink = '/play'
|
@homeLink = c.homeLink = '/play'
|
||||||
@homeViewClass = require 'views/play/WorldMapView'
|
@homeViewClass = 'views/play/WorldMapView'
|
||||||
campaign = CampaignOptions.getCampaignForSlug @level.get 'slug'
|
campaign = CampaignOptions.getCampaignForSlug @level.get 'slug'
|
||||||
if campaign isnt 'dungeon'
|
if campaign isnt 'dungeon'
|
||||||
@homeLink += '/' + campaign
|
@homeLink += '/' + campaign
|
||||||
@homeViewArgs.push campaign
|
@homeViewArgs.push campaign
|
||||||
else
|
else
|
||||||
@homeLink = c.homeLink = '/'
|
@homeLink = c.homeLink = '/'
|
||||||
@homeViewClass = require 'views/HomeView'
|
@homeViewClass = 'views/HomeView'
|
||||||
c.editorLink = "/editor/level/#{@level.get('slug')}"
|
c.editorLink = "/editor/level/#{@level.get('slug')}"
|
||||||
c.homeLink = @homeLink
|
c.homeLink = @homeLink
|
||||||
c
|
c
|
||||||
|
|
|
@ -340,6 +340,7 @@ module.exports = class PlayLevelView extends RootView
|
||||||
application.tracker?.trackEvent 'Started Level', category:'Play Level', levelID: @levelID
|
application.tracker?.trackEvent 'Started Level', category:'Play Level', levelID: @levelID
|
||||||
|
|
||||||
playAmbientSound: ->
|
playAmbientSound: ->
|
||||||
|
return if @destroyed
|
||||||
return if @ambientSound
|
return if @ambientSound
|
||||||
return unless file = {Dungeon: 'ambient-dungeon', Grass: 'ambient-grass'}[@level.get('terrain')]
|
return unless file = {Dungeon: 'ambient-dungeon', Grass: 'ambient-grass'}[@level.get('terrain')]
|
||||||
src = "/file/interface/#{file}#{AudioPlayer.ext}"
|
src = "/file/interface/#{file}#{AudioPlayer.ext}"
|
||||||
|
|
|
@ -260,7 +260,7 @@ module.exports = class HeroVictoryModal extends ModalView
|
||||||
onGameSubmitted: (e) ->
|
onGameSubmitted: (e) ->
|
||||||
ladderURL = "/play/ladder/#{@level.get('slug')}#my-matches"
|
ladderURL = "/play/ladder/#{@level.get('slug')}#my-matches"
|
||||||
# Preserve the supermodel as we navigate back to the ladder.
|
# Preserve the supermodel as we navigate back to the ladder.
|
||||||
Backbone.Mediator.publish 'router:navigate', route: ladderURL, viewClass: require('views/play/ladder/LadderView'), viewArgs: [{supermodel: @supermodel}, @level.get('slug')]
|
Backbone.Mediator.publish 'router:navigate', route: ladderURL, viewClass: 'views/ladder/LadderView', viewArgs: [{supermodel: @supermodel}, @level.get('slug')]
|
||||||
|
|
||||||
playSelectionSound: (hero, preload=false) ->
|
playSelectionSound: (hero, preload=false) ->
|
||||||
return unless sounds = hero.get('soundTriggers')?.selected
|
return unless sounds = hero.get('soundTriggers')?.selected
|
||||||
|
@ -324,4 +324,4 @@ module.exports = class HeroVictoryModal extends ModalView
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
route = $(e.target).data('href')
|
route = $(e.target).data('href')
|
||||||
# Preserve the supermodel as we navigate back to the ladder.
|
# Preserve the supermodel as we navigate back to the ladder.
|
||||||
Backbone.Mediator.publish 'router:navigate', route: route, viewClass: require('views/play/ladder/LadderView'), viewArgs: [{supermodel: if @options.hasReceivedMemoryWarning then null else @supermodel}, @level.get('slug')]
|
Backbone.Mediator.publish 'router:navigate', route: route, viewClass: 'views/ladder/LadderView', viewArgs: [{supermodel: if @options.hasReceivedMemoryWarning then null else @supermodel}, @level.get('slug')]
|
||||||
|
|
|
@ -94,10 +94,12 @@ module.exports = class InventoryModal extends ModalView
|
||||||
if not item.getFrontFacingStats().props.length and not _.size(item.getFrontFacingStats().stats) and locked # Temp: while there are placeholder items
|
if not item.getFrontFacingStats().props.length and not _.size(item.getFrontFacingStats().stats) and locked # Temp: while there are placeholder items
|
||||||
null # Don't put into a collection
|
null # Don't put into a collection
|
||||||
else if locked and item.get('slug') isnt 'simple-boots'
|
else if locked and item.get('slug') isnt 'simple-boots'
|
||||||
@itemGroups.lockedItems.add(item)
|
|
||||||
item.classes.push 'locked'
|
item.classes.push 'locked'
|
||||||
item.classes.push 'silhouette' if item.isSilhouettedItem()
|
if item.isSilhouettedItem or not item.get('gems')
|
||||||
item.classes.push 'hidden' unless item.get('gems')
|
# Don't even load/show these--don't add to a collection. (Bandwidth optimization.)
|
||||||
|
null
|
||||||
|
else
|
||||||
|
@itemGroups.lockedItems.add(item)
|
||||||
else if item.get('slug') in _.values(LevelOptions[@options.levelID]?.restrictedGear ? {})
|
else if item.get('slug') in _.values(LevelOptions[@options.levelID]?.restrictedGear ? {})
|
||||||
@itemGroups.restrictedItems.add(item)
|
@itemGroups.restrictedItems.add(item)
|
||||||
item.classes.push 'restricted'
|
item.classes.push 'restricted'
|
||||||
|
@ -216,7 +218,6 @@ module.exports = class InventoryModal extends ModalView
|
||||||
onUnequippedItemClick: (e) ->
|
onUnequippedItemClick: (e) ->
|
||||||
return if @justDoubleClicked
|
return if @justDoubleClicked
|
||||||
itemEl = $(e.target).closest('.item')
|
itemEl = $(e.target).closest('.item')
|
||||||
return if itemEl.hasClass('silhouette')
|
|
||||||
@playSound 'menu-button-click'
|
@playSound 'menu-button-click'
|
||||||
@selectUnequippedItem(itemEl)
|
@selectUnequippedItem(itemEl)
|
||||||
|
|
||||||
|
|
|
@ -63,8 +63,8 @@ exports.config =
|
||||||
|
|
||||||
#- vendor.js, all the vendor libraries
|
#- vendor.js, all the vendor libraries
|
||||||
'javascripts/vendor.js': [
|
'javascripts/vendor.js': [
|
||||||
regJoin('^vendor/(?!scripts/Box2d)')
|
regJoin('^vendor/scripts/(?!(Box2d|coffeescript))')
|
||||||
regJoin('^bower_components/(?!(aether|d3))')
|
regJoin('^bower_components/(?!(aether|d3|difflib|diffview))')
|
||||||
]
|
]
|
||||||
|
|
||||||
#- Other vendor libraries in separate bunches
|
#- Other vendor libraries in separate bunches
|
||||||
|
@ -78,6 +78,9 @@ exports.config =
|
||||||
|
|
||||||
# Any vendor libraries we don't want the client to load immediately
|
# Any vendor libraries we don't want the client to load immediately
|
||||||
'javascripts/app/vendor/d3.js': regJoin('^bower_components/d3')
|
'javascripts/app/vendor/d3.js': regJoin('^bower_components/d3')
|
||||||
|
'javascripts/app/vendor/coffeescript.js': 'vendor/scripts/coffeescript.js'
|
||||||
|
'javascripts/app/vendor/difflib.js': 'vendor/scripts/difflib.js'
|
||||||
|
'javascripts/app/vendor/diffview.js': 'vendor/scripts/diffview.js'
|
||||||
|
|
||||||
#- test, demo libraries
|
#- test, demo libraries
|
||||||
'javascripts/test-app.js': regJoin('^test/app/')
|
'javascripts/test-app.js': regJoin('^test/app/')
|
||||||
|
|
Loading…
Reference in a new issue