Merge branch 'release' into develop

This commit is contained in:
Sabe Jones 2017-07-13 22:29:35 +00:00
commit c4348d8e47
26 changed files with 195 additions and 160 deletions

View file

@ -6,7 +6,7 @@ RUN npm install -g gulp grunt-cli bower mocha
# Clone Habitica repo and install dependencies
RUN mkdir -p /usr/src/habitrpg
WORKDIR /usr/src/habitrpg
RUN git clone --branch v3.99.0 https://github.com/HabitRPG/habitica.git /usr/src/habitrpg
RUN git clone --branch v3.102.2 https://github.com/HabitRPG/habitica.git /usr/src/habitrpg
RUN npm install
RUN bower install --allow-root
RUN gulp build:prod --force

View file

@ -1,7 +1,7 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "3.102.1",
"version": "3.102.2",
"main": "./website/server/index.js",
"dependencies": {
"@slack/client": "^3.8.1",

View file

@ -1,36 +1,36 @@
.promo_android {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1748px -176px;
background-position: -1748px 0px;
width: 175px;
height: 175px;
}
.promo_aquatic_potions {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -447px -148px;
background-position: -589px -148px;
width: 141px;
height: 441px;
}
.promo_backgrounds_armoire_201602 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1606px 0px;
background-position: -1606px -295px;
width: 141px;
height: 294px;
}
.promo_backgrounds_armoire_201603 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1606px -295px;
background-position: -1606px -590px;
width: 141px;
height: 294px;
}
.promo_backgrounds_armoire_201604 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: 0px -894px;
background-position: -1325px -441px;
width: 140px;
height: 441px;
}
.promo_backgrounds_armoire_201605 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -705px -894px;
background-position: -987px -894px;
width: 140px;
height: 441px;
}
@ -60,25 +60,25 @@
}
.promo_backgrounds_armoire_201610 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -141px -894px;
background-position: -282px -894px;
width: 140px;
height: 441px;
}
.promo_backgrounds_armoire_201611 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -564px -894px;
background-position: -141px -894px;
width: 140px;
height: 441px;
}
.promo_backgrounds_armoire_201612 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -423px -894px;
background-position: 0px -894px;
width: 140px;
height: 441px;
}
.promo_backgrounds_armoire_201701 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -846px -894px;
background-position: -705px -894px;
width: 140px;
height: 441px;
}
@ -102,31 +102,31 @@
}
.promo_backgrounds_armoire_201705 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1183px -442px;
background-position: -447px -148px;
width: 141px;
height: 441px;
}
.promo_backgrounds_armoire_201706 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -899px -442px;
background-position: -1183px -442px;
width: 141px;
height: 441px;
}
.promo_backgrounds_armoire_201707 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -899px 0px;
background-position: -899px -442px;
width: 141px;
height: 441px;
}
.promo_bees {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -757px -442px;
background-position: -899px 0px;
width: 141px;
height: 441px;
}
.promo_bundle_feathered {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -140px -305px;
background-position: -757px -442px;
width: 141px;
height: 441px;
}
@ -150,7 +150,7 @@
}
.promo_checkin_incentives {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1606px -590px;
background-position: -1606px 0px;
width: 141px;
height: 294px;
}
@ -162,7 +162,7 @@
}
.promo_classes_fall_2015 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -558px -1336px;
background-position: -823px -1336px;
width: 377px;
height: 99px;
}
@ -228,7 +228,7 @@
}
.promo_cow {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -282px -894px;
background-position: -564px -894px;
width: 140px;
height: 441px;
}
@ -252,7 +252,7 @@
}
.promo_enchanted_armoire {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -936px -1336px;
background-position: -1201px -1336px;
width: 374px;
height: 76px;
}
@ -270,7 +270,7 @@
}
.promo_enchanted_armoire_201509 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1543px -1484px;
background-position: -1088px -1484px;
width: 90px;
height: 90px;
}
@ -282,13 +282,13 @@
}
.promo_enchanted_armoire_201601 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1634px -1484px;
background-position: -906px -1484px;
width: 90px;
height: 90px;
}
.promo_fairy_potions {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -589px -148px;
background-position: -140px -305px;
width: 141px;
height: 441px;
}
@ -300,13 +300,13 @@
}
.promo_ghost_potions {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -987px -894px;
background-position: -846px -894px;
width: 140px;
height: 441px;
}
.promo_habitica {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1748px 0px;
background-position: -1748px -176px;
width: 175px;
height: 175px;
}
@ -318,7 +318,7 @@
}
.promo_habitoween_2016 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1325px -441px;
background-position: -423px -894px;
width: 140px;
height: 441px;
}
@ -346,6 +346,12 @@
width: 276px;
height: 147px;
}
.promo_king_manta {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -558px -1336px;
width: 264px;
height: 147px;
}
.promo_more_checkin_incentives {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -306px 0px;
@ -354,7 +360,7 @@
}
.promo_mystery_201405 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -906px -1484px;
background-position: -1543px -1484px;
width: 90px;
height: 90px;
}
@ -378,7 +384,7 @@
}
.promo_mystery_201409 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -341px -1585px;
background-position: -1634px -1484px;
width: 90px;
height: 90px;
}
@ -390,7 +396,7 @@
}
.promo_mystery_201411 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -815px -1484px;
background-position: -614px -1585px;
width: 90px;
height: 90px;
}
@ -408,7 +414,7 @@
}
.promo_mystery_201502 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1088px -1484px;
background-position: -815px -1484px;
width: 90px;
height: 90px;
}
@ -438,13 +444,13 @@
}
.promo_mystery_201507 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1467px -879px;
background-position: -1467px -773px;
width: 90px;
height: 105px;
}
.promo_mystery_201508 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1467px -1167px;
background-position: -140px -747px;
width: 93px;
height: 90px;
}
@ -456,7 +462,7 @@
}
.promo_mystery_201510 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -140px -747px;
background-position: -721px -1484px;
width: 93px;
height: 90px;
}
@ -504,13 +510,13 @@
}
.promo_mystery_201606 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1467px -773px;
background-position: -1467px -879px;
width: 90px;
height: 105px;
}
.promo_mystery_201607 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -614px -1585px;
background-position: -341px -1585px;
width: 90px;
height: 90px;
}
@ -522,7 +528,7 @@
}
.promo_mystery_201609 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -721px -1484px;
background-position: -1467px -1167px;
width: 93px;
height: 90px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 936 KiB

