diff --git a/app/schemas/models/campaign.schema.coffee b/app/schemas/models/campaign.schema.coffee index f955be498..d99e19684 100644 --- a/app/schemas/models/campaign.schema.coffee +++ b/app/schemas/models/campaign.schema.coffee @@ -107,8 +107,11 @@ _.extend CampaignSchema.properties, { level: { type: 'string', links: [{rel: 'db', href: '/db/level/{($)}/version'}], format: 'latest-version-original-reference' } type: { enum: ['heroes', 'items', 'levels'] } }} + campaign: c.shortString title: 'Campaign', description: 'Which campaign this level is part of (like "desert").', format: 'hidden' # Automatically set by campaign editor. + tasks: c.array {title: 'Tasks', description: 'Tasks to be completed for this level.'}, c.task + #- normal properties position: c.point2d() } diff --git a/app/styles/editor/campaign/campaign-editor-view.sass b/app/styles/editor/campaign/campaign-editor-view.sass index cdee91359..8ce962a8d 100644 --- a/app/styles/editor/campaign/campaign-editor-view.sass +++ b/app/styles/editor/campaign/campaign-editor-view.sass @@ -10,6 +10,10 @@ .treema-root max-height: 100% overflow: scroll + + .completion + position: absolute + right: 0 #right-column position: absolute @@ -17,12 +21,3 @@ bottom: 0 right: 0 width: 75% - - #campaign-level-view - position: absolute - top: 0 - left: 0 - right: 0 - bottom: 0 - background-color: white - z-index: 3 \ No newline at end of file diff --git a/app/styles/editor/campaign/campaign-level-view.sass b/app/styles/editor/campaign/campaign-level-view.sass new file mode 100644 index 000000000..7e9f8e686 --- /dev/null +++ b/app/styles/editor/campaign/campaign-level-view.sass @@ -0,0 +1,13 @@ +#campaign-level-view + background-color: white + position: absolute + top: 0 + left: 0 + right: 0 + z-index: 3 + + .tasks + padding: 15px + + .button.close + font-size: 63px diff --git a/app/templates/editor/campaign/campaign-level-view.jade b/app/templates/editor/campaign/campaign-level-view.jade index fd2723d52..e9163581c 100644 --- a/app/templates/editor/campaign/campaign-level-view.jade +++ b/app/templates/editor/campaign/campaign-level-view.jade @@ -1,4 +1,17 @@ .jumbotron .button.close(type="button", aria-hidden="true") × - h1= level.get('name') + h1 + span.spr= level.get('name') + a(href="/editor/level/#{level.get('slug')}", target="_blank") (edit) p= level.get('description') + + h2 TODO: actually put useful stuff in here + +if level.get('tasks') + .tasks + h3 Tasks (read only) + ul.list-unstyled + for task in level.get('tasks') + li + input(type='checkbox', checked=task.complete) + span.spl= task.name diff --git a/app/views/editor/campaign/CampaignEditorView.coffee b/app/views/editor/campaign/CampaignEditorView.coffee index 387699ed6..d320b6d8c 100644 --- a/app/views/editor/campaign/CampaignEditorView.coffee +++ b/app/views/editor/campaign/CampaignEditorView.coffee @@ -164,6 +164,7 @@ module.exports = class CampaignEditorView extends RootView @listenTo @campaignView, 'level-moved', @onCampaignLevelMoved @listenTo @campaignView, 'adjacent-campaign-moved', @onAdjacentCampaignMoved @listenTo @campaignView, 'level-clicked', @onCampaignLevelClicked + @listenTo @campaignView, 'level-double-clicked', @onCampaignLevelDoubleClicked @insertSubView @campaignView onTreemaChanged: (e, nodes) => @@ -188,8 +189,7 @@ module.exports = class CampaignEditorView extends RootView path = node.getPath() return unless _.string.startsWith path, '/levels/' original = path.split('/')[2] - level = @supermodel.getModelByOriginal Level, original - @insertSubView new CampaignLevelView({}, level) + @openCampaignLevelView @supermodel.getModelByOriginal Level, original onCampaignLevelMoved: (e) -> path = "levels/#{e.levelOriginal}/position" @@ -204,6 +204,14 @@ module.exports = class CampaignEditorView extends RootView levelTreema.select() # levelTreema.open() + onCampaignLevelDoubleClicked: (levelOriginal) -> + @openCampaignLevelView @supermodel.getModelByOriginal Level, levelOriginal + + openCampaignLevelView: (level) -> + @insertSubView campaignLevelView = new CampaignLevelView({}, level) + @listenToOnce campaignLevelView, 'hidden', => @$el.find('#campaign-view').show() + @$el.find('#campaign-view').hide() + updateRewardsForLevel: (level, rewards) -> achievements = @supermodel.getModels(Achievement) achievements = (a for a in achievements when a.get('related') is level.get('original')) @@ -250,7 +258,27 @@ class LevelsNode extends TreemaObjectNode class LevelNode extends TreemaObjectNode valueClass: 'treema-level' buildValueForDisplay: (valEl, data) -> - @buildValueForDisplaySimply valEl, data.name + name = data.name + if data.requiresSubscription + name = "[P] " + name + + status = '' + el = 'strong' + if data.adminOnly + status += " (disabled)" + el = 'span' + else if data.adventurer + status += " (adventurer)" + + completion = '' + if data.tasks + completion = "#{(t for t in data.tasks when t.complete).length} / #{data.tasks.length}" + + valEl.append $("<#{el}>").addClass('treema-shortened').text name + if status + valEl.append $('').text status + if completion + valEl.append $('').text completion populateData: -> return if @data.name? diff --git a/app/views/editor/campaign/CampaignLevelView.coffee b/app/views/editor/campaign/CampaignLevelView.coffee index b27c02aeb..1accea6a4 100644 --- a/app/views/editor/campaign/CampaignLevelView.coffee +++ b/app/views/editor/campaign/CampaignLevelView.coffee @@ -1,19 +1,24 @@ CocoView = require 'views/core/CocoView' +Level = require 'models/Level' module.exports = class CampaignLevelView extends CocoView id: 'campaign-level-view' template: require 'templates/editor/campaign/campaign-level-view' - + events: 'click .close': 'onClickClose' - + constructor: (options, @level) -> super(options) - + @fullLevel = new Level _id: @level.id + @fullLevel.fetch() + @listenToOnce @fullLevel, 'sync', => @render?() + getRenderData: -> c = super() - c.level = @level + c.level = if @fullLevel.loaded then @fullLevel else @level c onClickClose: -> - @$el.addClass('hidden') \ No newline at end of file + @$el.addClass('hidden') + @trigger 'hidden' diff --git a/app/views/play/CampaignView.coffee b/app/views/play/CampaignView.coffee index 27cd0cea7..9e7d390dd 100644 --- a/app/views/play/CampaignView.coffee +++ b/app/views/play/CampaignView.coffee @@ -34,6 +34,7 @@ module.exports = class CampaignView extends RootView events: 'click .map-background': 'onClickMap' 'click .level a': 'onClickLevel' + 'dblclick .level a': 'onDoubleClickLevel' 'click .level-info-container .start-level': 'onClickStartLevel' 'mouseenter .level a': 'onMouseEnterLevel' 'mouseleave .level a': 'onMouseLeaveLevel' @@ -236,8 +237,9 @@ module.exports = class CampaignView extends RootView @$levelInfo?.hide() levelElement = $(e.target).parents('.level') levelSlug = levelElement.data('level-slug') + levelOriginal = levelElement.data('level-original') if @editorMode - return @trigger 'level-clicked', levelSlug + return @trigger 'level-clicked', levelOriginal level = _.find _.values(@campaign.get('levels')), slug: levelSlug if application.isIPadApp @$levelInfo = @$el.find(".level-info-container[data-level-slug=#{levelSlug}]").show() @@ -256,6 +258,12 @@ module.exports = class CampaignView extends RootView @startLevel levelElement window.tracker?.trackEvent 'Clicked Level', category: 'World Map', levelID: levelSlug, ['Google Analytics'] + onDoubleClickLevel: (e) -> + return unless @editorMode + levelElement = $(e.target).parents('.level') + levelOriginal = levelElement.data('level-original') + @trigger 'level-double-clicked', levelOriginal + onClickStartLevel: (e) -> levelElement = $(e.target).parents('.level-info-container') @startLevel levelElement