Merge branch 'develop' of github.com:HabitRPG/habitrpg into add-flag-to-chat

This commit is contained in:
Blade Barringer 2014-12-11 10:21:19 -06:00
commit 0cf7bba822
11 changed files with 96 additions and 74 deletions

View file

@ -9,6 +9,10 @@ ul.challenge-accordion-header-specs
&.bg-transparent
background-color: transparent;
.glyphicon
color: white;
margin-right: 5px;
#create-challenge-btn
margin-bottom: 10px

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View file

@ -206,16 +206,16 @@ api.resetPassword = function(req, res, next){
if (!user) return res.send(500, {err:"Couldn't find a user registered for email " + email});
user.auth.local.salt = salt;
user.auth.local.hashed_password = hashed_password;
utils.sendEmail({
from: "HabitRPG <admin@habitrpg.com>",
to: email,
subject: "Password Reset for HabitRPG",
text: "Password for " + user.auth.local.username + " has been reset to " + newPassword + ". Log in at " + nconf.get('BASE_URL'),
html: "Password for <strong>" + user.auth.local.username + "</strong> has been reset to <strong>" + newPassword + "</strong>. Log in at " + nconf.get('BASE_URL')
utils.txnEmail(user, 'reset-password', [
{name: "NEW_PASSWORD", content: newPassword},
{name: "URL", content: nconf.get('BASE_URL')},
{name: "USERNAME", content: user.auth.local.username}
]);
user.save(function(err){
if(err) return next(err);
res.send('New password sent to '+ email);
email = salt = newPassword = hashed_password = null;
});
user.save();
res.send('New password sent to '+ email);
email = salt = newPassword = hashed_password = null;
});
};

View file

@ -7,6 +7,6 @@ script(id='partials/options.html', type="text/ng-template")
.container-fluid
.row
.col-md-12
.tab-content
.tab-content.row
.tab-pane.active
div(ui-view)

View file

@ -139,7 +139,7 @@ script(type='text/ng-template', id='partials/options.inventory.drops.html')
| {{::egg.value}}
span.Pet_Currency_Gem1x.inline-gems
//- buyable quest eggs
each egg,quest in {gryphon:'Gryphon',hedgehog:'Hedgehog',ghost_stag:'Deer',rat:'Rat',octopus:'Octopus',dilatory_derby:'Seahorse',harpy:'Parrot',rooster:'Rooster',spider:'Spider',owl:'Owl'}
each egg,quest in {gryphon:'Gryphon',hedgehog:'Hedgehog',ghost_stag:'Deer',rat:'Rat',octopus:'Octopus',dilatory_derby:'Seahorse',harpy:'Parrot',rooster:'Rooster',spider:'Spider',owl:'Owl',penguin:'Penguin'}
div(ng-show='user.achievements.quests.#{quest} > 1')
button.customize-option(popover='{{::Content.eggs.#{egg}.notes()}}', popover-title!=env.t("egg", {eggType: "{{::Content.eggs.#{egg}.text()}}"}), popover-trigger='mouseenter', popover-placement='top', ng-click='purchase("eggs", Content.eggs.#{egg})', class='Pet_Egg_#{egg}')
p

View file