After

Width:  |  Height:  |  Size: 928 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

View file

@ -1,8 +1,8 @@
'use strict';
habitrpg.controller('NotificationCtrl',
['$scope', '$rootScope', 'Shared', 'Content', 'User', 'Guide', 'Notification', 'Analytics', 'Achievement', 'Social', 'Tasks',
function ($scope, $rootScope, Shared, Content, User, Guide, Notification, Analytics, Achievement, Social, Tasks) {
['$scope', '$rootScope', 'Shared', 'Content', 'User', 'Guide', 'Notification', 'Analytics', 'Achievement', 'Social', 'Tasks', '$modal',
function ($scope, $rootScope, Shared, Content, User, Guide, Notification, Analytics, Achievement, Social, Tasks, $modal) {
var isRunningYesterdailies = false;
$rootScope.$watch('user', function (after, before) {
@ -53,7 +53,8 @@ habitrpg.controller('NotificationCtrl',
modalScope.processingYesterdailies = true;
$scope.yesterDailiesModalOpen = true;
$rootScope.openModal('yesterDailies', {
$modal.open({
templateUrl: 'modals/yesterDailies.html',
scope: modalScope,
backdrop: 'static',
controller: ['$scope', 'Tasks', 'User', '$rootScope', function ($scope, Tasks, User, $rootScope) {

View file

@ -423,7 +423,7 @@ angular.module('habitrpg')
url: 'api/v3/cron',
})
.then(function (response) {
sync();
return sync();
})
},

View file

@ -1,36 +1,36 @@
.promo_android {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1748px -176px;
background-position: -1748px 0px;
width: 175px;
height: 175px;
}
.promo_aquatic_potions {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -447px -148px;
background-position: -589px -148px;
width: 141px;
height: 441px;
}
.promo_backgrounds_armoire_201602 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1606px 0px;
background-position: -1606px -295px;
width: 141px;
height: 294px;
}
.promo_backgrounds_armoire_201603 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1606px -295px;
background-position: -1606px -590px;
width: 141px;
height: 294px;
}
.promo_backgrounds_armoire_201604 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: 0px -894px;
background-position: -1325px -441px;
width: 140px;
height: 441px;
}
.promo_backgrounds_armoire_201605 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -705px -894px;
background-position: -987px -894px;
width: 140px;
height: 441px;
}
@ -60,25 +60,25 @@
}
.promo_backgrounds_armoire_201610 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -141px -894px;
background-position: -282px -894px;
width: 140px;
height: 441px;
}
.promo_backgrounds_armoire_201611 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -564px -894px;
background-position: -141px -894px;
width: 140px;
height: 441px;
}
.promo_backgrounds_armoire_201612 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -423px -894px;
background-position: 0px -894px;
width: 140px;
height: 441px;
}
.promo_backgrounds_armoire_201701 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -846px -894px;
background-position: -705px -894px;
width: 140px;
height: 441px;
}
@ -102,31 +102,31 @@
}
.promo_backgrounds_armoire_201705 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1183px -442px;
background-position: -447px -148px;
width: 141px;
height: 441px;
}
.promo_backgrounds_armoire_201706 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -899px -442px;
background-position: -1183px -442px;
width: 141px;
height: 441px;
}
.promo_backgrounds_armoire_201707 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -899px 0px;
background-position: -899px -442px;
width: 141px;
height: 441px;
}
.promo_bees {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -757px -442px;
background-position: -899px 0px;
width: 141px;
height: 441px;
}
.promo_bundle_feathered {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -140px -305px;
background-position: -757px -442px;
width: 141px;
height: 441px;
}
@ -150,7 +150,7 @@
}
.promo_checkin_incentives {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1606px -590px;
background-position: -1606px 0px;
width: 141px;
height: 294px;
}
@ -162,7 +162,7 @@
}
.promo_classes_fall_2015 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -558px -1336px;
background-position: -823px -1336px;
width: 377px;
height: 99px;
}
@ -228,7 +228,7 @@
}
.promo_cow {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -282px -894px;
background-position: -564px -894px;
width: 140px;
height: 441px;
}
@ -252,7 +252,7 @@
}
.promo_enchanted_armoire {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -936px -1336px;
background-position: -1201px -1336px;
width: 374px;
height: 76px;
}
@ -270,7 +270,7 @@
}
.promo_enchanted_armoire_201509 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1543px -1484px;
background-position: -1088px -1484px;
width: 90px;
height: 90px;
}
@ -282,13 +282,13 @@
}
.promo_enchanted_armoire_201601 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1634px -1484px;
background-position: -906px -1484px;
width: 90px;
height: 90px;
}
.promo_fairy_potions {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -589px -148px;
background-position: -140px -305px;
width: 141px;
height: 441px;
}
@ -300,13 +300,13 @@
}
.promo_ghost_potions {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -987px -894px;
background-position: -846px -894px;
width: 140px;
height: 441px;
}
.promo_habitica {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1748px 0px;
background-position: -1748px -176px;
width: 175px;
height: 175px;
}
@ -318,7 +318,7 @@
}
.promo_habitoween_2016 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1325px -441px;
background-position: -423px -894px;
width: 140px;
height: 441px;
}
@ -346,6 +346,12 @@
width: 276px;
height: 147px;
}
.promo_king_manta {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -558px -1336px;
width: 264px;
height: 147px;
}
.promo_more_checkin_incentives {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -306px 0px;
@ -354,7 +360,7 @@
}
.promo_mystery_201405 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -906px -1484px;
background-position: -1543px -1484px;
width: 90px;
height: 90px;
}
@ -378,7 +384,7 @@
}
.promo_mystery_201409 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -341px -1585px;
background-position: -1634px -1484px;
width: 90px;
height: 90px;
}
@ -390,7 +396,7 @@
}
.promo_mystery_201411 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -815px -1484px;
background-position: -614px -1585px;
width: 90px;
height: 90px;
}
@ -408,7 +414,7 @@
}
.promo_mystery_201502 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1088px -1484px;
background-position: -815px -1484px;
width: 90px;
height: 90px;
}
@ -438,13 +444,13 @@
}
.promo_mystery_201507 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1467px -879px;
background-position: -1467px -773px;
width: 90px;
height: 105px;
}
.promo_mystery_201508 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1467px -1167px;
background-position: -140px -747px;
width: 93px;
height: 90px;
}
@ -456,7 +462,7 @@
}
.promo_mystery_201510 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -140px -747px;
background-position: -721px -1484px;
width: 93px;
height: 90px;
}
@ -504,13 +510,13 @@
}
.promo_mystery_201606 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -1467px -773px;
background-position: -1467px -879px;
width: 90px;
height: 105px;
}
.promo_mystery_201607 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -614px -1585px;
background-position: -341px -1585px;
width: 90px;
height: 90px;
}
@ -522,7 +528,7 @@
}
.promo_mystery_201609 {
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
background-position: -721px -1484px;
background-position: -1467px -1167px;
width: 93px;
height: 90px;
}

