<commit_before>.map
  .gradient.horizontal-gradient.top-gradient
  .gradient.vertical-gradient.right-gradient
  .gradient.horizontal-gradient.bottom-gradient
  .gradient.vertical-gradient.left-gradient
  img.map-background(src="/images/pages/play/map_" + mapType + ".jpg", alt="", draggable="false")

  - var seenNext = nextLevel;
  each level in campaign.levels
    if !level.hidden
      - var next = level.id == nextLevel || (!seenNext && levelStatusMap[level.id] != "complete" && !level.locked && !level.disabled);
      - seenNext = seenNext || next;
      div(style="left: #{level.x}%; bottom: #{level.y}%; background-color: #{level.color}", class="level" + (next ? " next" : "") + (level.disabled ? " disabled" : "") + (level.locked ? " locked" : "") + " " + levelStatusMap[level.id] || "", data-level-id=level.id, title=level.name + (level.disabled ? ' (Coming Soon to Adventurers)' : ''))
        a(href=level.type == 'hero' ? '#' : level.disabled ? "/play" : "/play/#{level.levelPath || 'level'}/#{level.id}", disabled=level.disabled, data-level-id=level.id, data-level-path=level.levelPath || 'level', data-level-name=level.name)
        if level.requiresSubscription
          img.star(src="/images/pages/play/star.png")
        if levelStatusMap[level.id] === 'complete'
          img.banner(src="/images/pages/play/level-banner-complete.png")
        if levelStatusMap[level.id] === 'started'
          img.banner(src="/images/pages/play/level-banner-started.png")
      div(style="left: #{level.x}%; bottom: #{level.y}%", class="level-shadow" + (next ? " next" : "") + " " + levelStatusMap[level.id] || "")
      .level-info-container(data-level-id=level.id, data-level-path=level.levelPath || 'level', data-level-name=level.name)
        div(class="level-info " + (levelStatusMap[level.id] || ""))
          h3= level.name + (level.disabled ? " (Coming soon!)" : (level.locked ? " (Locked)" : ""))
          .level-description= level.description
          if level.disabled
            p
              span.spr(data-i18n="play.awaiting_levels_adventurer_prefix") We release five levels per week.
              a.spr(href="/contribute/adventurer")
                strong(data-i18n="play.awaiting_levels_adventurer") Sign up as an Adventurer
              span.spl(data-i18n="play.awaiting_levels_adventurer_suffix") to be the first to play new levels.
              
          - var playCount = levelPlayCountMap[level.id]
          if playCount && playCount.sessions > 20
            div
              span.spr #{playCount.sessions}
              span(data-i18n="play.players") players
              span.spr , #{Math.round(playCount.playtime / 3600)}
              span(data-i18n="play.hours_played") hours played
          .campaign-label(style="color: #{campaign.color}")= campaign.name
        if isIPadApp && !level.disabled && !level.locked
          button.btn.btn-success.btn-lg.start-level(data-i18n="common.play") Play
  if mapType === 'dungeon' && forestIsAvailable
    a#forest-link.glyphicon.glyphicon-share-alt.campaign-switch(href="/play/forest", data-i18n="[title]play.campaign_forest")
  if mapType === 'forest'
    a#dungeon-link.glyphicon.glyphicon-share-alt.campaign-switch(href="/play/dungeon", data-i18n="[title]play.campaign_dungeon")

