Merge branch 'develop' of https://github.com/HabitRPG/habitrpg into merchant-button-fix

This commit is contained in:
Thrashmandicoot
2015-10-30 03:43:35 -07:00
594 changed files with 16411 additions and 12372 deletions
@@ -4,6 +4,13 @@
h3.equipment-title.hint(popover-trigger='mouseenter',
popover-placement='right', popover-append-to-body='true',
popover=env.t('battleGearText'))=env.t('battleGear')
.checkbox.equipment-title
label
input(type="checkbox", ng-model="user.preferences.autoEquip",
ng-change='set({"preferences.autoEquip":user.preferences.autoEquip ? true : false})')
|  
=env.t('autoEquipBattleGear')
div
button.btn.btn-default(type="button", ng-click='dequip("battleGear");') {{env.t("unequipBattleGear")}}
+3 -2
View File
@@ -4,12 +4,13 @@ include ../../shared/mixins
.row
.col-md-6
.clearfix
.npc_ian.pull-left-sm.col-centered
div(class="#{env.worldDmg.quests ? 'npc_ian_broken' : 'npc_ian'}").pull-left-sm.col-centered
.popover.static-popover.fade.right.in.pull-left-sm.col-centered
.arrow.hidden-xs
h3.popover-title=env.t('ian')
.popover-content
p=env.t('ianText')
p(ng-if='env.worldDmg.quests')=env.t('ianBrokenText')
p(ng-if='!env.worldDmg.quests')=env.t('ianText')
h3.equipment-title=env.t('yourQuests')
+ownedQuests(true,'right')
@@ -1,11 +1,12 @@
.container-fluid
.stable.row: .col-xs-12
.seasonalshop_open.pull-left-sm.col-centered
div(class="#{env.worldDmg.seasonalShop ? 'seasonalshop_broken' : 'seasonalshop_open'}").pull-left-sm.col-centered
.popover.static-popover.fade.right.in.pull-left-sm.col-centered
.arrow.hidden-xs
h3.popover-title!=env.t('seasonalShopTitle', {linkStart:"<a href='http://blog.habitrpg.com/who' target='_blank'>", linkEnd: "</a>"})
.popover-content
p!=env.t('seasonalShopFallText')
p(ng-if='!env.worldDmg.seasonalShop')!=env.t('seasonalShopFallText')
p(ng-if='env.worldDmg.seasonalShop')!=env.t('seasonalShopFallTextBroken')
.well(ng-if='User.user.achievements.rebirths > 0')=env.t('seasonalShopRebirth')
@@ -12,7 +12,7 @@
.pull-right
span.inventory_special_trinket.inline-gems
b x{{user.purchased.plan.consecutive.trinkets}}
p!=env.t('timeTravelersPopover', {linkStart: "<a href='http://habitica.wikia.com/wiki/Mystery_Item' target='_blank'>", linkEnd: "</a>"})
p!=env.t('timeTravelersPopover')
.row: .col-md-7
.alert.alert-info(ng-if='hasAllTimeTravelerItems()')=env.t('timeTravelersAlreadyOwned')
+22 -22
View File
@@ -103,19 +103,19 @@ script(type='text/ng-template', id='partials/options.settings.settings.html')
br.visible-xs
button.btn.btn-block.btn-primary(ng-click='openDayStartModal(dayStart)',
ng-disabled='dayStart == user.preferences.dayStart')
| Save Custom Day Start
=env.t('saveCustomDayStart')
.personal-options.col-md-6
.panel.panel-default
.panel-heading
span Registration
span=env.t('registration')
.panel-body
div(ng-if='user.auth.facebook.id')
button.btn.btn-primary(disabled='disabled', ng-if='!user.auth.local.username')=env.t('registeredWithFb')
button.btn.btn-danger(ng-click='http("delete","/api/v2/user/auth/social",null,"detachedFacebook")', ng-if='user.auth.local.username')=env.t('detachFacebook')
hr
div(ng-if='!user.auth.local.username')
p Add local authentication:
p=env.t('addLocalAuth')
form(ng-submit='http("post","/api/v2/register",localAuth,"addedLocalAuth")', ng-init='localAuth={}', name='localAuth', novalidate)
//-.alert.alert-danger(ng-messages='changeUsername.$error && changeUsername.submitted')=env.t('fillAll')
.form-group
@@ -189,15 +189,15 @@ script(type='text/ng-template', id='partials/options.settings.promo.html')
small= env.t('couponText')
div(ng-if='user.contributor.sudo')
hr
h4 Generate Codes
h4=env.t('generateCodes')
form.form(role='form',ng-submit='generateCodes(_codes)',ng-init='_codes={}')
.form-group
input.form-control(type='text',ng-model='_codes.event',placeholder="Event code (eg, 'wondercon')")
.form-group
input.form-control(type='number',ng-model='_codes.count',placeholder="Number of codes to generate (eg, 250)")
.form-group
button.btn.btn-primary(type='submit') Generate
a.btn.btn-default(href='/api/v2/coupons?_id={{user._id}}&apiToken={{user.apiToken}}') Get Codes
button.btn.btn-primary(type='submit')=env.t('generate')
a.btn.btn-default(href='/api/v2/coupons?_id={{user._id}}&apiToken={{user.apiToken}}')=env.t('getCodes')
script(type='text/ng-template', id='partials/options.settings.api.html')
.container-fluid
@@ -214,12 +214,12 @@ script(type='text/ng-template', id='partials/options.settings.api.html')
hr
h2 Webhooks
h2=env.t('webhooks')
table.table.table-striped
thead(ng-if='hasWebhooks')
tr
th Enabled
th Webhook URL
th=env.t('enabled')
th=env.t('webhookURL')
th
tbody
tr(ng-repeat="webhook in user.preferences.webhooks | toArray:true | orderBy:'sort'")
@@ -235,9 +235,9 @@ script(type='text/ng-template', id='partials/options.settings.api.html')
td(colspan=2)
form.form-horizontal(ng-submit='addWebhook(_newWebhook.url)')
.form-group.col-sm-10
input.form-control(type='url', ng-model='_newWebhook.url', placeholder='Webhook URL')
input.form-control(type='url', ng-model='_newWebhook.url', placeholder=env.t('webhookURL'))
.col-sm-2
button.btn.btn-sm.btn-primary(type='submit') Add
button.btn.btn-sm.btn-primary(type='submit')=env.t('add')
script(id='partials/options.settings.export.html', type="text/ng-template")
.container-fluid
@@ -258,7 +258,7 @@ mixin subPerks()
tr
td
span.hint(popover=env.t('buyGemsGoldText', {gemCost: "{{Shared.planGemLimits.convRate}}", gemLimit: "{{Shared.planGemLimits.convCap}}"}),popover-trigger='mouseenter',popover-placement='right') #{env.t('buyGemsGold')}&nbsp;
span.badge.badge-success(ng-show='_subscription.key!="basic_earned"') Cap raised to {{ [25 + user.purchased.plan.consecutive.gemCapExtra + Math.floor(Content.subscriptionBlocks[_subscription.key].months/3*5), 50] | min }}
span.badge.badge-success(ng-show='_subscription.key!="basic_earned"')=env.t('buyGemsGoldCap', {amount: '{{:: gemGoldCap(_subscription) | min }}'})
tr
td
span.hint(popover=env.t('retainHistoryText'),popover-trigger='mouseenter',popover-placement='right')=env.t('retainHistory')
@@ -269,8 +269,8 @@ mixin subPerks()
td
span.hint(popover=env.t('mysteryItemText'),popover-trigger='mouseenter',popover-placement='right') #{env.t('mysteryItem')}&nbsp;
div(ng-show='_subscription.key!="basic_earned"')
.badge.badge-success +{{Math.floor(Content.subscriptionBlocks[_subscription.key].months/3)}} Mystic Hourglass
.small.muted Mystic Hourglasses allow purchasing a previous month's Mystery Item set.
.badge.badge-success=env.t('mysticHourglass', {amount: '+{{:: numberOfMysticHourglasses(_subscription)}}'})
.small.muted=env.t('mysticHourglassText')
tr
td
span.hint(popover=env.t('supportDevsText'),popover-trigger='mouseenter',popover-placement='right')=env.t('supportDevs')
@@ -324,17 +324,17 @@ script(id='partials/options.settings.subscription.html',type='text/ng-template')
| #{env.t('subCanceled')} <strong>{{moment(user.purchased.plan.dateTerminated).format('MM/DD/YYYY')}}</strong>
tr(ng-if='!user.purchased.plan.dateTerminated'): td
h4=env.t('subscribed')
p(ng-if='user.purchased.plan.planId') Recurring ${{Content.subscriptionBlocks[user.purchased.plan.planId].price}} each {{Content.subscriptionBlocks[user.purchased.plan.planId].months}} Month(s) ({{user.purchased.plan.paymentMethod}})
p(ng-if='user.purchased.plan.planId')=env.t('purchasedPlanId', {price: '{{Content.subscriptionBlocks[user.purchased.plan.planId].price}}', months: '{{Content.subscriptionBlocks[user.purchased.plan.planId].months}}', plan: '{{user.purchased.plan.paymentMethod}}'})
tr(ng-if='user.purchased.plan.extraMonths'): td
span.glyphicon.glyphicon-credit-card
| You have {{user.purchased.plan.extraMonths | number:2}} months of subscription credit.
| &nbsp;#{env.t('purchasedPlanExtraMonths', {months: '{{user.purchased.plan.extraMonths | number:2}}'})}
tr(ng-if='user.purchased.plan.consecutive.count || user.purchased.plan.consecutive.offset'): td
span.glyphicon.glyphicon-forward
| &nbsp;Consecutive Subscription
| &nbsp;#{env.t('consecutiveSubscription')}
ul.list-unstyled
li Consecutive Months: {{user.purchased.plan.consecutive.count + user.purchased.plan.consecutive.offset}}
li Gem Cap Extra: {{user.purchased.plan.consecutive.gemCapExtra}}
li Mystic Hourglasses: {{user.purchased.plan.consecutive.trinkets}}
li #{env.t('consecutiveMonths')} {{user.purchased.plan.consecutive.count + user.purchased.plan.consecutive.offset}}
li #{env.t('gemCapExtra')} {{user.purchased.plan.consecutive.gemCapExtra}}
li #{env.t('mysticHourglasses')} {{user.purchased.plan.consecutive.trinkets}}
div(ng-if='!user.purchased.plan.customerId || (user.purchased.plan.customerId && user.purchased.plan.dateTerminated)')
.form-group
.radio(ng-repeat='block in Content.subscriptionBlocks | toArray | omit: "discount==true" | orderBy:"months"')
@@ -355,8 +355,8 @@ script(id='partials/options.settings.subscription.html',type='text/ng-template')
h3(ng-if='(user.purchased.plan.customerId && user.purchased.plan.dateTerminated)')= env.t("resubscribe")
a.btn.btn-primary(ng-click='Payments.showStripe({subscription:_subscription.key, coupon:_subscription.coupon})', ng-disabled='!_subscription.key')= env.t('card')
a.btn.btn-success(href='/paypal/subscribe?_id={{user._id}}&apiToken={{user.apiToken}}&sub={{_subscription.key}}{{_subscription.coupon ? "&coupon="+_subscription.coupon : ""}}', ng-disabled='!_subscription.key') PayPal
a.btn.btn-warning(ng-click="Payments.amazonPayments.init({type: 'subscription', subscription:_subscription.key, coupon:_subscription.coupon})") Amazon Payments
a.btn.btn-success(href='/paypal/subscribe?_id={{user._id}}&apiToken={{user.apiToken}}&sub={{_subscription.key}}{{_subscription.coupon ? "&coupon="+_subscription.coupon : ""}}', ng-disabled='!_subscription.key')=env.t('paypal')
a.btn.btn-warning(ng-click="Payments.amazonPayments.init({type: 'subscription', subscription:_subscription.key, coupon:_subscription.coupon})")=env.t('amazonPayments')
div(ng-if='user.purchased.plan.customerId')
.btn.btn-primary(ng-if='!user.purchased.plan.dateTerminated && user.purchased.plan.paymentMethod=="Stripe"', ng-click='Payments.showStripeEdit()')=env.t('subUpdateCard')
.btn.btn-sm.btn-danger(ng-if='!user.purchased.plan.dateTerminated', ng-click='Payments.cancelSubscription()')=env.t('cancelSub')
+6 -4
View File
@@ -186,11 +186,13 @@ script(type='text/ng-template', id='partials/options.social.challenges.html')
| {{challenge.group.name}}
a(ui-sref="options.social.party" ng-if="challenge.group.type=='party'")
| {{challenge.group.name}}
li
li(ng-if='challenge.leader.profile.name')
=env.t('by') + ' '
a(ng-click='clickMember(challenge.leader._id, true)') {{challenge.leader.profile.name}}
li
=env.t('participants', {membercount: "{{challenge.memberCount}}"})
a(ng-click='clickMember(challenge.leader._id, true)') {{::challenge.leader.profile.name}}
li(ng-if='!challenge.leader.profile.name',
popover=env.t('noChallengeOwnerPopover'),
popover-trigger='mouseenter')=env.t('noChallengeOwner')
li=env.t('participants', {membercount: "{{challenge.memberCount}}"})
li(ng-show='challenge.prize')
p!=env.t('prizeValue', {gemcount: "{{challenge.prize}}", gemicon: "<span class='inline-block Pet_Currency_Gem1x'></span>"})
li.bg-transparent
+1 -4
View File
@@ -1,8 +1,5 @@
div.chat-form.guidelines-not-accepted(ng-if='!user.flags.communityGuidelinesAccepted')
p If you would like to post messages in the Tavern or any party or guild chat, please first read our
|&nbsp;
a(target='_blank', href='/static/community-guidelines')=env.t('communityGuidelines')
|&nbsp;and then click the button below to indicate that you accept them.
p!=env.t('requestAcceptGuidelines', {linkStart: '<a target="_blank", href="/static/community-guidelines">', linkEnd: '</a>'})
.chat-controls
div
button.btn.btn-warning(ng-click='acceptCommunityGuidelines()')=env.t('iAcceptCommunityGuidelines')
@@ -8,17 +8,17 @@ else
.meter-label(tooltip=env.t('bossHP'))
span.glyphicon.glyphicon-heart
.meter.health
.bar(ng-style='{width: Shared.percent(progress.hp, boss.hp) + "%"}')
.bar(ng-style='{width: Shared.percent(group.quest.progress.hp, Content.quests[group.quest.key].boss.hp) + "%"}')
span.meter-text.value
| {{Math.ceil(progress.hp) | roundLargeNumbers}}
| &nbsp;/ {{::boss.hp | roundLargeNumbers}}
div(ng-if='boss.rage')
.meter-label(tooltip='Rage')
| {{Math.ceil(group.quest.progress.hp) | roundLargeNumbers}}
| &nbsp;/ {{::Content.quests[group.quest.key].boss.hp | roundLargeNumbers}}
div(ng-if='Content.quests[group.quest.key].boss.rage')
.meter-label(tooltip=env.t('rage'))
span.glyphicon.glyphicon-fire
.meter.mana(popover="{{::boss.rage.description()}}",
popover-title="{{::boss.rage.title()}}",
.meter.mana(popover="{{::Content.quests[group.quest.key].boss.rage.description()}}",
popover-title="{{::Content.quests[group.quest.key].boss.rage.title()}}",
popover-trigger='mouseenter', popover-placement='bottom')
.bar(ng-style='{width: Shared.percent(progress.rage, boss.rage.value) + "%"}')
.bar(ng-style='{width: Shared.percent(group.quest.progress.rage, Content.quests[group.quest.key].boss.rage.value) + "%"}')
span.meter-text.value
| {{Math.ceil(progress.rage) | roundLargeNumbers}}
| &nbsp;/ {{::boss.rage.value | roundLargeNumbers}}
| {{Math.ceil(group.quest.progress.rage) | roundLargeNumbers}}
| &nbsp;/ {{::Content.quests[group.quest.key].boss.rage.value | roundLargeNumbers}}
@@ -1,14 +1,19 @@
.npc_ian.pull-left
div(class="#{env.worldDmg.quests ? 'npc_ian_broken' : 'npc_ian'}").pull-left
div(ng-if='::Content.quests[group.quest.key].boss')
if tavern
p!=env.t('tavernBossInfo')
p(ng-if='!env.worldDmg.quests')!=env.t('tavernBossInfo')
p(ng-if='env.worldDmg.quests')!=env.t('tavernBossInfoBroken')
else
p!=env.t('bossDmg1')
p(ng-if='!env.worldDmg.quests')!=env.t('bossDmg1')
p(ng-if='env.worldDmg.quests')!=env.t('bossDmg1Broken')
br
p=env.t('bossDmg2')
p(ng-if='!env.worldDmg.quests')=env.t('bossDmg2')
p(ng-if='env.worldDmg.quests')=env.t('bossDmg2Broken')
div(ng-if='::Content.quests[group.quest.key].collect')
p=env.t('bossColl1')
p(ng-if='!env.worldDmg.quests')=env.t('bossColl1')
p(ng-if='env.worldDmg.quests')=env.t('bossColl1Broken')
br
p=env.t('bossColl2')
p(ng-if='!env.worldDmg.quests')=env.t('bossColl2')
p(ng-if='env.worldDmg.quests')=env.t('bossColl2Broken')
@@ -9,12 +9,15 @@ div(ng-if='group.quest.active===true')
include ./collectionStats
div(ng-bind-html='::Content.quests[group.quest.key].notes()')
unless tavern
quest-rewards(key='{{::group.quest.key}}')
tab(heading=env.t('questParticipants'))
+participants(true)
if tavern
include ./bossStats
div(ng-bind-html='::Content.quests[group.quest.key].notes()')
hr
include ./ianQuestInfo
@@ -18,8 +18,9 @@ div(ng-if='group.quest.active===false')
hr
.npc_ian.pull-left
p=env.t('questStart')
div(class="#{env.worldDmg.quests ? 'npc_ian_broken' : 'npc_ian'}").pull-left
p(ng-if='!env.worldDmg.quests')=env.t('questStart')
p(ng-if='env.worldDmg.quests')=env.t('questStartBroken')
span(ng-if='user.party.quest.RSVPNeeded')
button.btn.btn-sm.btn-success(ng-click='questAccept()')=env.t('accept')
+4 -2
View File
@@ -14,10 +14,12 @@
h3.popover-title
a(target='_blank', href='http://www.kickstarter.com/profile/2014640723')=env.t('daniel')
.popover-content
| {{user.preferences.sleep ? env.t('innText',{name: user.profile.name}) : env.t('danielText')}}
span(ng-if='!env.worldDmg.tavern') {{user.preferences.sleep ? env.t('innText',{name: user.profile.name}) : env.t('danielText')}}
span(ng-if='env.worldDmg.tavern') {{user.preferences.sleep ? env.t('innTextBroken',{name: user.profile.name}) : env.t('danielTextBroken')}}
button.btn-block.btn.btn-lg.btn-success(ng-click='User.user.ops.sleep({})')
| {{user.preferences.sleep ? env.t('innCheckOut') : env.t('innCheckIn')}}
span(ng-if='!user.preferences.sleep')=env.t('danielText2')
span(ng-if='!user.preferences.sleep && !env.worldDmg.tavern')=env.t('danielText2')
span(ng-if='!user.preferences.sleep && env.worldDmg.tavern')=env.t('danielText2Broken')
// Resources
+6 -2
View File
@@ -1,4 +1,5 @@
footer.footer(ng-controller='FooterCtrl')
div(id='fb-root')
.container
.row
.col-sm-3
@@ -63,16 +64,19 @@ footer.footer(ng-controller='FooterCtrl')
table
tr
td
a.addthis_button_facebook_like(fb:like:layout='button_count')
.fb-like(data-href='https://habitica.com/static/front', data-layout='button', data-action='like', data-share='true')
tr
td
a.twitter-share-button(href='https://twitter.com/intent/tweet?text=Improve+yourself+in+the+land+of+Habitica!&via=habitica&url=https://habitica.com/&count=none')=env.t('tweet')
tr
td
iframe(src='/bower_components/github-buttons/github-btn.html?user=habitrpg&repo=habitrpg&type=watch&count=true', allowtransparency='true', frameborder='0', scrolling='0', width='85px', height='20px')
a.tumblr-share-button(data-href='https://habitica.com/static/front', data-notes='none')
tr
td
a.addthis_button_google_plusone(g:plusone:size='medium')
tr
td
iframe(src='/bower_components/github-buttons/github-btn.html?user=habitrpg&repo=habitrpg&type=watch&count=true', allowtransparency='true', frameborder='0', scrolling='0', width='85px', height='20px')
else if (env.NODE_ENV==='development' || env.NODE_ENV==='test') && !env.isStaticPage
h4 Debug
.btn-group-vertical
+5 -3
View File
@@ -38,9 +38,11 @@ script(type='text/ng-template', id='modals/showQuest.html')
.modal-body
+questInfo
hr
.npc_ian.pull-left
p=env.t('questSend')
p=env.t('questWarning')
div(class="#{env.worldDmg.quests ? 'npc_ian_broken' : 'npc_ian'}").pull-left
p(ng-if='!env.worldDmg.quests')=env.t('questSend')
p(ng-if='!env.worldDmg.quests')=env.t('questWarning')
p(ng-if='env.worldDmg.quests')=env.t('questSendBroken')
p(ng-if='env.worldDmg.quests')=env.t('questWarningBroken')
.modal-footer
button.btn.btn-default(ng-click='closeQuest(); $close()')=env.t('cancel')
button.btn.btn-primary(ng-click='questInit()')
+1 -1
View File
@@ -9,7 +9,7 @@ script(type='text/ng-template', id='modals/reroll.html')
.modal-footer
button.btn.btn-default(ng-click='$close()')=env.t('neverMind')
span(ng-if='user.balance < 1')
a.btn.btn-success(ng-click='openModal("buyGems",{track:{"Gems > Reroll"}})')=env.t('buyMoreGems')
a.btn.btn-success(ng-click='openModal("buyGems",{track:"Gems > Reroll"})')=env.t('buyMoreGems')
span.gem-cost=env.t('notEnoughGems')
span(ng-if='user.balance >= 1', ng-controller='SettingsCtrl')
a.btn.btn-danger(ng-click='$close(); reroll()')=env.t('fortify')
+111 -17
View File
@@ -1,32 +1,126 @@
h2 10/5/2015 - OCTOBER BACKGROUNDS REVEALED, COSTUME CHALLENGE BEGINS, AND FALL PLOT-LINE CONTINUES
h2 10/27/2015 - BURNOUT STRIKES AGAIN! PLUS, SPOOKY POTIONS VANISHING SOON
hr
tr
td
.background_harvest_moon.pull-right
h3 October Backgrounds Revealed
p There are three new avatar backgrounds in the <a href='/#/options/profile/backgrounds'>Background Shop!</a> Now your avatar can slog through a Slimy Swamp, cackle under the Harvest Moon, or shiver in the Swarming Darkness!
p.small.muted by Leephon, midori88, and Draayder
.npc_daniel_broken.pull-right
h3 World Boss: Burnout Uses Exhaust Strike!
p Many Habiticans have been hiding from Burnout in the Tavern, but no longer! With a screeching howl, Burnout rakes the Tavern with its white-hot hands. As the Tavern patrons flee, Daniel is caught in Burnout's grip, and transforms into an Exhaust Spirit right in front of you!
br
p This hot-headed horror has gone on for too long. Don't give up... we're so close to vanquishing Burnout for once and for all!
br
p Late to the fight? Learn about Burnout and how to defeat World Bosses <a href='http://habitica.wikia.com/wiki/Boss#World_Bosses' target='_blank'>here</a>.
tr
td
h3 Costume Challenge Begins
p The Community Costume Challenge has begun! Between now and October 31st, dress up as your avatar in real life and post a photo on social media to get the coveted Costume Challenge badge! Read the full rules on the Challenge page <a href='/#/options/groups/challenges/0b3d1116-89d3-4025-8a9e-593bc28e9cff'>here</a>.
p.small.muted by Lemoness
tr
td
h3 Fall Plot-Line Continues
p Although we are now well into autumn, the Flourishing Fields are locked in a sweltering heat wave. The candies grow sticky in the sun, and the Spooky Pets lie panting in the shade. But this is minor news compared to the calamity that has just occurred.
.Pet-Wolf-Spooky.pull-right
h3 Spooky Potions Vanishing Soon
p If you're hoping to collect all the Spooky Pets, be sure to do it soon. The Spooky Hatching Potions will disappear from the Market on November 1st!
br
p The Joyful Reaper is gone.
br
p The citizens of the Flourishing Fields are working frantically to find their lost ruler, but many of their search parties have not returned. Those few that do make it back are empty-handed. Worse yet, they report frightening hordes of spirits drifting at the edges of the Fields.
br
p Redphoenix grimly gathers her scouts. "If these spirits are a threat, we need to face them directly," she says. "There's no point in procrastination." Without fuss or fanfare, they set off into the night.
p If you purchase Spooky Hatching Potions before November 1st but don't have a chance to use them, they will remain in your inventory. Be sure to stock up now, or you'll have to wait a whole year for them to return!
if menuItem !== 'oldNews'
hr
a(href='/static/old-news', target='_blank') Read older news
mixin oldNews
h2 10/26/2015 - OCTOBER SUBSCRIBER ITEM REVEALED
tr
td
.promo_mystery_201510.pull-right
h3 October Subscriber Item: Horned Goblin!
p The October Subscriber Item has been revealed: the Horned Goblin Set! All October subscribers will receive the Goblin Horns and the Goblin Tail. You still have four days to <a href='/#/options/settings/subscription'>subscribe</a> and receive the item set! Thank you so much for your support - we really do rely on you to keep Habitica free to use and running smoothly.
p.small.muted by Lemoness
h2 10/21/2015 - FROG PET QUEST, TO-DO SORTING FIX, AND SECOND WORLD BOSS EXHAUST STRIKE
tr
td
span.Mount_Body_Frog-Base.pull-right
span.Mount_Head_Frog-Base.pull-right(style='margin:0')
h3 Frog Pet Quest
p Deep in the Swamps of Stagnation, you find your path obstructed by debris... and an angry amphibian. Yuck! If you complete the <a href='/#/options/inventory/quests'>Clutter Frog quest</a>, you'll be rewarded with some princely Frog pets!
p.small.muted Art by starsystemic, RosemonkeyCT, Jon Arjinborn, and Breadstrings
p.small.muted Writing by Fluitare
tr
td
h3 To-Do Sorting Fix
p To-dos will now stay sorted when you drag and drop them! Often, To-Dos used to change their order unless you cleared your completed To-Dos on a regular basis. That should no longer be a problem.
p.small.muted by ikadzuchi and Alys
tr
td
.seasonalshop_broken.pull-right
h3 World Boss: Burnout Uses Exhaust Strike!
p Ahh!!! Our incomplete Dailies have fed the flames of Burnout, and now it has enough energy to strike again! It lets loose a gout of spectral flame that sears the Seasonal Shop. You're horrified to see that the cheery Seasonal Sorceress has been transformed into a sorrowful Exhaust Spirit!
br
p We have to rescue our NPCs! Hurry, Habiticans, complete your tasks and defeat Burnout before it strikes for a third time!
br
p Late to the fight? Learn about Burnout and how to defeat World Bosses <a href='http://habitica.wikia.com/wiki/Boss#World_Bosses' target='_blank'>here</a>.
h2 10/14/2015 - JACK O'LANTERN PETS AND MOUNTS! WORLD BOSS EXHAUST STRIKE!
hr
tr
td
.Pet-JackOLantern-Base.pull-right
h3 Jack O'Lantern Pets and Mounts
p The Flourishing Fields are full of cute carved pumpkins - and it looks like one has followed you home! It must be frightened of Burnout and looking for an adventurer to protect it.
br
p Those of you who weren't around last Fall Festival have received a pet Jack-O-Lantern, and those of you who got one last year have received a Jack-O-Lantern Mount! Happy Fall Festival.
p.small.muted by Lemoness
tr
td
.npc_ian_broken.pull-right
h3 World Boss: Burnout Uses Exhaust Strike!
p Oh no! Despite our best efforts, we've let some Dailies get away from us, and now Burnout is inflamed with energy! With a crackling snarl, it engulfs Ian the Quest Master in a surge of spectral fire. As fallen quest scrolls smolder, the smoke clears, and you see that Ian has been drained of energy and turned into a drifting Exhaust Spirit!
br
p Only defeating Burnout can break the spell and save our beloved Quest Master. Let's keep our Dailies in check and defeat this monster before it attacks again!
br
p Late to the fight? Learn about Burnout and how to defeat World Bosses <a href='http://habitica.wikia.com/wiki/Boss#World_Bosses' target='_blank'>here</a>.
h2 10/8/2015 - WORLD BOSS REVEALED: BURNOUT!
tr
td
.promo_burnout.pull-right
h3 Burnout, Scourge of the Flourishing Fields
p It is well past midnight, still and stiflingly hot, when Redphoenix and scout captain Kiwibot abruptly burst through the city gates. "We need to evacuate all the wooden buildings!" Redphoenix shouts. "Hurry!"
br
p Kiwibot grips the wall as she catches her breath."It's draining people and turning them into Exhaust Spirits! That's why everything was delayed. That's where the missing people have gone. It's been stealing their energy!"
br
p "'It'?'" asks Lemoness.
br
p And then the heat takes form.
br
p It rises from the earth in a billowing, twisting mass, and the air chokes with the scent of smoke and sulphur. Flames lick across the molten ground and contort into limbs, writhing to horrific heights. Smoldering eyes snap open, and the creature lets out a deep and crackling cackle.
br
p Kiwibot whispers a single word.
br
p "Burnout."
hr
p Quickly, Habiticans, we have to save the Flourishing Fields from incineration! All of us will battle this World Boss together by completing tasks, but it won't attack us individually. However, the more Dailies we skip, the closer we get to triggering its fearsome Exhaust Strike, which will target our NPCs!
br
p Knowing your enemy is the first step to defeating it. <a href='http://habitica.wikia.com/wiki/Boss#World_Bosses' target='_blank'>Read more about World Bosses here</a>.
br
p.small.muted by Lemoness, SabreCat, and Kiwibot
h2 10/5/2015 - OCTOBER BACKGROUNDS REVEALED, COSTUME CHALLENGE BEGINS, AND FALL PLOT-LINE CONTINUES
tr
td
.background_harvest_moon.pull-right
h3 October Backgrounds Revealed
p There are three new avatar backgrounds in the <a href='/#/options/profile/backgrounds'>Background Shop!</a> Now your avatar can slog through a Slimy Swamp, cackle under the Harvest Moon, or shiver in the Swarming Darkness!
p.small.muted by Leephon, midori88, and Draayder
tr
td
h3 Costume Challenge Begins
p The Community Costume Challenge has begun! Between now and October 31st, dress up as your avatar in real life and post a photo on social media to get the coveted Costume Challenge badge! Read the full rules on the Challenge page <a href='/#/options/groups/challenges/0b3d1116-89d3-4025-8a9e-593bc28e9cff'>here</a>.
p.small.muted by Lemoness
tr
td
h3 Fall Plot-Line Continues
p Although we are now well into autumn, the Flourishing Fields are locked in a sweltering heat wave. The candies grow sticky in the sun, and the Spooky Pets lie panting in the shade. But this is minor news compared to the calamity that has just occurred.
br
p The Joyful Reaper is gone.
br
p The citizens of the Flourishing Fields are working frantically to find their lost ruler, but many of their search parties have not returned. Those few that do make it back are empty-handed. Worse yet, they report frightening hordes of spirits drifting at the edges of the Fields.
br
p Redphoenix grimly gathers her scouts. "If these spirits are a threat, we need to face them directly," she says. "There's no point in procrastination." Without fuss or fanfare, they set off into the night.
h2 10/1/2015 - SPOOKY HATCHING POTION; NEW ITEMS IN THE ENCHANTED ARMOIRE
tr
td
@@ -21,7 +21,7 @@ div(ng-if='::profile.backer.npc')
hr
div(ng-if='::profile.contributor.level || user._id == profile._id')
.achievement.achievement-firefox(ng-if='::profile.contributor.level')
.achievement.achievement-boot(ng-if='::profile.contributor.level')
div(ng-class='::{muted: !profile.contributor.level}')
h5
span.label.label-default(ng-if='::profile.contributor.level', class='label-contributor-{{::profile.contributor.level}}') {{::contribText(profile.contributor, profile.backer)}}
@@ -219,6 +219,13 @@ div(ng-if='::profile.achievements.quests.stressbeast')
=env.t('achievementStressbeastText')
hr
div(ng-if='::profile.achievements.quests.burnout')
.achievement.achievement-burnout
h5=env.t('achievementBurnout')
small
=env.t('achievementBurnoutText')
hr
div(ng-if='::profile.achievements.costumeContest')
.achievement.achievement-costumeContest
h5=env.t('costumeContest')
+1 -1
View File
@@ -19,7 +19,7 @@ block content
br
=env.t('reportBug')
| &colon;&nbsp;
a(target='_blank', href='https://github.com/HabitRPG/habitrpg/issues?q=is%3Aopen') Github
a(target='_blank', href='https://github.com/HabitRPG/habitrpg/issues?q=is%3Aopen') GitHub
br
=env.t('reportCommunityIssues')
| &colon;&nbsp;
+1 -1
View File
@@ -18,7 +18,7 @@ block content
=env.t('September')
|&nbsp;4&comma; 2015
- var headings = ['overview', 'set-up-tasks', 'sample-tasks', 'task-color', 'health', 'party-with-friends', 'pets-mounts', 'character-classes', 'blue-mana-bar', 'monsters-quests', 'gems', 'bugs-features']
- var headings = ['overview', 'set-up-tasks', 'sample-tasks', 'task-color', 'health', 'party-with-friends', 'pets-mounts', 'character-classes', 'blue-mana-bar', 'monsters-quests', 'gems', 'bugs-features', 'world-boss']
- for heading, index in headings
a.h2.accordion.collapsed(ng-href='#' + heading, data-toggle='collapse')=env.t('faqQuestion' + index)
.clearfix.collapse(id=heading)
+8 -8
View File
@@ -2,9 +2,6 @@ doctype html
html(ng-app='habitrpg', ng-controller='RootCtrl')
head
meta(charset='utf-8')
script(type='text/javascript').
window.env = !{JSON.stringify(env._.pick(env, env.clientVars))};
!= env.getManifestFiles("tmp_static_front")
link(href='//fonts.googleapis.com/css?family=Lato:400,700', rel='stylesheet', type='text/css')
title Habitica | Your Life the Role Playing Game
meta(name='description', content='')
@@ -12,16 +9,19 @@ html(ng-app='habitrpg', ng-controller='RootCtrl')
meta(name='author', content='')
meta(name='geo.placename', content='')
meta(name='viewport', content='width=device-width, maximum-scale=1')
meta(property='og:title', content='')
meta(property='og:description', content='')
meta(property='og:url', content='')
meta(property='og:image', content='')
meta(property='og:site_name', content='')
meta(property='og:url', content='https://habitica.com/static/front')
meta(property='og:type', content='website')
meta(property='og:title', content='Habitica: Your Life the Role Playing Game')
meta(property='og:description', content='Habitica is a free habit building and productivity app that treats your real life like a game. With in-game rewards and punishments to motivate you and a strong social network to inspire you, Habitica can help you achieve your goals to become healthy, hard-working, and happy.')
meta(property='og:site_name', content='Habitica')
meta(property='og:image', content='https://s3.amazonaws.com/habitica-assets/assets/gryphon_logo_300x300.png')
meta(property='fb:app_id', content='128307497299777')
meta(name='twitter:card' content='summary')
meta(name='twitter:site' content='@habitica')
meta(name='twitter:title' content='Habitica: Your Life the Role Playing Game')
meta(name='twitter:description' content='Habitica is a free habit-building and productivity app that treats your real life like a game! Motivate yourself with in-game rewards and social encouragement.')
meta(name='twitter:image' content='https://s3.amazonaws.com/habitica-assets/assets/gryphon_logo.png')
meta(name='apple-itunes-app' content='app-id=994882113')
link(rel='canonical', href='', type='text/html')
link(rel='shortcut icon', href='/favicon.ico')
+1 -1
View File
@@ -19,7 +19,7 @@ block content
p= env.t('presskitDownload')
| &nbsp;
a.btn.btn-success(href='/presskit/presskit.zip') presskit.zip
- var imgs = ['habitrpg_pixel', 'HabitRPGdevices', 'Market Sample Screen', 'Challenges Sample Screen', 'Equipment Sample Screen', 'Guilds Sample Screen', 'HabitRPGPromoPostCard6', 'HabitRPGPromoThin', 'Laundromancer_by_Arcosine', 'promo mobile inventorySTILL1', 'promo mobile inventorySTILL2', 'PROMOdevices2', 'SnackLessMonster_by_Arcosine', 'stag_battle_by_leephon', 'stagnant_dishes_by_kiwibot', 'vice_reborn_by_baconsaur']
- var imgs = ['Habitica Text Logo', 'Habitica Logo Promo', 'Habitica Gryphon', 'Dread Drag\'on of Dilatory', 'Market Sample Screen', 'Challenges Sample Screen', 'Equipment Sample Screen', 'Guilds Sample Screen', 'HabiticaPromoThin', 'Laundromancer', 'Tasks Page', 'SnackLess Monster', 'Battling the Ghost Stag', 'Stagnant Dishes Boss', 'Necro-Vice']
//-#carousel.carousel.slide(data-ride='carousel')
ol.carousel-indicators