View file

@ -253,34 +253,34 @@
"backgroundMagicBeanstalkNotes": "Mendaki Pohon Kacang Sihir.",
"backgroundMeanderingCaveText": "Gua Berkelok-kelok",
"backgroundMeanderingCaveNotes": "Jelajahi Gua Berkelok-kelok.",
"backgroundMistiflyingCircusText": "Mistiflying Circus",
"backgroundMistiflyingCircusNotes": "Carouse in the Mistiflying Circus.",
"backgrounds042017": "SET 35: Released April 2017",
"backgroundBugCoveredLogText": "Bug-Covered Log",
"backgroundBugCoveredLogNotes": "Investigate a Bug-Covered Log.",
"backgroundGiantBirdhouseText": "Giant Birdhouse",
"backgroundGiantBirdhouseNotes": "Perch in a Giant Birdhouse.",
"backgroundMistShroudedMountainText": "Mist-Shrouded Mountain",
"backgroundMistShroudedMountainNotes": "Summit a Mist-Shrouded Mountain.",
"backgrounds052017": "SET 36: Released May 2017",
"backgroundGuardianStatuesText": "Guardian Statues",
"backgroundGuardianStatuesNotes": "Stand vigil in front of Guardian Statues.",
"backgroundHabitCityStreetsText": "Habit City Streets",
"backgroundHabitCityStreetsNotes": "Explore the Streets of Habit City.",
"backgroundOnATreeBranchText": "On a Tree Branch",
"backgroundOnATreeBranchNotes": "Perch On a Tree Branch.",
"backgrounds062017": "SET 37: Released June 2017",
"backgroundBuriedTreasureText": "Buried Treasure",
"backgroundBuriedTreasureNotes": "Unearth Buried Treasure.",
"backgroundOceanSunriseText": "Ocean Sunrise",
"backgroundOceanSunriseNotes": "Admire an Ocean Sunrise.",
"backgroundSandcastleText": "Sandcastle",
"backgroundSandcastleNotes": "Rule over a Sandcastle.",
"backgrounds072017": "SET 38: Released July 2017",
"backgroundGiantSeashellText": "Giant Seashell",
"backgroundGiantSeashellNotes": "Lounge in a Giant Seashell.",
"backgroundKelpForestText": "Kelp Forest",
"backgroundKelpForestNotes": "Swim through a Kelp Forest.",
"backgroundMidnightLakeText": "Midnight Lake",
"backgroundMidnightLakeNotes": "Rest by a Midnight Lake."
"backgroundMistiflyingCircusText": "Sirkus Mistiflying",
"backgroundMistiflyingCircusNotes": "Bersenang-senang di Sirkus Mistiflying",
"backgrounds042017": "SET 35: Dirilis April 2017",
"backgroundBugCoveredLogText": "Batang Pohon Berserubung Serangga",
"backgroundBugCoveredLogNotes": "Investigasi Batang Pohon Berserubung Serangga",
"backgroundGiantBirdhouseText": "Rumah Burung Raksasa",
"backgroundGiantBirdhouseNotes": "Bertengker di Rumah Burung Raksasa",
"backgroundMistShroudedMountainText": "Pegunungan Berserabut Kabut",
"backgroundMistShroudedMountainNotes": "Mendaki Pegunungan Berserabut Kabut",
"backgrounds052017": "SET 36: Dirilis Mei 2017",
"backgroundGuardianStatuesText": "Patung Penunggu",
"backgroundGuardianStatuesNotes": "Berjaga-jaga di depan Patung Penunggu",
"backgroundHabitCityStreetsText": "Jalanan Kota Habit",
"backgroundHabitCityStreetsNotes": "Bereksplorasi di Jalanan Kota Habit",
"backgroundOnATreeBranchText": "Di Ranting Pohon",
"backgroundOnATreeBranchNotes": "Bertengker di Ranting Pohon",
"backgrounds062017": "SET 37: Dirilis Juni 2017",
"backgroundBuriedTreasureText": "Harta Karun Tersembunyi",
"backgroundBuriedTreasureNotes": "Galilah Harta Karun Tersembunyi",
"backgroundOceanSunriseText": "Matahari Terbit di Tepi Lautan",
"backgroundOceanSunriseNotes": "Mengagumi Matahari Terbit di Tepi Lautan",
"backgroundSandcastleText": "Istana Pasir",
"backgroundSandcastleNotes": "Memerintah Sebuah Istana Pasir",
"backgrounds072017": "SET 38: Dirilis Juli 2017",
"backgroundGiantSeashellText": "Kerang Raksasa",
"backgroundGiantSeashellNotes": "Bermalas-malas di Kerang Raksasa",
"backgroundKelpForestText": "Hutan Rumput Laut",
"backgroundKelpForestNotes": "Berenang di Hutan Rumput Laut",
"backgroundMidnightLakeText": "Danau Tengah Malam",
"backgroundMidnightLakeNotes": "Beristirahat di Danau Tengah Malam"
}

