mirror of
https://github.com/sudoxnym/habitica-self-host.git
synced 2026-07-14 02:02:19 +00:00
Merge branch 'release' into develop
This commit is contained in:
commit
f0fc83ed85
14 changed files with 273 additions and 146 deletions
2
package-lock.json
generated
2
package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "habitica",
|
"name": "habitica",
|
||||||
"version": "4.273.0",
|
"version": "4.273.2",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "habitica",
|
"name": "habitica",
|
||||||
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
|
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
|
||||||
"version": "4.273.0",
|
"version": "4.273.2",
|
||||||
"main": "./website/server/index.js",
|
"main": "./website/server/index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "^7.22.1",
|
"@babel/core": "^7.22.1",
|
||||||
|
|
|
||||||
|
|
@ -183,10 +183,8 @@
|
||||||
<div
|
<div
|
||||||
v-for="bg in backgroundShopSets[0].items"
|
v-for="bg in backgroundShopSets[0].items"
|
||||||
:key="bg.key"
|
:key="bg.key"
|
||||||
|
:id="bg.key"
|
||||||
class="col-2"
|
class="col-2"
|
||||||
:popover-title="bg.text"
|
|
||||||
:popover="bg.notes"
|
|
||||||
popover-trigger="mouseenter"
|
|
||||||
@click="unlock('background.' + bg.key)"
|
@click="unlock('background.' + bg.key)"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
|
|
@ -195,6 +193,13 @@
|
||||||
>
|
>
|
||||||
<div class="small-rectangle"></div>
|
<div class="small-rectangle"></div>
|
||||||
</div>
|
</div>
|
||||||
|
<b-popover
|
||||||
|
:target="bg.key"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="bottom"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="bg.notes"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
|
@ -211,16 +216,21 @@
|
||||||
<div
|
<div
|
||||||
v-for="bg in backgroundShopSets[2].items"
|
v-for="bg in backgroundShopSets[2].items"
|
||||||
:key="bg.key"
|
:key="bg.key"
|
||||||
|
:id="bg.key"
|
||||||
class="col-4 text-center customize-option background-button"
|
class="col-4 text-center customize-option background-button"
|
||||||
:popover-title="bg.text"
|
|
||||||
:popover="bg.notes"
|
|
||||||
popover-trigger="mouseenter"
|
|
||||||
@click="unlock('background.' + bg.key)"
|
@click="unlock('background.' + bg.key)"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="background"
|
class="background"
|
||||||
:class="`background_${bg.key}`"
|
:class="`background_${bg.key}`"
|
||||||
></div>
|
></div>
|
||||||
|
<b-popover
|
||||||
|
:target="bg.key"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="bottom"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="bg.notes"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -236,10 +246,8 @@
|
||||||
<div
|
<div
|
||||||
v-for="bg in backgroundShopSets[1].items"
|
v-for="bg in backgroundShopSets[1].items"
|
||||||
:key="bg.key"
|
:key="bg.key"
|
||||||
|
:id="bg.key"
|
||||||
class="col-4 text-center customize-option background-button"
|
class="col-4 text-center customize-option background-button"
|
||||||
:popover-title="bg.text"
|
|
||||||
:popover="bg.notes"
|
|
||||||
popover-trigger="mouseenter"
|
|
||||||
@click="!user.purchased.background[bg.key]
|
@click="!user.purchased.background[bg.key]
|
||||||
? backgroundSelected(bg) : unlock('background.' + bg.key)"
|
? backgroundSelected(bg) : unlock('background.' + bg.key)"
|
||||||
>
|
>
|
||||||
|
|
@ -270,6 +278,13 @@
|
||||||
:pinned="isBackgroundPinned(bg)"
|
:pinned="isBackgroundPinned(bg)"
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
|
<b-popover
|
||||||
|
:target="bg.key"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="bottom"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="bg.notes"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -302,10 +317,8 @@
|
||||||
<div
|
<div
|
||||||
v-for="bg in set.items"
|
v-for="bg in set.items"
|
||||||
:key="bg.key"
|
:key="bg.key"
|
||||||
|
:id="bg.key"
|
||||||
class="col-4 text-center customize-option background-button"
|
class="col-4 text-center customize-option background-button"
|
||||||
:popover-title="bg.text"
|
|
||||||
:popover="bg.notes"
|
|
||||||
popover-trigger="mouseenter"
|
|
||||||
@click="!user.purchased.background[bg.key]
|
@click="!user.purchased.background[bg.key]
|
||||||
? backgroundSelected(bg) : unlock('background.' + bg.key)"
|
? backgroundSelected(bg) : unlock('background.' + bg.key)"
|
||||||
>
|
>
|
||||||
|
|
@ -336,6 +349,13 @@
|
||||||
:pinned="isBackgroundPinned(bg)"
|
:pinned="isBackgroundPinned(bg)"
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
|
<b-popover
|
||||||
|
:target="bg.key"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="bottom"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="bg.notes"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="!ownsSet('background', set.items) && set.identifier !== 'incentiveBackgrounds'"
|
v-if="!ownsSet('background', set.items) && set.identifier !== 'incentiveBackgrounds'"
|
||||||
|
|
@ -358,16 +378,21 @@
|
||||||
<div
|
<div
|
||||||
v-for="(bg) in ownedBackgrounds"
|
v-for="(bg) in ownedBackgrounds"
|
||||||
:key="bg.key"
|
:key="bg.key"
|
||||||
|
:id="bg.key"
|
||||||
class="col-4 text-center customize-option background-button"
|
class="col-4 text-center customize-option background-button"
|
||||||
:popover-title="bg.text"
|
|
||||||
:popover="bg.notes"
|
|
||||||
popover-trigger="mouseenter"
|
|
||||||
@click="unlock('background.' + bg.key)"
|
@click="unlock('background.' + bg.key)"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="background"
|
class="background"
|
||||||
:class="[`background_${bg.key}`, backgroundLockedStatus(bg.key)]"
|
:class="[`background_${bg.key}`, backgroundLockedStatus(bg.key)]"
|
||||||
></div>
|
></div>
|
||||||
|
<b-popover
|
||||||
|
:target="bg.key"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="bottom"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="bg.notes"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -258,13 +258,22 @@
|
||||||
:key="hero._id"
|
:key="hero._id"
|
||||||
>
|
>
|
||||||
<td>
|
<td>
|
||||||
<user-link
|
<div
|
||||||
v-if="hasPermission(hero, 'userSupport')"
|
v-if="hasPermission(hero, 'userSupport')"
|
||||||
:user="hero"
|
class="width-content"
|
||||||
:popover="$t('gamemaster')"
|
>
|
||||||
popover-trigger="mouseenter"
|
<user-link
|
||||||
popover-placement="right"
|
:id="hero._id"
|
||||||
/>
|
:user="hero"
|
||||||
|
/>
|
||||||
|
<b-popover
|
||||||
|
:target="hero._id"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t('gamemaster')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
<user-link
|
<user-link
|
||||||
v-else
|
v-else
|
||||||
:user="hero"
|
:user="hero"
|
||||||
|
|
@ -302,6 +311,10 @@
|
||||||
h4.expand-toggle::after {
|
h4.expand-toggle::after {
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.width-content {
|
||||||
|
width: fit-content;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,10 @@
|
||||||
<hr>
|
<hr>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="checkbox">
|
<div
|
||||||
|
class="checkbox"
|
||||||
|
id="preferenceAdvancedCollapsed"
|
||||||
|
>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input
|
||||||
v-model="user.preferences.advancedCollapsed"
|
v-model="user.preferences.advancedCollapsed"
|
||||||
|
|
@ -136,17 +139,22 @@
|
||||||
class="mr-2"
|
class="mr-2"
|
||||||
@change="set('advancedCollapsed')"
|
@change="set('advancedCollapsed')"
|
||||||
>
|
>
|
||||||
<span
|
<span class="hint">
|
||||||
class="hint"
|
{{ $t('startAdvCollapsed') }}
|
||||||
popover-trigger="mouseenter"
|
</span>
|
||||||
popover-placement="right"
|
<b-popover
|
||||||
:popover="$t('startAdvCollapsedPop')"
|
target="preferenceAdvancedCollapsed"
|
||||||
>{{ $t('startAdvCollapsed') }}</span>
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t('startAdvCollapsedPop')"
|
||||||
|
/>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="party.memberCount === 1"
|
v-if="party.memberCount === 1"
|
||||||
class="checkbox"
|
class="checkbox"
|
||||||
|
id="preferenceDisplayInviteAtOneMember"
|
||||||
>
|
>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input
|
||||||
|
|
@ -155,12 +163,9 @@
|
||||||
class="mr-2"
|
class="mr-2"
|
||||||
@change="set('displayInviteToPartyWhenPartyIs1')"
|
@change="set('displayInviteToPartyWhenPartyIs1')"
|
||||||
>
|
>
|
||||||
<span
|
<span class="hint">
|
||||||
class="hint"
|
{{ $t('displayInviteToPartyWhenPartyIs1') }}
|
||||||
popover-trigger="mouseenter"
|
</span>
|
||||||
popover-placement="right"
|
|
||||||
:popover="$t('displayInviteToPartyWhenPartyIs1')"
|
|
||||||
>{{ $t('displayInviteToPartyWhenPartyIs1') }}</span>
|
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
|
|
@ -201,32 +206,47 @@
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
<button
|
<button
|
||||||
|
id="buttonShowBailey"
|
||||||
class="btn btn-primary mr-2 mb-2"
|
class="btn btn-primary mr-2 mb-2"
|
||||||
popover-trigger="mouseenter"
|
|
||||||
popover-placement="right"
|
|
||||||
:popover="$t('showBaileyPop')"
|
|
||||||
@click="showBailey()"
|
@click="showBailey()"
|
||||||
>
|
>
|
||||||
{{ $t('showBailey') }}
|
{{ $t('showBailey') }}
|
||||||
|
<b-popover
|
||||||
|
target="buttonShowBailey"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t('showBaileyPop')"
|
||||||
|
/>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
|
id="buttonFCV"
|
||||||
class="btn btn-primary mr-2 mb-2"
|
class="btn btn-primary mr-2 mb-2"
|
||||||
popover-trigger="mouseenter"
|
|
||||||
popover-placement="right"
|
|
||||||
:popover="$t('fixValPop')"
|
|
||||||
@click="openRestoreModal()"
|
@click="openRestoreModal()"
|
||||||
>
|
>
|
||||||
{{ $t('fixVal') }}
|
{{ $t('fixVal') }}
|
||||||
|
<b-popover
|
||||||
|
target="buttonFCV"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t('fixValPop')"
|
||||||
|
/>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
v-if="user.preferences.disableClasses == true"
|
v-if="user.preferences.disableClasses == true"
|
||||||
|
id="buttonEnableClasses"
|
||||||
class="btn btn-primary mb-2"
|
class="btn btn-primary mb-2"
|
||||||
popover-trigger="mouseenter"
|
|
||||||
popover-placement="right"
|
|
||||||
:popover="$t('enableClassPop')"
|
|
||||||
@click="changeClassForUser(false)"
|
@click="changeClassForUser(false)"
|
||||||
>
|
>
|
||||||
{{ $t('enableClass') }}
|
{{ $t('enableClass') }}
|
||||||
|
<b-popover
|
||||||
|
target="buttonEnableClasses"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t('enableClassPop')"
|
||||||
|
/>
|
||||||
</button>
|
</button>
|
||||||
<hr>
|
<hr>
|
||||||
<day-start-adjustment />
|
<day-start-adjustment />
|
||||||
|
|
@ -516,6 +536,10 @@
|
||||||
input {
|
input {
|
||||||
color: $gray-50;
|
color: $gray-50;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.checkbox {
|
||||||
|
width: fit-content;
|
||||||
|
}
|
||||||
.usersettings h5 {
|
.usersettings h5 {
|
||||||
margin-top: 1em;
|
margin-top: 1em;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,6 @@
|
||||||
|
|
||||||
.limitedTime {
|
.limitedTime {
|
||||||
height: 32px;
|
height: 32px;
|
||||||
width: calc(100% + 30px);
|
|
||||||
margin: 0 -15px; // the modal content has its own padding
|
|
||||||
|
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 1.33;
|
line-height: 1.33;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
v-else
|
v-else
|
||||||
class="btn btn-primary"
|
class="btn btn-primary mb-4"
|
||||||
:class="{'notEnough': !enoughCurrency(priceType, item.value * selectedAmountToBuy)}"
|
:class="{'notEnough': !enoughCurrency(priceType, item.value * selectedAmountToBuy)}"
|
||||||
:disabled="numberInvalid"
|
:disabled="numberInvalid"
|
||||||
@click="buyItem()"
|
@click="buyItem()"
|
||||||
|
|
@ -141,7 +141,6 @@
|
||||||
border-bottom-right-radius: 8px;
|
border-bottom-right-radius: 8px;
|
||||||
border-bottom-left-radius: 8px;
|
border-bottom-left-radius: 8px;
|
||||||
display: block;
|
display: block;
|
||||||
margin-top: 24px;
|
|
||||||
padding: 16px 24px;
|
padding: 16px 24px;
|
||||||
align-content: center;
|
align-content: center;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,19 @@
|
||||||
<br>
|
<br>
|
||||||
<p class="text-center">
|
<p class="text-center">
|
||||||
<button
|
<button
|
||||||
|
id="buttonClearBrowserData"
|
||||||
class="btn btn-lg btn-danger"
|
class="btn btn-lg btn-danger"
|
||||||
popover-trigger="mouseover"
|
|
||||||
:popover="$t('localStorageClearExplanation')"
|
|
||||||
@click="clearLocalStorage()"
|
@click="clearLocalStorage()"
|
||||||
>
|
>
|
||||||
{{ $t('localStorageClear') }}
|
{{ $t('localStorageClear') }}
|
||||||
</button>
|
</button>
|
||||||
|
<b-popover
|
||||||
|
target="buttonClearBrowserData"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t('localStorageClearExplanation')"
|
||||||
|
/>
|
||||||
</p>
|
</p>
|
||||||
<br>
|
<br>
|
||||||
<p v-html="$t('localStorageTryNext', localStorageTryNext) "></p>
|
<p v-html="$t('localStorageTryNext', localStorageTryNext) "></p>
|
||||||
|
|
|
||||||
|
|
@ -190,14 +190,10 @@
|
||||||
class="col-12 col-md-6"
|
class="col-12 col-md-6"
|
||||||
>
|
>
|
||||||
<div class="row col-12 stats-column">
|
<div class="row col-12 stats-column">
|
||||||
<div class="col-12 col-md-4 attribute-label">
|
<div
|
||||||
<span
|
:id="`${stat}-information`"
|
||||||
class="hint"
|
class="col-12 col-md-4 attribute-label"
|
||||||
:popover-title="$t(statInfo.title)"
|
>
|
||||||
popover-placement="right"
|
|
||||||
:popover="$t(statInfo.popover)"
|
|
||||||
popover-trigger="mouseenter"
|
|
||||||
></span>
|
|
||||||
<div
|
<div
|
||||||
class="stat-title"
|
class="stat-title"
|
||||||
:class="stat"
|
:class="stat"
|
||||||
|
|
@ -206,6 +202,13 @@
|
||||||
</div>
|
</div>
|
||||||
<strong class="number">{{ totalStatPoints(stat) | floorWholeNumber }}</strong>
|
<strong class="number">{{ totalStatPoints(stat) | floorWholeNumber }}</strong>
|
||||||
</div>
|
</div>
|
||||||
|
<b-popover
|
||||||
|
:target="`${stat}-information`"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t(statInfo.popover)"
|
||||||
|
/>
|
||||||
<div class="col-12 col-md-6">
|
<div class="col-12 col-md-6">
|
||||||
<ul class="bonus-stats">
|
<ul class="bonus-stats">
|
||||||
<li>
|
<li>
|
||||||
|
|
@ -355,7 +358,7 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
allocateStatsList: {
|
allocateStatsList: {
|
||||||
str: { title: 'allocateStr', popover: 'strengthText', allocatepop: 'allocateStrPop' },
|
str: { title: 'allocateStr', popover: 'strText', allocatepop: 'allocateStrPop' },
|
||||||
int: { title: 'allocateInt', popover: 'intText', allocatepop: 'allocateIntPop' },
|
int: { title: 'allocateInt', popover: 'intText', allocatepop: 'allocateIntPop' },
|
||||||
con: { title: 'allocateCon', popover: 'conText', allocatepop: 'allocateConPop' },
|
con: { title: 'allocateCon', popover: 'conText', allocatepop: 'allocateConPop' },
|
||||||
per: { title: 'allocatePer', popover: 'perText', allocatepop: 'allocatePerPop' },
|
per: { title: 'allocatePer', popover: 'perText', allocatepop: 'allocatePerPop' },
|
||||||
|
|
@ -364,7 +367,7 @@ export default {
|
||||||
stats: {
|
stats: {
|
||||||
str: {
|
str: {
|
||||||
title: 'strength',
|
title: 'strength',
|
||||||
popover: 'strengthText',
|
popover: 'strText',
|
||||||
},
|
},
|
||||||
int: {
|
int: {
|
||||||
title: 'intelligence',
|
title: 'intelligence',
|
||||||
|
|
|
||||||
|
|
@ -146,17 +146,19 @@
|
||||||
:key="stat"
|
:key="stat"
|
||||||
class="row"
|
class="row"
|
||||||
>
|
>
|
||||||
<div class="col-4">
|
<div
|
||||||
<span
|
class="col-4"
|
||||||
class="hint"
|
:id="statInfo.title"
|
||||||
:popover-title="$t(statInfo.title)"
|
>
|
||||||
popover-placement="right"
|
<strong> {{ $t(statInfo.title)}} </strong>
|
||||||
:popover="$t(statInfo.popover)"
|
|
||||||
popover-trigger="mouseenter"
|
|
||||||
>
|
|
||||||
<strong>{{ $t(statInfo.title) }}</strong>
|
|
||||||
</span>
|
|
||||||
<strong>: {{ statsComputed[stat] }}</strong>
|
<strong>: {{ statsComputed[stat] }}</strong>
|
||||||
|
<b-popover
|
||||||
|
:target="statInfo.title"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t(statInfo.popover)"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<ul class="bonus-stats">
|
<ul class="bonus-stats">
|
||||||
|
|
@ -183,27 +185,38 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="user.stats.buffs.stealth">
|
<div
|
||||||
|
v-if="user.stats.buffs.stealth"
|
||||||
|
id="stealthBuff"
|
||||||
|
>
|
||||||
<strong
|
<strong
|
||||||
v-once
|
v-once
|
||||||
class="hint"
|
class="hint"
|
||||||
:popover-title="$t('stealth')"
|
|
||||||
popover-trigger="mouseenter"
|
|
||||||
popover-placement="right"
|
|
||||||
:popover="$t('stealthNewDay')"
|
|
||||||
>{{ $t('stealth') }}</strong>
|
>{{ $t('stealth') }}</strong>
|
||||||
<strong>: {{ user.stats.buffs.stealth }} </strong>
|
<strong>: {{ user.stats.buffs.stealth }} </strong>
|
||||||
|
<b-popover
|
||||||
|
target="stealthBuff"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t('stealthNewDay')"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="user.stats.buffs.streaks">
|
<div
|
||||||
|
v-if="user.stats.buffs.streaks"
|
||||||
|
id="streaksFrozenBuff"
|
||||||
|
>
|
||||||
<div>
|
<div>
|
||||||
<strong
|
<strong>
|
||||||
class="hint"
|
{{ $t('streaksFrozen') }}
|
||||||
popover-title="$t('streaksFrozen')"
|
</strong>
|
||||||
popover-trigger="mouseenter"
|
<b-popover
|
||||||
popover-placement="right"
|
target="streaksFrozenBuff"
|
||||||
:popover="$t('streaksFrozenText')"
|
triggers="hover focus"
|
||||||
></strong>
|
placement="right"
|
||||||
{{ $t('streaksFrozen') }}
|
:prevent-overflow="false"
|
||||||
|
:content="$t('streaksFrozenText')"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -237,19 +250,27 @@
|
||||||
>
|
>
|
||||||
{{ $t('noMoreAllocate') }}
|
{{ $t('noMoreAllocate') }}
|
||||||
</p>
|
</p>
|
||||||
<p v-if="user.stats.points || userLevel100Plus">
|
<p
|
||||||
|
v-if="user.stats.points || userLevel100Plus"
|
||||||
|
id="pointAllocation"
|
||||||
|
>
|
||||||
<strong class="inline">{{ user.stats.points }} </strong>
|
<strong class="inline">{{ user.stats.points }} </strong>
|
||||||
<strong
|
<strong> {{ $t('unallocated') }} </strong>
|
||||||
class="hint"
|
<b-popover
|
||||||
popover-trigger="mouseenter"
|
target="pointAllocation"
|
||||||
popover-placement="right"
|
triggers="hover focus"
|
||||||
:popover="$t('levelPopover')"
|
placement="right"
|
||||||
>{{ $t('unallocated') }}</strong>
|
:prevent-overflow="false"
|
||||||
|
:content="$t('levelPopover')"
|
||||||
|
/>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<fieldset class="auto-allocate">
|
<fieldset class="auto-allocate">
|
||||||
<div class="checkbox">
|
<div
|
||||||
|
id="preferenceAutomaticAllocation"
|
||||||
|
class="checkbox"
|
||||||
|
>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input
|
||||||
v-model="user.preferences.automaticAllocation"
|
v-model="user.preferences.automaticAllocation"
|
||||||
|
|
@ -259,19 +280,24 @@
|
||||||
'preferences.allocationMode': 'taskbased'
|
'preferences.allocationMode': 'taskbased'
|
||||||
})"
|
})"
|
||||||
>
|
>
|
||||||
<span
|
<b-popover
|
||||||
class="hint"
|
target="preferenceAutomaticAllocation"
|
||||||
popover-trigger="mouseenter"
|
triggers="hover focus"
|
||||||
popover-placement="right"
|
placement="right"
|
||||||
:popover="$t('autoAllocationPop')"
|
:prevent-overflow="false"
|
||||||
>{{ $t('autoAllocation') }}</span>
|
:content="$t('autoAllocationPop')"
|
||||||
|
/>
|
||||||
|
{{ $t('autoAllocation') }}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<form
|
<form
|
||||||
v-if="user.preferences.automaticAllocation"
|
v-if="user.preferences.automaticAllocation"
|
||||||
style="margin-left:1em"
|
style="margin-left:1em"
|
||||||
>
|
>
|
||||||
<div class="radio">
|
<div
|
||||||
|
id="optionFlatAllocation"
|
||||||
|
class="radio"
|
||||||
|
>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input
|
||||||
v-model="user.preferences.allocationMode"
|
v-model="user.preferences.allocationMode"
|
||||||
|
|
@ -280,15 +306,22 @@
|
||||||
value="flat"
|
value="flat"
|
||||||
@change="set({'preferences.allocationMode': 'flat'})"
|
@change="set({'preferences.allocationMode': 'flat'})"
|
||||||
>
|
>
|
||||||
<span
|
<span class="hint">
|
||||||
class="hint"
|
{{ $t('evenAllocation') }}
|
||||||
popover-trigger="mouseenter"
|
</span>
|
||||||
popover-placement="right"
|
<b-popover
|
||||||
:popover="$t('evenAllocationPop')"
|
target="optionFlatAllocation"
|
||||||
>{{ $t('evenAllocation') }}</span>
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t('evenAllocationPop')"
|
||||||
|
/>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="radio">
|
<div
|
||||||
|
id="optionClassAllocation"
|
||||||
|
class="radio"
|
||||||
|
>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input
|
||||||
v-model="user.preferences.allocationMode"
|
v-model="user.preferences.allocationMode"
|
||||||
|
|
@ -297,47 +330,63 @@
|
||||||
value="classbased"
|
value="classbased"
|
||||||
@change="set({'preferences.allocationMode': 'classbased'})"
|
@change="set({'preferences.allocationMode': 'classbased'})"
|
||||||
>
|
>
|
||||||
<span
|
<span class="hint">
|
||||||
class="hint"
|
{{ $t('classAllocation') }}
|
||||||
popover-trigger="mouseenter"
|
</span>
|
||||||
popover-placement="right"
|
<b-popover
|
||||||
:popover="$t('classAllocationPop')"
|
target="optionClassAllocation"
|
||||||
>{{ $t('classAllocation') }}</span>
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t('classAllocationPop')"
|
||||||
|
/>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="radio">
|
<div
|
||||||
|
id="optionTaskAllocation"
|
||||||
|
class="radio"
|
||||||
|
>
|
||||||
<label>
|
<label>
|
||||||
<input
|
<input
|
||||||
v-model="user.preferences.allocationMode"
|
v-model="user.preferences.allocationMode"
|
||||||
type="radio"
|
type="radio"
|
||||||
name="allocationMode"
|
name="allocationMode"
|
||||||
value="taskbased"
|
value="classbased"
|
||||||
@change="set({'preferences.allocationMode': 'taskbased'})"
|
@change="set({'preferences.allocationMode': 'taskbased'})"
|
||||||
>
|
>
|
||||||
<span
|
<span class="hint">
|
||||||
class="hint"
|
{{ $t('taskAllocation') }}
|
||||||
popover-trigger="mouseenter"
|
</span>
|
||||||
popover-placement="right"
|
<b-popover
|
||||||
:popover="$t('taskAllocationPop')"
|
target="optionTaskAllocation"
|
||||||
>{{ $t('taskAllocation') }}</span>
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t('taskAllocationPop')"
|
||||||
|
/>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<div
|
<div
|
||||||
v-if="user.preferences.automaticAllocation
|
v-if="user.preferences.automaticAllocation
|
||||||
&& !(user.preferences.allocationMode === 'taskbased') && (user.stats.points > 0)"
|
&& !(user.preferences.allocationMode === 'taskbased') && (user.stats.points > 0)"
|
||||||
|
id="buttonDistributePoints"
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
class="btn btn-primary btn-xs"
|
class="btn btn-primary btn-xs"
|
||||||
popover-trigger="mouseenter"
|
|
||||||
popover-placement="right"
|
|
||||||
:popover="$t('distributePointsPop')"
|
|
||||||
@click="allocateNow({})"
|
@click="allocateNow({})"
|
||||||
>
|
>
|
||||||
<span class="glyphicon glyphicon-download"></span>
|
<span class="glyphicon glyphicon-download"></span>
|
||||||
|
|
||||||
{{ $t('distributePoints') }}
|
{{ $t('distributePoints') }}
|
||||||
</button>
|
</button>
|
||||||
|
<b-popover
|
||||||
|
target="buttonDistributePoints"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t('distributePointsPop')"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -346,28 +395,35 @@
|
||||||
:key="stat"
|
:key="stat"
|
||||||
class="row"
|
class="row"
|
||||||
>
|
>
|
||||||
<div class="col-8">
|
<div
|
||||||
<span
|
:id="`${stat}-info`"
|
||||||
class="hint"
|
class="col-8"
|
||||||
popover-trigger="mouseenter"
|
>
|
||||||
popover-placement="right"
|
|
||||||
:popover="$t(statInfo.popover)"
|
|
||||||
></span>
|
|
||||||
{{ $t(statInfo.title) + user.stats[stat] }}
|
{{ $t(statInfo.title) + user.stats[stat] }}
|
||||||
|
<b-popover
|
||||||
|
:target="`${stat}-info`"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t(statInfo.popover)"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="user.stats.points"
|
v-if="user.stats.points"
|
||||||
|
:id="`${stat}-allocate`"
|
||||||
class="col-4"
|
class="col-4"
|
||||||
@click="allocate(stat)"
|
@click="allocate(stat)"
|
||||||
>
|
>
|
||||||
<button
|
<button class="btn btn-primary">
|
||||||
class="btn btn-primary"
|
|
||||||
popover-trigger="mouseenter"
|
|
||||||
popover-placement="right"
|
|
||||||
:popover="$t(statInfo.allocatepop)"
|
|
||||||
>
|
|
||||||
+
|
+
|
||||||
</button>
|
</button>
|
||||||
|
<b-popover
|
||||||
|
:target="`${stat}-allocate`"
|
||||||
|
triggers="hover focus"
|
||||||
|
placement="right"
|
||||||
|
:prevent-overflow="false"
|
||||||
|
:content="$t(statInfo.allocatePop)"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -586,7 +586,7 @@
|
||||||
"questNudibranchUnlockText": "Unlocks Nudibranch Eggs for purchase in the Market",
|
"questNudibranchUnlockText": "Unlocks Nudibranch Eggs for purchase in the Market",
|
||||||
|
|
||||||
"splashyPalsText": "Splashy Pals Quest Bundle",
|
"splashyPalsText": "Splashy Pals Quest Bundle",
|
||||||
"splashyPalsNotes": "Contains 'The Dilatory Derby', 'Guide the Turtle', and 'Wail of the Whale'. Available until July 31.",
|
"splashyPalsNotes": "Contains 'The Dilatory Derby', 'Guide the Turtle', and 'Wail of the Whale'. Available until June 30.",
|
||||||
|
|
||||||
"questHippoText": "What a Hippo-Crite",
|
"questHippoText": "What a Hippo-Crite",
|
||||||
"questHippoNotes": "You and @awesomekitty collapse into the shade of a palm tree, exhausted. The sun beats down over the Sloensteadi Savannah, scorching the ground below. It’s been a productive day so far, conquering your Dailies, and this oasis looks like a nice place to take a break and refresh. Stooping near the water to get a drink, you stumble back in shock as a massive hippopotamus rises. “Resting so soon? Don’t be so lazy, get back to work.” You try and protest that you’ve been working hard and need a break, but the hippo isn’t having any of it.<br><br>@khdarkwolf whispers to you, “Notice how it’s lounging around all day but has the nerve to call you lazy? It’s the Hippo-Crite!”<br><br>Your friend @jumorales nods. “Let’s show it what hard work looks like!”",
|
"questHippoNotes": "You and @awesomekitty collapse into the shade of a palm tree, exhausted. The sun beats down over the Sloensteadi Savannah, scorching the ground below. It’s been a productive day so far, conquering your Dailies, and this oasis looks like a nice place to take a break and refresh. Stooping near the water to get a drink, you stumble back in shock as a massive hippopotamus rises. “Resting so soon? Don’t be so lazy, get back to work.” You try and protest that you’ve been working hard and need a break, but the hippo isn’t having any of it.<br><br>@khdarkwolf whispers to you, “Notice how it’s lounging around all day but has the nerve to call you lazy? It’s the Hippo-Crite!”<br><br>Your friend @jumorales nods. “Let’s show it what hard work looks like!”",
|
||||||
|
|
|
||||||
|
|
@ -35,9 +35,9 @@ const bundles = {
|
||||||
'turtle',
|
'turtle',
|
||||||
'whale',
|
'whale',
|
||||||
],
|
],
|
||||||
event: EVENTS.bundle202106,
|
event: EVENTS.bundle202306,
|
||||||
canBuy () {
|
canBuy () {
|
||||||
return moment().isBefore(EVENTS.bundle202106.end);
|
return moment().isBetween(EVENTS.bundle202306.start, EVENTS.bundle202306.end);
|
||||||
},
|
},
|
||||||
type: 'quests',
|
type: 'quests',
|
||||||
class: 'quest_bundle_splashyPals',
|
class: 'quest_bundle_splashyPals',
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,15 @@ const gemsPromo = {
|
||||||
|
|
||||||
export const EVENTS = {
|
export const EVENTS = {
|
||||||
noEvent: {
|
noEvent: {
|
||||||
start: '2023-05-31T23:59-04:00',
|
start: '2023-06-13T23:59-04:00',
|
||||||
end: '2023-06-22T08:00-04:00',
|
end: '2023-06-30T08:00-04:00',
|
||||||
season: 'normal',
|
season: 'normal',
|
||||||
npcImageSuffix: '',
|
npcImageSuffix: '',
|
||||||
},
|
},
|
||||||
|
bundle202306: {
|
||||||
|
start:'2023-06-13T08:00-04:00',
|
||||||
|
end:'2023-06-30T23:59-04:00',
|
||||||
|
},
|
||||||
bundle202305: {
|
bundle202305: {
|
||||||
start:'2023-05-23T08:00-04:00',
|
start:'2023-05-23T08:00-04:00',
|
||||||
end:'2023-05-31T23:59-04:00',
|
end:'2023-05-31T23:59-04:00',
|
||||||
|
|
|
||||||
|
|
@ -44,12 +44,12 @@ const featuredItems = {
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
quests () { // start date is 3/28
|
quests () {
|
||||||
if (moment().isBetween(EVENTS.bundle202305.start, EVENTS.bundle202305.end)) {
|
if (moment().isBetween(EVENTS.bundle202306.start, EVENTS.bundle202306.end)) {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
type: 'bundles',
|
type: 'bundles',
|
||||||
path: 'bundles.birdBuddies',
|
path: 'bundles.splashyPals',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'quests',
|
type: 'quests',
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue