diff --git a/app/styles/account/home.sass b/app/styles/account/home.sass index 1f329ac05..d8aa424cb 100644 --- a/app/styles/account/home.sass +++ b/app/styles/account/home.sass @@ -1,5 +1,12 @@ -#user-home-view - #avatar - width: 150px +#account-home-view + dl + margin-bottom: 0px - content: "blub" + img#picture + max-width: 50% + + .panel + margin-bottom: 10px + + h2 + margin-bottom: 0px diff --git a/app/styles/common/top_nav.sass b/app/styles/common/top_nav.sass index dee79b574..8215c2a2a 100644 --- a/app/styles/common/top_nav.sass +++ b/app/styles/common/top_nav.sass @@ -1,4 +1,5 @@ @import "../bootstrap/variables" +@import "../bootstrap/mixins" // This is still very blocky. Browser reflows? Investigate why. .open > .dropdown-menu @@ -34,6 +35,9 @@ opacity: 1 top: 100% +a.disabled + color: #5b5855 + #top-nav a.navbar-brand padding: 4px 20px 0px 20px @@ -53,6 +57,7 @@ .account-settings-image width: 18px height: 18px + margin-right: 5px .glyphicon-user font-size: 16px @@ -86,19 +91,14 @@ padding: 15px letter-spacing: 1px font: 15px 'Helvetica Neue', Helvetica, Arial, sans-serif - &:after - display: table - content: " " - clear: both + +clearfix() li.user-dropdown-footer padding: 10px margin-left: 0px font-size: 14px - &:after - display: table - content: " " - clear: both + +clearfix() + .btn-flat border: #ddd 1px solid border-radius: 0px @@ -112,7 +112,7 @@ &:hover color: #f8e413 - .navbar-link-text > a:hover + .navbar-link-text > li > a:hover background: darken($body-bg, 3%) .btn, .btn-group, .fancy-select diff --git a/app/styles/user/home.sass b/app/styles/user/home.sass index 70b1a9ad6..e69de29bb 100644 --- a/app/styles/user/home.sass +++ b/app/styles/user/home.sass @@ -1,5 +0,0 @@ -#account-home-view - .main-content-area - padding: 20px 20px - img#avatar - width: 150px diff --git a/app/templates/account/home.jade b/app/templates/account/home.jade index a79a1aae5..57ea5799f 100644 --- a/app/templates/account/home.jade +++ b/app/templates/account/home.jade @@ -1,8 +1,100 @@ extends /templates/base block content + .clearfix + .col-sm-6.clearfix + h2 Account Settings + hr + + .panel.panel-default + .panel-heading + h3.panel-title + a(href="account/settings#me") Me + .panel-body + dl + dt Name + dd=me.get('name') + dt Email + dd abe@lincoln + .panel.panel-default + .panel-heading + h3.panel-title + a(href="account/settings#picture") Picture + .panel-body.text-center + img#picture(src="#{me.getPhotoURL(150)}" alt="") + .panel.panel-default + .panel-heading + h3.panel-title + a(href="account/settings#wizard") Wizard + //.panel-body + | Lorem Ipsum + .panel.panel-default + .panel-heading + h3.panel-title + a(href="account/settings#emails") Emails + .panel-body + .form + .form-group.checkbox + label.control-label(for="email_archmageNews") + span General + input#email_archmageNews(name="email_archmageNews", type="checkbox", checked=subs.generalNews, disabled="true") + .form-group.checkbox + label.control-label(for="email_archmageNews") + span.spr(data-i18n="classes.archmage_title") + | Archmage + span(data-i18n="classes.archmage_title_description") + | (Coder) + input#email_archmageNews(name="email_archmageNews", type="checkbox", checked=subs.archmageNews, disabled="true") + .form-group.checkbox + label.control-label(for="email_artisanNews") + span.spr(data-i18n="classes.artisan_title") + | Artisan + span(data-i18n="classes.artisan_title_description") + | (Level Builder) + input#email_artisanNews(name="email_artisanNews", type="checkbox", checked=subs.artisanNews, disabled="true") + .form-group.checkbox + label.control-label(for="email_adventurerNews") + span.spr(data-i18n="classes.adventurer_title") + | Adventurer + span(data-i18n="classes.adventurer_title_description") + | (Level Playtester) + input#email_adventurerNews(name="email_adventurerNews", type="checkbox", checked=subs.adventurerNews, disabled="true") + .form-group.checkbox + label.control-label(for="email_scribeNews") + span.spr(data-i18n="classes.scribe_title") + | Scribe + span(data-i18n="classes.scribe_title_description") + | (Article Editor) + input#email_scribeNews(name="email_scribeNews", type="checkbox", checked=subs.scribeNews, disabled="true") + .form-group.checkbox + label.control-label(for="email_diplomatNews") + span.spr(data-i18n="classes.diplomat_title") + | Diplomat + span(data-i18n="classes.diplomat_title_description") + | (Translator) + input#email_diplomatNews(name="email_diplomatNews", type="checkbox", checked=subs.diplomatNews, disabled="true") + .form-group.checkbox + label.control-label(for="email_ambassadorNews") + span.spr(data-i18n="classes.ambassador_title") + | Ambassador + span(data-i18n="classes.ambassador_title_description") + | (Support) + input#email_ambassadorNews(name="email_ambassadorNews", type="checkbox", checked=subs.ambassadorNews, disabled="true") + + .panel.panel-default + .panel-heading + h3.panel-title + a(href="account/settings#password") Password + .panel.panel-default + .panel-heading + h3.panel-title + a(href="account/settings#job-profile") Job Profile + .col-sm-6 + h2 Recently Played + hr + +//block content h2 Account - div .col-sm-3.text-center img#avatar(src="#{me.getPhotoURL(100)}") h3=me.get('name') || 'Anoner' @@ -10,11 +102,22 @@ block content dl.dl-horizontal if me.get('firstName') || me.get('lastName') dt Full name - dd=me.get('firstName') + ' ' + me.get('lastName') + dd=me.get('firstName') || '' + ' ' + me.get('lastName') || '' dt Email dd span.spr=me.get('email') - span (subscriptions) + //span (subscriptions) + hr + - var dateCreated = me.get('dateCreated'); + - var signedCLA = me.get('signedCLA'); + - console.log(moment) + dt Member since + dd= moment(dateCreated).format('MMMM Do YYYY') + if signedCLA + dt Signed CLA + dd= moment(signedCLA).format('MMMM Do YYYY') + + // TODO Have social network icons here for easy linking .col-sm-3 h3 Account @@ -33,3 +136,5 @@ block content a Statistics li a Code + + diff --git a/app/templates/base.jade b/app/templates/base.jade index f8c7dff31..06482a750 100644 --- a/app/templates/base.jade +++ b/app/templates/base.jade @@ -35,12 +35,6 @@ body else span.glyphicon.glyphicon-user - //else - button.btn.btn-primary.navbuttontext.header-font.auth-button - span(data-i18n="login.log_in") Log In - span.spr.spl / - span(data-i18n="login.sign_up") Create Account - ul(class='navbar-link-text').nav.navbar-nav.pull-right li.play a.header-font(href='/play', data-i18n="nav.play") Levels @@ -53,7 +47,7 @@ body img.account-settings-image(src=me.getPhotoURL(18), alt="") else i.glyphicon.glyphicon-user - .navbuttontext-account(data-i18n="nav.account") Account + .navbuttontext-account(data-i18n="nav.account" href="/account") Account span.caret ul.dropdown-menu(role="menu") li.user-dropdown-header @@ -65,12 +59,18 @@ body .col-xs-4.text-center a(href="#") Stats .col-xs-4.text-center - a.disabled(href="#") Code + a.disabled() Code li.user-dropdown-footer .pull-left - a.btn.btn-default.btn-flat(href="") Account + a.btn.btn-default.btn-flat(href="/account") Account .pull-right - a.btn.btn-default.btn-flat(href="") Log Out + button#logout-button.btn.btn-default.btn-flat(data-i18n="login.log_out") Log Out + else + li + button.btn.btn-primary.navbuttontext.header-font.auth-button + span(data-i18n="login.log_in") Log In + span.spr.spl / + span(data-i18n="login.sign_up") Create Account block outer_content #outer-content-wrapper diff --git a/app/views/account/home.coffee b/app/views/account/home.coffee index bf96c50d5..91368c9bf 100644 --- a/app/views/account/home.coffee +++ b/app/views/account/home.coffee @@ -12,6 +12,12 @@ module.exports = class AccountHomeView extends View super options return unless me + getRenderData: -> + c = super() + c.subs = {} + c.subs[sub] = 1 for sub in c.me.getEnabledEmails() + c + afterRender: -> super() @openModelView new AuthModalView if me.isAnonymous() diff --git a/server/levels/sessions/LevelSession.coffee b/server/levels/sessions/LevelSession.coffee index 228d0b1e8..6a3f17b45 100644 --- a/server/levels/sessions/LevelSession.coffee +++ b/server/levels/sessions/LevelSession.coffee @@ -42,4 +42,6 @@ LevelSessionSchema.pre 'save', (next) -> delete previous[id] if initd next() +LevelSessionSchema.index {user: 1, changed: -1}, {sparse: true, name: 'last played index'} + module.exports = LevelSession = mongoose.model('level.session', LevelSessionSchema, 'level.sessions')