View file

@ -80,6 +80,6 @@
"userAlreadyInChallenge": "Pengguna telah berpartisipasi di dalam tantangan ini.",
"cantOnlyUnlinkChalTask": "Hanya tugas tantangan rusak yang dapat diputuskan.",
"shortNameTooShort": "Nama Label harus setidaknya memiliki 3 karakter.",
"joinedChallenge": "Joined a Challenge",
"joinedChallengeText": "This user put themselves to the test by joining a Challenge!"
"joinedChallenge": "Bergabung dengan sebuah Tantangan",
"joinedChallengeText": "User ini telah mengetes dirinya dengan bergabung pada sebuah Tantangan!"
}

View file

@ -1,5 +1,5 @@
{
"communityGuidelinesWarning": "Please keep in mind that your Display Name, profile photo, and blurb must comply with the <a href='https://habitica.com/static/community-guidelines' target='_blank'>Community Guidelines</a> (e.g. no profanity, no adult topics, no insults, etc). If you have any questions about whether or not something is appropriate, feel free to email <%= hrefBlankCommunityManagerEmail %>!",
"communityGuidelinesWarning": "Ingatlah bahwa Nama Tampilan, foto profil, dan celotehmu harus mengikuti <a href='https://habitica.com/static/community-guidelines' target='_blank'>Pedoman Komunitas</a> (misalnya, tidak menggunakan bahasa senonoh, topik dewasa, penghinaan, dsb). Jika kamu mempunyai pertanyaan apapun mengenai pantasnya sesuatu hal, silahkan email <%= hrefBlankCommunityManagerEmail %>!",
"profile": "Profil",
"avatar": "Ubah Tampilan Avatar",
"other": "Lainnya",

View file

@ -12,7 +12,7 @@
"commGuideList01B": "<strong>Tabiat yang Rajin.</strong> Habiticans bekerja keras untuk memperbaiki hidup mereka, juga untuk membangun dan memperbaiki situs ini secara terus-menerus. Kami adalah proyek open-source, yang berarti kami sebisa mungkin selalu berusaha untuk membuat situs ini menjadi tempat terbaik.",
"commGuideList01C": "<strong>Perilaku yang Suportif.</strong> Habiticans senang jika orang lain senang dan saling menghibur pada saat-saat yang sulit. Kita saling menguatkan, bergantung pada satu sama lain, dan belajar pada satu sama lain. Dalam kelompok, kita melakukan hal ini melalui mantera; di ruang chat, kita melakukan ini dengan kata-kata yang ramah dan suportif.",
"commGuideList01D": "<strong>Sikap Saling Menghargai.</strong> Kita berasal dari latar belakang yang berbeda, juga memiliki keahlian dan opini yang berbeda. Itulah yang membuat komunitas kita sangat menakjubkan. Habiticans menghargai perbedaan ini, bahkan merayakannya. Jangan pergi ke mana-mana, dan kamu akan segera mendapatkan teman-teman baru dari berbagai lapisan komunitas.",
"commGuideHeadingMeet": "Meet the Staff and Mods!",
"commGuideHeadingMeet": "Temuilah para Staff dan Moderator!",
"commGuidePara006": "Habitica memiliki beberapa ksatria yang bersatu padu dengan anggota staff untuk menjaga komunitas ini tetap damai, puas, dan bebas dari pengganggu. Masing-masing memiliki domain yang spesifik, namun sewaktu-waktu dapat dipanggil untuk membantu di lingkup sosial yang lain. Staff dan Moderator sering kali memulai pernyataan resmi dengan kata-kata \"Mod Talk\" atau \"Mod Hat On\"",
"commGuidePara007": "Staf punya warna ungu dengan tanda mahkota. Gelar mereka adalah \"Pahlawan\".",
"commGuidePara008": "Moderator memiliki tag biru gelap dengan tanda bintang. Gelar mereka adalah \"Pengawal\", kecuali Bailey, yang merupakan NPC dan memiliki tag hitam-hijau dengan tanda bintang.",

View file

@ -152,8 +152,8 @@
"questEggButterflyText": "Ulat",
"questEggButterflyMountText": "Kupu-kupu",
"questEggButterflyAdjective": "a cute",
"questEggNudibranchText": "Nudibranch",
"questEggNudibranchMountText": "Nudibranch",
"questEggNudibranchText": "Nudibranchia",
"questEggNudibranchMountText": "Nudibranchia",
"questEggNudibranchAdjective": "a nifty",
"eggNotes": "Dapatkan obat penetas untuk diberikan pada telur ini, dan ia akan menetas menjadi <%= eggText(locale) %> yang <%= eggAdjective(locale) %>;",
"hatchingPotionBase": "Biasa",

View file

@ -62,7 +62,7 @@
"surveysMultiple": "Membantu Habitica berkembang sebanyak <%= count %> kali, baik dengan mengisi survey atau membantu dalam pengujian utama. Terima kasih!",
"currentSurvey": "Kuisioner Sekarang",
"surveyWhen": "Lencana akan diberikan kepada semua peserta ketika survei telah diproses, pada akhir Maret.",
"blurbInbox": "This is where your private messages are stored! You can send someone a message by clicking on the envelope icon next to their name in Tavern, Party, or Guild Chat. If you've received an inappropriate PM, you should email a screenshot of it to Lemoness (<%= hrefCommunityManagerEmail %>)",
"blurbInbox": "Di sinilah pesan pribadimu disimpan! Kamu dapat mengirimkan pesan ke seseorang dengan menekan ikon amplop di sebelah nama mereka di Kedai Minuman, Party, atau Guild Chat. Jika kamu menerima PM yang tidak pantas, kirimlah screenshot tersebut melalui email ke Lemoness (<%= hrefCommunityManagerEmail %>)",
"blurbGuildsPage": "Guild adalah grup obrolan bertopik yang dibuat oleh pengguna, untuk pengguna. Telusuri daftar tema dan bergabunglah dengan guild yang menarik untukmu!",
"blurbChallenges": "Tantangan dibuat oleh sesama pemain. Bergabung pada sebuah tantangan akan menambah tugas ke daftarmu, dan memenangkan tantangan akan memberikanmu lencana dan terkadang hadiah permata!",
"blurbHallPatrons": "Ini adalah Aula para Pelindung, di mana kami memberi penghormatan pada petualang pemberani yang membantu Kickstarter awal Habitica. Kami berterima kasih kepada mereka yang membantu kami menjadikan Habitica kenyataan!",

View file

@ -134,7 +134,7 @@
"playButtonFull": "Masuk Habitica",
"presskit": "Paket Pres",
"presskitDownload": "Mengunduh seluruh gambar:",
"presskitText": "Thanks for your interest in Habitica! The following images can be used for articles or videos about Habitica. For more information, please contact Siena Leslie at <%= pressEnquiryEmail %>.",
"presskitText": "Terima kasih untuk ketertarikan anda pada Habitica! Gambar-gamar berikut ini dapat digunakan untuk artikel atau video mengenai Habitica. Untuk informasi lebih lanjut, silahkan hubungi Siena Leslie di <%= pressEnquiryEmail %>.",
"pkVideo": "Video",
"pkPromo": "Promo",
"pkLogo": "Logo",
@ -259,7 +259,7 @@
"passwordResetEmailHtml": "Kalau kamu meminta reset kata sandi untuk <strong><%= username %></strong> di Habitica, <a href=\"<%= passwordResetLink %>\">klik di sini</a> untuk membuat kata sandi baru. Tautan akan hangus setelah 24 jam.<br/><br>Kalau kamu tidak pernah meminta reset kata sandi, abaikan saja email ini.",
"invalidLoginCredentialsLong": "O-oh - nama pengguna atau kata sandi tidak benar.\n- Pastikan nama pengguna atau email diketikkan dengan benar.\n- Kamu mungkin mendaftar dengan menggunakan Facebook, bukan email. Periksa ulang dengan mencoba masuk melalui Facebook.\n- Jika kamu lupa kata sandi, klik \"Lupa Kata Sandi\".",
"invalidCredentials": "Tidak ada akun yang menggunakan credential tersebut.",
"accountSuspended": "Account has been suspended, please contact <%= communityManagerEmail %> with your User ID \"<%= userId %>\" for assistance.",
"accountSuspended": "Akun anda telah disuspend, mohon hubungi <%= communityManagerEmail %> dengan User ID anda \"<%= userId %>\" untuk bantuan.",
"unsupportedNetwork": "Jaringan ini saat ini belum didukung.",
"cantDetachSocial": "Akun tidak memiliki metode autentikasi lain; tidak dapat memutuskan metode autentikasi ini.",
"onlySocialAttachLocal": "Autentikasi lokal dapat ditambahkan hanya pada akun sosial.",

View file

@ -802,8 +802,8 @@
"headSpecialSpring2017MageNotes": "Questo cappello può aiutarti a lanciare potenti incantesimi... o lo puoi usare per evocare delle palline da tennis. A te la scelta. Aumenta la Percezione di <%= per %>. Edizione limitata, primavera 2017.",
"headSpecialSpring2017HealerText": "Tiara di Petali",
"headSpecialSpring2017HealerNotes": "Questa delicata corona emana il confortante aroma dei nuovi fiori primaverili. Aumenta lIntelligenza di <%= int %>. Edizione limitata, primavera 2017.",
"headSpecialSummer2017RogueText": "Sea Dragon Helm",
"headSpecialSummer2017RogueNotes": "This helm changes colors to help you blend in with your surroundings. Increases Perception by <%= per %>. Limited Edition 2017 Summer Gear.",
"headSpecialSummer2017RogueText": "Elmo del Drago Marino",
"headSpecialSummer2017RogueNotes": "Questo elmo cambia colore per aiutarti a mimettizarti nell'ambiente. Aumenta la Percezione di <%= per %>. Edizione limitata, estate 2017.",
"headSpecialSummer2017WarriorText": "Elmo Castello di Sabbia",
"headSpecialSummer2017WarriorNotes": "L'elmo più raffinato che si possa sperare di indossare... per lo meno fino all'arrivo della marea. Aumenta la Forza di <%= str % >. Edizione limitata, estate 2017.",
"headSpecialSummer2017MageText": "Whirlpool Hat",

View file

@ -270,10 +270,10 @@
"backgroundOnATreeBranchText": "Op een Boomtak",
"backgroundOnATreeBranchNotes": "Strijk neer op een boomtak.",
"backgrounds062017": "SET 37: uitgebracht in juni 2017",
"backgroundBuriedTreasureText": "Begraven schat",
"backgroundBuriedTreasureNotes": "Graaf begraven schatten op.",
"backgroundOceanSunriseText": "Oceaan met zonsopgang",
"backgroundOceanSunriseNotes": "Bewonder een oceaan met zonsopgang.",
"backgroundBuriedTreasureText": "Begraven Schat",
"backgroundBuriedTreasureNotes": "Graaf verborgen schatten op.",
"backgroundOceanSunriseText": "Oceaan met Zonsopgang",
"backgroundOceanSunriseNotes": "Bewonder een zonsopgang boven de oceaan.",
"backgroundSandcastleText": "Zandkasteel",
"backgroundSandcastleNotes": "Heers over een zandkasteel",
"backgrounds072017": "SET 38: Uitgebracht in juli 2017",

View file

@ -112,6 +112,6 @@
"dateEndApril": "19 april",
"dateEndMay": "17 mei",
"dateEndJune": "14 juni",
"dateEndJuly": "Juli 29",
"dateEndJuly": "29 juli",
"discountBundle": "bundel"
}