@ -66,30 +66,31 @@ script(type='text/ng-template', id='partials/options.social.challenges.detail.ht
script(type='text/ng-template', id='partials/options.social.challenges.html')
.container-fluid
.row
.col-md-2.well#challenges-filters
h3=env.t('filter') + ':'
h4=env.t('groups')
ul.list-unstyled
a.btn.btn-xs.btn-default.pull-left(ng-click='selectAll()')=env.t('all')
a.btn.btn-xs.btn-default(ng-click='selectNone()')=env.t('none')
br
.checkbox(ng-repeat='group in groupsFilter')
label
input(type='checkbox', ng-model='search.group[group._id]')
| {{group.name}}
h4=env.t('membership')
.radio
label
input(type='radio', name='search-participation-radio', ng-click='search._isMember = true')
=env.t('participating')
.radio
label
input(type='radio', name='search-participation-radio', ng-click='search._isMember = false')
=env.t('notParticipating')
.radio
label
input(type='radio', name='search-participation-radio', ng-click='search._isMember = undefined', checked='checked')
=env.t('either')
.col-md-2
.well#challenges-filters
h3=env.t('filter') + ':'
h4=env.t('groups')
ul.list-unstyled
a.btn.btn-xs.btn-default.pull-left(ng-click='selectAll()')=env.t('all')
a.btn.btn-xs.btn-default(ng-click='selectNone()')=env.t('none')
br
.checkbox(ng-repeat='group in groupsFilter')
label
input(type='checkbox', ng-model='search.group[group._id]')
| {{group.name}}
h4=env.t('membership')
.radio
label
input(type='radio', name='search-participation-radio', ng-click='search._isMember = true')
=env.t('participating')
.radio
label
input(type='radio', name='search-participation-radio', ng-click='search._isMember = false')
=env.t('notParticipating')
.radio
label
input(type='radio', name='search-participation-radio', ng-click='search._isMember = undefined', checked='checked')
=env.t('either')
.col-md-10
// Creation form
button.btn.btn-success#create-challenge-btn(ng-click='create()', ng-hide='newChallenge')=env.t('createChallenge')

View file

@ -6,6 +6,7 @@ mixin chatMessages(inbox)
span(ng-if='::message.user')
a.label.label-default.chat-message.hidden-label
span.glyphicon.glyphicon-arrow-right(ng-if='::message.sent')
| &nbsp; &nbsp;
span {{::message.user}}&nbsp;
span(ng-class='userAdminGlyphiconStyleFromLevel(message.contributor.level)')
// this invisible username label is here to push the message text far enough right that the visible label can be floated to this point without covering up any of the text
@ -30,5 +31,6 @@ mixin chatMessages(inbox)
span.float-label
a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)')
span.glyphicon.glyphicon-arrow-right(ng-if='::message.sent')
| &nbsp;
span(tooltip='{{::contribText(message.contributor, message.backer)}}') {{::message.user}}&nbsp;
span(ng-class='::userAdminGlyphiconStyleFromLevel(message.contributor.level)')

View file