.game-controls.header-font
  button.btn.items(data-toggle='coco-modal', data-target='play/modal/PlayItemsModal', data-i18n="[title]play.items")
  button.btn.heroes(data-toggle='coco-modal', data-target='play/modal/PlayHeroesModal', data-i18n="[title]play.heroes")
  button.btn.achievements(data-toggle='coco-modal', data-target='play/modal/PlayAchievementsModal', data-i18n="[title]play.achievements")
  if me.get('anonymous') === false || me.get('iosIdentifierForVendor') || isIPadApp
    button.btn.gems(data-toggle='coco-modal', data-target='play/modal/BuyGemsModal', data-i18n="[title]play.buy_gems")
  if me.isAdmin()
    button.btn.account(data-toggle='coco-modal', data-target='play/modal/PlayAccountModal', data-i18n="[title]play.account")
    button.btn.settings(data-toggle='coco-modal', data-target='play/modal/PlaySettingsModal', data-i18n="[title]play.settings")
  else if me.get('anonymous', true)
    button.btn.settings(data-toggle='coco-modal', data-target='core/AuthModal', data-i18n="[title]play.settings")
  // Don't show these things, they are bad and take us out of the game. Just wait until the new ones work.
  //else
  //  a.btn.achievements(href="/user/#{me.getSlugOrID()}/stats", data-i18n="[title]play.achievements")
  //  a.btn.account(href="/user/#{me.getSlugOrID()}", data-i18n="[title]play.account")
  //  a.btn.settings(href='/account', data-i18n="[title]play.settings")
  
.user-status.header-font
  .user-status-line
    span.gem.gem-30
    span#gems-count.spr= me.gems()
    span.player-level-icon
    span.player-level.spr= me.level()
    span.player-hero-icon
    if me.get('anonymous')
      span.player-name.spr(data-i18n="play.anonymous") Anonymous Player
      button.btn.btn-illustrated.login-button.btn-warning(data-i18n="login.log_in")
      button.btn.btn-illustrated.signup-button.btn-danger(data-i18n="signup.sign_up")
    else
      span.player-name.spr= me.get('name')
      button#logout-button.btn.btn-default.btn-flat.btn-sm(data-i18n="login.log_out") Log Out

button.btn.btn-lg.btn-inverse#volume-button(title="Adjust volume")
  .glyphicon.glyphicon-volume-off<commit_msg>Styled log out button on world map.<commit_after>.map
  .gradient.horizontal-gradient.top-gradient
  .gradient.vertical-gradient.right-gradient
  .gradient.horizontal-gradient.bottom-gradient
  .gradient.vertical-gradient.left-gradient
  img.map-background(src="/images/pages/play/map_" + mapType + ".jpg", alt="", draggable="false")

  - var seenNext = nextLevel;
  each level in campaign.levels
    if !level.hidden
      - var next = level.id == nextLevel || (!seenNext && levelStatusMap[level.id] != "complete" && !level.locked && !level.disabled);
      - seenNext = seenNext || next;
      div(style="left: #{level.x}%; bottom: #{level.y}%; background-color: #{level.color}", class="level" + (next ? " next" : "") + (level.disabled ? " disabled" : "") + (level.locked ? " locked" : "") + " " + levelStatusMap[level.id] || "", data-level-id=level.id, title=level.name + (level.disabled ? ' (Coming Soon to Adventurers)' : ''))
        a(href=level.type == 'hero' ? '#' : level.disabled ? "/play" : "/play/#{level.levelPath || 'level'}/#{level.id}", disabled=level.disabled, data-level-id=level.id, data-level-path=level.levelPath || 'level', data-level-name=level.name)
        if level.requiresSubscription
          img.star(src="/images/pages/play/star.png")
        if levelStatusMap[level.id] === 'complete'
          img.banner(src="/images/pages/play/level-banner-complete.png")
        if levelStatusMap[level.id] === 'started'
          img.banner(src="/images/pages/play/level-banner-started.png")
      div(style="left: #{level.x}%; bottom: #{level.y}%", class="level-shadow" + (next ? " next" : "") + " " + levelStatusMap[level.id] || "")
      .level-info-container(data-level-id=level.id, data-level-path=level.levelPath || 'level', data-level-name=level.name)
        div(class="level-info " + (levelStatusMap[level.id] || ""))
          h3= level.name + (level.disabled ? " (Coming soon!)" : (level.locked ? " (Locked)" : ""))
          .level-description= level.description
          if level.disabled
            p
              span.spr(data-i18n="play.awaiting_levels_adventurer_prefix") We release five levels per week.
              a.spr(href="/contribute/adventurer")
                strong(data-i18n="play.awaiting_levels_adventurer") Sign up as an Adventurer
              span.spl(data-i18n="play.awaiting_levels_adventurer_suffix") to be the first to play new levels.
              
          - var playCount = levelPlayCountMap[level.id]
          if playCount && playCount.sessions > 20
            div
              span.spr #{playCount.sessions}
              span(data-i18n="play.players") players
              span.spr , #{Math.round(playCount.playtime / 3600)}
              span(data-i18n="play.hours_played") hours played
          .campaign-label(style="color: #{campaign.color}")= campaign.name
        if isIPadApp && !level.disabled && !level.locked
          button.btn.btn-success.btn-lg.start-level(data-i18n="common.play") Play
  if mapType === 'dungeon' && forestIsAvailable
    a#forest-link.glyphicon.glyphicon-share-alt.campaign-switch(href="/play/forest", data-i18n="[title]play.campaign_forest")
  if mapType === 'forest'
    a#dungeon-link.glyphicon.glyphicon-share-alt.campaign-switch(href="/play/dungeon", data-i18n="[title]play.campaign_dungeon")