View file

@ -74,7 +74,7 @@
"earnedCompanion": "Door al jouw productiviteit heb je een nieuwe kameraad verdiend. Voer hem en laat hem groeien! ",
"feedPet": "<%= text %> aan je <%= name %> voeren?",
"useSaddle": "<%= pet %> zadelen?",
"raisedPet": "undefined",
"raisedPet": "Je hebt je <%= pet %> laten opgroeien!",
"earnedSteed": "Door het voltooien van taken heb je een trouw ros verdiend!",
"rideNow": "Berijd nu",
"rideLater": "Berijd later",

View file

@ -1081,7 +1081,7 @@
"shieldSpecialSummer2017WarriorText": "Scallop Shield",
"shieldSpecialSummer2017WarriorNotes": "This shell that you just found is both decorative AND defensive! Increases Constitution by <%= con %>. Limited Edition 2017 Summer Gear.",
"shieldSpecialSummer2017HealerText": "Щит из раковины моллюска",
"shieldSpecialSummer2017HealerNotes": "Этот щит волшебной устрицы постоянно порождает жемчуг так де как и защищает. Увеличивает телосложение на <%= con %>. Ограниченный выпуск лета 2017.",
"shieldSpecialSummer2017HealerNotes": "Этот щит волшебной устрицы постоянно порождает жемчуг, а так же защищает. Увеличивает телосложение на <%= con %>. Ограниченный выпуск лета 2017.",
"shieldMystery201601Text": "Уничтожитель Решительности",
"shieldMystery201601Notes": "Этот клинок может быть использован, чтобы парировать все отвлечения. Бонусов не дает. Подарок подписчикам января 2016.",
"shieldMystery201701Text": "Время-Замораживающий Щит",