@ -1,4 +1,4 @@
a.pull-right.gem-wallet(ng-if='group.type!="party"', popover-trigger='mouseenter', popover-title=env.t('guildBankPop1'), popover=env.t('guildBankPop2'), popover-placement='left', popover-html='true')
a.pull-right.gem-wallet(ng-if='group.type!="party"', popover-trigger='mouseenter', popover-title=env.t('guildBankPop1'), popover=env.t('guildBankPop2'), popover-placement='left')
// <span class="task-action-btn tile flush bright add-gems-btn"></span>
span.task-action-btn.tile.flush.neutral
.Pet_Currency_Gem2x.Gems
@ -52,10 +52,9 @@ a.pull-right.gem-wallet(ng-if='group.type!="party"', popover-trigger='mouseenter
=env.t('members')
button.pull-right.btn.btn-primary(ng-click="openModal('invite-friends', {controller:'GroupsCtrl'})", ng-if='::group.type=="party"') Invite Friends
.panel-body.modal-fixed-height
div(ng-if='::group.type=="party"')
div.form-group(ng-if='::group.type=="party"')
=env.t('partyList')
br
select#partyOrder(
select.form-control#partyOrder(
ng-model='user.party.order',
ng-controller='ChatCtrl',
ng-options='k as v for (k , v) in partyOrderChoices',
@ -91,10 +90,10 @@ a.pull-right.gem-wallet(ng-if='group.type!="party"', popover-trigger='mouseenter
.panel-footer(ng-if='::group.type!="party"')
form.form-inline(ng-submit='invite(group)')
//.alert.alert-danger(ng-show='_groupError') {{_groupError}}
.form-group
.input-group
input.form-control(type='text', placeholder=env.t('userId'), ng-model='group.invitee')
|&nbsp;
input.btn.btn-default(type='submit', value=env.t('invite'))
span.input-group-btn
input.btn.btn-default(type='submit', value=env.t('invite'))
a.btn.btn-danger(data-id='{{group.id}}', ng-click='clickLeave(group, $event)')=env.t('leave')

View file

@ -16,6 +16,7 @@ script(type='text/ng-template', id='partials/options.social.inbox.html')
.checkbox
label
input(type='checkbox', ng-model='user.inbox.optOut', ng-change='set({"inbox.optOut": user.inbox.optOut?true: false})')
| &nbsp;
span.hint(popover-trigger='mouseenter', popover-placement='right', popover=env.t('optOutPopover'))=env.t('optOut')
script(type='text/ng-template', id='partials/options.social.tavern.html')
@ -44,7 +45,7 @@ script(type='text/ng-template', id='partials/options.social.party.html')
include ./create-group
script(type='text/ng-template', id='partials/options.social.guilds.public.html')
div(ng-repeat='invitation in user.invitations.guilds')
div.col-xs-12(ng-repeat='invitation in user.invitations.guilds' style='margin-bottom: 1.5em')
h3=env.t('invitedTo', {name: '{{invitation.name}}'})
a.btn.btn-success(data-type='guild', ng-click='join(invitation)')=env.t('accept')
a.btn.btn-danger(ng-click='reject(invitation)')=env.t('reject')
@ -57,7 +58,7 @@ script(type='text/ng-template', id='partials/options.social.guilds.public.html')
ul.pull-right.challenge-accordion-header-specs
li='{{::group.memberCount}} ' + env.t('members')
// join / leave
li
li.bg-transparent
a.btn.btn-sm.btn-danger(ng-if="::group._isMember", ng-click='clickLeave(group, $event)')
span.glyphicon.glyphicon-ban-circle
=env.t('leave')
@ -71,7 +72,8 @@ script(type='text/ng-template', id='partials/options.social.guilds.detail.html')
include ./group
script(type='text/ng-template', id='partials/options.social.guilds.create.html')
include ./create-group
div.col-xs-12
include ./create-group
script(type='text/ng-template', id='partials/options.social.guilds.html')
ul.options-submenu
@ -93,7 +95,8 @@ script(type='text/ng-template', id='partials/options.social.html')
ul.options-menu
li(ng-class="{ active: $state.includes('options.social.inbox') }")
a(ui-sref='options.social.inbox')
| Inbox&nbsp;
=env.t("inbox")
| &nbsp;
span.badge.badge-danger(ng-if='user.inbox.newMessages') {{user.inbox.newMessages}}
li(ng-class="{ active: $state.includes('options.social.tavern') }")
a(ui-sref='options.social.tavern')

View file

@ -26,7 +26,8 @@ nav.toolbar(ng-controller='AuthCtrl', ng-class='{active: isToolbarHidden}')
ul.toolbar-submenu
li
a(ui-sref='options.social.inbox')
| Inbox&nbsp;
=env.t("inbox")
| &nbsp;
span.badge.badge-danger(ng-if='user.inbox.newMessages') {{user.inbox.newMessages}}
li
a(ui-sref='options.social.tavern')=env.t('tavern')
@ -101,7 +102,8 @@ nav.toolbar(ng-controller='AuthCtrl', ng-class='{active: isToolbarHidden}')
ul.toolbar-submenu(ng-click='expandMenu(null)')
li
a(ui-sref='options.social.inbox')
| Inbox&nbsp;
=env.t("inbox")
| &nbsp;
span.badge.badge-danger(ng-if='user.inbox.newMessages') {{user.inbox.newMessages}}
li
a(ui-sref='options.social.tavern')=env.t('tavern')

View file

@ -1,38 +1,49 @@
h5 Gifting Subscriptions And Gems, New Subscription Benefits, Mysterious Time Travelers, Steampunk Item Sets, And Block Subscriptions!
table.table.table-striped
h5 PENGUIN PET QUEST AND WINTER PLOT-LINE
tr
td
h5 Gifting Subscriptions And Gems
p You can now gift subscriptions and gems to other people (bottom-left in a user's profile window)! If you need holiday present ideas for the awesome Habiticans in your life, or just want to do something nice for someone, consider getting them a subscription to our fair site or tossing a few gems their way. They'll thank you, and so will we <3
p.small.muted by Lefnire
h5 Penguin Pet Quest
.quest_penguin.pull-right
p Habiticans wanted to go ice-skating, but instead, a giant penguin is freezing everything in sight! All we wanted was to go ice-skating... Can you get this penguin to chill out? If so, you'll be rewarded with some penguins of your own!
p.small.muted by Melynnrose, Breadstrings, Rattify, Painter de Cluster, Daniel the Bard, and Leephon
tr
td
h5 New Subscription Benefits!
p We've added new benefits for long-term subscribers! Now for every 3 months that you are subscribed consecutively, your monthly gold-to-gem conversion cap will increase by 5, up to a total of 50 gems per month! Plus, for each three months of consecutive subscription, you will receive 1 Mystic Hourglass. What does that do? Read on!
p.small.muted by Lefnire
tr
td
h5 Mysterious Time Travelers
.npc_timetravelers.pull-right
p If you've received a Mystic Hourglass for being subscribed for 3 consecutive months, you can now summon the <a href='/#/options/inventory/timetravelers' target='_blank'>Mysterious Time Travelers</a> to get you one Mystery Item Set from the past! Being subscribed for multiple consecutive months is the only way to get these past items if you missed them. They will never be available to non-subscribers.
p.small.muted by Lemoness, Megan, Lefnire
tr
td
h5 Steampunk Item Sets
.promo_mystery_3014.pull-right
p The Mysterious Time Travelers are also offering two brand-new Item Sets - the Steampunk Standard Item Set and the Steampunk Accessory Item Set! These Item Sets can only be obtained if you have a Mystic Hourglass.
p.small.muted by Megan
tr
td
h5 Block Subscriptions
p Don't want to wait for your consecutive months to stack up? You can now subscribe in a fixed block period of 1 month, 3 months, 6 months, or 1 year! If you subscribe for a block period of 1 year, you get a 20% discount. PLUS, you'll instantly get all the benefits of consecutive subscription for that time period (e.g. getting a block subscription for 6 months will instantly raise your monthly gold-to-gem cap by 10)!
p.small.muted by Lefnire
h5 Winter Plot-Line
p Lemoness enters the Tavern with worrying news from the far north of Habitica. "Nobody's heard from the Stoïkalm Steppes for over a week," she says. "It's hard to imagine anything troubling the citizens there, since it's such a placid part of the continent... But just in case, maybe I should pay a visit." Sounds like a good plan to us!
hr
a(href='/static/old-news', target='_blank') Read older news
mixin oldNews
h5 12/3/2014 - Gifting Subscriptions And Gems, New Subscription Benefits, Mysterious Time Travelers, Steampunk Item Sets, And Block Subscriptions!
table.table.table-striped
tr
td
h5 Gifting Subscriptions And Gems
p You can now gift subscriptions and gems to other people (bottom-left in a user's profile window)! If you need holiday present ideas for the awesome Habiticans in your life, or just want to do something nice for someone, consider getting them a subscription to our fair site or tossing a few gems their way. They'll thank you, and so will we <3
p.small.muted by Lefnire
tr
td
h5 New Subscription Benefits!
p We've added new benefits for long-term subscribers! Now for every 3 months that you are subscribed consecutively, your monthly gold-to-gem conversion cap will increase by 5, up to a total of 50 gems per month! Plus, for each three months of consecutive subscription, you will receive 1 Mystic Hourglass. What does that do? Read on!
p.small.muted by Lefnire
tr
td
h5 Mysterious Time Travelers
.npc_timetravelers.pull-right
p If you've received a Mystic Hourglass for being subscribed for 3 consecutive months, you can now summon the <a href='/#/options/inventory/timetravelers' target='_blank'>Mysterious Time Travelers</a> to get you one Mystery Item Set from the past! Being subscribed for multiple consecutive months is the only way to get these past items if you missed them. They will never be available to non-subscribers.
p.small.muted by Lemoness, Megan, Lefnire
tr
td
h5 Steampunk Item Sets
.promo_mystery_3014.pull-right
p The Mysterious Time Travelers are also offering two brand-new Item Sets - the Steampunk Standard Item Set and the Steampunk Accessory Item Set! These Item Sets can only be obtained if you have a Mystic Hourglass.
p.small.muted by Megan
tr
td
h5 Block Subscriptions
p Don't want to wait for your consecutive months to stack up? You can now subscribe in a fixed block period of 1 month, 3 months, 6 months, or 1 year! If you subscribe for a block period of 1 year, you get a 20% discount. PLUS, you'll instantly get all the benefits of consecutive subscription for that time period (e.g. getting a block subscription for 6 months will instantly raise your monthly gold-to-gem cap by 10)!
p.small.muted by Lefnire
h5 12/1/2014 - SITE OUTAGE EXPLANATION, DECEMBER BACKGROUNDS, AND DECEMBER MYSTERY ITEM SET
table.table.table-striped
tr