.game-controls.header-font
  button.btn.items(data-toggle='coco-modal', data-target='play/modal/PlayItemsModal', data-i18n="[title]play.items")
  button.btn.heroes(data-toggle='coco-modal', data-target='play/modal/PlayHeroesModal', data-i18n="[title]play.heroes")
  button.btn.achievements(data-toggle='coco-modal', data-target='play/modal/PlayAchievementsModal', data-i18n="[title]play.achievements")
  if me.get('anonymous') === false || me.get('iosIdentifierForVendor') || isIPadApp
    button.btn.gems(data-toggle='coco-modal', data-target='play/modal/BuyGemsModal', data-i18n="[title]play.buy_gems")
  if me.isAdmin()
    button.btn.account(data-toggle='coco-modal', data-target='play/modal/PlayAccountModal', data-i18n="[title]play.account")
    button.btn.settings(data-toggle='coco-modal', data-target='play/modal/PlaySettingsModal', data-i18n="[title]play.settings")
  else if me.get('anonymous', true)
    button.btn.settings(data-toggle='coco-modal', data-target='core/AuthModal', data-i18n="[title]play.settings")
  // Don't show these things, they are bad and take us out of the game. Just wait until the new ones work.
  //else
  //  a.btn.achievements(href="/user/#{me.getSlugOrID()}/stats", data-i18n="[title]play.achievements")
  //  a.btn.account(href="/user/#{me.getSlugOrID()}", data-i18n="[title]play.account")
  //  a.btn.settings(href='/account', data-i18n="[title]play.settings")
  
.user-status.header-font
  .user-status-line
    span.gem.gem-30
    span#gems-count.spr= me.gems()
    span.player-level-icon
    span.player-level.spr= me.level()
    span.player-hero-icon
    if me.get('anonymous')
      span.player-name.spr(data-i18n="play.anonymous") Anonymous Player
      button.btn.btn-illustrated.login-button.btn-warning(data-i18n="login.log_in")
      button.btn.btn-illustrated.signup-button.btn-danger(data-i18n="signup.sign_up")
    else
      span.player-name.spr= me.get('name')
      button#logout-button.btn.btn-illustrated.btn-warning(data-i18n="login.log_out") Log Out

button.btn.btn-lg.btn-inverse#volume-button(title="Adjust volume")
  .glyphicon.glyphicon-volume-off
{'fraction_non_alphanumeric': 0.1758130081300813, 'fraction_numerical': 0.009793052475979305, 'mean_word_length': 3.6459227467811157, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6121286', 'n_tokens_mistral': 3755, 'n_tokens_neox': 3603, 'n_words': 499}