View file

@ -209,7 +209,7 @@
"onlyCreatorOrAdminCanDeleteChat": "Вы не авторизованы чтобы удаить это сообщение!",
"onlyGroupLeaderCanEditTasks": "Вы не авторизованы, чтобы редактировать задачи!",
"onlyGroupTasksCanBeAssigned": "Можно назначать только командные задачи",
"chatPrivilegesRevoked": "Your chat privileges have been revoked.",
"chatPrivilegesRevoked": "Ваши права в чате были отменены.",
"newChatMessagePlainNotification": "Новое сообщение в <%= groupName %> от <%= authorName %>. Нажмите, чтобы открыть чат!",
"newChatMessageTitle": "Новое сообщение в <%= groupName %>",
"exportInbox": "Экспортировать сообщения",

View file

@ -169,5 +169,5 @@
"missingCustomerId": "Отсутствует req.query.customerId",
"missingPaypalBlock": "Отсутствует req.session.paypalBlock",
"missingSubKey": "Отсутствует req.query.sub",
"paypalCanceled": "Your subscription has been canceled"
"paypalCanceled": "Ваша подписка была отменена"
}

View file

@ -30,12 +30,14 @@ export function setNextDue (task, user, dueDateOption) {
let dateTaskIsDue = Date.now();
if (dueDateOption) {
// @TODO Add required ISO format
dateTaskIsDue = moment(dueDateOption).add(user.preferences.timezoneOffset, 'minutes');
dateTaskIsDue = moment(dueDateOption);
// If not time is supplied. Let's assume we want start of Custom Day Start day.
if (dateTaskIsDue.hour() === 0 && dateTaskIsDue.minute() === 0 && dateTaskIsDue.second() === 0 && dateTaskIsDue.millisecond() === 0) {
dateTaskIsDue.add(user.preferences.timezoneOffset, 'minutes');
dateTaskIsDue.add(user.preferences.dayStart, 'hours');
}
now = dateTaskIsDue;
}

View file

@ -7,6 +7,36 @@ import { recoverCron, cron } from '../libs/cron';
import { v4 as uuid } from 'uuid';
import logger from '../libs/logger';
async function checkForActiveCron (user, now) {
let _cronSignature = uuid();
// To avoid double cron we first set _cronSignature and then check that it's not changed while processing
let userUpdateResult = await User.update({
_id: user._id,
_cronSignature: 'NOT_RUNNING', // Check that in the meantime another cron has not started
}, {
$set: {
_cronSignature,
lastCron: now, // setting lastCron now so we don't risk re-running parts of cron if it fails
'auth.timestamps.loggedin': now,
},
}).exec();
// If the cron signature is already set, cron is running in another request
// throw an error and recover later,
if (userUpdateResult.nMatched === 0 || userUpdateResult.nModified === 0) {
throw new Error('CRON_ALREADY_RUNNING');
}
}
async function unlockUser (user) {
await User.update({
_id: user._id,
}, {
_cronSignature: 'NOT_RUNNING',
}).exec();
}
async function cronAsync (req, res) {
let user = res.locals.user;
if (!user) return null; // User might not be available when authentication is not mandatory
@ -17,31 +47,14 @@ async function cronAsync (req, res) {
try {
let {daysMissed, timezoneOffsetFromUserPrefs} = user.daysUserHasMissed(now, req);
await checkForActiveCron(user, now);
if (daysMissed <= 0) {
if (user.isModified()) await user.save();
await unlockUser(user);
return null;
}
let _cronSignature = uuid();
// To avoid double cron we first set _cronSignature and then check that it's not changed while processing
let userUpdateResult = await User.update({
_id: user._id,
_cronSignature: 'NOT_RUNNING', // Check that in the meantime another cron has not started
}, {
$set: {
_cronSignature,
lastCron: now, // setting lastCron now so we don't risk re-running parts of cron if it fails
'auth.timestamps.loggedin': now,
},
}).exec();
// If the cron signature is already set, cron is running in another request
// throw an error and recover later,
if (userUpdateResult.nMatched === 0 || userUpdateResult.nModified === 0) {
throw new Error('CRON_ALREADY_RUNNING');
}
let tasks = await Tasks.Task.find({
userId: user._id,
$or: [ // Exclude completed todos

Binary file not shown.

Before

Width:  |  Height:  |  Size: 936 KiB

After

Width:  |  Height:  |  Size: 928 KiB

View file

@ -1,25 +1,32 @@
.promo_bundle_splashy.pull-right
h2 7/11/2017 - NEW DISCOUNTED PET QUEST BUNDLE AND ORCAS FOR EVERYONE
h2 7/13/2017 - BEHIND THE SCENES: KING MANTA
hr
tr
td
h3 New Discounted Pet Quest Bundle: Splashy Pals
p If you're a fan of sea creatures, you're in luck! From now until July 31, you can purchase the Splashy Pals Pet Quest Bundle and receive the Seahorse, Sea Turtle, and Whale quests, all for only 7 Gems! That's a discount of 5 Gems from the price of purchasing them separately. Check it out in the <a href='/#/options/inventory/quests'>Quest Shop</a> today!
p.small.muted by Lemoness and SabreCat
p.small.muted Art by McCoyly, krazjega, UncommonCriminal, zoebeagle, Kiwibot, JessicaChase, Scarabsi, JaizakArpaik
p.small.muted Writing by Calae, Ginger_Hanna, Lemoness
tr
td
.promo_orcas.pull-left.slight-right-margin
h3 Orcas for Everyone!
p Looks like there are even more sea animals riding the waves around the city of Dilatory: Some friendly Orcas are swimming into Habiticans' stables! In honor of the Summer Splash event, everyone gets a free Orca mount or, if you already had the Orca mount, a cute Orca pet. Enjoy!
p.small.muted by Beffymaroo and UncommonCriminal
.promo_king_manta.center-block
h3 Behind the Scenes Blog Post: King Manta!
p Have you ever wanted to know more about King Manta, the Mage Masterclasser? <a href='https://habitica.wordpress.com/2017/07/13/behind-the-scenes-spotlight-on-king-manta/' target='_blank'>Today's blog post</a> features a spotlight on the ruler of the undersea city of Dilatory! Check it out now to learn about how he learned his masterful magic skills, his friends and family, and his hobbies!
p.small.muted by Lemoness
if menuItem !== 'oldNews'
hr
a(href='/static/old-news', target='_blank') Read older news
mixin oldNews
h2 7/11/2017 - NEW DISCOUNTED PET QUEST BUNDLE AND ORCAS FOR EVERYONE
.promo_bundle_splashy.pull-right
tr
td
h3 New Discounted Pet Quest Bundle: Splashy Pals
p If you're a fan of sea creatures, you're in luck! From now until July 31, you can purchase the Splashy Pals Pet Quest Bundle and receive the Seahorse, Sea Turtle, and Whale quests, all for only 7 Gems! That's a discount of 5 Gems from the price of purchasing them separately. Check it out in the <a href='/#/options/inventory/quests'>Quest Shop</a> today!
p.small.muted by Lemoness and SabreCat
p.small.muted Art by McCoyly, krazjega, UncommonCriminal, zoebeagle, Kiwibot, JessicaChase, Scarabsi, JaizakArpaik
p.small.muted Writing by Calae, Ginger_Hanna, Lemoness
tr
td
.promo_orcas.pull-left.slight-right-margin
h3 Orcas for Everyone!
p Looks like there are even more sea animals riding the waves around the city of Dilatory: Some friendly Orcas are swimming into Habiticans' stables! In honor of the Summer Splash event, everyone gets a free Orca mount or, if you already had the Orca mount, a cute Orca pet. Enjoy!
p.small.muted by Beffymaroo and UncommonCriminal
h2 7/5/2017 - RECORD YESTERDAY'S ACTIVITY, SPLASHY SKINS, AND SEAFOAM
.scene_dailies.pull-right
tr