html format other components

This commit is contained in:
Matteo Pagliazzi 2019-10-12 17:05:15 +02:00
parent 7b4671fbf9
commit f99e3fab8b
180 changed files with 6536 additions and 2894 deletions

View file

@ -9,31 +9,49 @@
<svg
id="melior"
xmlns="http://www.w3.org/2000/svg"
viewbox="0 0 61.91 64"
><path
d="M61.82,64H51.59c-3.08,0-3.72.37-3.67-1,0.07-1.87.67-1.94,2.63-2.49,1.63-.45,1-3.35-0.8-5.88-1.28-1.76-3.89-3.81-7.31-2.22a10.75,10.75,0,0,0-4.56,3.52c-1.68,2.33-1.59,4.54,1,4.54s5.39-1.5,6.23.64c1,2.64.33,2.89-.18,2.89H28.55v0C19.77,64,11,63.93,9,58.38c-2.82-7.68,7.43-10.64,7.75-15.46,0.13-2-1-2.85-2.34-2.85h-6V36.41H4.7v-11H8.36V29.1H12v3.65h3.65v5.08a5.76,5.76,0,0,1,3.07,5.05c-0.17,5.51-9.5,8.57-7.79,14.35,1.56,5.29,13.37,4,13,.74L23.7,56.1c-0.06-2.62-.47-6.12.08-9.22C24.64,42,27.67,37.78,33,37.74c1,0,1.78-.21,1.78-1s-1.55-.84-2.64-0.95a23.35,23.35,0,0,1-12.56-5c-2.43-2-6.21-8.3-3.74-7.83a21.74,21.74,0,0,0,4.06.4c1.24,0,4.44-.35,4.44-1.11,0-1-1.85-.42-4.57-0.68C16.48,21.22,9.6,19.83,6,9.35,4.71,5.43,3.83-1.91,6,.46c12.46,13.7,16.69,11.47,23.84,16.16,3.15,2.06,5.19,7,7,6.58,1.2-.27.46-1.37,0.64-3.93C37.66,17,38.75,16.48,36,15.79c-3.26-.81-6.52-4.38-4.39-4.33a11.89,11.89,0,0,0,5.53-.76c1.87-.81,6.43-4.28,9.18-2.89s5.08-.6,6.94-0.25c2.71,0.51,3.41,4.24,3.05,6.42-0.22,1.38-.22,1.38-2,1.28-3.61-.21-4.53,2.67-2,4.25,3.87,2.42,5.51,4.23,6.56,9.58,0.51,2.6.1,3.2-.76,2.72s-2.34-.72-0.29,4-1.29,10.28-2.39,10.9a1.3,1.3,0,0,0-.91,1.34c0,11.42,0,12.27,1.92,12.48,2.9,0.31,4.14-1.44,5.27.06C63.29,62.73,63.41,64,61.82,64ZM4.7,21.28H1v3.65H4.7V21.28Z"
transform="translate(-1.05)"
fill="#fff"
></path></svg>
</div><div class="col-12 text-center">
<h2>{{ $t('tipTitle', {tipNumber: currentTipNumber}) }}</h2><p>{{ currentTip }}</p>
viewBox="0 0 61.91 64"
>
<path
d="M61.82,64H51.59c-3.08,0-3.72.37-3.67-1,0.07-1.87.67-1.94,2.63-2.49,1.63-.45,1-3.35-0.8-5.88-1.28-1.76-3.89-3.81-7.31-2.22a10.75,10.75,0,0,0-4.56,3.52c-1.68,2.33-1.59,4.54,1,4.54s5.39-1.5,6.23.64c1,2.64.33,2.89-.18,2.89H28.55v0C19.77,64,11,63.93,9,58.38c-2.82-7.68,7.43-10.64,7.75-15.46,0.13-2-1-2.85-2.34-2.85h-6V36.41H4.7v-11H8.36V29.1H12v3.65h3.65v5.08a5.76,5.76,0,0,1,3.07,5.05c-0.17,5.51-9.5,8.57-7.79,14.35,1.56,5.29,13.37,4,13,.74L23.7,56.1c-0.06-2.62-.47-6.12.08-9.22C24.64,42,27.67,37.78,33,37.74c1,0,1.78-.21,1.78-1s-1.55-.84-2.64-0.95a23.35,23.35,0,0,1-12.56-5c-2.43-2-6.21-8.3-3.74-7.83a21.74,21.74,0,0,0,4.06.4c1.24,0,4.44-.35,4.44-1.11,0-1-1.85-.42-4.57-0.68C16.48,21.22,9.6,19.83,6,9.35,4.71,5.43,3.83-1.91,6,.46c12.46,13.7,16.69,11.47,23.84,16.16,3.15,2.06,5.19,7,7,6.58,1.2-.27.46-1.37,0.64-3.93C37.66,17,38.75,16.48,36,15.79c-3.26-.81-6.52-4.38-4.39-4.33a11.89,11.89,0,0,0,5.53-.76c1.87-.81,6.43-4.28,9.18-2.89s5.08-.6,6.94-0.25c2.71,0.51,3.41,4.24,3.05,6.42-0.22,1.38-.22,1.38-2,1.28-3.61-.21-4.53,2.67-2,4.25,3.87,2.42,5.51,4.23,6.56,9.58,0.51,2.6.1,3.2-.76,2.72s-2.34-.72-0.29,4-1.29,10.28-2.39,10.9a1.3,1.3,0,0,0-.91,1.34c0,11.42,0,12.27,1.92,12.48,2.9,0.31,4.14-1.44,5.27.06C63.29,62.73,63.41,64,61.82,64ZM4.7,21.28H1v3.65H4.7V21.28Z"
transform="translate(-1.05)"
fill="#fff"
></path>
</svg>
</div>
<div class="col-12 text-center">
<h2>{{ $t('tipTitle', {tipNumber: currentTipNumber}) }}</h2>
<p>{{ currentTip }}</p>
</div>
</div>
</div><div
</div>
<div
id="app"
:class="{'casting-spell': castingSpell}"
>
<banned-account-modal /><amazon-payments-modal v-if="!isStaticPage" /><payments-success-modal /><sub-cancel-modal-confirm v-if="isUserLoaded" /><sub-canceled-modal v-if="isUserLoaded" /><snackbars /><router-view v-if="!isUserLoggedIn || isStaticPage" /><template v-else>
<banned-account-modal />
<amazon-payments-modal v-if="!isStaticPage" />
<payments-success-modal />
<sub-cancel-modal-confirm v-if="isUserLoaded" />
<sub-canceled-modal v-if="isUserLoaded" />
<snackbars />
<router-view v-if="!isUserLoggedIn || isStaticPage" />
<template v-else>
<template v-if="isUserLoaded">
<div
v-show="showRestingBanner"
ref="restingBanner"
class="resting-banner"
>
<span class="content"><span class="label d-inline d-sm-none">{{ $t('innCheckOutBannerShort') }}</span><span class="label d-none d-sm-inline">{{ $t('innCheckOutBanner') }}</span><span class="separator"> |</span><span
class="resume"
@click="resumeDamage()"
>{{ $t('resumeDamage') }}</span></span><div
<span class="content">
<span class="label d-inline d-sm-none">{{ $t('innCheckOutBannerShort') }}</span>
<span class="label d-none d-sm-inline">{{ $t('innCheckOutBanner') }}</span>
<span class="separator">|</span>
<span
class="resume"
@click="resumeDamage()"
>{{ $t('resumeDamage') }}</span>
</span>
<div
class="closepadding"
@click="hideBanner()"
>
@ -43,20 +61,28 @@
v-html="icons.close"
></span>
</div>
</div><notifications-display /><app-menu /><div class="container-fluid">
<app-header /><buyModal
</div>
<notifications-display />
<app-menu />
<div class="container-fluid">
<app-header />
<buyModal
:item="selectedItemToBuy || {}"
:with-pin="true"
:generic-purchase="genericPurchase(selectedItemToBuy)"
@buyPressed="customPurchase($event)"
/><selectMembersModal
/>
<selectMembersModal
:item="selectedSpellToBuy || {}"
:group="user.party"
@memberSelected="memberSelected($event)"
/><div :class="{sticky: user.preferences.stickyHeader}">
/>
<div :class="{sticky: user.preferences.stickyHeader}">
<router-view />
</div>
</div><app-footer /><audio
</div>
<app-footer />
<audio
id="sound"
ref="sound"
autoplay="autoplay"

View file

@ -1,17 +1,23 @@
<template>
<div class="row">
<div class="col-12 text-center">
<!-- @TODO i18n. How to setup the strings with the router-link inside?--><img
<!-- @TODO i18n. How to setup the strings with the router-link inside?-->
<img
class="not-found-img"
src="~@/assets/images/404.png"
><h1 class="not-found">
>
<h1 class="not-found">
Sometimes even the bravest adventurer gets lost.
</h1><h2 class="not-found">
</h1>
<h2 class="not-found">
Looks like this link is broken or the page may have moved, sorry!
</h2><h2 class="not-found">
Head back to the<router-link to="/">
</h2>
<h2 class="not-found">
Head back to the
<router-link to="/">
Homepage
</router-link>or<router-link :to="contactUsLink">
</router-link>or
<router-link :to="contactUsLink">
Contact Us
</router-link>about the issue.
</h2>

View file

@ -8,52 +8,77 @@
>
<div class="modal-header">
<h4>{{ $t('questInvitation') }}&nbsp;{{ quests[user.party.quest.key].text() }}</h4>
</div><div class="modal-body">
</div>
<div class="modal-body">
<div class="pull-right-sm text-center">
<div
class="col-centered"
:class="`quest_${quests[user.party.quest.key].key}`"
></div><div ng-if="quests[user.party.quest.key].boss">
<h4>{{ quests[user.party.quest.key].boss.name() }}</h4><p><strong>{{ $t('bossHP') }} + ': '</strong>{{ quests[user.party.quest.key].boss.hp }}</p><p><strong>{{ $t('bossStrength') }} + ': '</strong>{{ quests[user.party.quest.key].boss.str }}</p>
</div><div ng-if="quests[user.party.quest.key].collect">
<p ng-repeat="(k,v) in quests[user.party.quest.key].collect">
<strong>{{ $t('collect') }} + ': '</strong>{{ quests[user.party.quest.key].collect[k].count }} {{ quests[user.party.quest.key].collect[k].text() }}
></div>
<div ng-if="quests[user.party.quest.key].boss">
<h4>{{ quests[user.party.quest.key].boss.name() }}</h4>
<p>
<strong>{{ $t('bossHP') }} + ': '</strong>
{{ quests[user.party.quest.key].boss.hp }}
</p>
<p>
<strong>{{ $t('bossStrength') }} + ': '</strong>
{{ quests[user.party.quest.key].boss.str }}
</p>
</div>
</div><div ng-bind-html="quests[user.party.quest.key].notes()"></div><div
<div ng-if="quests[user.party.quest.key].collect">
<p ng-repeat="(k,v) in quests[user.party.quest.key].collect">
<strong>{{ $t('collect') }} + ': '</strong>
{{ quests[user.party.quest.key].collect[k].count }} {{ quests[user.party.quest.key].collect[k].text() }}
</p>
</div>
</div>
<div ng-bind-html="quests[user.party.quest.key].notes()"></div>
<div
:key="user.party.quest.key"
class="quest-rewards"
header-participant="$t('rewardsAllParticipants')"
header-quest-owner="$t('rewardsQuestOwner')"
></div><hr><h5>{{ headerParticipant }}</h5><table class="table table-striped">
></div>
<hr>
<h5>{{ headerParticipant }}</h5>
<table class="table table-striped">
<tr ng-repeat="drop in _.reject(quest.drop.items, 'onlyOwner')">
<td>{{ drop.text() }}</td>
</tr><tr ng-if="quest.drop.exp > 0">
</tr>
<tr ng-if="quest.drop.exp > 0">
<td>{{ quest.drop.exp }}&nbsp;{{ $t('experience') }}</td>
</tr><tr ng-if="quest.drop.gp > 0">
</tr>
<tr ng-if="quest.drop.gp > 0">
<td>{{ quest.drop.gp }}&nbsp;{{ $t('gold') }}</td>
</tr><tr ng-if="quest.drop.unlock()">
</tr>
<tr ng-if="quest.drop.unlock()">
<td>{{ quest.drop.unlock() }}</td>
</tr>
</table><div ng-if="getQuestOwnerRewards(quest).length > 0">
<h5>{{ headerQuestOwner }}</h5><table class="table table-striped">
</table>
<div ng-if="getQuestOwnerRewards(quest).length > 0">
<h5>{{ headerQuestOwner }}</h5>
<table class="table table-striped">
<tr ng-repeat="drop in getQuestOwnerRewards(quest)">
<td>{{ drop.text() }}</td>
</tr>
</table>
</div>
</div><div class="modal-footer">
</div>
<div class="modal-footer">
<button
class="btn btn-secondary"
ng-click="questHold = true; $close()"
>
{{ $t('askLater') }}
</button><button
</button>
<button
class="btn btn-secondary"
ng-click="questReject(); $close()"
>
{{ $t('reject') }}
</button><button
</button>
<button
class="btn btn-primary"
ng-click="questAccept(); $close()"
>

View file

@ -1,6 +1,8 @@
<template>
<div class="row footer-row">
<buy-gems-modal v-if="user" /><!--modify-inventory(v-if="isUserLoaded")--><footer class="col-12 expanded">
<buy-gems-modal v-if="user" />
<!--modify-inventory(v-if="isUserLoaded")-->
<footer class="col-12 expanded">
<div class="row">
<div class="col-12 col-md-2">
<h3>
@ -8,134 +10,171 @@
href="https://itunes.apple.com/us/app/habitica/id994882113?ls=1&mt=8"
target="_blank"
>{{ $t('mobileIOS') }}</a>
</h3><h3>
</h3>
<h3>
<a
href="https://play.google.com/store/apps/details?id=com.habitrpg.android.habitica"
target="_blank"
>{{ $t('mobileAndroid') }}</a>
</h3>
</div><div class="col-12 col-md-2">
<h3>{{ $t('footerCompany') }}</h3><ul>
</div>
<div class="col-12 col-md-2">
<h3>{{ $t('footerCompany') }}</h3>
<ul>
<li>
<router-link to="/static/features">
{{ $t('companyAbout') }}
</router-link>
</li><li>
</li>
<li>
<a
href="https://habitica.wordpress.com/"
target="_blank"
>{{ $t('companyBlog') }}</a>
</li><li>
</li>
<li>
<a
href="http://blog.habitrpg.com/"
target="_blank"
>{{ $t('tumblr') }}</a>
</li><li>
</li>
<li>
<router-link to="/static/faq">
{{ $t('FAQ') }}
</router-link>
</li><li>
</li>
<li>
<a
href="http://habitica.fandom.com/wiki/Whats_New"
target="_blank"
>{{ $t('oldNews') }}</a>
</li><li>
</li>
<li>
<router-link to="/static/merch">
{{ $t('merch') }}
</router-link>
</li><li>
</li>
<li>
<router-link to="/static/press-kit">
{{ $t('presskit') }}
</router-link>
</li><li>
</li>
<li>
<router-link to="/static/contact">
{{ $t('contactUs') }}
</router-link>
</li>
</ul>
</div><div class="col-12 col-md-2">
<h3>{{ $t('footerCommunity') }}</h3><ul>
</div>
<div class="col-12 col-md-2">
<h3>{{ $t('footerCommunity') }}</h3>
<ul>
<li>
<a
target="_blanck"
href="/static/community-guidelines"
>{{ $t('communityGuidelines') }}</a>
</li><li>
</li>
<li>
<router-link to="/hall/contributors">
{{ $t('hall') }}
</router-link>
</li><li>
<router-link to="/groups/guild/a29da26b-37de-4a71-b0c6-48e72a900dac">
</li>
<li>
<router-link
to="/groups/guild/a29da26b-37de-4a71-b0c6-48e72a900dac"
>
{{ $t('reportBug') }}
</router-link>
</li><li>
</li>
<li>
<a
href="https://trello.com/c/odmhIqyW/440-read-first-table-of-contents"
target="_blank"
>{{ $t('requestFeature') }}</a>
</li><li v-html="$t('communityExtensions')"></li><li v-html="$t('communityForum')"></li><li>
</li>
<li v-html="$t('communityExtensions')"></li>
<li v-html="$t('communityForum')"></li>
<li>
<a
href="https://www.facebook.com/Habitica"
target="_blank"
>{{ $t('communityFacebook') }}</a>
</li><li>
</li>
<li>
<a
href="https://www.instagram.com/habitica"
target="_blank"
>{{ $t('communityInstagram') }}</a>
</li>
</ul>
</div><div class="col-12 col-md-6">
</div>
<div class="col-12 col-md-6">
<div class="row">
<div class="col-6">
<h3>{{ $t('footerDevs') }}</h3><ul>
<h3>{{ $t('footerDevs') }}</h3>
<ul>
<li>
<a
href="/apidoc"
target="_blank"
>{{ $t('APIv3') }}</a>
</li><li>
</li>
<li>
<a
:href="getDataDisplayToolUrl"
target="_blank"
>{{ $t('dataDisplayTool') }}</a>
</li><li>
</li>
<li>
<a
href="http://habitica.fandom.com/wiki/Guidance_for_Blacksmiths"
target="_blank"
>{{ $t('guidanceForBlacksmiths') }}</a>
</li>
</ul>
</div><div class="col-6 social">
<h3>{{ $t('footerSocial') }}</h3><div class="icons">
</div>
<div class="col-6 social">
<h3>{{ $t('footerSocial') }}</h3>
<div class="icons">
<a
class="social-circle"
href="https://twitter.com/habitica"
target="_blank"
><div
class="social-icon svg-icon"
v-html="icons.twitter"
></div></a><a
>
<div
class="social-icon svg-icon"
v-html="icons.twitter"
></div>
</a>
<a
class="social-circle"
href="https://www.instagram.com/habitica/"
target="_blank"
><div
class="social-icon svg-icon instagram"
v-html="icons.instagram"
></div></a><a
>
<div
class="social-icon svg-icon instagram"
v-html="icons.instagram"
></div>
</a>
<a
class="social-circle"
href="https://www.facebook.com/Habitica"
target="_blank"
><div
class="social-icon facebook svg-icon"
v-html="icons.facebook"
></div></a>
>
<div
class="social-icon facebook svg-icon"
v-html="icons.facebook"
></div>
</a>
</div>
</div>
</div><div class="row">
</div>
<div class="row">
<div class="col-12 col-md-8">
{{ $t('donateText3') }}
</div><div class="col-12 col-md-4">
</div>
<div class="col-12 col-md-4">
<button
v-if="user"
class="btn btn-contribute btn-flat"
@ -144,31 +183,39 @@
<div
class="svg-icon heart"
v-html="icons.heart"
></div><div class="text">
></div>
<div class="text">
{{ $t('companyDonate') }}
</div>
</button><div
</button>
<div
v-else
class="btn btn-contribute btn-flat"
>
<a
href="http://habitica.fandom.com/wiki/Contributing_to_Habitica"
target="_blank"
><div
class="svg-icon heart"
v-html="icons.heart"
></div><div class="text">{{ $t('companyContribute') }}</div></a>
>
<div
class="svg-icon heart"
v-html="icons.heart"
></div>
<div class="text">{{ $t('companyContribute') }}</div>
</a>
</div>
</div>
</div>
</div>
</div><div class="row">
</div>
<div class="row">
<div class="col-12">
<hr>
</div>
</div><div class="row">
</div>
<div class="row">
<div class="col-12 col-md-5">
© 2019 Habitica. All rights reserved.<div
© 2019 Habitica. All rights reserved.
<div
v-if="!IS_PRODUCTION && isUserLoaded"
class="debug float-left"
>
@ -177,75 +224,98 @@
@click="debugMenuShown = !debugMenuShown"
>
Toggle Debug Menu
</button><div
</button>
<div
v-if="debugMenuShown"
class="debug-group"
>
<a
class="btn btn-secondary"
@click="setHealthLow()"
>Health = 1</a><a
>Health = 1</a>
<a
class="btn btn-secondary"
@click="addMissedDay(1)"
>+1 Missed Day</a><a
>+1 Missed Day</a>
<a
class="btn btn-secondary"
@click="addMissedDay(2)"
>+2 Missed Days</a><a
>+2 Missed Days</a>
<a
class="btn btn-secondary"
@click="addMissedDay(8)"
>+8 Missed Days</a><a
>+8 Missed Days</a>
<a
class="btn btn-secondary"
@click="addMissedDay(32)"
>+32 Missed Days</a><a
>+32 Missed Days</a>
<a
class="btn btn-secondary"
@click="addTenGems()"
>+10 Gems</a><a
>+10 Gems</a>
<a
class="btn btn-secondary"
@click="addHourglass()"
>+1 Mystic Hourglass</a><a
>+1 Mystic Hourglass</a>
<a
class="btn btn-secondary"
@click="addGold()"
>+500GP</a><a
>+500GP</a>
<a
class="btn btn-secondary"
@click="plusTenHealth()"
>+ 10HP</a><a
>+ 10HP</a>
<a
class="btn btn-secondary"
@click="addMana()"
>+MP</a><a
>+MP</a>
<a
class="btn btn-secondary"
@click="addLevelsAndGold()"
>+Exp +GP +MP</a><a
>+Exp +GP +MP</a>
<a
class="btn btn-secondary"
@click="addExp()"
>+Exp</a><a
>+Exp</a>
<a
class="btn btn-secondary"
@click="addOneLevel()"
>+1 Level</a><a
>+1 Level</a>
<a
class="btn btn-secondary"
tooltip="+1000 to boss quests. 300 items to collection quests"
@click="addQuestProgress()"
>Quest Progress Up</a><a
>Quest Progress Up</a>
<a
class="btn btn-secondary"
@click="makeAdmin()"
>Make Admin</a><a
>Make Admin</a>
<a
class="btn btn-secondary"
@click="openModifyInventoryModal()"
>Modify Inventory</a>
</div>
</div>
</div><div class="col-12 col-md-2 text-center">
</div>
<div class="col-12 col-md-2 text-center">
<div
class="logo svg-icon"
v-html="icons.gryphon"
></div>
</div><div class="col-12 col-md-5 text-right">
<span class="ml-4"><a
target="_blanck"
href="/static/privacy"
>{{ $t('privacy') }}</a></span><span class="ml-4"><a
target="_blanck"
href="/static/terms"
>{{ $t('terms') }}</a></span>
</div>
<div class="col-12 col-md-5 text-right">
<span class="ml-4">
<a
target="_blanck"
href="/static/privacy"
>{{ $t('privacy') }}</a>
</span>
<span class="ml-4">
<a
target="_blanck"
href="/static/terms"
>{{ $t('terms') }}</a>
</span>
</div>
</div>
</footer>

View file

@ -9,9 +9,11 @@
<div
class="svg-icon social-icon"
v-html="icons.facebookIcon"
></div><span>{{ registering ? $t('signUpWithSocial', {social: 'Facebook'}) : $t('loginWithSocial', {social: 'Facebook'}) }}</span>
></div>
<span>{{ registering ? $t('signUpWithSocial', {social: 'Facebook'}) : $t('loginWithSocial', {social: 'Facebook'}) }}</span>
</div>
</div><div class="col-12 col-md-6">
</div>
<div class="col-12 col-md-6">
<div
class="btn btn-secondary social-button"
@click="socialAuth('google')"
@ -19,17 +21,20 @@
<div
class="svg-icon social-icon"
v-html="icons.googleIcon"
></div><span>{{ registering ? $t('signUpWithSocial', {social: 'Google'}) : $t('loginWithSocial', {social: 'Google'}) }}</span>
></div>
<span>{{ registering ? $t('signUpWithSocial', {social: 'Google'}) : $t('loginWithSocial', {social: 'Google'}) }}</span>
</div>
</div>
</div><div
</div>
<div
v-if="registering"
class="form-group"
>
<label
v-once
for="usernameInput"
>{{ $t('username') }}</label><input
>{{ $t('username') }}</label>
<input
id="usernameInput"
v-model="username"
class="form-control"
@ -37,28 +42,32 @@
:placeholder="$t('usernamePlaceholder')"
:class="{'input-valid': usernameValid, 'input-invalid': usernameInvalid}"
>
</div><div
</div>
<div
v-if="!registering"
class="form-group"
>
<label
v-once
for="usernameInput"
>{{ $t('emailOrUsername') }}</label><input
>{{ $t('emailOrUsername') }}</label>
<input
id="usernameInput"
v-model="username"
class="form-control"
type="text"
:placeholder="$t('emailOrUsername')"
>
</div><div
</div>
<div
v-if="registering"
class="form-group"
>
<label
v-once
for="emailInput"
>{{ $t('email') }}</label><input
>{{ $t('email') }}</label>
<input
id="emailInput"
v-model="email"
class="form-control"
@ -66,42 +75,49 @@
:placeholder="$t('emailPlaceholder')"
:class="{'input-invalid': emailInvalid, 'input-valid': emailValid}"
>
</div><div class="form-group">
</div>
<div class="form-group">
<label
v-once
for="passwordInput"
>{{ $t('password') }}</label><a
>{{ $t('password') }}</label>
<a
v-if="!registering"
v-once
class="float-right forgot-password"
@click="forgotPassword = true"
>{{ $t('forgotPassword') }}</a><input
>{{ $t('forgotPassword') }}</a>
<input
id="passwordInput"
v-model="password"
class="form-control"
type="password"
:placeholder="$t(registering ? 'passwordPlaceholder' : 'password')"
>
</div><div
</div>
<div
v-if="registering"
class="form-group"
>
<label
v-once
for="confirmPasswordInput"
>{{ $t('confirmPassword') }}</label><input
>{{ $t('confirmPassword') }}</label>
<input
id="confirmPasswordInput"
v-model="passwordConfirm"
class="form-control"
type="password"
:placeholder="$t('confirmPasswordPlaceholder')"
:class="{'input-invalid': passwordConfirmInvalid, 'input-valid': passwordConfirmValid}"
><small
>
<small
v-once
class="form-text"
v-html="$t('termsAndAgreement')"
></small>
</div><div class="text-center">
</div>
<div class="text-center">
<div
v-if="registering"
v-once
@ -109,7 +125,8 @@
@click="register()"
>
{{ $t('joinHabitica') }}
</div><div
</div>
<div
v-if="!registering"
v-once
class="btn btn-info"

View file

@ -2,20 +2,25 @@
<div class="form-wrapper">
<div id="top-background">
<div class="seamless_stars_varied_opacity_repeat"></div>
</div><form
</div>
<form
v-if="!forgotPassword && !resetPasswordSetNewOne"
id="login-form"
@submit.prevent="handleSubmit"
@keyup.enter="handleSubmit"
>
<div class="text-center">
<div><div class="svg-icon gryphon"></div></div><div>
<div>
<div class="svg-icon gryphon"></div>
</div>
<div>
<div
class="svg-icon habitica-logo"
v-html="icons.habiticaIcon"
></div>
</div>
</div><div class="form-group row text-center">
</div>
<div class="form-group row text-center">
<div class="col-12 col-md-6">
<div
class="btn btn-secondary social-button"
@ -24,11 +29,15 @@
<div
class="svg-icon social-icon"
v-html="icons.facebookIcon"
></div><div class="text">
></div>
<div
class="text"
>
{{ registering ? $t('signUpWithSocial', {social: 'Facebook'}) : $t('loginWithSocial', {social: 'Facebook'}) }}
</div>
</div>
</div><div class="col-12 col-md-6">
</div>
<div class="col-12 col-md-6">
<div
class="btn btn-secondary social-button"
@click="socialAuth('google')"
@ -36,53 +45,63 @@
<div
class="svg-icon social-icon"
v-html="icons.googleIcon"
></div><div class="text">
></div>
<div
class="text"
>
{{ registering ? $t('signUpWithSocial', {social: 'Google'}) : $t('loginWithSocial', {social: 'Google'}) }}
</div>
</div>
</div>
</div><div
</div>
<div
v-if="registering"
class="form-group"
>
<label
v-once
for="usernameInput"
>{{ $t('username') }}</label><input
>{{ $t('username') }}</label>
<input
id="usernameInput"
v-model="username"
class="form-control"
type="text"
:placeholder="$t('usernamePlaceholder')"
:class="{'input-valid': usernameValid, 'input-invalid': usernameInvalid}"
><div
>
<div
v-for="issue in usernameIssues"
class="input-error"
>
{{ issue }}
</div>
</div><div
</div>
<div
v-if="!registering"
class="form-group"
>
<label
v-once
for="usernameInput"
>{{ $t('emailOrUsername') }}</label><input
>{{ $t('emailOrUsername') }}</label>
<input
id="usernameInput"
v-model="username"
class="form-control"
type="text"
:placeholder="$t('emailOrUsername')"
>
</div><div
</div>
<div
v-if="registering"
class="form-group"
>
<label
v-once
for="emailInput"
>{{ $t('email') }}</label><input
>{{ $t('email') }}</label>
<input
id="emailInput"
v-model="email"
class="form-control"
@ -90,42 +109,49 @@
:placeholder="$t('emailPlaceholder')"
:class="{'input-invalid': emailInvalid, 'input-valid': emailValid}"
>
</div><div class="form-group">
</div>
<div class="form-group">
<label
v-once
for="passwordInput"
>{{ $t('password') }}</label><a
>{{ $t('password') }}</label>
<a
v-if="!registering"
v-once
class="float-right forgot-password"
@click="forgotPassword = true"
>{{ $t('forgotPassword') }}</a><input
>{{ $t('forgotPassword') }}</a>
<input
id="passwordInput"
v-model="password"
class="form-control"
type="password"
:placeholder="$t(registering ? 'passwordPlaceholder' : 'password')"
>
</div><div
</div>
<div
v-if="registering"
class="form-group"
>
<label
v-once
for="confirmPasswordInput"
>{{ $t('confirmPassword') }}</label><input
>{{ $t('confirmPassword') }}</label>
<input
id="confirmPasswordInput"
v-model="passwordConfirm"
class="form-control"
type="password"
:placeholder="$t('confirmPasswordPlaceholder')"
:class="{'input-invalid': passwordConfirmInvalid, 'input-valid': passwordConfirmValid}"
><small
>
<small
v-once
class="form-text"
v-html="$t('termsAndAgreement')"
></small>
</div><div class="text-center">
</div>
<div class="text-center">
<div
v-if="registering"
v-once
@ -133,14 +159,16 @@
@click="register()"
>
{{ $t('joinHabitica') }}
</div><div
</div>
<div
v-if="!registering"
v-once
class="btn btn-info"
@click="login()"
>
{{ $t('login') }}
</div><div class="toggle-links">
</div>
<div class="toggle-links">
<router-link
v-if="registering"
:to="{name: 'login'}"
@ -151,7 +179,8 @@
class="toggle-link"
v-html="$t('alreadyHaveAccountLogin')"
></a>
</router-link><router-link
</router-link>
<router-link
v-if="!registering"
:to="{name: 'register'}"
exact="exact"
@ -164,37 +193,46 @@
</router-link>
</div>
</div>
</form><form
</form>
<form
v-if="forgotPassword"
id="forgot-form"
@submit.prevent="handleSubmit"
@keyup.enter="handleSubmit"
>
<div class="text-center">
<div><div class="svg-icon gryphon"></div></div><div>
<div>
<div class="svg-icon gryphon"></div>
</div>
<div>
<div
class="svg-icon habitica-logo"
v-html="icons.habiticaIcon"
></div>
</div><div class="header">
</div>
<div class="header">
<h2 v-once>
{{ $t('emailNewPass') }}
</h2><p v-once>
</h2>
<p v-once>
{{ $t('forgotPasswordSteps') }}
</p>
</div>
</div><div class="form-group row text-center">
</div>
<div class="form-group row text-center">
<label
v-once
for="usernameInput"
>{{ $t('email') }}</label><input
>{{ $t('email') }}</label>
<input
id="usernameInput"
v-model="username"
class="form-control"
type="text"
:placeholder="$t('emailPlaceholder')"
>
</div><div class="text-center">
</div>
<div class="text-center">
<div
v-once
class="btn btn-info"
@ -203,44 +241,54 @@
{{ $t('sendLink') }}
</div>
</div>
</form><form
</form>
<form
v-if="resetPasswordSetNewOne"
id="reset-password-set-new-one-form"
@submit.prevent="handleSubmit"
@keyup.enter="handleSubmit"
>
<div class="text-center">
<div><div class="svg-icon gryphon"></div></div><div>
<div>
<div class="svg-icon gryphon"></div>
</div>
<div>
<div
class="svg-icon habitica-logo"
v-html="icons.habiticaIcon"
></div>
</div><div class="header">
</div>
<div class="header">
<h2>{{ $t('passwordResetPage') }}</h2>
</div>
</div><div class="form-group">
</div>
<div class="form-group">
<label
v-once
for="passwordInput"
>{{ $t('newPass') }}</label><input
>{{ $t('newPass') }}</label>
<input
id="passwordInput"
v-model="password"
class="form-control"
type="password"
:placeholder="$t('password')"
>
</div><div class="form-group">
</div>
<div class="form-group">
<label
v-once
for="confirmPasswordInput"
>{{ $t('confirmPass') }}</label><input
>{{ $t('confirmPass') }}</label>
<input
id="confirmPasswordInput"
v-model="passwordConfirm"
class="form-control"
type="password"
:placeholder="$t('confirmPasswordPlaceholder')"
>
</div><div class="text-center">
</div>
<div class="text-center">
<div
class="btn btn-info"
:enabled="!resetPasswordSetNewOneData.hasError"
@ -249,12 +297,14 @@
{{ $t('setNewPass') }}
</div>
</div>
</form><div
</form>
<div
id="bottom-wrap"
:class="`bottom-wrap-${!registering ? 'login' : 'register'}`"
>
<div id="bottom-background">
<div class="seamless_mountains_demo_repeat"></div><div class="midground_foreground_extended2"></div>
<div class="seamless_mountains_demo_repeat"></div>
<div class="midground_foreground_extended2"></div>
</div>
</div>
</div>

View file

@ -10,39 +10,73 @@
:style="{margin: spritesMargin}"
>
<template v-if="!avatarOnly">
<!-- Mount Body--><span
<!-- Mount Body-->
<span
v-if="member.items.currentMount"
:class="'Mount_Body_' + member.items.currentMount"
></span>
</template><!-- Buffs that cause visual changes to avatar: Snowman, Ghost, Flower, etc--><template v-for="(klass, item) in visualBuffs">
</template>
<!-- Buffs that cause visual changes to avatar: Snowman, Ghost, Flower, etc-->
<template v-for="(klass, item) in visualBuffs">
<span
v-if="member.stats.buffs[item] && showVisualBuffs"
:class="klass"
></span>
</template><!-- Show flower ALL THE TIME!!!--><!-- See https://github.com/HabitRPG/habitica/issues/7133--><span :class="'hair_flower_' + member.preferences.hair.flower"></span><!-- Show avatar only if not currently affected by visual buff--><template v-if="showAvatar()">
<span :class="['chair_' + member.preferences.chair, specialMountClass]"></span><span :class="[getGearClass('back'), specialMountClass]"></span><span :class="[skinClass, specialMountClass]"></span><span :class="[member.preferences.size + '_shirt_' + member.preferences.shirt, specialMountClass]"></span><span :class="['head_0', specialMountClass]"></span><span :class="[member.preferences.size + '_' + getGearClass('armor'), specialMountClass]"></span><span :class="[getGearClass('back_collar'), specialMountClass]"></span><template v-for="type in ['bangs', 'base', 'mustache', 'beard']">
<!-- eslint-disable-next-line max-len--><span :class="['hair_' + type + '_' + member.preferences.hair[type] + '_' + member.preferences.hair.color, specialMountClass]"></span>
</template><span :class="[getGearClass('body'), specialMountClass]"></span><span :class="[getGearClass('eyewear'), specialMountClass]"></span><span :class="[getGearClass('head'), specialMountClass]"></span><span :class="[getGearClass('headAccessory'), specialMountClass]"></span><span :class="['hair_flower_' + member.preferences.hair.flower, specialMountClass]"></span><span
</template>
<!-- Show flower ALL THE TIME!!!-->
<!-- See https://github.com/HabitRPG/habitica/issues/7133-->
<span :class="'hair_flower_' + member.preferences.hair.flower"></span>
<!-- Show avatar only if not currently affected by visual buff-->
<template v-if="showAvatar()">
<span :class="['chair_' + member.preferences.chair, specialMountClass]"></span>
<span :class="[getGearClass('back'), specialMountClass]"></span>
<span :class="[skinClass, specialMountClass]"></span>
<span
:class="[member.preferences.size + '_shirt_' + member.preferences.shirt, specialMountClass]"
></span>
<span :class="['head_0', specialMountClass]"></span>
<span :class="[member.preferences.size + '_' + getGearClass('armor'), specialMountClass]"></span>
<span :class="[getGearClass('back_collar'), specialMountClass]"></span>
<template v-for="type in ['bangs', 'base', 'mustache', 'beard']">
<!-- eslint-disable-next-line max-len-->
<span
:class="['hair_' + type + '_' + member.preferences.hair[type] + '_' + member.preferences.hair.color, specialMountClass]"
></span>
</template>
<span :class="[getGearClass('body'), specialMountClass]"></span>
<span :class="[getGearClass('eyewear'), specialMountClass]"></span>
<span :class="[getGearClass('head'), specialMountClass]"></span>
<span :class="[getGearClass('headAccessory'), specialMountClass]"></span>
<span :class="['hair_flower_' + member.preferences.hair.flower, specialMountClass]"></span>
<span
v-if="!hideGear('shield')"
:class="[getGearClass('shield'), specialMountClass]"
></span><span
></span>
<span
v-if="!hideGear('weapon')"
:class="[getGearClass('weapon'), specialMountClass]"
></span>
</template><!-- Resting--><span
</template>
<!-- Resting-->
<span
v-if="member.preferences.sleep"
class="zzz"
></span><template v-if="!avatarOnly">
<!-- Mount Head--><span
></span>
<template v-if="!avatarOnly">
<!-- Mount Head-->
<span
v-if="member.items.currentMount"
:class="'Mount_Head_' + member.items.currentMount"
></span><!-- Pet--><span
></span>
<!-- Pet-->
<span
v-if="member.items.currentPet"
class="current-pet"
:class="'Pet-' + member.items.currentPet"
></span>
</template>
</div><class-badge
</div>
<class-badge
v-if="hasClass && !hideClassBadge"
class="under-avatar"
:member-class="member.stats.class"

View file

@ -8,16 +8,19 @@
:items="items"
:active-sub-page="activeSubPage"
@changeSubPage="changeSubPage($event)"
/><div v-if="activeSubPage === 'size'">
/>
<div v-if="activeSubPage === 'size'">
<customize-options
:items="sizes"
:current-value="user.preferences.size"
/>
</div><div v-if="activeSubPage === 'shirt'">
</div>
<div v-if="activeSubPage === 'shirt'">
<customize-options
:items="freeShirts"
:current-value="user.preferences.shirt"
/><customize-options
/>
<customize-options
v-if="editing"
:items="specialShirts"
:current-value="user.preferences.shirt"

View file

@ -22,32 +22,39 @@
<div class="redline"></div>
</div>
</div>
</div><div
</div>
<div
v-if="option.gemLocked"
class="gem-lock"
>
<div
class="svg-icon gem"
v-html="icons.gem"
></div><span>{{ option.gem }}</span>
</div><div
></div>
<span>{{ option.gem }}</span>
</div>
<div
v-if="option.goldLocked"
class="gold-lock"
>
<div
class="svg-icon gold"
v-html="icons.gold"
></div><span>{{ option.gold }}</span>
></div>
<span>{{ option.gold }}</span>
</div>
</div><div
</div>
<div
v-if="fullSet"
class="purchase-set"
@click="unlock()"
>
<span class="label">{{ $t('purchaseAll') }}</span><div
<span class="label">{{ $t('purchaseAll') }}</span>
<div
class="svg-icon gem"
v-html="icons.gem"
></div><span class="price">5</span>
></div>
<span class="price">5</span>
</div>
</div>
</template>

View file

@ -8,12 +8,14 @@
:items="extraSubMenuItems"
:active-sub-page="activeSubPage"
@changeSubPage="changeSubPage($event)"
/><div
/>
<div
v-if="activeSubPage === 'glasses'"
id="hair-color"
>
<customize-options :items="eyewear" />
</div><div
</div>
<div
v-if="activeSubPage === 'ears'"
id="animal-ears"
>
@ -22,7 +24,8 @@
:full-set="!animalItemsOwned('headAccessory')"
@unlock="unlock(animalItemsUnlockString('headAccessory'))"
/>
</div><div
</div>
<div
v-if="activeSubPage === 'tails'"
id="animal-tails"
>
@ -31,17 +34,20 @@
:full-set="!animalItemsOwned('back')"
@unlock="unlock(animalItemsUnlockString('back'))"
/>
</div><div
</div>
<div
v-if="activeSubPage === 'headband'"
id="headband"
>
<customize-options :items="headbands" />
</div><div
</div>
<div
v-if="activeSubPage === 'wheelchair'"
id="wheelchairs"
>
<customize-options :items="chairs" />
</div><div
</div>
<div
v-if="activeSubPage === 'flower'"
id="flowers"
>

View file

@ -8,14 +8,16 @@
:items="hairSubMenuItems"
:active-sub-page="activeSubPage"
@changeSubPage="changeSubPage($event)"
/><div
/>
<div
v-if="activeSubPage === 'color'"
id="hair-color"
>
<customize-options
:items="freeHairColors"
:current-value="user.preferences.hair.color"
/><div
/>
<div
v-for="set in seasonalHairColors"
v-if="editing && set.key !== 'undefined'"
>
@ -26,7 +28,8 @@
@unlock="unlock(`hair.color.${set.keys.join(',hair.color.')}`)"
/>
</div>
</div><div
</div>
<div
v-if="activeSubPage === 'style'"
id="style"
>
@ -37,7 +40,8 @@
@unlock="set.unlock()"
/>
</div>
</div><div
</div>
<div
v-if="activeSubPage === 'bangs'"
id="bangs"
>
@ -45,14 +49,16 @@
:items="hairBangs"
:current-value="user.preferences.hair.bangs"
/>
</div><div
</div>
<div
v-if="activeSubPage === 'facialhair'"
id="facialhair"
>
<customize-options
v-if="editing"
:items="mustacheList"
/><customize-options
/>
<customize-options
v-if="editing"
:items="beardList"
:full-set="isPurchaseAllNeeded('hair', ['baseHair5', 'baseHair6'], ['mustache', 'beard'])"

View file

@ -8,10 +8,12 @@
:items="skinSubMenuItems"
:active-sub-page="activeSubPage"
@changeSubPage="changeSubPage($event)"
/><customize-options
/>
<customize-options
:items="freeSkins"
:current-value="user.preferences.skin"
/><div
/>
<div
v-for="set in seasonalSkins"
v-if="editing && set.key !== 'undefined'"
>

View file

@ -11,7 +11,8 @@
<p v-markdown="bannedMessage"></p>
</div>
</div>
</div><div class="modal-footer">
</div>
<div class="modal-footer">
<div class="col-12 text-center">
<button
class="btn btn-primary"

View file

@ -3,14 +3,17 @@
<span
v-if="owner"
class="category-label category-label-blue"
>{{ $t('owned') }}</span><span
>{{ $t('owned') }}</span>
<span
v-if="member"
class="category-label category-label-green"
>{{ $t('joined') }}</span><span
>{{ $t('joined') }}</span>
<span
v-for="category in categories"
class="category-label"
:class="{'category-label-purple':isOfficial(category)}"
>{{ $t(category.name) }}</span><slot></slot>
>{{ $t(category.name) }}</span>
<slot></slot>
</div>
</template>

View file

@ -1,32 +1,49 @@
<template>
<div class="row">
<challenge-modal @updatedChallenge="updatedChallenge" /><leave-challenge-modal :challenge-id="challenge._id" /><close-challenge-modal
<challenge-modal @updatedChallenge="updatedChallenge" />
<leave-challenge-modal :challenge-id="challenge._id" />
<close-challenge-modal
:members="members"
:challenge-id="challenge._id"
:prize="challenge.prize"
/><challenge-member-progress-modal :challenge-id="challenge._id" /><div class="col-12 col-md-8 standard-page">
/>
<challenge-member-progress-modal :challenge-id="challenge._id" />
<div class="col-12 col-md-8 standard-page">
<div class="row">
<div class="col-12 col-md-6">
<h1 v-markdown="challenge.name"></h1><div>
<span class="mr-1 ml-0 d-block"><strong v-once>{{ $t('createdBy') }}:</strong><user-link
class="mx-1"
:user="challenge.leader"
/></span><span
<h1 v-markdown="challenge.name"></h1>
<div>
<span class="mr-1 ml-0 d-block">
<strong v-once>{{ $t('createdBy') }}:</strong>
<user-link
class="mx-1"
:user="challenge.leader"
/>
</span>
<span
v-if="challenge.group && challenge.group.name !== 'Tavern'"
class="mr-1 ml-0 d-block"
><strong v-once>{{ $t(challenge.group.type) }}:</strong><group-link
class="mx-1"
:group="challenge.group"
/></span><!-- @TODO: make challenge.author a variable inside the createdBy string (helps with RTL languages)--><!-- @TODO: Implement in V2 strong.margin-left(v-once).svg-icon.calendar-icon(v-html="icons.calendarIcon")
>
<strong v-once>{{ $t(challenge.group.type) }}:</strong>
<group-link
class="mx-1"
:group="challenge.group"
/>
</span>
<!-- @TODO: make challenge.author a variable inside the createdBy string (helps with RTL languages)-->
<!-- @TODO: Implement in V2 strong.margin-left(v-once).svg-icon.calendar-icon(v-html="icons.calendarIcon")
| {{$t('endDate')}}
// "endDate": "End Date: <% endDate %>",--><!-- span {{challenge.endDate}}-->
</div><div class="tags">
// "endDate": "End Date: <% endDate %>",-->
<!-- span {{challenge.endDate}}-->
</div>
<div class="tags">
<span
v-for="tag in challenge.tags"
class="tag"
>{{ tag }}</span>
</div>
</div><div class="col-12 col-md-6 text-right">
</div>
<div class="col-12 col-md-6 text-right">
<div
class="box"
@click="showMemberModal()"
@ -34,17 +51,22 @@
<div
class="svg-icon member-icon"
v-html="icons.memberIcon"
></div>{{ challenge.memberCount }}<div
></div>
{{ challenge.memberCount }}
<div
v-once
class="details"
>
{{ $t('participantsTitle') }}
</div>
</div><div class="box">
</div>
<div class="box">
<div
class="svg-icon gem-icon"
v-html="icons.gemIcon"
></div>{{ challenge.prize }}<div
></div>
{{ challenge.prize }}
<div
v-once
class="details"
>
@ -52,35 +74,44 @@
</div>
</div>
</div>
</div><div class="row challenge-actions">
</div>
<div class="row challenge-actions">
<div class="col-12 col-md-6">
<strong class="view-progress">{{ $t('viewProgressOf') }}</strong><member-search-dropdown
<strong class="view-progress">{{ $t('viewProgressOf') }}</strong>
<member-search-dropdown
:text="$t('selectParticipant')"
:members="members"
:challenge-id="challengeId"
@member-selected="openMemberProgressModal"
/>
</div><div class="col-12 col-md-6 text-right">
<span v-if="isLeader || isAdmin"><b-dropdown
class="create-dropdown"
:text="$t('addTaskToChallenge')"
:variant="'success'"
><b-dropdown-item
v-for="type in columns"
:key="type"
@click="createTask(type)"
>{{ $t(type) }}</b-dropdown-item></b-dropdown><task-modal
ref="taskModal"
:task="workingTask"
:purpose="taskFormPurpose"
:challenge-id="challengeId"
@cancel="cancelTaskModal()"
@taskCreated="taskCreated"
@taskEdited="taskEdited"
@taskDestroyed="taskDestroyed"
/></span>
</div>
</div><div class="row">
<div class="col-12 col-md-6 text-right">
<span v-if="isLeader || isAdmin">
<b-dropdown
class="create-dropdown"
:text="$t('addTaskToChallenge')"
:variant="'success'"
>
<b-dropdown-item
v-for="type in columns"
:key="type"
@click="createTask(type)"
>{{ $t(type) }}</b-dropdown-item>
</b-dropdown>
<task-modal
ref="taskModal"
:task="workingTask"
:purpose="taskFormPurpose"
:challenge-id="challengeId"
@cancel="cancelTaskModal()"
@taskCreated="taskCreated"
@taskEdited="taskEdited"
@taskDestroyed="taskDestroyed"
/>
</span>
</div>
</div>
<div class="row">
<task-column
v-for="column in columns"
v-if="tasksByType[column].length > 0"
@ -90,10 +121,11 @@
:task-list-override="tasksByType[column]"
:show-options="showOptions"
@editTask="editTask"
@taskDestroyed="taskDestroyed"
@taskDestroyed="taskDestroyed"
/>
</div>
</div><div class="col-12 col-md-4 sidebar standard-page">
</div>
<div class="col-12 col-md-4 sidebar standard-page">
<div
v-if="canJoin"
class="button-container"
@ -105,7 +137,8 @@
>
{{ $t('joinChallenge') }}
</button>
</div><div
</div>
<div
v-if="isLeader || isAdmin"
class="button-container"
>
@ -116,7 +149,8 @@
>
{{ $t('editChallenge') }}
</button>
</div><div
</div>
<div
v-if="isLeader || isAdmin"
class="button-container"
>
@ -127,7 +161,8 @@
>
{{ $t('clone') }}
</button>
</div><div
</div>
<div
v-if="isLeader || isAdmin"
class="button-container"
>
@ -138,7 +173,8 @@
>
{{ $t('exportChallengeCsv') }}
</button>
</div><div
</div>
<div
v-if="isLeader || isAdmin"
class="button-container"
>
@ -149,13 +185,16 @@
>
{{ $t('endChallenge') }}
</button>
</div><div>
</div>
<div>
<sidebar-section :title="$t('challengeSummary')">
<p v-markdown="challenge.summary"></p>
</sidebar-section><sidebar-section :title="$t('challengeDescription')">
</sidebar-section>
<sidebar-section :title="$t('challengeDescription')">
<p v-markdown="challenge.description"></p>
</sidebar-section>
</div><div
</div>
<div
v-if="isMember"
class="text-center"
>

View file

@ -5,23 +5,30 @@
<span
class="svg-icon"
v-html="icons.gemIcon"
></span><span class="value">{{ challenge.prize }}</span>
</div><div class="label">
></span>
<span class="value">{{ challenge.prize }}</span>
</div>
<div class="label">
{{ $t('prize') }}
</div>
</div><div class="challenge-header">
</div>
<div class="challenge-header">
<router-link :to="{ name: 'challenge', params: { challengeId: challenge._id } }">
<h3
v-markdown="challenge.name"
class="challenge-title"
></h3>
</router-link><div class="meta-info">
</router-link>
<div class="meta-info">
<div class="member-count">
<div
class="svg-icon user-icon"
v-html="icons.memberIcon"
></div><span class="count-label">{{ challenge.memberCount }}</span>
</div><div class="divider"></div><div
></div>
<span class="count-label">{{ challenge.memberCount }}</span>
</div>
<div class="divider"></div>
<div
v-if="isOfficial"
class="official"
>
@ -29,35 +36,42 @@
class="svg-icon user-icon"
v-html="icons.officialIcon"
></div>
</div><div
</div>
<div
v-if="fullLayout"
class="owner"
>
<div class="owner-item">
<strong>{{ $t('createdBy') }}:</strong><user-link
<strong>{{ $t('createdBy') }}:</strong>
<user-link
class="mx-1"
:user="challenge.leader"
/>
</div><div
</div>
<div
v-if="challenge.group && !isTavern(challenge.group)"
class="owner-item"
>
<strong>{{ $t(challenge.group.type) }}:</strong><group-link
<strong>{{ $t(challenge.group.type) }}:</strong>
<group-link
class="mx-1"
:group="challenge.group"
/>
</div>
</div>
</div>
</div><category-tags
</div>
<category-tags
class="challenge-categories"
:categories="challenge.categories"
:owner="isOwner"
:member="isMember"
/><div
/>
<div
v-markdown="challenge.summary"
class="challenge-description"
></div><div
></div>
<div
v-if="fullLayout"
class="well-wrapper"
>
@ -71,8 +85,10 @@
class="svg-icon"
:class="task.label + '-icon'"
v-html="task.icon"
></div><span class="value">{{ task.value }}</span>
</div><div class="label">
></div>
<span class="value">{{ task.value }}</span>
</div>
<div class="label">
{{ $t(task.label) }}
</div>
</div>

View file

@ -17,7 +17,8 @@
{{ $t('awardWinners') }}
</button>
</div>
</div><div class="row">
</div>
<div class="row">
<task-column
v-for="column in columns"
:key="column"

View file

@ -7,39 +7,62 @@
>
<div class="form">
<div class="form-group">
<label><strong v-once>{{ $t('name') }} *</strong></label><b-form-input
<label>
<strong v-once>{{ $t('name') }} *</strong>
</label>
<b-form-input
v-model="workingChallenge.name"
type="text"
:placeholder="$t('challengeNamePlaceholder')"
/>
</div><div class="form-group">
<label><strong v-once>{{ $t('shortName') }} *</strong></label><b-form-input
</div>
<div class="form-group">
<label>
<strong v-once>{{ $t('shortName') }} *</strong>
</label>
<b-form-input
v-model="workingChallenge.shortName"
type="text"
:placeholder="$t('shortNamePlaceholder')"
/>
</div><div class="form-group">
<label><strong v-once>{{ $t('challengeSummary') }} *</strong></label><div class="summary-count">
</div>
<div class="form-group">
<label>
<strong v-once>{{ $t('challengeSummary') }} *</strong>
</label>
<div
class="summary-count"
>
{{ $t('charactersRemaining', {characters: charactersRemaining}) }}
</div><textarea
</div>
<textarea
v-model="workingChallenge.summary"
class="summary-textarea form-control"
:placeholder="$t('challengeSummaryPlaceholder')"
></textarea>
</div><div class="form-group">
<label><strong v-once>{{ $t('challengeDescription') }} *</strong></label><a
</div>
<div class="form-group">
<label>
<strong v-once>{{ $t('challengeDescription') }} *</strong>
</label>
<a
v-markdown="$t('markdownFormattingHelp')"
class="float-right"
></a><textarea
></a>
<textarea
v-model="workingChallenge.description"
class="description-textarea form-control"
:placeholder="$t('challengeDescriptionPlaceholder')"
></textarea>
</div><div
</div>
<div
v-if="creating"
class="form-group"
>
<label><strong v-once>{{ $t('challengeGuild') }} *</strong></label><select
<label>
<strong v-once>{{ $t('challengeGuild') }} *</strong>
</label>
<select
v-model="workingChallenge.group"
class="form-control"
>
@ -50,24 +73,30 @@
{{ group.name }}
</option>
</select>
</div><div
</div>
<div
v-if="workingChallenge.categories"
class="form-group"
>
<label><strong v-once>{{ $t('categories') }} *</strong></label><div
<label>
<strong v-once>{{ $t('categories') }} *</strong>
</label>
<div
class="category-wrap"
@click.prevent="toggleCategorySelect"
>
<span
v-if="workingChallenge.categories.length === 0"
class="category-select"
>{{ $t('none') }}</span><div
>{{ $t('none') }}</span>
<div
v-for="category in workingChallenge.categories"
class="category-label"
>
{{ $t(categoriesHashByKey[category]) }}
</div>
</div><div
</div>
<div
v-if="showCategorySelect && creating"
class="category-box"
>
@ -84,46 +113,58 @@
class="custom-control-input"
type="checkbox"
:value="group.key"
><label
>
<label
v-once
class="custom-control-label"
:for="`challenge-modal-cat-${group.key}`"
>{{ $t(group.label) }}</label>
</div>
</div><button
</div>
<button
class="btn btn-primary"
@click.prevent="toggleCategorySelect"
>
{{ $t('close') }}
</button>
</div>
</div><!-- @TODO: Implement in V2 .form-grouplabel
</div>
<!-- @TODO: Implement in V2 .form-grouplabel
strong(v-once) {{$t('endDate')}}
b-form-input.end-date-input--><div
v-if="creating"
class="form-group"
>
<label><strong v-once>{{ $t('prize') }}</strong></label><input
v-model="workingChallenge.prize"
type="number"
:min="minPrize"
:max="maxPrize"
>
</div><div class="row footer-wrap">
b-form-input.end-date-input-->
<div
v-if="creating"
class="form-group"
>
<label>
<strong v-once>{{ $t('prize') }}</strong>
</label>
<input
v-model="workingChallenge.prize"
type="number"
:min="minPrize"
:max="maxPrize"
>
</div>
<div class="row footer-wrap">
<div class="col-12 text-center submit-button-wrapper">
<div
v-if="insufficientGemsForTavernChallenge"
class="alert alert-warning"
>
You do not have enough gems to create a Tavern challenge
</div><!-- @TODO if buy gems button is added, add analytics tracking to it--><!-- see https://github.com/HabitRPG/habitica/blob/develop/website/views/options/social/challenges.jade#L134--><button
</div>
<!-- @TODO if buy gems button is added, add analytics tracking to it-->
<!-- see https://github.com/HabitRPG/habitica/blob/develop/website/views/options/social/challenges.jade#L134-->
<button
v-if="creating && !cloning"
class="btn btn-primary"
:disabled="loading"
@click="createChallenge()"
>
{{ $t('createChallengeAddTasks') }}
</button><button
</button>
<button
v-if="cloning"
v-once
class="btn btn-primary"
@ -131,7 +172,8 @@ type="number"
@click="createChallenge()"
>
{{ $t('createChallengeCloneTasks') }}
</button><button
</button>
<button
v-if="!creating && !cloning"
v-once
class="btn btn-primary"
@ -139,7 +181,8 @@ type="number"
>
{{ $t('updateChallenge') }}
</button>
</div><div class="col-12 text-center">
</div>
<div class="col-12 text-center">
<p v-once>
{{ $t('challengeMinimum') }}
</p>

View file

@ -15,21 +15,25 @@
>
{{ $t('endChallenge') }}
</h2>
</div><div class="row text-center">
</div>
<div class="row text-center">
<div class="col-12">
<div class="support-habitica">
<!-- @TODO: Add challenge achievement badge here-->
<!-- @TODO: Add challenge achievement badge here-->
</div>
</div><div class="col-12">
</div>
<div class="col-12">
<strong v-once>{{ $t('selectChallengeWinnersDescription') }}</strong>
</div><div class="col-12">
</div>
<div class="col-12">
<member-search-dropdown
:text="winnerText"
:members="members"
:challenge-id="challengeId"
@member-selected="selectMember"
/>
</div><div class="col-12">
</div>
<div class="col-12">
<button
v-once
class="btn btn-primary"
@ -37,13 +41,17 @@
>
{{ $t('awardWinners') }}
</button>
</div><div class="col-12">
<hr><div class="or">
</div>
<div class="col-12">
<hr>
<div class="or">
{{ $t('or') }}
</div>
</div><div class="col-12">
</div>
<div class="col-12">
<strong v-once>{{ $t('doYouWantedToDeleteChallenge') }}</strong>
</div><div class="col-12">
</div>
<div class="col-12">
<button
v-once
class="btn btn-danger"
@ -52,7 +60,8 @@
{{ $t('deleteChallenge') }}
</button>
</div>
</div><div
</div>
<div
slot="modal-footer"
class="footer-wrap"
></div>

View file

@ -1,27 +1,33 @@
<template>
<div class="row">
<challenge-modal @createChallenge="challengeCreated" /><sidebar
<challenge-modal @createChallenge="challengeCreated" />
<sidebar
@search="updateSearch"
@filter="updateFilters"
/><div class="col-12 col-md-10 standard-page">
/>
<div class="col-12 col-md-10 standard-page">
<div class="row header-row">
<div class="col-md-8 text-left">
<h1 v-once>
{{ $t('findChallenges') }}
</h1>
</div><div class="col-md-4">
<!-- @TODO: implement sorting span.dropdown-label {{ $t('sortBy') }}b-dropdown(:text="$t('sort')", right=true)
b-dropdown-item(v-for='sortOption in sortOptions', :key="sortOption.value", @click='sort(sortOption.value)') {{sortOption.text}}--><button
class="btn btn-secondary create-challenge-button float-right"
@click="createChallenge()"
>
<div
class="svg-icon positive-icon"
v-html="icons.positiveIcon"
></div><span v-once>{{ $t('createChallenge') }}</span>
</button>
</div>
</div><div class="row">
<div class="col-md-4">
<!-- @TODO: implement sorting span.dropdown-label {{ $t('sortBy') }}b-dropdown(:text="$t('sort')", right=true)
b-dropdown-item(v-for='sortOption in sortOptions', :key="sortOption.value", @click='sort(sortOption.value)') {{sortOption.text}}-->
<button
class="btn btn-secondary create-challenge-button float-right"
@click="createChallenge()"
>
<div
class="svg-icon positive-icon"
v-html="icons.positiveIcon"
></div>
<span v-once>{{ $t('createChallenge') }}</span>
</button>
</div>
</div>
<div class="row">
<div
v-if="!loading && filteredChallenges.length === 0"
class="no-challenges text-center col-md-6 offset-3"
@ -30,13 +36,15 @@ v-html="icons.positiveIcon"
{{ $t('noChallengeMatchFilters') }}
</h2>
</div>
</div><div class="row">
</div>
<div class="row">
<div
v-for="challenge in filteredChallenges"
class="col-12 col-md-6"
>
<challenge-item :challenge="challenge" />
</div><mugen-scroll
</div>
<mugen-scroll
v-show="loading"
:handler="infiniteScrollTrigger"
:should-handle="!loading && canLoadMore"

View file

@ -3,7 +3,8 @@
<challenge-modal
:group-id="groupId"
@createChallenge="challengeCreated"
/><div
/>
<div
v-if="challenges.length === 0"
class="row no-quest-section"
>
@ -11,24 +12,29 @@
<div
class="svg-icon challenge-icon"
v-html="icons.challengeIcon"
></div><h4 v-once>
></div>
<h4 v-once>
{{ $t('haveNoChallenges') }}
</h4><p v-once>
</h4>
<p v-once>
{{ $t('challengeDetails') }}
</p><button
</p>
<button
class="btn btn-secondary"
@click="createChallenge()"
>
{{ $t('createChallenge') }}
</button>
</div>
</div><template v-else>
</div>
<template v-else>
<challenge-item
v-for="challenge in challenges"
:key="challenge._id"
:challenge="challenge"
:full-layout="false"
/><div class="col-12 text-center">
/>
<div class="col-12 text-center">
<button
class="btn btn-secondary"
@click="createChallenge()"

View file

@ -7,14 +7,16 @@
:class="{'active': $route.name === 'myChallenges'}"
>
{{ $t('myChallenges') }}
</router-link><router-link
</router-link>
<router-link
class="nav-link"
:to="{name: 'findChallenges'}"
:class="{'active': $route.name === 'findChallenges'}"
>
{{ $t('findChallenges') }}
</router-link>
</secondary-menu><div class="col-12">
</secondary-menu>
<div class="col-12">
<router-view />
</div>
</div>

View file

@ -6,13 +6,15 @@
:hide-footer="true"
>
<div class="modal-body">
<h2>{{ $t('confirmKeepChallengeTasks') }}</h2><div>
<h2>{{ $t('confirmKeepChallengeTasks') }}</h2>
<div>
<button
class="btn btn-primary"
@click="leaveChallenge('keep')"
>
{{ $t('keepThem') }}
</button><button
</button>
<button
class="btn btn-danger"
@click="leaveChallenge('remove-all')"
>

View file

@ -1,27 +1,33 @@
<template>
<div class="row">
<challenge-modal @createChallenge="challengeCreated" /><sidebar
<challenge-modal @createChallenge="challengeCreated" />
<sidebar
@search="updateSearch"
@filter="updateFilters"
/><div class="col-10 standard-page">
/>
<div class="col-10 standard-page">
<div class="row header-row">
<div class="col-md-8 text-left">
<h1 v-once>
{{ $t('myChallenges') }}
</h1>
</div><div class="col-md-4">
<!-- @TODO: implement sorting span.dropdown-label {{ $t('sortBy') }}b-dropdown(:text="$t('sort')", right=true)
b-dropdown-item(v-for='sortOption in sortOptions', :key="sortOption.value", @click='sort(sortOption.value)') {{sortOption.text}}--><button
class="btn btn-secondary create-challenge-button float-right"
@click="createChallenge()"
>
<div
class="svg-icon positive-icon"
v-html="icons.positiveIcon"
></div><span v-once>{{ $t('createChallenge') }}</span>
</button>
</div>
</div><div class="row">
<div class="col-md-4">
<!-- @TODO: implement sorting span.dropdown-label {{ $t('sortBy') }}b-dropdown(:text="$t('sort')", right=true)
b-dropdown-item(v-for='sortOption in sortOptions', :key="sortOption.value", @click='sort(sortOption.value)') {{sortOption.text}}-->
<button
class="btn btn-secondary create-challenge-button float-right"
@click="createChallenge()"
>
<div
class="svg-icon positive-icon"
v-html="icons.positiveIcon"
></div>
<span v-once>{{ $t('createChallenge') }}</span>
</button>
</div>
</div>
<div class="row">
<div
v-if="!loading && challenges.length === 0"
class="no-challenges text-center col-md-6 offset-3"
@ -29,15 +35,19 @@ v-html="icons.positiveIcon"
<div
class="svg-icon"
v-html="icons.challengeIcon"
></div><h2 v-once>
></div>
<h2 v-once>
{{ $t('noChallengeTitle') }}
</h2><p v-once>
</h2>
<p v-once>
{{ $t('challengeDescription1') }}
</p><p v-once>
</p>
<p v-once>
{{ $t('challengeDescription2') }}
</p>
</div>
</div><div class="row">
</div>
<div class="row">
<div
v-if="!loading && challenges.length > 0 && filteredChallenges.length === 0"
class="no-challenges text-center col-md-6 offset-3"
@ -46,13 +56,15 @@ v-html="icons.positiveIcon"
{{ $t('noChallengeMatchFilters') }}
</h2>
</div>
</div><div class="row">
</div>
<div class="row">
<div
v-for="challenge in filteredChallenges"
class="col-12 col-md-6"
>
<challenge-item :challenge="challenge" />
</div><mugen-scroll
</div>
<mugen-scroll
v-show="loading"
:handler="infiniteScrollTrigger"
:should-handle="!loading && canLoadMore"

View file

@ -7,11 +7,14 @@
type="text"
:placeholder="$t('search')"
>
</div><form>
</div>
<form>
<h2 v-once>
{{ $t('filter') }}
</h2><div class="form-group">
<h3>{{ $t('category') }}</h3><div
</h2>
<div class="form-group">
<h3>{{ $t('category') }}</h3>
<div
v-for="group in categoryOptions"
:key="group.key"
class="form-check"
@ -23,18 +26,21 @@
class="custom-control-input"
type="checkbox"
:value="group.key"
><label
>
<label
v-once
class="custom-control-label"
:for="group.key"
>{{ $t(group.label) }}</label>
</div>
</div>
</div><div
</div>
<div
v-if="$route.name !== 'findChallenges'"
class="form-group"
>
<h3>{{ $t('membership') }}</h3><div
<h3>{{ $t('membership') }}</h3>
<div
v-for="group in roleOptions"
:key="group.key"
class="form-check"
@ -46,15 +52,18 @@
class="custom-control-input"
type="checkbox"
:value="group.key"
><label
>
<label
v-once
class="custom-control-label"
:for="group.key"
>{{ $t(group.label) }}</label>
</div>
</div>
</div><div class="form-group">
<h3>{{ $t('ownership') }}</h3><div
</div>
<div class="form-group">
<h3>{{ $t('ownership') }}</h3>
<div
v-for="group in ownershipOptions"
:key="group.key"
class="form-check"
@ -66,7 +75,8 @@
class="custom-control-input"
type="checkbox"
:value="group.key"
><label
>
<label
v-once
class="custom-control-label"
:for="group.key"

View file

@ -12,14 +12,18 @@
@mouseenter="setHover(result)"
@mouseleave="resetSelection()"
>
<span><h3
class="profile-name"
:class="userLevelStyle(result.msg)"
>{{ result.displayName }}</h3><div
v-if="showTierStyle(result.msg)"
class="svg-icon"
v-html="tierIcon(result.msg)"
></div></span><span
<span>
<h3
class="profile-name"
:class="userLevelStyle(result.msg)"
>{{ result.displayName }}</h3>
<div
v-if="showTierStyle(result.msg)"
class="svg-icon"
v-html="tierIcon(result.msg)"
></div>
</span>
<span
v-if="result.username"
class="username ml-2"
:class="{'hover-foreground': result.hover}"

View file

@ -3,37 +3,49 @@
<div
v-if="isUserMentioned"
class="mentioned-icon"
></div><div
></div>
<div
v-if="!inbox && user.contributor.admin && msg.flagCount"
class="message-hidden"
>
{{ flagCountDescription }}
</div><div class="card-body">
</div>
<div class="card-body">
<user-link
:user-id="msg.uuid"
:name="msg.user"
:backer="msg.backer"
:contributor="msg.contributor"
/><p class="time">
/>
<p class="time">
<span
v-if="msg.username"
class="mr-1"
>@{{ msg.username }}</span><span
>@{{ msg.username }}</span>
<span
v-if="msg.username"
class="mr-1"
></span><span
v-b-tooltip=""
></span>
<span
v-b-tooltip
:title="msg.timestamp | date"
>{{ msg.timestamp | timeAgo }}&nbsp;</span><span v-if="msg.client && user.contributor.level >= 4"> ({{ msg.client }})</span>
</p><div
>{{ msg.timestamp | timeAgo }}&nbsp;</span>
<span v-if="msg.client && user.contributor.level >= 4">({{ msg.client }})</span>
</p>
<div
class="text"
v-html="atHighlight(parseMarkdown(msg.text))"
></div><div
></div>
<div
v-if="isMessageReported && (inbox === true)"
class="reported"
>
<span v-once>{{ $t('reportedMessage') }}</span><br><span v-once>{{ $t('canDeleteNow') }}</span>
</div><hr><div
<span v-once>{{ $t('reportedMessage') }}</span>
<br>
<span v-once>{{ $t('canDeleteNow') }}</span>
</div>
<hr>
<div
v-if="msg.id"
class="d-flex"
>
@ -45,8 +57,10 @@
<div
class="svg-icon"
v-html="icons.copy"
></div><div>{{ $t('copyAsTodo') }}</div>
</div><div
></div>
<div>{{ $t('copyAsTodo') }}</div>
</div>
<div
v-if="(inbox || (user.flags.communityGuidelinesAccepted && msg.uuid !== 'system')) && (!isMessageReported || user.contributor.admin)"
class="action d-flex align-items-center"
@click="report(msg)"
@ -55,10 +69,12 @@
v-once
class="svg-icon"
v-html="icons.report"
></div><div v-once>
></div>
<div v-once>
{{ $t('report') }}
</div>
</div><div
</div>
<div
v-if="msg.uuid === user._id || inbox || user.contributor.admin"
class="action d-flex align-items-center"
@click="remove()"
@ -67,10 +83,12 @@
v-once
class="svg-icon"
v-html="icons.delete"
></div><div v-once>
></div>
<div v-once>
{{ $t('delete') }}
</div>
</div><div
</div>
<div
v-if="!inbox"
v-b-tooltip="{title: likeTooltip(msg.likes[user._id])}"
class="ml-auto d-flex"
@ -85,8 +103,10 @@
class="svg-icon"
:title="$t('liked')"
v-html="icons.liked"
></div>+{{ likeCount }}
</div><div
></div>
+{{ likeCount }}
</div>
<div
v-if="likeCount === 0"
class="action d-flex align-items-center mr-0"
:class="{activeLike: msg.likes[user._id]}"
@ -98,7 +118,8 @@
v-html="icons.like"
></div>
</div>
</div><span v-if="!msg.likes[user._id] && !inbox">{{ $t('like') }}</span>
</div>
<span v-if="!msg.likes[user._id] && !inbox">{{ $t('like') }}</span>
</div>
</div>
</div>

View file

@ -11,21 +11,26 @@
:group-id="groupId"
/>
</div>
</div><div class="row loadmore">
</div>
<div class="row loadmore">
<div v-if="canLoadMore">
<div class="loadmore-divider"></div><button
<div class="loadmore-divider"></div>
<button
class="btn btn-secondary"
@click="triggerLoad()"
>
{{ $t('loadEarlierMessages') }}
</button><div class="loadmore-divider"></div>
</div><h2
</button>
<div class="loadmore-divider"></div>
</div>
<h2
v-show="isLoading"
class="col-12 loading"
>
{{ $t('loading') }}
</h2>
</div><div
</div>
<div
v-for="(msg, index) in messages"
v-if="chat && canViewFlag(msg)"
:class="{row: inbox}"
@ -44,7 +49,8 @@
:hide-class-badge="true"
:class="{'inbox-avatar-left': inbox}"
@click.native="showMemberModal(msg.uuid)"
/><div
/>
<div
class="card"
:class="{'col-10': inbox}"
>
@ -58,7 +64,8 @@
@chat-card-mounted="itemWasMounted"
/>
</div>
</div><div
</div>
<div
v-if="user._id === msg.uuid"
class="d-flex"
:class="{'flex-grow-1': inbox}"
@ -76,7 +83,8 @@
@show-member-modal="showMemberModal"
@chat-card-mounted="itemWasMounted"
/>
</div><avatar
</div>
<avatar
v-if="msg.userStyles || (cachedProfileData[msg.uuid] && !cachedProfileData[msg.uuid].rejected)"
:member="msg.userStyles || cachedProfileData[msg.uuid]"
:avatar-only="true"

View file

@ -11,24 +11,29 @@
class="form-control"
type="text"
>
</div><div class="form-group">
</div>
<div class="form-group">
<textarea
v-model="task.notes"
class="form-control"
rows="5"
focus-element="true"
></textarea>
</div><hr><task
</div>
<hr>
<task
v-if="task._id"
:is-user="isUser"
:task="task"
/><div class="modal-footer">
/>
<div class="modal-footer">
<button
class="btn btn-secondary"
@click="close()"
>
{{ $t('close') }}
</button><button
</button>
<button
class="btn btn-primary"
@click="saveTodo()"
>

View file

@ -6,24 +6,34 @@
:hide-footer="true"
>
<div class="modal-body">
<strong v-html="$t('abuseFlagModalHeading', reportData)"></strong><blockquote><div v-markdown="abuseObject.text"></div></blockquote><div>
<strong>{{ $t('whyReportingPost') }}</strong><span class="optional">{{ $t('optional') }}</span><textarea
<strong v-html="$t('abuseFlagModalHeading', reportData)"></strong>
<blockquote>
<div v-markdown="abuseObject.text"></div>
</blockquote>
<div>
<strong>{{ $t('whyReportingPost') }}</strong>
<span class="optional">{{ $t('optional') }}</span>
<textarea
v-model="reportComment"
class="form-control"
:placeholder="$t('whyReportingPostPlaceholder')"
></textarea>
</div><small v-html="$t('abuseFlagModalBody', abuseFlagModalBody)"></small>
</div><div class="footer text-center">
</div>
<small v-html="$t('abuseFlagModalBody', abuseFlagModalBody)"></small>
</div>
<div class="footer text-center">
<button
v-if="user.contributor.admin && abuseObject.flagCount > 0"
class="pull-left btn btn-danger"
@click="clearFlagCount()"
>
Reset Flag Count
</button><a
</button>
<a
class="cancel-link"
@click.prevent="close()"
>{{ $t('cancel') }}</a><button
>{{ $t('cancel') }}</a>
<button
class="btn btn-danger"
@click="reportAbuse()"
>

File diff suppressed because one or more lines are too long

View file

@ -1,3 +1,4 @@
<template>
<!-- Container component used when you only need an empty view to support children routes--><router-view />
<!-- Container component used when you only need an empty view to support children routes-->
<router-view />
</template>

View file

@ -7,38 +7,56 @@
<table class="table alert alert-info">
<tr v-if="group.purchased.plan.dateTerminated">
<td class="alert alert-warning">
<span class="noninteractive-button btn-danger">{{ $t('canceledGroupPlan') }}</span><i class="glyphicon glyphicon-time">{{ $t('groupPlanCanceled') }}</i><strong>{{ dateTerminated }}</strong>
<span class="noninteractive-button btn-danger">{{ $t('canceledGroupPlan') }}</span>
<i class="glyphicon glyphicon-time">{{ $t('groupPlanCanceled') }}</i>
<strong>{{ dateTerminated }}</strong>
</td>
</tr><tr v-if="!group.purchased.plan.dateTerminated">
</tr>
<tr v-if="!group.purchased.plan.dateTerminated">
<td>
<h3>{{ $t('paymentDetails') }}</h3><p v-if="group.purchased.plan.planId">
<h3>{{ $t('paymentDetails') }}</h3>
<p v-if="group.purchased.plan.planId">
{{ $t('groupSubscriptionPrice') }}
</p>
</td>
</tr><tr v-if="group.purchased.plan.extraMonths">
<td><span class="glyphicon glyphicon-credit-card"></span>{{ $t('purchasedGroupPlanPlanExtraMonths', purchasedGroupPlanPlanExtraMonths) }}</td>
</tr><tr v-if="group.purchased.plan.consecutive.count || group.purchased.plan.consecutive.offset">
</tr>
<tr v-if="group.purchased.plan.extraMonths">
<td>
<span class="glyphicon glyphicon-forward"></span>{{ $t('consecutiveSubscription') }}<ul class="list-unstyled">
<li>{{ $t('consecutiveMonths') }} {{ group.purchased.plan.consecutive.count + group.purchased.plan.consecutive.offset }}</li><li>{{ $t('gemCapExtra') }} {{ group.purchased.plan.consecutive.gemCapExtra }}</li><li>{{ $t('mysticHourglasses') }} {{ group.purchased.plan.consecutive.trinkets }}</li></li>
<span class="glyphicon glyphicon-credit-card"></span>
{{ $t('purchasedGroupPlanPlanExtraMonths', purchasedGroupPlanPlanExtraMonths) }}
</td>
</tr>
<tr
v-if="group.purchased.plan.consecutive.count || group.purchased.plan.consecutive.offset"
>
<td>
<span class="glyphicon glyphicon-forward"></span>
{{ $t('consecutiveSubscription') }}
<ul class="list-unstyled">
<li>{{ $t('consecutiveMonths') }} {{ group.purchased.plan.consecutive.count + group.purchased.plan.consecutive.offset }}</li>
<li>{{ $t('gemCapExtra') }} {{ group.purchased.plan.consecutive.gemCapExtra }}</li>
<li>{{ $t('mysticHourglasses') }} {{ group.purchased.plan.consecutive.trinkets }}</li>
</ul>
</td>
</tr>
</table>
</div><div class="col-12 col-md-6 offset-md-3">
</div>
<div class="col-12 col-md-6 offset-md-3">
<button
v-if="group.purchased.plan.dateTerminated"
class="btn btn-success btn-success"
@click="upgradeGroup()"
>
{{ $t('upgrade') }}
</button><div
</button>
<div
v-if="!group.purchased.plan.dateTerminated && group.purchased.plan.paymentMethod === 'Stripe'"
class="btn btn-primary"
@click="showStripeEdit({groupId: group.id})"
>
{{ $t('subUpdateCard') }}
</div><div
</div>
<div
v-if="!group.purchased.plan.dateTerminated"
class="btn btn-sm btn-danger"
@click="cancelSubscriptionConfirm({group: group})"

View file

@ -4,11 +4,13 @@
v-if="activePage === PAGES.CREATE_GROUP"
class="col-12"
>
<h2>{{ $t('nameYourGroup') }}</h2><div class="form-group">
<h2>{{ $t('nameYourGroup') }}</h2>
<div class="form-group">
<label
class="control-label"
for="new-group-name"
>{{ $t('name') }}</label><input
>{{ $t('name') }}</label>
<input
id="new-group-name"
v-model="newGroup.name"
class="form-control input-medium option-content"
@ -16,15 +18,18 @@
type="text"
:placeholder="$t('exampleGroupName')"
>
</div><div class="form-group">
<label for="new-group-description">{{ $t('description') }}</label><textarea
</div>
<div class="form-group">
<label for="new-group-description">{{ $t('description') }}</label>
<textarea
id="new-group-description"
v-model="newGroup.description"
class="form-control option-content"
cols="3"
:placeholder="$t('exampleGroupDesc')"
></textarea>
</div><div
</div>
<div
v-if="newGroup.type === 'guild'"
class="form-group text-left"
>
@ -35,21 +40,25 @@
type="radio"
name="new-group-privacy"
value="private"
><label class="custom-control-label">{{ $t('thisGroupInviteOnly') }}</label>
>
<label class="custom-control-label">{{ $t('thisGroupInviteOnly') }}</label>
</div>
</div><div class="form-group text-left">
</div>
<div class="form-group text-left">
<div class="custom-control custom-checkbox">
<input
id="create-group-leaderOnlyChallenges-checkbox"
v-model="newGroup.leaderOnly.challenges"
class="custom-control-input"
type="checkbox"
><label
>
<label
class="custom-control-label"
for="create-group-leaderOnlyChallenges-checkbox"
>{{ $t('leaderOnlyChallenges') }}</label>
</div>
</div><div
</div>
<div
v-if="newGroup.type === 'party'"
class="form-group"
>
@ -58,7 +67,8 @@
:value="$t('createGroupPlan')"
@click="createGroup()"
></button>
</div><div class="form-group">
</div>
<div class="form-group">
<button
class="btn btn-primary btn-lg btn-block"
:disabled="!newGroupIsReady"
@ -67,11 +77,13 @@
{{ $t('createGroupPlan') }}
</button>
</div>
</div><div
</div>
<div
v-if="activePage === PAGES.PAY"
class="col-12"
>
<h2>{{ $t('choosePaymentMethod') }}</h2><div class="payments-column">
<h2>{{ $t('choosePaymentMethod') }}</h2>
<div class="payments-column">
<button
class="purchase btn btn-primary payment-button payment-item"
@click="pay(PAYMENTS.STRIPE)"
@ -79,8 +91,10 @@
<div
class="svg-icon credit-card-icon"
v-html="icons.creditCardIcon"
></div>{{ $t('card') }}
</button><amazon-button
></div>
{{ $t('card') }}
</button>
<amazon-button
class="payment-item"
:amazon-data="pay(PAYMENTS.AMAZON)"
/>

View file

@ -12,10 +12,12 @@
>
<h2 v-once>
{{ $t('gettingStarted') }}
</h2><p v-once>
</h2>
<p v-once>
{{ $t('congratsOnGroupPlan') }}
</p>
</div><div class="row">
</div>
<div class="row">
<div class="col-12">
<div
class="card"
@ -24,9 +26,11 @@
<div class="question-head">
<div class="q">
Q.
</div><div class="title">
</div>
<div class="title">
{{ $t('whatsIncludedGroup') }}
</div><div
</div>
<div
class="arrow float-right"
@click="toggle('question1')"
>
@ -34,20 +38,23 @@
v-if="expandedQuestions.question1"
class="svg-icon"
v-html="icons.upIcon"
></div><div
></div>
<div
v-else
class="svg-icon"
v-html="icons.downIcon"
></div>
</div>
</div><div
</div>
<div
v-if="expandedQuestions.question1"
class="question-body"
>
<p>{{ $t('whatsIncludedGroupDesc') }}</p>
</div>
</div>
</div><div class="col-12">
</div>
<div class="col-12">
<div
class="card"
:class="{expanded: expandedQuestions.question2}"
@ -55,9 +62,11 @@
<div class="question-head">
<div class="q">
Q.
</div><div class="title">
</div>
<div class="title">
{{ $t('howDoesBillingWork') }}
</div><div
</div>
<div
class="arrow float-right"
@click="toggle('question2')"
>
@ -65,20 +74,23 @@
v-if="expandedQuestions.question2"
class="svg-icon"
v-html="icons.upIcon"
></div><div
></div>
<div
v-else
class="svg-icon"
v-html="icons.downIcon"
></div>
</div>
</div><div
</div>
<div
v-if="expandedQuestions.question2"
class="question-body"
>
<p>{{ $t('howDoesBillingWorkDesc') }}</p>
</div>
</div>
</div><div class="col-12">
</div>
<div class="col-12">
<div
class="card"
:class="{expanded: expandedQuestions.question3}"
@ -86,9 +98,11 @@
<div class="question-head">
<div class="q">
Q.
</div><div class="title">
</div>
<div class="title">
{{ $t('howToAssignTask') }}
</div><div
</div>
<div
class="arrow float-right"
@click="toggle('question3')"
>
@ -96,20 +110,24 @@
v-if="expandedQuestions.question3"
class="svg-icon"
v-html="icons.upIcon"
></div><div
></div>
<div
v-else
class="svg-icon"
v-html="icons.downIcon"
></div>
</div>
</div><div
</div>
<div
v-if="expandedQuestions.question3"
class="question-body"
>
<p>{{ $t('howToAssignTaskDesc') }}</p><div class="assign-tasks image-example"></div>
<p>{{ $t('howToAssignTaskDesc') }}</p>
<div class="assign-tasks image-example"></div>
</div>
</div>
</div><div class="col-12">
</div>
<div class="col-12">
<div
class="card"
:class="{expanded: expandedQuestions.question4}"
@ -117,9 +135,11 @@
<div class="question-head">
<div class="q">
Q.
</div><div class="title">
</div>
<div class="title">
{{ $t('howToRequireApproval') }}
</div><div
</div>
<div
class="arrow float-right"
@click="toggle('question4')"
>
@ -127,20 +147,26 @@
v-if="expandedQuestions.question4"
class="svg-icon"
v-html="icons.upIcon"
></div><div
></div>
<div
v-else
class="svg-icon"
v-html="icons.downIcon"
></div>
</div>
</div><div
</div>
<div
v-if="expandedQuestions.question4"
class="question-body"
>
<p>{{ $t('howToRequireApprovalDesc') }}</p><div class="requires-approval image-example"></div><p>{{ $t('howToRequireApprovalDesc2') }}</p><div class="approval-requested image-example"></div>
<p>{{ $t('howToRequireApprovalDesc') }}</p>
<div class="requires-approval image-example"></div>
<p>{{ $t('howToRequireApprovalDesc2') }}</p>
<div class="approval-requested image-example"></div>
</div>
</div>
</div><div class="col-12">
</div>
<div class="col-12">
<div
class="card"
:class="{expanded: expandedQuestions.question5}"
@ -148,9 +174,11 @@
<div class="question-head">
<div class="q">
Q.
</div><div class="title">
</div>
<div class="title">
{{ $t('whatIsGroupManager') }}
</div><div
</div>
<div
class="arrow float-right"
@click="toggle('question5')"
>
@ -158,20 +186,24 @@
v-if="expandedQuestions.question5"
class="svg-icon"
v-html="icons.upIcon"
></div><div
></div>
<div
v-else
class="svg-icon"
v-html="icons.downIcon"
></div>
</div>
</div><div
</div>
<div
v-if="expandedQuestions.question5"
class="question-body"
>
<p>{{ $t('whatIsGroupManagerDesc') }}</p><div class="promote-leader image-example"></div>
<p>{{ $t('whatIsGroupManagerDesc') }}</p>
<div class="promote-leader image-example"></div>
</div>
</div>
</div><div class="col-12 text-center">
</div>
<div class="col-12 text-center">
<button
class="btn btn-primary close-button"
@click="close()"

View file

@ -1,6 +1,7 @@
<template>
<div class="row">
<group-form-modal /><secondary-menu class="col-12">
<group-form-modal />
<secondary-menu class="col-12">
<router-link
class="nav-link"
:to="{name: 'groupPlanDetailTaskInformation', params: {groupId}}"
@ -8,14 +9,16 @@
:class="{'active': $route.name === 'groupPlanDetailTaskInformation'}"
>
{{ $t('groupTaskBoard') }}
</router-link><router-link
</router-link>
<router-link
class="nav-link"
:to="{name: 'groupPlanDetailInformation', params: {groupId}}"
exact="exact"
:class="{'active': $route.name === 'groupPlanDetailInformation'}"
>
{{ $t('groupInformation') }}
</router-link><router-link
</router-link>
<router-link
v-if="isLeader"
class="nav-link"
:to="{name: 'groupPlanBilling', params: {groupId}}"
@ -24,7 +27,8 @@
>
{{ $t('groupBilling') }}
</router-link>
</secondary-menu><div class="col-12">
</secondary-menu>
<div class="col-12">
<router-view />
</div>
</div>

View file

@ -1,6 +1,7 @@
<template>
<div class="standard-page">
<group-plan-overview-modal /><task-modal
<group-plan-overview-modal />
<task-modal
ref="taskModal"
:task="workingTask"
:purpose="taskFormPurpose"
@ -9,17 +10,21 @@
@taskCreated="taskCreated"
@taskEdited="taskEdited"
@taskDestroyed="taskDestroyed"
/><div class="row tasks-navigation">
/>
<div class="row tasks-navigation">
<div class="col-12 col-md-4">
<h1>{{ $t('groupTasksTitle') }}</h1>
</div><!-- @TODO: Abstract to component!--><div class="col-12 col-md-4">
</div>
<!-- @TODO: Abstract to component!-->
<div class="col-12 col-md-4">
<input
v-model="searchText"
class="form-control input-search"
type="text"
:placeholder="$t('search')"
>
</div><div
</div>
<div
v-if="canCreateTasks"
class="create-task-area d-flex"
>
@ -42,7 +47,8 @@
></div>
</div>
</div>
</transition><div
</transition>
<div
id="create-task-btn"
class="create-btn diamond-btn btn btn-success"
:class="{open: openCreateBtn}"
@ -52,7 +58,8 @@
class="svg-icon"
v-html="icons.positive"
></div>
</div><b-tooltip
</div>
<b-tooltip
v-if="!openCreateBtn"
target="create-task-btn"
placement="bottom"
@ -60,7 +67,8 @@
{{ $t('addTaskToGroupPlan') }}
</b-tooltip>
</div>
</div><div class="row">
</div>
<div class="row">
<task-column
v-for="column in columns"
:key="column"
@ -71,7 +79,8 @@
:group="group"
:search-text="searchText"
@editTask="editTask"
@loadGroupCompletedTodos="loadGroupCompletedTodos" @taskDestroyed="taskDestroyed"
@loadGroupCompletedTodos="loadGroupCompletedTodos"
@taskDestroyed="taskDestroyed"
/>
</div>
</div>

View file

@ -6,10 +6,12 @@
:class="{accepted: communityGuidelinesAccepted }"
>
{{ label }}
</h3><div
</h3>
<div
v-markdown="$t('markdownFormattingHelp')"
class="float-right"
></div><div
></div>
<div
v-if="communityGuidelinesAccepted"
class="row"
>
@ -22,8 +24,14 @@
@keydown="updateCarretPosition"
@keyup.ctrl.enter="sendMessageShortcut()"
@keydown.tab="handleTab($event)"
@keydown.up="selectPreviousAutocomplete($event)" @keydown.down="selectNextAutocomplete($event)" @keydown.enter="selectAutocomplete($event)" @keydown.esc="handleEscape($event)" @paste="disableMessageSendShortcut()"
></textarea><span>{{ currentLength }} / 3000</span><autocomplete
@keydown.up="selectPreviousAutocomplete($event)"
@keydown.down="selectNextAutocomplete($event)"
@keydown.enter="selectAutocomplete($event)"
@keydown.esc="handleEscape($event)"
@paste="disableMessageSendShortcut()"
></textarea>
<span>{{ currentLength }} / 3000</span>
<autocomplete
ref="autocomplete"
:text="newMessage"
:textbox="textbox"
@ -32,7 +40,9 @@
:chat="group.chat"
@select="selectedAutocomplete"
/>
</div><community-guidelines /><div class="row chat-actions">
</div>
<community-guidelines />
<div class="row chat-actions">
<div class="col-6 chat-receive-actions">
<button
v-once
@ -40,14 +50,16 @@
@click="fetchRecentMessages()"
>
{{ $t('fetchRecentMessages') }}
</button><button
</button>
<button
v-once
class="btn btn-secondary float-left"
@click="reverseChat()"
>
{{ $t('reverseChat') }}
</button>
</div><div class="col-6 chat-send-actions">
</div>
<div class="col-6 chat-send-actions">
<button
class="btn btn-primary send-chat float-right"
:disabled="!communityGuidelinesAccepted"
@ -56,8 +68,11 @@
{{ $t('send') }}
</button>
</div>
</div><slot name="additionRow"></slot><div class="row">
<div class="hr col-12"></div><chat-message
</div>
<slot name="additionRow"></slot>
<div class="row">
<div class="hr col-12"></div>
<chat-message
:chat.sync="group.chat"
:group-type="group.type"
:group-id="group._id"

View file

@ -7,7 +7,8 @@
v-once
class="col col-sm-12 col-xl-8"
v-html="$t('communityGuidelinesIntro')"
></div><div class="col-md-auto col-md-12 col-xl-4">
></div>
<div class="col-md-auto col-md-12 col-xl-4">
<button
v-once
class="btn btn-info btn-follow-guidelines"

View file

@ -8,16 +8,19 @@
slot="modal-header"
class="header-wrap"
>
<div class="quest_screen"></div><div class="row heading">
<div class="quest_screen"></div>
<div class="row heading">
<div class="col-12 text-center pr-5 pl-5">
<h2 v-once>
{{ $t('playInPartyTitle') }}
</h2><p
</h2>
<p
v-once
class="mb-4"
>
{{ $t('playInPartyDescription') }}
</p><button
</p>
<button
v-once
class="btn btn-primary"
@click="createParty()"
@ -26,11 +29,15 @@
</button>
</div>
</div>
</div><div class="row grey-row">
</div>
<div class="row grey-row">
<div class="col-12 text-center">
<div class="join-party"></div><h2 v-once>
<div class="join-party"></div>
<h2 v-once>
{{ $t('wantToJoinPartyTitle') }}
</h2><p v-html="$t('wantToJoinPartyDescription')"></p><div
</h2>
<p v-html="$t('wantToJoinPartyDescription')"></p>
<div
class="form-group"
@click="copyUsername"
>
@ -38,14 +45,18 @@
<label
v-once
class="mr-3"
>{{ $t('username') }}</label><div class="flex-grow-1">
>{{ $t('username') }}</label>
<div class="flex-grow-1">
<div class="input-group-prepend input-group-text">
@<div class="text">
@
<div class="text">
{{ user.auth.local.username }}
</div><div
</div>
<div
class="svg-icon copy-icon"
v-html="icons.copy"
></div><div
></div>
<div
v-once
class="small"
>

View file

@ -3,7 +3,8 @@
<sidebar
@search="updateSearch"
@filter="updateFilters"
/><div class="standard-page">
/>
<div class="standard-page">
<div class="header row">
<div class="col-8">
<h1
@ -12,20 +13,24 @@
>
{{ $t('publicGuilds') }}
</h1>
</div><div class="col-4">
<!-- @TODO: Add when we implement recent activity .float-rightspan.dropdown-label {{ $t('sortBy') }}
b-dropdown(:text="$t('sort')", right=true)
b-dropdown-item(v-for='sortOption in sortOptions', :key="sortOption.value", @click='sort(sortOption.value)') {{sortOption.text}}--><button
class="btn btn-secondary create-group-button float-right"
@click="createGroup()"
>
<div
class="svg-icon positive-icon"
v-html="icons.positiveIcon"
></div><span v-once>{{ $t('createGuild2') }}</span>
</button>
</div>
</div><div class="row">
<div class="col-4">
<!-- @TODO: Add when we implement recent activity .float-rightspan.dropdown-label {{ $t('sortBy') }}
b-dropdown(:text="$t('sort')", right=true)
b-dropdown-item(v-for='sortOption in sortOptions', :key="sortOption.value", @click='sort(sortOption.value)') {{sortOption.text}}-->
<button
class="btn btn-secondary create-group-button float-right"
@click="createGroup()"
>
<div
class="svg-icon positive-icon"
v-html="icons.positiveIcon"
></div>
<span v-once>{{ $t('createGuild2') }}</span>
</button>
</div>
</div>
<div class="row">
<div
v-if="!loading && filteredGuilds.length === 0"
class="no-guilds text-center col-md-6 offset-md-3"
@ -34,14 +39,16 @@ v-html="icons.positiveIcon"
{{ $t('noGuildsMatchFilters') }}
</h2>
</div>
</div><div class="row">
</div>
<div class="row">
<div class="col-md-12">
<public-guild-item
v-for="guild in filteredGuilds"
:key="guild._id"
:guild="guild"
:display-leave="true"
/><mugen-scroll
/>
<mugen-scroll
v-show="loading"
:handler="fetchGuilds"
:should-handle="!loading && !this.hasLoadedAllGuilds"

View file

@ -3,16 +3,26 @@
v-if="group._id"
class="row"
>
<group-form-modal v-if="isParty" /><start-quest-modal :group="this.group" /><quest-details-modal :group="this.group" /><participant-list-modal :group="this.group" /><group-gems-modal /><div class="col-12 col-sm-8 standard-page">
<group-form-modal v-if="isParty" />
<start-quest-modal :group="this.group" />
<quest-details-modal :group="this.group" />
<participant-list-modal :group="this.group" />
<group-gems-modal />
<div class="col-12 col-sm-8 standard-page">
<div class="row">
<div class="col-12 col-md-6 title-details">
<h1>{{ group.name }}</h1><div>
<span class="mr-1 ml-0"><strong v-once>{{ $t('groupLeader') }}:</strong><user-link
class="mx-1"
:user="group.leader"
/></span>
<h1>{{ group.name }}</h1>
<div>
<span class="mr-1 ml-0">
<strong v-once>{{ $t('groupLeader') }}:</strong>
<user-link
class="mx-1"
:user="group.leader"
/>
</span>
</div>
</div><div class="col-12 col-md-6">
</div>
<div class="col-12 col-md-6">
<div class="row icon-row">
<div
class="col-4 offset-4"
@ -26,22 +36,27 @@
v-if="group.memberCount > 1000"
class="svg-icon shield"
v-html="icons.goldGuildBadgeIcon"
></div><div
></div>
<div
v-if="group.memberCount > 100 && group.memberCount < 999"
class="svg-icon shield"
v-html="icons.silverGuildBadgeIcon"
></div><div
></div>
<div
v-if="group.memberCount < 100"
class="svg-icon shield"
v-html="icons.bronzeGuildBadgeIcon"
></div><span class="number">{{ group.memberCount | abbrNum }}</span><div
></div>
<span class="number">{{ group.memberCount | abbrNum }}</span>
<div
v-once
class="member-list label"
>
{{ $t('memberList') }}
</div>
</div>
</div><div
</div>
<div
v-if="!isParty"
class="col-4"
>
@ -52,7 +67,9 @@
<div
class="svg-icon gem"
v-html="icons.gem"
></div><span class="number">{{ group.balance * 4 }}</span><div
></div>
<span class="number">{{ group.balance * 4 }}</span>
<div
v-once
class="label"
>
@ -62,7 +79,8 @@
</div>
</div>
</div>
</div><chat
</div>
<chat
:label="$t('chat')"
:group="group"
:placeholder="!isParty ? $t('chatPlaceholder') : $t('partyChatPlaceholder')"
@ -79,7 +97,8 @@
</div>
</template>
</chat>
</div><div class="col-12 col-sm-4 sidebar">
</div>
<div class="col-12 col-sm-4 sidebar">
<div
class="row"
:class="{'guild-background': !isParty}"
@ -93,7 +112,8 @@
>
{{ $t('upgrade') }}
</button>
</div><div class="button-container">
</div>
<div class="button-container">
<button
v-if="isLeader || isAdmin"
v-once
@ -103,7 +123,8 @@
>
{{ $t('edit') }}
</button>
</div><div class="button-container">
</div>
<div class="button-container">
<button
v-if="!isMember"
class="btn btn-success btn-success"
@ -111,38 +132,47 @@
>
{{ $t('join') }}
</button>
</div><div class="button-container">
</div>
<div class="button-container">
<button
v-once
class="btn btn-primary"
@click="showInviteModal()"
>
{{ $t('invite') }}
</button><!-- @TODO: hide the invitation button if there's an active group plan and the player is not the leader-->
</div><div class="button-container">
</button>
<!-- @TODO: hide the invitation button if there's an active group plan and the player is not the leader-->
</div>
<div class="button-container">
<!-- @TODO: V2 button.btn.btn-primary(v-once, v-if='!isLeader') {{$t('messageGuildLeader')}} // Suggest making the button visible to the leader too - useful for them to test how the feature works or to send a note to themself. -- Alys-->
</div><div class="button-container">
</div>
<div class="button-container">
<!-- @TODO: V2 button.btn.btn-primary(v-once, v-if='isMember && !isParty') {{$t('donateGems')}} // Suggest removing the isMember restriction - it's okay if non-members donate to a public guild. Also probably allow it for parties if parties can buy imagery. -- Alys-->
</div>
</div>
</div><div>
</div>
<div>
<quest-sidebar-section
v-if="isParty"
:group="group"
/><sidebar-section
/>
<sidebar-section
v-if="!isParty"
:title="$t('guildSummary')"
>
<p v-markdown="group.summary"></p>
</sidebar-section><sidebar-section :title="$t('groupDescription')">
</sidebar-section>
<sidebar-section :title="$t('groupDescription')">
<p v-markdown="group.description"></p>
</sidebar-section><sidebar-section
</sidebar-section>
<sidebar-section
:title="$t('challenges')"
:tooltip="$t('challengeDetails')"
>
<group-challenges :group-id="searchId" />
</sidebar-section>
</div><div class="text-center">
</div>
<div class="text-center">
<button
v-if="isMember"
class="btn btn-danger"

View file

@ -7,23 +7,33 @@
>
<form @submit.stop.prevent="submit">
<div class="form-group">
<label><strong v-once>{{ $t('name') }} *</strong></label><b-form-input
<label>
<strong v-once>{{ $t('name') }} *</strong>
</label>
<b-form-input
v-model="workingGroup.name"
type="text"
:placeholder="$t('newGuildPlaceholder')"
/>
</div><div class="form-group">
<label><strong v-once>{{ $t('privacySettings') }} *</strong></label><br><div class="custom-control custom-checkbox">
</div>
<div class="form-group">
<label>
<strong v-once>{{ $t('privacySettings') }} *</strong>
</label>
<br>
<div class="custom-control custom-checkbox">
<input
id="onlyLeaderCreatesChallenges"
v-model="workingGroup.onlyLeaderCreatesChallenges"
class="custom-control-input"
type="checkbox"
><label
>
<label
v-once
class="custom-control-label"
for="onlyLeaderCreatesChallenges"
>{{ $t('onlyLeaderCreatesChallenges') }}</label><div
>{{ $t('onlyLeaderCreatesChallenges') }}</label>
<div
id="groupPrivateDescription1"
class="icon"
:title="$t('privateDescription')"
@ -32,93 +42,125 @@
class="svg-icon"
v-html="icons.information"
></div>
</div><b-tooltip
</div>
<b-tooltip
:title="$t('onlyLeaderCreatesChallengesDetail')"
target="groupPrivateDescription1"
/>
</div><!-- br--><!-- @TODO Implement in V2 .custom-control.custom-checkboxinput.custom-control-input(type="checkbox", v-model="workingGroup.guildLeaderCantBeMessaged")
</div>
<!-- br-->
<!-- @TODO Implement in V2 .custom-control.custom-checkboxinput.custom-control-input(type="checkbox", v-model="workingGroup.guildLeaderCantBeMessaged")
label.custom-control-label(v-once) {{ $t('guildLeaderCantBeMessaged') }}
// "guildLeaderCantBeMessaged": "Leader can not be messaged directly",
// @TODO discuss the impact of this with moderators before implementing
--><br><div
v-if="!isParty && !this.workingGroup.id"
class="custom-control custom-checkbox"
>
<input
id="privateGuild"
v-model="workingGroup.privateGuild"
class="custom-control-input"
type="checkbox"
><label
v-once
class="custom-control-label"
for="privateGuild"
>{{ $t('privateGuild') }}</label><div
id="groupPrivateDescription2"
class="icon"
:title="$t('privateDescription')"
>
<div
class="svg-icon"
v-html="icons.information"
></div>
</div><b-tooltip
:title="$t('privateDescription')"
target="groupPrivateDescription2"
/>
</div><!-- br--><!-- @TODO: Implement in v2 .custom-control.custom-checkbox(v-if='!creatingParty')input.custom-control-input(type="checkbox", v-model="workingGroup.allowGuildInvitationsFromNonMembers")
-->
<br>
<div
v-if="!isParty && !this.workingGroup.id"
class="custom-control custom-checkbox"
>
<input
id="privateGuild"
v-model="workingGroup.privateGuild"
class="custom-control-input"
type="checkbox"
>
<label
v-once
class="custom-control-label"
for="privateGuild"
>{{ $t('privateGuild') }}</label>
<div
id="groupPrivateDescription2"
class="icon"
:title="$t('privateDescription')"
>
<div
class="svg-icon"
v-html="icons.information"
></div>
</div>
<b-tooltip
:title="$t('privateDescription')"
target="groupPrivateDescription2"
/>
</div>
<!-- br-->
<!-- @TODO: Implement in v2 .custom-control.custom-checkbox(v-if='!creatingParty')input.custom-control-input(type="checkbox", v-model="workingGroup.allowGuildInvitationsFromNonMembers")
label.custom-control-label(v-once) {{ $t('allowGuildInvitationsFromNonMembers') }}
// "allowGuildInvitationsFromNonMembers": "Allow Guild invitations from non-members",
-->
</div><div
-->
</div>
<div
v-if="!isParty"
class="form-group"
>
<label><strong v-once>{{ $t('guildSummary') }} *</strong></label><div class="summary-count">
<label>
<strong v-once>{{ $t('guildSummary') }} *</strong>
</label>
<div
class="summary-count"
>
{{ $t('charactersRemaining', {characters: charactersRemaining}) }}
</div><textarea
</div>
<textarea
v-model="workingGroup.summary"
class="form-control summary-textarea"
:placeholder="isParty ? $t('partyDescriptionPlaceholder') : $t('guildSummaryPlaceholder')"
></textarea><!-- @TODO: need summary only for PUBLIC GUILDS, not for tavern, private guilds, or party-->
</div><div class="form-group">
<label><strong v-once>{{ $t('groupDescription') }} *</strong></label><a
></textarea>
<!-- @TODO: need summary only for PUBLIC GUILDS, not for tavern, private guilds, or party-->
</div>
<div class="form-group">
<label>
<strong v-once>{{ $t('groupDescription') }} *</strong>
</label>
<a
v-markdown="$t('markdownFormattingHelp')"
class="float-right"
></a><textarea
></a>
<textarea
v-model="workingGroup.description"
class="form-control description-textarea"
type="text"
textarea="textarea"
:placeholder="isParty ? $t('partyDescriptionPlaceholder') : $t('guildDescriptionPlaceholder')"
></textarea>
</div><div
</div>
<div
v-if="creatingParty && !workingGroup.id"
class="form-group"
>
<span><toggleSwitch
v-model="inviteMembers"
:label="$t('inviteMembersNow')"
/></span>
</div><div
<span>
<toggleSwitch
v-model="inviteMembers"
:label="$t('inviteMembersNow')"
/>
</span>
</div>
<div
v-if="!creatingParty && !isParty"
class="form-group"
style="position: relative;"
>
<label><strong v-once>{{ $t('categories') }} *</strong></label><div
<label>
<strong v-once>{{ $t('categories') }} *</strong>
</label>
<div
class="category-wrap"
@click.prevent="toggleCategorySelect"
>
<span
v-if="workingGroup.categories.length === 0"
class="category-select"
>{{ $t('none') }}</span><div
>{{ $t('none') }}</span>
<div
v-for="category in workingGroup.categories"
class="category-label"
>
{{ $t(categoriesHashByKey[category]) }}
</div>
</div><div
</div>
<div
v-if="showCategorySelect"
class="category-box"
>
@ -135,42 +177,54 @@ label.custom-control-label(v-once) {{ $t('allowGuildInvitationsFromNonMembers')
class="custom-control-input"
type="checkbox"
:value="group.key"
><label
>
<label
v-once
class="custom-control-label"
:for="`category-${group.key}`"
>{{ $t(group.label) }}</label>
</div>
</div><button
</div>
<button
class="btn btn-primary"
@click.prevent="toggleCategorySelect"
>
{{ $t('close') }}
</button>
</div><!-- @TODO: need categories only for PUBLIC GUILDS, not for tavern, private guilds, or party-->
</div><div
</div>
<!-- @TODO: need categories only for PUBLIC GUILDS, not for tavern, private guilds, or party-->
</div>
<div
v-if="inviteMembers && !workingGroup.id"
class="form-group"
>
<label><strong v-once>Invite via Email or User ID</strong><p v-once>{{ $t('inviteMembersHowTo') }} *</p></label><div>
<label>
<strong v-once>Invite via Email or User ID</strong>
<p v-once>{{ $t('inviteMembersHowTo') }} *</p>
</label>
<div>
<div v-for="(member, index) in membersToInvite">
<input
v-model="member.value"
type="text"
><button @click.prevent="removeMemberToInvite(index)">
>
<button @click.prevent="removeMemberToInvite(index)">
Remove
</button>
</div><div>
</div>
<div>
<input
v-model="newMemberToInvite.value"
type="text"
placeholder="Email address or User ID"
><button @click.prevent="addMemberToInvite()">
>
<button @click.prevent="addMemberToInvite()">
Add
</button>
</div>
</div>
</div><div class="form-group text-center">
</div>
<div class="form-group text-center">
<div
v-if="!this.workingGroup.id"
class="item-with-icon"
@ -178,20 +232,24 @@ label.custom-control-label(v-once) {{ $t('allowGuildInvitationsFromNonMembers')
<div
class="svg-icon"
v-html="icons.gem"
></div><span class="count">4</span>
</div><button
></div>
<span class="count">4</span>
</div>
<button
v-if="!workingGroup.id"
class="btn btn-primary btn-md"
:disabled="!workingGroup.name || !workingGroup.description"
>
{{ creatingParty ? $t('createParty') : $t('createGuild') }}
</button><button
</button>
<button
v-if="workingGroup.id"
class="btn btn-primary btn-md"
:disabled="!workingGroup.name || !workingGroup.description"
>
{{ isParty ? $t('updateParty') : $t('updateGuild') }}
</button><div
</button>
<div
v-if="!this.workingGroup.id"
v-once
class="gem-description"

View file

@ -11,7 +11,8 @@
<h3>{{ $t('groupGemsDesc') }}</h3>
</div>
</div>
</div><div class="modal-footer">
</div>
<div class="modal-footer">
<div class="col-12 text-center">
<button
class="btn btn-primary"

View file

@ -1,75 +1,99 @@
<template>
<!-- @TODO: Move to group plans folder--><div>
<!-- @TODO: Move to group plans folder-->
<div>
<div>
<div class="header">
<h1 class="text-center">
Need more for your Group?
</h1><div class="row">
</h1>
<div class="row">
<div class="col-8 offset-2 text-center">
<h2 class="sub-text">
{{ $t('groupBenefitsDescription') }}
</h2>
</div>
</div>
</div><div class="container benefits">
</div>
<div class="container benefits">
<div class="row">
<div class="col-4">
<div class="box">
<img
class="box1"
src="~@/assets/images/group-plans/group-14@3x.png"
><hr><h2>{{ $t('teamBasedTasks') }}</h2><p>Set up an easily-viewed shared task list for the group. Assign tasks to your fellow group members, or let them claim their own tasks to make it clear what everyone is working on!</p>
>
<hr>
<h2>{{ $t('teamBasedTasks') }}</h2>
<p>Set up an easily-viewed shared task list for the group. Assign tasks to your fellow group members, or let them claim their own tasks to make it clear what everyone is working on!</p>
</div>
</div><div class="col-4">
</div>
<div class="col-4">
<div class="box">
<img
class="box2"
src="~@/assets/images/group-plans/group-12@3x.png"
><hr><h2>Group Management Controls</h2><p>Use task approvals to verify that a task that was really completed, add Group Managers to share responsibilities, and enjoy a private group chat for all team members.</p>
>
<hr>
<h2>Group Management Controls</h2>
<p>Use task approvals to verify that a task that was really completed, add Group Managers to share responsibilities, and enjoy a private group chat for all team members.</p>
</div>
</div><div class="col-4">
</div>
<div class="col-4">
<div class="box">
<img
class="box3"
src="~@/assets/images/group-plans/group-13@3x.png"
><hr><h2>In-Game Benefits</h2><p>Group members get an exclusive Jackalope Mount, as well as full subscription benefits, including special monthly equipment sets and the ability to buy gems with gold.</p>
>
<hr>
<h2>In-Game Benefits</h2>
<p>Group members get an exclusive Jackalope Mount, as well as full subscription benefits, including special monthly equipment sets and the ability to buy gems with gold.</p>
</div>
</div>
</div>
</div><div
</div>
<div
v-if="upgradingGroup._id"
id="upgrading-group"
class="container payment-options"
>
<h1 class="text-center purple-header">
Are you ready to upgrade?
</h1><div class="row">
</h1>
<div class="row">
<div class="col-12 text-center">
<div class="purple-box">
<div class="amount-section">
<div class="dollar">
$
</div><div class="number">
</div>
<div class="number">
9
</div><div class="name">
</div>
<div class="name">
Group Owner Subscription
</div>
</div><div class="plus">
</div>
<div class="plus">
<div
class="svg-icon"
v-html="icons.positiveIcon"
></div>
</div><div class="amount-section">
</div>
<div class="amount-section">
<div class="dollar">
$
</div><div class="number">
</div>
<div class="number">
3
</div><div class="name">
</div>
<div class="name">
Each Individual Group Member
</div>
</div>
</div><div class="box payment-providers">
<h3>Choose your payment method</h3><div class="payments-column">
</div>
<div class="box payment-providers">
<h3>Choose your payment method</h3>
<div class="payments-column">
<button
class="purchase btn btn-primary payment-button payment-item"
@click="pay(PAYMENTS.STRIPE)"
@ -77,8 +101,10 @@
<div
class="svg-icon credit-card-icon"
v-html="icons.creditCardIcon"
></div>{{ $t('card') }}
</button><amazon-button
></div>
{{ $t('card') }}
</button>
<amazon-button
class="payment-item"
:amazon-data="pay(PAYMENTS.AMAZON)"
/>
@ -86,7 +112,8 @@
</div>
</div>
</div>
</div><div
</div>
<div
v-if="!upgradingGroup._id"
class="container col-6 offset-3 create-option"
>
@ -94,7 +121,8 @@
<h1 class="col-12 text-center purple-header">
Create your Group today!
</h1>
</div><div class="row">
</div>
<div class="row">
<div class="col-12 text-center">
<button
class="btn btn-primary create-group"
@ -103,31 +131,41 @@
Create Your New Group
</button>
</div>
</div><div class="row pricing">
</div>
<div class="row pricing">
<div class="col-5">
<div class="dollar">
$
</div><div class="number">
9
</div><div class="name">
<div>Group Owner</div><div>Subscription</div>
</div>
</div><div class="col-1">
<div class="number">
9
</div>
<div class="name">
<div>Group Owner</div>
<div>Subscription</div>
</div>
</div>
<div class="col-1">
<div class="plus">
+
</div>
</div><div class="col-6">
</div>
<div class="col-6">
<div class="dollar">
$
</div><div class="number">
</div>
<div class="number">
3
</div><div class="name">
<div>Each Additional</div><div>Member</div>
</div>
<div class="name">
<div>Each Additional</div>
<div>Member</div>
</div>
</div>
</div>
</div>
</div><b-modal
</div>
<b-modal
id="group-plan-modal"
title="Select Payment"
size="md"
@ -141,7 +179,8 @@
<label
class="control-label"
for="new-group-name"
>Name</label><input
>Name</label>
<input
id="new-group-name"
v-model="newGroup.name"
class="form-control input-medium option-content"
@ -149,15 +188,18 @@
type="text"
placeholder="Name"
>
</div><div class="form-group">
<label for="new-group-description">{{ $t('description') }}</label><textarea
</div>
<div class="form-group">
<label for="new-group-description">{{ $t('description') }}</label>
<textarea
id="new-group-description"
v-model="newGroup.description"
class="form-control option-content"
cols="3"
:placeholder="$t('description')"
></textarea>
</div><div
</div>
<div
v-if="type === 'guild'"
class="form-group"
>
@ -168,21 +210,25 @@
type="radio"
name="new-group-privacy"
value="private"
><label class="custom-control-label">{{ $t('inviteOnly') }}</label>
>
<label class="custom-control-label">{{ $t('inviteOnly') }}</label>
</div>
</div><div class="form-group">
</div>
<div class="form-group">
<div class="custom-control custom-checkbox">
<input
id="create-group-leaderOnlyChallenges-checkbox"
v-model="newGroup.leaderOnly.challenges"
class="custom-control-input"
type="checkbox"
><label
>
<label
class="custom-control-label"
for="create-group-leaderOnlyChallenges-checkbox"
>{{ $t('leaderOnlyChallenges') }}</label>
</div>
</div><div
</div>
<div
v-if="type === 'party'"
class="form-group"
>
@ -191,7 +237,8 @@
:value="$t('createGroupPlan')"
@click="createGroup()"
></button>
</div><div class="form-group">
</div>
<div class="form-group">
<button
class="btn btn-primary btn-lg btn-block"
:disabled="!newGroupIsReady"
@ -200,12 +247,14 @@
{{ $t('createGroupPlan') }}
</button>
</div>
</div><div
</div>
<div
v-if="activePage === PAGES.PAY"
class="col-12"
>
<div class="text-center">
<h3>Choose your payment method</h3><div class="payments-column mx-auto">
<h3>Choose your payment method</h3>
<div class="payments-column mx-auto">
<button
class="purchase btn btn-primary payment-button payment-item"
@click="pay(PAYMENTS.STRIPE)"
@ -213,8 +262,10 @@
<div
class="svg-icon credit-card-icon"
v-html="icons.creditCardIcon"
></div>{{ $t('card') }}
</button><amazon-button
></div>
{{ $t('card') }}
</button>
<amazon-button
class="payment-item"
:amazon-data="pay(PAYMENTS.AMAZON)"
/>

View file

@ -8,22 +8,26 @@
:class="{'active': $route.name === 'tavern'}"
>
{{ $t('tavern') }}
</router-link><router-link
</router-link>
<router-link
class="nav-link"
:to="{name: 'myGuilds'}"
:class="{'active': $route.name === 'myGuilds'}"
>
{{ $t('myGuilds') }}
</router-link><router-link
</router-link>
<router-link
class="nav-link"
:to="{name: 'guildsDiscovery'}"
:class="{'active': $route.name === 'guildsDiscovery'}"
>
{{ $t('guildsDiscovery') }}
</router-link>
</secondary-menu><div class="col-12">
</secondary-menu>
<div class="col-12">
<router-view />
</div><group-form-modal />
</div>
<group-form-modal />
</div>
</template>

View file

@ -5,9 +5,11 @@
:hide-footer="true"
>
<div>
<strong>{{ $t('inviteEmailUsername') }}</strong><div class="small">
<strong>{{ $t('inviteEmailUsername') }}</strong>
<div class="small">
{{ $t('inviteEmailUsernameInfo') }}
</div><div v-for="(invite, index) in invites">
</div>
<div v-for="(invite, index) in invites">
<div class="input-group">
<div
v-if="index === invites.length - 1 && invite.text.length === 0"
@ -17,7 +19,8 @@
class="svg-icon positive-icon"
v-html="icons.positiveIcon"
></div>
</div><input
</div>
<input
v-model="invite.text"
class="form-control"
type="text"
@ -26,18 +29,21 @@
@keyup="expandInviteList"
@change="checkInviteList"
>
</div><div
</div>
<div
v-if="invite.error"
class="input-error text-center mt-2"
>
{{ invite.error }}
</div>
</div>
</div><div class="modal-footer d-flex justify-content-center">
</div>
<div class="modal-footer d-flex justify-content-center">
<a
class="mr-3"
@click="close()"
>{{ $t('cancel') }}</a><button
>{{ $t('cancel') }}</a>
<button
class="btn btn-primary"
:class="{disabled: cannotSubmit}"
:disabled="cannotSubmit"

View file

@ -1,10 +1,12 @@
<template>
<!-- @TODO: Move this to a member directory--><div>
<!-- @TODO: Move this to a member directory-->
<div>
<remove-member-modal
:member-to-remove="memberToRemove"
:group-id="this.groupId"
@member-removed="memberRemoved"
/><b-modal
/>
<b-modal
id="members-modal"
:title="$t('createGuild')"
size="md"
@ -19,7 +21,8 @@
<h1 v-once>
{{ $t('members') }}
</h1>
</div><div class="col-6">
</div>
<div class="col-6">
<button
class="close"
type="button"
@ -29,7 +32,8 @@
<span aria-hidden="true">×</span>
</button>
</div>
</div><div class="row d-flex align-items-center">
</div>
<div class="row d-flex align-items-center">
<div class="col-4">
<input
v-model="searchTerm"
@ -37,7 +41,8 @@
type="text"
:placeholder="$t('search')"
>
</div><div class="col">
</div>
<div class="col">
<select
class="form-control"
@change="changeSortOption($event)"
@ -49,7 +54,8 @@
{{ sortOption.text }}
</option>
</select>
</div><div class="col-3">
</div>
<div class="col-3">
<select
class="form-control"
@change="changeSortDirection($event)"
@ -63,12 +69,14 @@
</select>
</div>
</div>
</div><div
</div>
<div
v-if="sortDirty && group.type === 'party'"
class="row apply-options d-flex justify-content-center"
>
<a @click="applySortOptions()">{{ $t('applySortToHeader') }}</a>
</div><div
</div>
<div
v-if="invites.length > 0"
class="row"
>
@ -79,7 +87,8 @@
@click="viewMembers()"
>
{{ $t('members') }}
</div><div
</div>
<div
class="nav-item"
:class="{active: selectedPage === 'invites'}"
@click="viewInvites()"
@ -87,65 +96,91 @@
{{ $t('invites') }}
</div>
</div>
</div><div v-if="selectedPage === 'members'">
</div>
<div v-if="selectedPage === 'members'">
<div
v-for="(member, index) in sortedMembers"
class="row"
>
<div class="col-11 no-padding-left">
<member-details :member="member" />
</div><div class="col-1 actions">
</div>
<div class="col-1 actions">
<b-dropdown right="right">
<div
slot="button-content"
class="svg-icon inline dots"
v-html="icons.dots"
></div><b-dropdown-item @click="sendMessage(member)">
<span class="dropdown-icon-item"><div
class="svg-icon inline"
v-html="icons.messageIcon"
></div><span class="text">{{ $t('sendMessage') }}</span></span>
</b-dropdown-item><b-dropdown-item
></div>
<b-dropdown-item @click="sendMessage(member)">
<span class="dropdown-icon-item">
<div
class="svg-icon inline"
v-html="icons.messageIcon"
></div>
<span class="text">{{ $t('sendMessage') }}</span>
</span>
</b-dropdown-item>
<b-dropdown-item
v-if="shouldShowLeaderFunctions(member._id)"
@click="promoteToLeader(member)"
>
<span class="dropdown-icon-item"><div
class="svg-icon inline"
v-html="icons.starIcon"
></div><span class="text">{{ $t('promoteToLeader') }}</span></span>
</b-dropdown-item><b-dropdown-item
<span class="dropdown-icon-item">
<div
class="svg-icon inline"
v-html="icons.starIcon"
></div>
<span class="text">{{ $t('promoteToLeader') }}</span>
</span>
</b-dropdown-item>
<b-dropdown-item
v-if="shouldShowAddManager(member._id)"
@click="addManager(member._id)"
>
<span class="dropdown-icon-item"><div
class="svg-icon inline"
v-html="icons.starIcon"
></div><span class="text">{{ $t('addManager') }}</span></span>
</b-dropdown-item><b-dropdown-item
<span class="dropdown-icon-item">
<div
class="svg-icon inline"
v-html="icons.starIcon"
></div>
<span class="text">{{ $t('addManager') }}</span>
</span>
</b-dropdown-item>
<b-dropdown-item
v-if="shouldShowRemoveManager(member._id)"
@click="removeManager(member._id)"
>
<span class="dropdown-icon-item"><div
class="svg-icon inline"
v-html="icons.removeIcon"
></div><span class="text">{{ $t('removeManager2') }}</span></span>
</b-dropdown-item><b-dropdown-item
<span class="dropdown-icon-item">
<div
class="svg-icon inline"
v-html="icons.removeIcon"
></div>
<span class="text">{{ $t('removeManager2') }}</span>
</span>
</b-dropdown-item>
<b-dropdown-item
v-if="challengeId"
@click="viewProgress(member)"
>
<span class="dropdown-icon-item"><span class="text">{{ $t('viewProgress') }}</span></span>
</b-dropdown-item><b-dropdown-item
<span class="dropdown-icon-item">
<span class="text">{{ $t('viewProgress') }}</span>
</span>
</b-dropdown-item>
<b-dropdown-item
v-if="shouldShowLeaderFunctions(member._id)"
@click="removeMember(member, index)"
>
<span class="dropdown-icon-item"><div
class="svg-icon inline"
v-html="icons.removeIcon"
></div><span class="text">{{ $t('removeMember') }}</span></span>
<span class="dropdown-icon-item">
<div
class="svg-icon inline"
v-html="icons.removeIcon"
></div>
<span class="text">{{ $t('removeMember') }}</span>
</span>
</b-dropdown-item>
</b-dropdown>
</div>
</div><div
</div>
<div
v-if="isLoadMoreAvailable"
class="row"
>
@ -157,37 +192,45 @@
{{ $t('loadMore') }}
</button>
</div>
</div><div
</div>
<div
v-if="members.length > 3"
class="row gradient"
></div>
</div><div v-if="selectedPage === 'invites'">
</div>
<div v-if="selectedPage === 'invites'">
<div
v-for="(member, index) in invites"
class="row"
>
<div class="col-11 no-padding-left">
<member-details :member="member" />
</div><div class="col-1 actions">
</div>
<div class="col-1 actions">
<b-dropdown right="right">
<div
slot="button-content"
class="svg-icon inline dots"
v-html="icons.dots"
></div><b-dropdown-item
></div>
<b-dropdown-item
v-if="isLeader"
@click="removeInvite(member, index)"
>
<span class="dropdown-icon-item"><div
v-if="isLeader"
class="svg-icon inline"
v-html="icons.removeIcon"
></div><span class="text">{{ $t('removeInvite') }}</span></span>
<span class="dropdown-icon-item">
<div
v-if="isLeader"
class="svg-icon inline"
v-html="icons.removeIcon"
></div>
<span class="text">{{ $t('removeInvite') }}</span>
</span>
</b-dropdown-item>
</b-dropdown>
</div>
</div>
</div><div class="modal-footer">
</div>
<div class="modal-footer">
<button
class="btn btn-primary"
@click="close()"

View file

@ -3,7 +3,8 @@
<sidebar
@search="updateSearch"
@filter="updateFilters"
/><div class="standard-page">
/>
<div class="standard-page">
<div class="row">
<div class="col-md-8 text-left">
<h1
@ -11,10 +12,12 @@
class="page-header"
>
{{ $t('myGuilds') }}
</h1><h2 v-if="loading && guilds.length === 0">
</h1>
<h2 v-if="loading && guilds.length === 0">
{{ $t('loading') }}
</h2>
</div><div class="col-4">
</div>
<div class="col-4">
<button
class="btn btn-secondary create-group-button float-right"
@click="createGroup()"
@ -22,13 +25,16 @@
<div
class="svg-icon positive-icon"
v-html="icons.positiveIcon"
></div><span v-once>{{ $t('createGuild2') }}</span>
</button><!-- @TODO: Add when we implement recent activity .float-rightspan.dropdown-label {{ $t('sortBy') }}
></div>
<span v-once>{{ $t('createGuild2') }}</span>
</button>
<!-- @TODO: Add when we implement recent activity .float-rightspan.dropdown-label {{ $t('sortBy') }}
b-dropdown(:text="$t('sort')", right=true)
b-dropdown-item(v-for='sortOption in sortOptions', :key="sortOption.value", @click='sort(sortOption.value)') {{sortOption.text}}
-->
-->
</div>
</div><div class="row">
</div>
<div class="row">
<div
v-if="!loading && guilds.length === 0"
class="no-guilds text-center col-md-6 offset-md-3"
@ -36,15 +42,19 @@ b-dropdown(:text="$t('sort')", right=true)
<div
class="svg-icon"
v-html="icons.greyBadge"
></div><h2 v-once>
></div>
<h2 v-once>
{{ $t('noGuildsTitle') }}
</h2><p v-once>
</h2>
<p v-once>
{{ $t('noGuildsParagraph1') }}
</p><p v-once>
</p>
<p v-once>
{{ $t('noGuildsParagraph2') }}
</p>
</div>
</div><div class="row">
</div>
<div class="row">
<div
v-if="!loading && guilds.length > 0 && filteredGuilds.length === 0"
class="no-guilds text-center col-md-6 offset-md-3"
@ -53,7 +63,8 @@ b-dropdown(:text="$t('sort')", right=true)
{{ $t('noGuildsMatchFilters') }}
</h2>
</div>
</div><div class="row">
</div>
<div class="row">
<div class="col-md-12">
<public-guild-item
v-for="guild in filteredGuilds"

View file

@ -13,7 +13,8 @@
<h1 v-once>
{{ $t('participantsTitle') }}
</h1>
</div><div class="col-6">
</div>
<div class="col-6">
<button
class="close"
type="button"
@ -24,14 +25,16 @@
</button>
</div>
</div>
</div><div
</div>
<div
v-for="member in participants"
class="row"
>
<div class="col-12 no-padding-left">
<member-details :member="member" />
</div>
</div><div class="modal-footer">
</div>
<div class="modal-footer">
<button
class="btn btn-primary"
@click="close()"

View file

@ -15,35 +15,42 @@
v-if="guild.memberCount >= 1000"
class="svg-icon shield"
v-html="icons.goldGuildBadge"
></div><div
></div>
<div
v-if="guild.memberCount >= 100 && guild.memberCount < 1000"
class="svg-icon shield"
v-html="icons.silverGuildBadgeIcon"
></div><div
></div>
<div
v-if="guild.memberCount < 100"
class="svg-icon shield"
v-html="icons.bronzeGuildBadgeIcon"
></div><div class="member-count">
></div>
<div class="member-count">
{{ guild.memberCount | abbrNum }}
</div>
</div>
</div><div class="col-md-10">
</div>
<div class="col-md-10">
<div class="row">
<div class="col-md-8">
<router-link :to="{ name: 'guild', params: { groupId: guild._id } }">
<h3>{{ guild.name }}</h3>
</router-link><p
</router-link>
<p
v-if="guild.summary"
class="summary"
>
{{ guild.summary.substr(0, MAX_SUMMARY_SIZE_FOR_GUILDS) }}
</p><p
</p>
<p
v-else
class="summary"
>
{{ guild.name }}
</p>
</div><div class="col-md-2 cta-container">
</div>
<div class="col-md-2 cta-container">
<button
v-if="isMember && displayLeave"
v-once
@ -51,22 +58,26 @@
@click.prevent="leave()"
>
{{ $t('leave') }}
</button><button
</button>
<button
v-if="!isMember"
v-once
class="btn btn-success"
@click="join()"
>
{{ $t('join') }}
</button><div
</button>
<div
v-if="displayGemBank"
class="item-with-icon gem-bank"
>
<div
class="svg-icon gem"
v-html="icons.gem"
></div><span class="count">{{ guild.balance * 4 }}</span>
</div><div
></div>
<span class="count">{{ guild.balance * 4 }}</span>
</div>
<div
v-if="displayGemBank"
v-once
class="guild-bank"
@ -74,7 +85,8 @@
{{ $t('guildBank') }}
</div>
</div>
</div><div class="row">
</div>
<div class="row">
<category-tags
v-once
class="col-md-12"
@ -84,7 +96,7 @@
<span
v-if="showSuggested(guild._id)"
class="recommend-text"
> {{ $t('suggestedGroup') }}</span>
>{{ $t('suggestedGroup') }}</span>
</category-tags>
</div>
</div>

View file

@ -9,29 +9,34 @@
<div class="left-panel content">
<h3 class="text-center">
{{ $t('participantsTitle') }}
</h3><div class="row">
</h3>
<div class="row">
<div class="col-10 offset-1 text-center">
<span
v-once
class="description"
>{{ $t('participantDesc') }}</span>
</div>
</div><div class="row">
</div>
<div class="row">
<div
v-for="member in members"
class="col-12 member"
>
<strong :class="{'declined-name': member.accepted === false}">{{ member.name }}</strong><div
<strong :class="{'declined-name': member.accepted === false}">{{ member.name }}</strong>
<div
v-if="member.accepted === true"
class="accepted float-right"
>
{{ $t('accepted') }}
</div><div
</div>
<div
v-if="member.accepted === false"
class="declined float-right"
>
{{ $t('declined') }}
</div><div
</div>
<div
v-if="member.accepted === null"
class="pending float-right"
>
@ -39,9 +44,11 @@
</div>
</div>
</div>
</div><div v-if="questData">
</div>
<div v-if="questData">
<questDialogContent :item="questData" />
</div><div
</div>
<div
v-if="canEditQuest"
class="text-center actions"
>
@ -52,8 +59,10 @@
@click="questConfirm()"
>
{{ $t('begin') }}
</button><!-- @TODO don't allow the party leader to start the quest until the leader has accepted or rejected the invitation (users get confused and think "begin" means "join quest")-->
</div><div>
</button>
<!-- @TODO don't allow the party leader to start the quest until the leader has accepted or rejected the invitation (users get confused and think "begin" means "join quest")-->
</div>
<div>
<div
v-once
class="cancel"
@ -62,7 +71,8 @@
{{ $t('cancel') }}
</div>
</div>
</div><div
</div>
<div
v-if="questData"
class="side-panel"
>

View file

@ -8,11 +8,14 @@
<div
class="svg-icon"
v-html="icons.questIcon"
></div><h4 v-once>
></div>
<h4 v-once>
{{ $t('youAreNotOnQuest') }}
</h4><p v-once>
</h4>
<p v-once>
{{ $t('questDescription') }}
</p><button
</p>
<button
v-once
class="btn btn-secondary"
@click="openStartQuestModal()"
@ -20,7 +23,8 @@
{{ $t('startAQuest') }}
</button>
</div>
</div><div
</div>
<div
v-if="onPendingQuest && !onActiveQuest"
class="row quest-active-section"
>
@ -29,9 +33,12 @@
class="quest"
:class="`inventory_quest_scroll_${questData.key}`"
></div>
</div><div class="col-6 titles">
<strong>{{ questData.text() }}</strong><p>{{ acceptedCount }} / {{ group.memberCount }}</p>
</div><div class="col-4">
</div>
<div class="col-6 titles">
<strong>{{ questData.text() }}</strong>
<p>{{ acceptedCount }} / {{ group.memberCount }}</p>
</div>
<div class="col-4">
<button
class="btn btn-secondary"
@click="openQuestDetails()"
@ -39,22 +46,26 @@
{{ $t('details') }}
</button>
</div>
</div><div
</div>
<div
v-if="user.party.quest && user.party.quest.RSVPNeeded"
class="row quest-active-section quest-invite"
>
<span>{{ $t('wouldYouParticipate') }}</span><button
<span>{{ $t('wouldYouParticipate') }}</span>
<button
class="btn btn-primary accept"
@click="questAccept(group._id)"
>
{{ $t('accept') }}
</button><button
</button>
<button
class="btn btn-primary reject"
@click="questReject(group._id)"
>
{{ $t('reject') }}
</button>
</div><div
</div>
<div
v-if="!onPendingQuest && onActiveQuest"
class="row quest-active-section"
>
@ -62,9 +73,11 @@
<div
class="quest-boss"
:class="'quest_' + questData.key"
></div><h3 v-once>
></div>
<h3 v-once>
{{ questData.text() }}
</h3><div class="quest-box">
</h3>
<div class="quest-box">
<div
v-if="questData.collect"
class="collect-info"
@ -76,27 +89,33 @@
@click="openParticipantList()"
>{{ $t('participantsTitle') }}</a>
</div>
</div><div
</div>
<div
v-for="(value, key) in questData.collect"
class="row"
>
<div class="col-2">
<div :class="'quest_' + questData.key + '_' + key"></div>
</div><div class="col-10">
<strong>{{ value.text() }}</strong><div class="grey-progress-bar">
</div>
<div class="col-10">
<strong>{{ value.text() }}</strong>
<div class="grey-progress-bar">
<div
class="collect-progress-bar"
:style="{width: (group.quest.progress.collect[key] / value.count) * 100 + '%'}"
></div>
</div><strong>{{ group.quest.progress.collect[key] }} / {{ value.count }}</strong>
</div>
<strong>{{ group.quest.progress.collect[key] }} / {{ value.count }}</strong>
</div>
</div><div
</div>
<div
v-if="userIsOnQuest"
class="text-right"
>
{{ parseFloat(user.party.quest.progress.collectedItems) || 0 }} items found
</div>
</div><div
</div>
<div
v-if="questData.boss"
class="boss-info"
>
@ -108,13 +127,15 @@
>
{{ questData.boss.name() }}
</h4>
</div><div class="col-6">
</div>
<div class="col-6">
<a
class="float-right"
@click="openParticipantList()"
>{{ $t('participantsTitle') }}</a>
</div>
</div><div class="row">
</div>
<div class="row">
<div class="col-12">
<div class="grey-progress-bar">
<div
@ -123,16 +144,26 @@
></div>
</div>
</div>
</div><div class="row boss-details">
</div>
<div class="row boss-details">
<div class="col-6">
<span class="float-left">{{ Math.ceil(parseFloat(group.quest.progress.hp) * 100) / 100 }} / {{ parseFloat(questData.boss.hp).toFixed(2) }}<!-- current boss hp uses ceil so you don't underestimate damage needed to end quest--></span>
</div><div
<span class="float-left">
{{ Math.ceil(parseFloat(group.quest.progress.hp) * 100) / 100 }} / {{ parseFloat(questData.boss.hp).toFixed(2) }}
<!-- current boss hp uses ceil so you don't underestimate damage needed to end quest-->
</span>
</div>
<div
v-if="userIsOnQuest"
class="col-6"
>
<!-- @TODO: Why do we not sync quest progress on the group doc? Each user could have different progress.--><span class="float-right">{{ user.party.quest.progress.up | floor(10) }} {{ $t('pendingDamageLabel') }}</span><!-- player's pending damage uses floor so you don't overestimate damage you've already done-->
<!-- @TODO: Why do we not sync quest progress on the group doc? Each user could have different progress.-->
<span
class="float-right"
>{{ user.party.quest.progress.up | floor(10) }} {{ $t('pendingDamageLabel') }}</span>
<!-- player's pending damage uses floor so you don't overestimate damage you've already done-->
</div>
</div><div
</div>
<div
v-if="questData.boss.rage"
class="row rage-bar-row"
>
@ -144,16 +175,20 @@
></div>
</div>
</div>
</div><div
</div>
<div
v-if="questData.boss.rage"
class="row boss-details rage-details"
>
<div class="col-6">
<span class="float-left">{{ $t('rage') }} {{ parseFloat(group.quest.progress.rage).toFixed(2) }} / {{ questData.boss.rage.value }}</span>
<span
class="float-left"
>{{ $t('rage') }} {{ parseFloat(group.quest.progress.rage).toFixed(2) }} / {{ questData.boss.rage.value }}</span>
</div>
</div>
</div>
</div><button
</div>
<button
v-if="canEditQuest"
v-once
class="btn btn-secondary"

View file

@ -7,11 +7,14 @@
type="text"
:placeholder="$t('search')"
>
</div><form>
</div>
<form>
<h2 v-once>
{{ $t('filter') }}
</h2><div class="form-group">
<h3>{{ $t('category') }}</h3><div
</h2>
<div class="form-group">
<h3>{{ $t('category') }}</h3>
<div
v-for="group in categoryOptions"
:key="group.key"
class="form-check"
@ -23,15 +26,18 @@
class="custom-control-input"
type="checkbox"
:value="group.key"
><label
>
<label
v-once
class="custom-control-label"
:for="group.key"
>{{ $t(group.label) }}</label>
</div>
</div>
</div><div class="form-group">
<h3>{{ $t('role') }}</h3><div
</div>
<div class="form-group">
<h3>{{ $t('role') }}</h3>
<div
v-for="group in roleOptions"
:key="group.key"
class="form-check"
@ -43,15 +49,18 @@
class="custom-control-input"
type="checkbox"
:value="group.key"
><label
>
<label
v-once
class="custom-control-label"
:for="group.key"
>{{ $t(group.label) }}</label>
</div>
</div>
</div><div class="form-group">
<h3>{{ $t('guildSize') }}</h3><div
</div>
<div class="form-group">
<h3>{{ $t('guildSize') }}</h3>
<div
v-for="group in guildSizeOptions"
:key="group.key"
class="form-check"
@ -63,7 +72,8 @@
class="custom-control-input"
type="checkbox"
:value="group.key"
><label
>
<label
v-once
class="custom-control-label"
:for="group.key"

View file

@ -9,7 +9,8 @@
<div class="left-panel content">
<h3 class="text-center">
Quests
</h3><div class="row">
</h3>
<div class="row">
<div
v-for="(value, key, index) in user.items.quests"
v-if="value > 0"
@ -25,15 +26,18 @@
>
<h4 class="popover-content-title">
{{ quests.quests[key].text() }}
</h4><questInfo :quest="quests.quests[key]" />
</b-popover><div
</h4>
<questInfo :quest="quests.quests[key]" />
</b-popover>
<div
:id="`inventory_quest_scroll_${key}`"
class="quest"
:class="`inventory_quest_scroll_${key}`"
></div>
</div>
</div>
</div><div class="row">
</div>
<div class="row">
<div class="col-10 offset-1 text-center">
<span
v-once
@ -41,9 +45,11 @@
>{{ $t('noQuestToStart') }}</span>
</div>
</div>
</div><div v-if="questData">
</div>
<div v-if="questData">
<questDialogContent :item="questData" />
</div><div class="text-center">
</div>
<div class="text-center">
<button
class="btn btn-primary"
:disabled="!Boolean(selectedQuest) || loading"
@ -51,9 +57,11 @@
>
{{ $t('inviteToPartyOrQuest') }}
</button>
</div><div class="text-center">
</div>
<div class="text-center">
<p>{{ $t('inviteInformation') }}</p>
</div><div
</div>
<div
v-if="questData"
class="side-panel"
>

View file

@ -1,23 +1,28 @@
<template>
<div class="row">
<world-boss-info-modal /><world-boss-rage-modal /><div class="col-12 col-sm-8 clearfix standard-page">
<world-boss-info-modal />
<world-boss-rage-modal />
<div class="col-12 col-sm-8 clearfix standard-page">
<div class="row">
<div class="col-6 title-details">
<h1 v-once>
{{ $t('welcomeToTavern') }}
</h1>
</div>
</div><chat
</div>
<chat
:label="$t('tavernChat')"
:group="group"
:placeholder="$t('tavernCommunityGuidelinesPlaceholder')"
@fetchRecentMessages="fetchRecentMessages()"
/>
</div><div class="col-12 col-sm-4 sidebar">
</div>
<div class="col-12 col-sm-4 sidebar">
<div class="section">
<div class="grassy-meadow-backdrop">
<div class="daniel_front"></div>
</div><div class="boss-section">
</div>
<div class="boss-section">
<div
v-if="group && group.quest && group.quest.active"
class="world-boss"
@ -26,78 +31,111 @@
<div
class="corner-decoration"
:style="{top: '-2px', right: '-2px'}"
></div><div
></div>
<div
class="corner-decoration"
:style="{top: '-2px', left: '-2px'}"
></div><div
></div>
<div
class="corner-decoration"
:style="{bottom: '-2px', right: '-2px'}"
></div><div
></div>
<div
class="corner-decoration"
:style="{bottom: '-2px', left: '-2px'}"
></div><div class="text-center float-bar d-flex align-items-center">
<span class="diamond"></span><span
></div>
<div class="text-center float-bar d-flex align-items-center">
<span class="diamond"></span>
<span
class="strong reduce"
:style="{background: questData.colors.dark}"
>{{ $t('worldBossEvent') }}</span><span class="diamond"></span>
</div><div class="boss-gradient pb-3 pt-3">
>{{ $t('worldBossEvent') }}</span>
<span class="diamond"></span>
</div>
<div class="boss-gradient pb-3 pt-3">
<p
class="text-center reduce"
:style="{color: questData.colors.extralight}"
>
{{ $t(`${questData.key}ArtCredit`) }}
</p><div
</p>
<div
class="quest-boss"
:class="'background_' + questData.key"
>
<div
class="quest-boss"
:class="'quest_' + questData.key"
></div><div
></div>
<div
class="quest-boss"
:class="'phobia_' + questData.key"
:style="{display: 'none'}"
></div>
</div>
</div><div class="p-3">
</div>
<div class="p-3">
<div class="row d-flex align-items-center mb-2">
<div class="col-sm-6">
<strong class="float-left">{{ questData.boss.name() }}</strong>
</div><div class="col-sm-6">
<span class="d-flex float-right"><div
class="svg-icon boss-icon"
v-html="icons.swordIcon"
></div><span
class="ml-1 reduce"
:style="{color: questData.colors.extralight}"
>{{ $t('pendingDamage', {damage: pendingDamage()}) }}</span></span>
</div>
</div><div class="grey-progress-bar mb-1">
<div class="col-sm-6">
<span class="d-flex float-right">
<div
class="svg-icon boss-icon"
v-html="icons.swordIcon"
></div>
<span
class="ml-1 reduce"
:style="{color: questData.colors.extralight}"
>{{ $t('pendingDamage', {damage: pendingDamage()}) }}</span>
</span>
</div>
</div>
<div class="grey-progress-bar mb-1">
<div
class="boss-health-bar"
:style="{width: (group.quest.progress.hp / questData.boss.hp) * 100 + '%'}"
></div>
</div><span class="d-flex align-items-center"><div
class="svg-icon boss-icon"
v-html="icons.healthIcon"
></div><span class="reduce ml-1 pt-1">{{ $t('bossHealth', {currentHealth: bossCurrentHealth(), maxHealth: questData.boss.hp.toLocaleString()}) }}</span></span><div class="mt-3 mb-2">
<strong class="mr-1">{{ $t('rageAttack') }}</strong><span>{{ questData.boss.rage.title() }}</span>
</div><div class="grey-progress-bar mb-1">
</div>
<span class="d-flex align-items-center">
<div
class="svg-icon boss-icon"
v-html="icons.healthIcon"
></div>
<span
class="reduce ml-1 pt-1"
>{{ $t('bossHealth', {currentHealth: bossCurrentHealth(), maxHealth: questData.boss.hp.toLocaleString()}) }}</span>
</span>
<div class="mt-3 mb-2">
<strong class="mr-1">{{ $t('rageAttack') }}</strong>
<span>{{ questData.boss.rage.title() }}</span>
</div>
<div class="grey-progress-bar mb-1">
<div
class="boss-health-bar rage-bar"
:style="{width: (group.quest.progress.rage / questData.boss.rage.value) * 100 + '%'}"
></div>
</div><span class="d-flex align-items-center"><div
class="svg-icon boss-icon"
v-html="icons.rageIcon"
></div><span class="reduce ml-1 pt-1">{{ $t('bossRage', {currentRage: bossCurrentRage(), maxRage: questData.boss.rage.value.toLocaleString()}) }}</span></span><div class="row d-flex align-items-center mb-2 mt-2">
</div>
<span class="d-flex align-items-center">
<div
class="svg-icon boss-icon"
v-html="icons.rageIcon"
></div>
<span
class="reduce ml-1 pt-1"
>{{ $t('bossRage', {currentRage: bossCurrentRage(), maxRage: questData.boss.rage.value.toLocaleString()}) }}</span>
</span>
<div class="row d-flex align-items-center mb-2 mt-2">
<div class="col-sm-4 d-flex">
<strong class="mr-2">{{ $t('rageStrikes') }}</strong><div
<strong class="mr-2">{{ $t('rageStrikes') }}</strong>
<div
v-b-tooltip.hover.top="questData.boss.rage.description()"
class="svg-icon boss-icon information-icon m-auto"
v-html="icons.informationIcon"
></div>
</div><div class="col-sm-8 d-flex align-items-center justify-content-center">
</div>
<div class="col-sm-8 d-flex align-items-center justify-content-center">
<div
class="m-auto"
@click="showWorldBossRage('seasonalShop')"
@ -106,12 +144,14 @@
v-if="!group.quest.extra.worldDmg.seasonalShop"
class="rage-strike"
src="~@/assets/images/world-boss/rage_strike@2x.png"
><img
>
<img
v-if="group.quest.extra.worldDmg.seasonalShop"
class="rage-strike-active"
src="~@/assets/images/world-boss/rage_strike-seasonalShop@2x.png"
>
</div><div
</div>
<div
class="m-auto"
@click="showWorldBossRage('market')"
>
@ -119,12 +159,14 @@
v-if="!group.quest.extra.worldDmg.market"
class="rage-strike"
src="~@/assets/images/world-boss/rage_strike@2x.png"
><img
>
<img
v-if="group.quest.extra.worldDmg.market"
class="rage-strike-active"
src="~@/assets/images/world-boss/rage_strike-market@2x.png"
>
</div><div
</div>
<div
class="m-auto"
@click="showWorldBossRage('quests')"
>
@ -132,19 +174,22 @@
v-if="!group.quest.extra.worldDmg.quests"
class="rage-strike"
src="~@/assets/images/world-boss/rage_strike@2x.png"
><img
>
<img
v-if="group.quest.extra.worldDmg.quests"
class="rage-strike-active"
src="~@/assets/images/world-boss/rage_strike-quests@2x.png"
>
</div>
</div>
</div><div
</div>
<div
class="boss-description p-3"
:style="{'border-color': questData.colors.extralight}"
@click="sections.worldBoss = !sections.worldBoss"
>
<strong class="float-left">{{ $t('worldBossDescription') }}</strong><div class="float-right">
<strong class="float-left">{{ $t('worldBossDescription') }}</strong>
<div class="float-right">
<div
v-if="!sections.worldBoss"
class="toggle-down"
@ -153,7 +198,8 @@
class="svg-icon boss-icon"
v-html="icons.chevronIcon"
></div>
</div><div
</div>
<div
v-if="sections.worldBoss"
class="toggle-up"
>
@ -163,33 +209,42 @@
></div>
</div>
</div>
</div><div
</div>
<div
v-if="sections.worldBoss"
class="mt-3"
v-html="questData.notes()"
></div>
</div>
</div><!-- .text-center.mt-4.world-boss-info-button(@click="showWorldBossInfo()") {{$t('whatIsWorldBoss') }}
-->
</div><div class="sleep below-header-sections">
<strong v-once>{{ $t('sleepDescription') }}</strong><ul>
</div>
<!-- .text-center.mt-4.world-boss-info-button(@click="showWorldBossInfo()") {{$t('whatIsWorldBoss') }}
-->
</div>
<div class="sleep below-header-sections">
<strong v-once>{{ $t('sleepDescription') }}</strong>
<ul>
<li v-once>
{{ $t('sleepBullet1') }}
</li><li v-once>
</li>
<li v-once>
{{ $t('sleepBullet2') }}
</li><li v-once>
</li>
<li v-once>
{{ $t('sleepBullet3') }}
</li><li v-once>
</li>
<li v-once>
{{ $t('sleepBullet4') }}
</li>
</ul><button
</ul>
<button
v-if="!user.preferences.sleep"
v-once
class="btn btn-secondary pause-button"
@click="toggleSleep()"
>
{{ $t('pauseDailies') }}
</button><button
</button>
<button
v-if="user.preferences.sleep"
v-once
class="btn btn-secondary pause-button"
@ -198,7 +253,8 @@
{{ $t('unpauseDailies') }}
</button>
</div>
</div><div class="px-3">
</div>
<div class="px-3">
<sidebar-section :title="$t('staffAndModerators')">
<div class="row">
<div
@ -212,170 +268,212 @@
:to="{'name': 'userProfile', 'params': {'userId': user.uuid}}"
>
{{ user.name }}
</router-link><div
</router-link>
<div
v-if="user.type === 'Staff'"
class="svg-icon staff-icon"
v-html="icons.tierStaff"
></div><div
></div>
<div
v-if="user.type === 'Moderator' && user.name !== 'It's Bailey'"
class="svg-icon mod-icon"
v-html="icons.tierMod"
></div><div
></div>
<div
v-if="user.name === 'It's Bailey'"
class="svg-icon npc-icon"
v-html="icons.tierNPC"
></div>
</div><div class="type">
</div>
<div class="type">
{{ user.type }}
</div>
</div>
</div>
</sidebar-section><sidebar-section :title="$t('helpfulLinks')">
</sidebar-section>
<sidebar-section :title="$t('helpfulLinks')">
<ul>
<li>
<a
href=""
href
@click.prevent="modForm()"
>{{ $t('contactForm') }}</a>
</li><li>
</li>
<li>
<router-link
v-once
to="/static/community-guidelines"
>
{{ $t('communityGuidelinesLink') }}
</router-link>
</li><li>
<router-link to="/groups/guild/f2db2a7f-13c5-454d-b3ee-ea1f5089e601">
</li>
<li>
<router-link
to="/groups/guild/f2db2a7f-13c5-454d-b3ee-ea1f5089e601"
>
{{ $t('lookingForGroup') }}
</router-link>
</li><li>
</li>
<li>
<router-link
v-once
to="/static/faq"
>
{{ $t('faq') }}
</router-link>
</li><li>
</li>
<li>
<a
href=""
href
v-html="$t('glossary')"
></a>
</li><li>
</li>
<li>
<a
v-once
href="http://habitica.fandom.com/wiki/Habitica_Wiki"
target="_blank"
>{{ $t('wiki') }}</a>
</li><li>
</li>
<li>
<a
v-once
href="https://oldgods.net/habitrpg/habitrpg_user_data_display.html"
target="_blank"
>{{ $t('dataDisplayTool') }}</a>
</li><li>
<router-link to="/groups/guild/a29da26b-37de-4a71-b0c6-48e72a900dac">
</li>
<li>
<router-link
to="/groups/guild/a29da26b-37de-4a71-b0c6-48e72a900dac"
>
{{ $t('reportProblem') }}
</router-link>
</li><li>
</li>
<li>
<a
v-once
href="https://trello.com/c/odmhIqyW/440-read-first-table-of-contents"
target="_blank"
>{{ $t('requestFeature') }}</a>
</li><li>
</li>
<li>
<a
href=""
href
v-html="$t('communityForum')"
></a>
</li><li>
<router-link to="/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a">
</li>
<li>
<router-link
to="/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a"
>
{{ $t('askQuestionGuild') }}
</router-link>
</li>
</ul>
</sidebar-section><sidebar-section :title="$t('playerTiers')">
</sidebar-section>
<sidebar-section :title="$t('playerTiers')">
<div class="row">
<div class="col-12">
<p v-once>
{{ $t('playerTiersDesc') }}
</p><ul class="tier-list">
</p>
<ul class="tier-list">
<li
v-once
class="tier1"
>
{{ $t('tier1') }}<div
{{ $t('tier1') }}
<div
class="svg-icon tier1-icon"
v-html="icons.tier1"
></div>
</li><li
</li>
<li
v-once
class="tier2"
>
{{ $t('tier2') }}<div
{{ $t('tier2') }}
<div
class="svg-icon tier2-icon"
v-html="icons.tier2"
></div>
</li><li
</li>
<li
v-once
class="tier3"
>
{{ $t('tier3') }}<div
{{ $t('tier3') }}
<div
class="svg-icon tier3-icon"
v-html="icons.tier3"
></div>
</li><li
</li>
<li
v-once
class="tier4"
>
{{ $t('tier4') }}<div
{{ $t('tier4') }}
<div
class="svg-icon tier4-icon"
v-html="icons.tier4"
></div>
</li><li
</li>
<li
v-once
class="tier5"
>
{{ $t('tier5') }}<div
{{ $t('tier5') }}
<div
class="svg-icon tier5-icon"
v-html="icons.tier5"
></div>
</li><li
</li>
<li
v-once
class="tier6"
>
{{ $t('tier6') }}<div
{{ $t('tier6') }}
<div
class="svg-icon tier6-icon"
v-html="icons.tier6"
></div>
</li><li
</li>
<li
v-once
class="tier7"
>
{{ $t('tier7') }}<div
{{ $t('tier7') }}
<div
class="svg-icon tier7-icon"
v-html="icons.tier7"
></div>
</li><li
</li>
<li
v-once
class="moderator"
>
{{ $t('tierModerator') }}<div
{{ $t('tierModerator') }}
<div
class="svg-icon mod-icon"
v-html="icons.tierMod"
></div>
</li><li
</li>
<li
v-once
class="staff"
>
{{ $t('tierStaff') }}<div
{{ $t('tierStaff') }}
<div
class="svg-icon staff-icon"
v-html="icons.tierStaff"
></div>
</li><li
</li>
<li
v-once
class="npc"
>
{{ $t('tierNPC') }}<div
{{ $t('tierNPC') }}
<div
class="svg-icon npc-icon"
v-html="icons.tierNPC"
></div>

View file

@ -3,9 +3,11 @@
<small
class="muted"
v-html="$t('blurbHallContributors')"
></small><div class="well">
></small>
<div class="well">
<div v-if="user.contributor.admin">
<h2>Reward User</h2><div class="row">
<h2>Reward User</h2>
<div class="row">
<div
v-if="!hero.profile"
class="form col-6"
@ -17,7 +19,8 @@
type="text"
:placeholder="'User ID or Username'"
>
</div><div class="form-group">
</div>
<div class="form-group">
<button
class="btn btn-secondary"
@click="loadHero(heroID)"
@ -26,7 +29,8 @@
</button>
</div>
</div>
</div><div class="row">
</div>
<div class="row">
<div
v-if="hero && hero.profile"
class="form col-6"
@ -34,38 +38,62 @@
>
<router-link :to="{'name': 'userProfile', 'params': {'userId': hero._id}}">
<h3>@{{ hero.auth.local.username }} &nbsp; / &nbsp; {{ hero.profile.name }}</h3>
</router-link><div class="form-group">
<label>Contributor Title</label><input
</router-link>
<div class="form-group">
<label>Contributor Title</label>
<input
v-model="hero.contributor.text"
class="form-control"
type="text"
><small>Common titles: <strong>Ambassador, Artisan, Bard, Blacksmith, Challenger, Comrade, Fletcher, Linguist, Linguistic Scribe, Scribe, Socialite, Storyteller</strong>. Rare titles: Advisor, Chamberlain, Designer, Mathematician, Shirtster, Spokesperson, Statistician, Tinker, Transcriber, Troubadour.</small>
</div><div class="form-group">
<label>Contributor Tier</label><input
>
<small>
Common titles:
<strong>Ambassador, Artisan, Bard, Blacksmith, Challenger, Comrade, Fletcher, Linguist, Linguistic Scribe, Scribe, Socialite, Storyteller</strong>. Rare titles: Advisor, Chamberlain, Designer, Mathematician, Shirtster, Spokesperson, Statistician, Tinker, Transcriber, Troubadour.
</small>
</div>
<div class="form-group">
<label>Contributor Tier</label>
<input
v-model="hero.contributor.level"
class="form-control"
type="number"
><small>1-7 for normal contributors, 8 for moderators, 9 for staff. This determines which items, pets, and mounts are available, and name-tag coloring. Tiers 8 and 9 are automatically given admin status.&nbsp;<a
target="_blank"
href="https://trello.com/c/wkFzONhE/277-contributor-gear"
>More details (1-7)</a>,&nbsp;<a
target="_blank"
href="https://github.com/HabitRPG/habitica/issues/3801"
>more details (8-9)</a></small>
</div><div class="form-group">
<label>Contributions</label><textarea
>
<small>
1-7 for normal contributors, 8 for moderators, 9 for staff. This determines which items, pets, and mounts are available, and name-tag coloring. Tiers 8 and 9 are automatically given admin status.&nbsp;
<a
target="_blank"
href="https://trello.com/c/wkFzONhE/277-contributor-gear"
>More details (1-7)</a>,&nbsp;
<a
target="_blank"
href="https://github.com/HabitRPG/habitica/issues/3801"
>more details (8-9)</a>
</small>
</div>
<div class="form-group">
<label>Contributions</label>
<textarea
v-model="hero.contributor.contributions"
class="form-control"
cols="5"
></textarea>
</div><div class="form-group">
<label>Balance</label><input
</div>
<div class="form-group">
<label>Balance</label>
<input
v-model="hero.balance"
class="form-control"
type="number"
step="any"
><small><span>'{{ hero.balance }}' is in USD, <em>not</em> in Gems. E.g., if this number is 1, it means 4 Gems. Only use this option when manually granting Gems to players, don't use it when granting contributor tiers. Contrib tiers will automatically add Gems.</span></small>
</div><div class="accordion">
>
<small>
<span>
'{{ hero.balance }}' is in USD,
<em>not</em> in Gems. E.g., if this number is 1, it means 4 Gems. Only use this option when manually granting Gems to players, don't use it when granting contributor tiers. Contrib tiers will automatically add Gems.
</span>
</small>
</div>
<div class="accordion">
<div
class="accordion-group"
heading="Items"
@ -76,7 +104,8 @@
@click="expandItems = !expandItems"
>
Update Item
</h4><div
</h4>
<div
v-if="expandItems"
class="form-group well"
>
@ -85,18 +114,36 @@
class="form-control"
type="text"
placeholder="Path (eg, items.pets.BearCub-Base)"
><small class="muted">Enter the <strong>item path</strong>. E.g., <code>items.pets.BearCub-Zombie</code> or <code>items.gear.owned.head_special_0</code> or <code>items.gear.equipped.head</code>. You can find all the item paths below.</small><br><input
>
<small class="muted">
Enter the
<strong>item path</strong>. E.g.,
<code>items.pets.BearCub-Zombie</code> or
<code>items.gear.owned.head_special_0</code> or
<code>items.gear.equipped.head</code>. You can find all the item paths below.
</small>
<br>
<input
v-model="hero.itemVal"
class="form-control"
type="text"
placeholder="Value (eg, 5)"
><small class="muted">Enter the <strong>item value</strong>. E.g., <code>5</code> or <code>false</code> or <code>head_warrior_3</code>. All values are listed in the All Item Paths section below.</small><div class="accordion">
>
<small class="muted">
Enter the
<strong>item value</strong>. E.g.,
<code>5</code> or
<code>false</code> or
<code>head_warrior_3</code>. All values are listed in the All Item Paths section below.
</small>
<div class="accordion">
<div
class="accordion-group"
heading="All Item Paths"
>
<pre>{{ allItemPaths }}</pre>
</div><div
</div>
<div
class="accordion-group"
heading="Current Items"
>
@ -104,7 +151,8 @@
</div>
</div>
</div>
</div><div
</div>
<div
class="accordion-group"
heading="Auth"
>
@ -114,34 +162,49 @@
@click="expandAuth = !expandAuth"
>
Auth
</h4><div v-if="expandAuth">
<pre>{{ hero.auth }}</pre><div class="form-group">
</h4>
<div v-if="expandAuth">
<pre>{{ hero.auth }}</pre>
<div class="form-group">
<div class="checkbox">
<label><input
v-if="hero.flags"
v-model="hero.flags.chatShadowMuted"
type="checkbox"
><strong>Chat Shadow Muting On</strong></label>
<label>
<input
v-if="hero.flags"
v-model="hero.flags.chatShadowMuted"
type="checkbox"
>
<strong>Chat Shadow Muting On</strong>
</label>
</div>
</div><div class="form-group">
</div>
<div class="form-group">
<div class="checkbox">
<label><input
v-if="hero.flags"
v-model="hero.flags.chatRevoked"
type="checkbox"
><strong>Chat Privileges Revoked</strong></label>
<label>
<input
v-if="hero.flags"
v-model="hero.flags.chatRevoked"
type="checkbox"
>
<strong>Chat Privileges Revoked</strong>
</label>
</div>
</div><div class="form-group">
</div>
<div class="form-group">
<div class="checkbox">
<label><input
v-model="hero.auth.blocked"
type="checkbox"
>Blocked</label>
<label>
<input
v-model="hero.auth.blocked"
type="checkbox"
>Blocked
</label>
</div>
</div>
</div>
</div>
</div><!-- h4 Backer Status--><!-- Add backer stuff like tier, disable adds, etcs--><div class="form-group">
</div>
<!-- h4 Backer Status-->
<!-- Add backer stuff like tier, disable adds, etcs-->
<div class="form-group">
<button
class="form-control btn btn-primary"
@click="saveHero()"
@ -151,15 +214,21 @@
</div>
</div>
</div>
</div><div class="table-responsive">
</div>
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>{{ $t('name') }}</th><th v-if="user.contributor && user.contributor.admin">
<th>{{ $t('name') }}</th>
<th v-if="user.contributor && user.contributor.admin">
{{ $t('UUID') }}
</th><th>{{ $t('contribLevel') }}</th><th>{{ $t('title') }}</th><th>{{ $t('contributions') }}</th>
</th>
<th>{{ $t('contribLevel') }}</th>
<th>{{ $t('title') }}</th>
<th>{{ $t('contributions') }}</th>
</tr>
</thead><tbody>
</thead>
<tbody>
<tr v-for="(hero, index) in heroes">
<td>
<user-link
@ -168,17 +237,22 @@
:popover="$t('gamemaster')"
popover-trigger="mouseenter"
popover-placement="right"
/><user-link
/>
<user-link
v-if="!hero.contributor || !hero.contributor.admin"
:user="hero"
/>
</td><td
</td>
<td
v-if="user.contributor.admin"
class="btn-link"
@click="populateContributorInput(hero._id, index)"
>
{{ hero._id }}
</td><td>{{ hero.contributor.level }}</td><td>{{ hero.contributor.text }}</td><td>
</td>
<td>{{ hero.contributor.level }}</td>
<td>{{ hero.contributor.text }}</td>
<td>
<div
v-markdown="hero.contributor.contributions"
target="_blank"

View file

@ -8,14 +8,16 @@
:class="{'active': $route.name === 'contributors'}"
>
{{ $t('hallContributors') }}
</router-link><router-link
</router-link>
<router-link
class="nav-link"
:to="{name: 'patrons'}"
:class="{'active': $route.name === 'patrons'}"
>
{{ $t('hallPatrons') }}
</router-link>
</secondary-menu><div class="col-12">
</secondary-menu>
<div class="col-12">
<router-view />
</div>
</div>

View file

@ -1,27 +1,34 @@
<template>
<div class="row">
<small class="muted">{{ $t('blurbHallPatrons') }}</small><div class="table-responsive">
<small class="muted">{{ $t('blurbHallPatrons') }}</small>
<div class="table-responsive">
<table
class="table table-striped"
infinite-scroll="loadMore()"
>
<thead>
<tr>
<th>{{ $t('name') }}</th><th v-if="user.contributor.admin">
<th>{{ $t('name') }}</th>
<th v-if="user.contributor.admin">
{{ $t('UUID') }}
</th><th>{{ $t('backerTier') }}</th>
</th>
<th>{{ $t('backerTier') }}</th>
</tr>
</thead><tbody>
</thead>
<tbody>
<tr v-for="patron in patrons">
<td>
<a
v-class="userLevelStyle(patron)"
class="label label-default"
@click="clickMember(patron._id, true)"
></a>{{ patron.profile.name }}
</td><td v-if="user.contributor.admin">
></a>
{{ patron.profile.name }}
</td>
<td v-if="user.contributor.admin">
{{ patron._id }}
</td><td>{{ patron.backer.tier }}</td>
</td>
<td>{{ patron.backer.tier }}</td>
</tr>
</tbody>
</table>

View file

@ -3,16 +3,20 @@
<invite-modal
:group="inviteModalGroup"
:group-type="inviteModalGroupType"
/><create-party-modal /><div
/>
<create-party-modal />
<div
id="app-header"
class="row"
:class="{'hide-header': $route.name === 'groupPlan'}"
>
<members-modal :hide-badge="true" /><member-details
<members-modal :hide-badge="true" />
<member-details
:member="user"
:class-badge-position="'next-to-name'"
:is-header="true"
/><div
/>
<div
v-if="hasParty"
class="view-party d-flex align-items-center"
>
@ -22,7 +26,8 @@
>
{{ $t('viewParty') }}
</button>
</div><div
</div>
<div
v-if="hasParty"
v-resize="1500"
class="party-members d-flex"
@ -39,15 +44,19 @@
:class-badge-position="'hidden'"
@onHover="expandMember(member._id)"
/>
</div><div
</div>
<div
v-else
class="no-party d-flex justify-content-center text-center"
>
<div class="align-self-center">
<h3>{{ $t('battleWithFriends') }}</h3><span
<h3>{{ $t('battleWithFriends') }}</h3>
<span
class="small-text"
v-html="$t('inviteFriendsParty')"
></span><br><button
></span>
<br>
<button
class="btn btn-primary"
@click="createOrInviteParty()"
>

View file

@ -1,6 +1,11 @@
<template>
<div>
<inbox-modal /><creator-intro /><profileModal /><report-flag-modal /><send-gems-modal /><b-navbar
<inbox-modal />
<creator-intro />
<profileModal />
<report-flag-modal />
<send-gems-modal />
<b-navbar
class="topbar navbar-inverse static-top"
toggleable="lg"
type="dark"
@ -13,21 +18,29 @@
<div
class="logo svg-icon d-none d-xl-block"
v-html="icons.logo"
></div><div class="svg-icon gryphon d-xs-block d-xl-none"></div>
</b-navbar-brand><b-navbar-toggle
></div>
<div class="svg-icon gryphon d-xs-block d-xl-none"></div>
</b-navbar-brand>
<b-navbar-toggle
class="menu-toggle"
target="menu_collapse"
/><div class="quick-menu mobile-only form-inline">
/>
<div class="quick-menu mobile-only form-inline">
<a
v-b-tooltip.hover.bottom="$t('sync')"
class="item-with-icon"
:aria-label="$t('sync')"
@click="sync"
><div
class="top-menu-icon svg-icon"
v-html="icons.sync"
></div></a><notification-menu class="item-with-icon" /><user-dropdown class="item-with-icon" />
</div><b-collapse
>
<div
class="top-menu-icon svg-icon"
v-html="icons.sync"
></div>
</a>
<notification-menu class="item-with-icon" />
<user-dropdown class="item-with-icon" />
</div>
<b-collapse
id="menu_collapse"
v-model="menuIsOpen"
class="collapse navbar-collapse"
@ -41,7 +54,8 @@
exact="exact"
>
{{ $t('tasks') }}
</b-nav-item><li
</b-nav-item>
<li
class="topbar-item droppable"
:class="{'active': $route.path.startsWith('/inventory'), 'down': $route.path.startsWith('/inventory') && this.isDesktop()}"
>
@ -54,31 +68,36 @@
class="chevron-icon-down"
v-html="icons.chevronDown"
></div>
</div><router-link
</div>
<router-link
class="nav-link"
:to="{name: 'items'}"
>
{{ $t('inventory') }}
</router-link><div class="topbar-dropdown">
</router-link>
<div class="topbar-dropdown">
<router-link
class="topbar-dropdown-item dropdown-item"
:to="{name: 'items'}"
exact="exact"
>
{{ $t('items') }}
</router-link><router-link
</router-link>
<router-link
class="topbar-dropdown-item dropdown-item"
:to="{name: 'equipment'}"
>
{{ $t('equipment') }}
</router-link><router-link
</router-link>
<router-link
class="topbar-dropdown-item dropdown-item"
:to="{name: 'stable'}"
>
{{ $t('stable') }}
</router-link>
</div>
</li><li
</li>
<li
class="topbar-item droppable"
:class="{'active': $route.path.startsWith('/shop'), 'down': $route.path.startsWith('/shop') && this.isDesktop()}"
>
@ -91,36 +110,42 @@
class="chevron-icon-down"
v-html="icons.chevronDown"
></div>
</div><router-link
</div>
<router-link
class="nav-link"
:to="{name: 'market'}"
>
{{ $t('shops') }}
</router-link><div class="topbar-dropdown">
</router-link>
<div class="topbar-dropdown">
<router-link
class="topbar-dropdown-item dropdown-item"
:to="{name: 'market'}"
exact="exact"
>
{{ $t('market') }}
</router-link><router-link
</router-link>
<router-link
class="topbar-dropdown-item dropdown-item"
:to="{name: 'quests'}"
>
{{ $t('quests') }}
</router-link><router-link
</router-link>
<router-link
class="topbar-dropdown-item dropdown-item"
:to="{name: 'seasonal'}"
>
{{ $t('titleSeasonalShop') }}
</router-link><router-link
</router-link>
<router-link
class="topbar-dropdown-item dropdown-item"
:to="{name: 'time'}"
>
{{ $t('titleTimeTravelers') }}
</router-link>
</div>
</li><b-nav-item
</li>
<b-nav-item
v-if="this.user.party._id"
class="topbar-item"
:class="{'active': $route.path.startsWith('/party')}"
@ -128,14 +153,16 @@
:to="{name: 'party'}"
>
{{ $t('party') }}
</b-nav-item><b-nav-item
</b-nav-item>
<b-nav-item
v-if="!this.user.party._id"
class="topbar-item"
:class="{'active': $route.path.startsWith('/party')}"
@click="openPartyModal()"
>
{{ $t('party') }}
</b-nav-item><li
</b-nav-item>
<li
class="topbar-item droppable"
:class="{'active': $route.path.startsWith('/groups'), 'down': $route.path.startsWith('/groups') && this.isDesktop()}"
>
@ -148,30 +175,35 @@
class="chevron-icon-down"
v-html="icons.chevronDown"
></div>
</div><router-link
</div>
<router-link
class="nav-link"
:to="{name: 'tavern'}"
>
{{ $t('guilds') }}
</router-link><div class="topbar-dropdown">
</router-link>
<div class="topbar-dropdown">
<router-link
class="topbar-dropdown-item dropdown-item"
:to="{name: 'tavern'}"
>
{{ $t('tavern') }}
</router-link><router-link
</router-link>
<router-link
class="topbar-dropdown-item dropdown-item"
:to="{name: 'myGuilds'}"
>
{{ $t('myGuilds') }}
</router-link><router-link
</router-link>
<router-link
class="topbar-dropdown-item dropdown-item"
:to="{name: 'guildsDiscovery'}"
>
{{ $t('guildsDiscovery') }}
</router-link>
</div>
</li><li
</li>
<li
class="topbar-item droppable"
:class="{'active': $route.path.startsWith('/group-plans'), 'down': $route.path.startsWith('/group-plans') && this.isDesktop()}"
>
@ -185,12 +217,14 @@
class="chevron-icon-down"
v-html="icons.chevronDown"
></div>
</div><router-link
</div>
<router-link
class="nav-link"
:to="{name: 'groupPlan'}"
>
{{ $t('group') }}
</router-link><div class="topbar-dropdown">
</router-link>
<div class="topbar-dropdown">
<router-link
v-for="group in groupPlans"
:key="group._id"
@ -200,7 +234,8 @@
{{ group.name }}
</router-link>
</div>
</li><li
</li>
<li
class="topbar-item droppable"
:class="{'active': $route.path.startsWith('/challenges'), 'down': $route.path.startsWith('/challenges') && this.isDesktop()}"
>
@ -213,25 +248,29 @@
class="chevron-icon-down"
v-html="icons.chevronDown"
></div>
</div><router-link
</div>
<router-link
class="nav-link"
:to="{name: 'myChallenges'}"
>
{{ $t('challenges') }}
</router-link><div class="topbar-dropdown">
</router-link>
<div class="topbar-dropdown">
<router-link
class="topbar-dropdown-item dropdown-item"
:to="{name: 'myChallenges'}"
>
{{ $t('myChallenges') }}
</router-link><router-link
</router-link>
<router-link
class="topbar-dropdown-item dropdown-item"
:to="{name: 'findChallenges'}"
>
{{ $t('findChallenges') }}
</router-link>
</div>
</li><li
</li>
<li
class="topbar-item droppable"
:class="{'active': $route.path.startsWith('/help'), 'down': $route.path.startsWith('/help') && this.isDesktop()}"
>
@ -244,51 +283,61 @@
class="chevron-icon-down"
v-html="icons.chevronDown"
></div>
</div><router-link
</div>
<router-link
class="nav-link"
:to="{name: 'faq'}"
>
{{ $t('help') }}
</router-link><div class="topbar-dropdown">
</router-link>
<div class="topbar-dropdown">
<router-link
class="topbar-dropdown-item dropdown-item"
:to="{name: 'faq'}"
>
{{ $t('faq') }}
</router-link><router-link
</router-link>
<router-link
class="topbar-dropdown-item dropdown-item"
:to="{name: 'overview'}"
>
{{ $t('overview') }}
</router-link><router-link
</router-link>
<router-link
class="topbar-dropdown-item dropdown-item"
to="/groups/guild/a29da26b-37de-4a71-b0c6-48e72a900dac"
>
{{ $t('reportBug') }}
</router-link><router-link
</router-link>
<router-link
class="topbar-dropdown-item dropdown-item"
to="/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a"
>
{{ $t('askAQuestion') }}
</router-link><a
</router-link>
<a
class="topbar-dropdown-item dropdown-item"
href="https://trello.com/c/odmhIqyW/440-read-first-table-of-contents"
target="_blank"
>{{ $t('requestAF') }}</a><a
>{{ $t('requestAF') }}</a>
<a
class="topbar-dropdown-item dropdown-item"
href="http://habitica.fandom.com/wiki/Contributing_to_Habitica"
target="_blank"
>{{ $t('contributing') }}</a><a
>{{ $t('contributing') }}</a>
<a
class="topbar-dropdown-item dropdown-item"
href="http://habitica.fandom.com/wiki/Habitica_Wiki"
target="_blank"
>{{ $t('wiki') }}</a><a
>{{ $t('wiki') }}</a>
<a
class="topbar-dropdown-item dropdown-item"
@click="modForm()"
>{{ $t('contactForm') }}</a>
</div>
</li>
</b-navbar-nav><div class="currency-tray form-inline">
</b-navbar-nav>
<div class="currency-tray form-inline">
<div
v-if="userHourglasses > 0"
class="item-with-icon"
@ -297,8 +346,10 @@
v-b-tooltip.hover.bottom="$t('mysticHourglassesTooltip')"
class="top-menu-icon svg-icon"
v-html="icons.hourglasses"
></div><span>{{ userHourglasses }}</span>
</div><div class="item-with-icon">
></div>
<span>{{ userHourglasses }}</span>
</div>
<div class="item-with-icon">
<a
v-b-tooltip.hover.bottom="$t('gems')"
class="top-menu-icon svg-icon gem"
@ -306,28 +357,36 @@
href="#buy-gems"
@click.prevent="showBuyGemsModal('gems')"
v-html="icons.gem"
></a><span>{{ userGems }}</span>
</div><div class="item-with-icon gold">
></a>
<span>{{ userGems }}</span>
</div>
<div class="item-with-icon gold">
<div
v-b-tooltip.hover.bottom="$t('gold')"
class="top-menu-icon svg-icon"
:aria-label="$t('gold')"
v-html="icons.gold"
></div><span>{{ Math.floor(user.stats.gp * 100) / 100 }}</span>
></div>
<span>{{ Math.floor(user.stats.gp * 100) / 100 }}</span>
</div>
</div><div class="form-inline desktop-only">
</div>
<div class="form-inline desktop-only">
<a
class="item-with-icon"
v-b-tooltip.hover.bottom="$t('sync')"
class="item-with-icon"
role="link"
:aria-label="$t('sync')"
tabindex="0"
@click="sync"
@keyup.enter="sync"
><div
class="top-menu-icon svg-icon"
v-html="icons.sync"
></div></a><notification-menu class="item-with-icon" /><user-dropdown class="item-with-icon" />
>
<div
class="top-menu-icon svg-icon"
v-html="icons.sync"
></div>
</a>
<notification-menu class="item-with-icon" />
<user-dropdown class="item-with-icon" />
</div>
</b-collapse>
</b-navbar>

View file

@ -9,9 +9,11 @@
:class="{'is-not-bailey': isNotBailey}"
>
<slot name="icon"></slot>
</div><div class="notification-content">
</div>
<div class="notification-content">
<slot name="content"></slot>
</div><div
</div>
<div
class="notification-remove"
@click.stop="canRemove ? remove() : null"
>

View file

@ -9,7 +9,8 @@
<div
slot="content"
v-html="$t('cardReceived', {card: cardString})"
></div><div
></div>
<div
slot="icon"
:class="cardClass"
></div>

View file

@ -6,13 +6,15 @@
@click="action"
>
<div slot="content">
<div v-html="notification.data.message"></div><div class="notifications-buttons">
<div v-html="notification.data.message"></div>
<div class="notifications-buttons">
<div
class="btn btn-small btn-success"
@click.stop="approve()"
>
{{ $t('approve') }}
</div><div
</div>
<div
class="btn btn-small btn-warning"
@click.stop="needsWork()"
>

View file

@ -6,13 +6,15 @@
@click="action"
>
<div slot="content">
<div v-html="textString"></div><div class="notifications-buttons">
<div v-html="textString"></div>
<div class="notifications-buttons">
<div
class="btn btn-small btn-success"
@click.stop="accept()"
>
{{ $t('accept') }}
</div><div
</div>
<div
class="btn btn-small btn-danger"
@click.stop="reject()"
>

View file

@ -1,5 +1,6 @@
<template>
<!-- Read automatically from the group page mounted hook--><base-notification
<!-- Read automatically from the group page mounted hook-->
<base-notification
:can-remove="canRemove"
:has-icon="false"
:notification="notification"

View file

@ -7,7 +7,8 @@
@click="action"
>
<div slot="content">
<span v-html="$t('userSentMessage', {user: notification.data.sender.name})"></span><div class="notification-small notification-ellipses">
<span v-html="$t('userSentMessage', {user: notification.data.sender.name})"></span>
<div class="notification-small notification-ellipses">
{{ notification.data.excerpt }}
</div>
</div>

View file

@ -9,7 +9,8 @@
<div
slot="content"
v-html="$t('newSubscriberItem')"
></div><div
></div>
<div
slot="icon"
:class="mysteryClass"
></div>

View file

@ -9,8 +9,10 @@
<div slot="content">
<div class="notification-bold-purple">
{{ $t('newBaileyUpdate') }}
</div><div>{{ notification.data.title }}</div>
</div><div
</div>
<div>{{ notification.data.title }}</div>
</div>
<div
slot="icon"
class="npc_bailey"
></div>

View file

@ -5,13 +5,15 @@
:notification="notification"
>
<div slot="content">
<div v-html="$t('invitedToParty', {party: notification.data.name})"></div><div class="notifications-buttons">
<div v-html="$t('invitedToParty', {party: notification.data.name})"></div>
<div class="notifications-buttons">
<div
class="btn btn-small btn-success"
@click.stop="accept()"
>
{{ $t('accept') }}
</div><div
</div>
<div
class="btn btn-small btn-danger"
@click.stop="reject()"
>

View file

@ -9,16 +9,19 @@
<div
class="message"
v-html="$t('invitedToQuest', {quest: questName})"
></div><quest-info
></div>
<quest-info
:quest="questData"
:small-version="true"
/><div class="notifications-buttons">
/>
<div class="notifications-buttons">
<div
class="btn btn-small btn-success"
@click.stop="questAccept()"
>
{{ $t('accept') }}
</div><div
</div>
<div
class="btn btn-small btn-danger"
@click.stop="questReject()"
>

View file

@ -9,7 +9,8 @@
<div
slot="content"
v-html="$t('unallocatedStatsPoints', {points: notification.data.points})"
></div><div
></div>
<div
slot="icon"
class="svg-icon"
v-html="icons.sparkles"

View file

@ -12,9 +12,14 @@
>
<div class="username-notification-title">
{{ $t('setUsernameNotificationTitle') }}
</div><div>{{ $t('setUsernameNotificationBody') }}</div><div class="current-username-container mx-auto">
<label class="font-weight-bold">{{ $t('currentUsername') + " " }}</label><label>@</label><label>{{ user.auth.local.username }}</label>
</div><div class="notifications-buttons">
</div>
<div>{{ $t('setUsernameNotificationBody') }}</div>
<div class="current-username-container mx-auto">
<label class="font-weight-bold">{{ $t('currentUsername') + " " }}</label>
<label>@</label>
<label>{{ user.auth.local.username }}</label>
</div>
<div class="notifications-buttons">
<div
class="btn btn-small btn-secondary"
@click.stop="changeUsername()"

View file

@ -13,27 +13,37 @@
<div class="text">
<div class="title">
{{ $t('worldBoss') }}
</div><div class="sub-title">
</div>
<div class="sub-title">
{{ $t('questDysheartenerText') }}
</div>
</div><div class="d-flex align-items-center justify-content-left">
<div><div class="left-hearts"></div></div><div class="float-right">
<div class="quest_dysheartener_notification"></div><div class="phobia_dysheartener_notification"></div>
</div>
<div class="d-flex align-items-center justify-content-left">
<div>
<div class="left-hearts"></div>
</div>
</div><div class="health-bar d-flex align-items-center justify-content-center">
<div class="float-right">
<div class="quest_dysheartener_notification"></div>
<div class="phobia_dysheartener_notification"></div>
</div>
</div>
<div class="health-bar d-flex align-items-center justify-content-center">
<div
class="svg-icon"
v-html="icons.health"
></div><div class="boss-health-wrap">
></div>
<div class="boss-health-wrap">
<div
class="boss-health-bar"
:style="{width: (parseInt(bossHp) / questData.boss.hp) * 100 + '%'}"
></div>
</div><div class="pending-damage">
</div>
<div class="pending-damage">
<div
class="svg-icon"
v-html="icons.sword"
></div><span>+{{ parseInt(user.party.quest.progress.up) || 0 }}</span>
></div>
<span>+{{ parseInt(user.party.quest.progress.up) || 0 }}</span>
</div>
</div>
</div>

View file

@ -15,40 +15,48 @@
:count="notificationsCount"
:top="true"
:gray="!hasUnseenNotifications"
/><div
/>
<div
class="top-menu-icon svg-icon notifications"
v-html="icons.notifications"
></div>
</div>
</div><div slot="dropdown-content">
</div>
<div slot="dropdown-content">
<div
class="dropdown-item dropdown-separated d-flex justify-content-between dropdown-inactive align-items-center"
@click.stop=""
@click.stop
>
<h4
v-once
class="dropdown-title"
>
{{ $t('notifications') }}
</h4><a
</h4>
<a
class="small-link standard-link"
:disabled="notificationsCount === 0"
@click="dismissAll"
>{{ $t('dismissAll') }}</a>
</div><world-boss /><component
</div>
<world-boss />
<component
:is="notification.type"
v-for="notification in notifications"
:key="notification.id"
:notification="notification"
:can-remove="!isActionable(notification)"
/><div
/>
<div
v-if="notificationsCount === 0"
class="dropdown-item dropdown-separated d-flex justify-content-center dropdown-inactive no-notifications flex-column"
>
<div
class="svg-icon"
v-html="icons.success"
></div><h2>{{ $t('noNotifications') }}</h2><p>{{ $t('noNotificationsText') }}</p>
></div>
<h2>{{ $t('noNotifications') }}</h2>
<p>{{ $t('noNotificationsText') }}</p>
</div>
</div>
</menu-dropdown>

View file

@ -12,58 +12,77 @@
v-if="user.inbox.newMessages > 0"
:count="user.inbox.newMessages"
:top="true"
/><div
/>
<div
class="top-menu-icon svg-icon user"
v-html="icons.user"
></div>
</div>
</div><div
</div>
<div
slot="dropdown-content"
class="user-dropdown"
>
<a
class="dropdown-item edit-avatar dropdown-separated"
@click="showAvatar('body', 'size')"
><h3>{{ user.profile.name }}</h3><span class="small-text">{{ $t('editAvatar') }}</span></a><a
>
<h3>{{ user.profile.name }}</h3>
<span class="small-text">{{ $t('editAvatar') }}</span>
</a>
<a
class="nav-link dropdown-item dropdown-separated d-flex justify-content-between align-items-center"
@click.prevent="showInbox()"
><div>{{ $t('messages') }}</div><message-count
v-if="user.inbox.newMessages > 0"
:count="user.inbox.newMessages"
/></a><a
>
<div>{{ $t('messages') }}</div>
<message-count
v-if="user.inbox.newMessages > 0"
:count="user.inbox.newMessages"
/>
</a>
<a
class="dropdown-item"
@click="showAvatar('backgrounds', '2019')"
>{{ $t('backgrounds') }}</a><a
>{{ $t('backgrounds') }}</a>
<a
class="dropdown-item"
@click="showProfile('stats')"
>{{ $t('stats') }}</a><a
>{{ $t('stats') }}</a>
<a
class="dropdown-item"
@click="showProfile('achievements')"
>{{ $t('achievements') }}</a><a
>{{ $t('achievements') }}</a>
<a
class="dropdown-item dropdown-separated"
@click="showProfile('profile')"
>{{ $t('profile') }}</a><router-link
>{{ $t('profile') }}</a>
<router-link
class="dropdown-item"
:to="{name: 'site'}"
>
{{ $t('settings') }}
</router-link><router-link
</router-link>
<router-link
class="dropdown-item dropdown-separated"
:to="{name: 'subscription'}"
>
{{ $t('subscription') }}
</router-link><a
</router-link>
<a
class="nav-link dropdown-item dropdown-separated"
@click.prevent="logout()"
>{{ $t('logout') }}</a><li
>{{ $t('logout') }}</a>
<li
v-if="!this.user.purchased.plan.customerId"
@click="showBuyGemsModal('subscribe')"
>
<div class="dropdown-item text-center">
<h3 class="purple">
{{ $t('needMoreGems') }}
</h3><span class="small-text">{{ $t('needMoreGemsInfo') }}</span>
</div><div class="learn-background py-2 text-center">
</h3>
<span class="small-text">{{ $t('needMoreGemsInfo') }}</span>
</div>
<div class="learn-background py-2 text-center">
<button class="btn btn-primary btn-lg learn-button">
{{ $t('learnMore') }}
</button>

View file

@ -9,19 +9,24 @@
<span
class="popover-content-attr-cell key"
:class="{'hasValue': hasSumValue(attr) }"
>{{ `${$t(attr)}: ` }}</span><span
>{{ `${$t(attr)}: ` }}</span>
<span
class="popover-content-attr-cell label value"
:class="{'green': hasSumValue(attr) }"
>{{ `${stats.sum[attr]}` }}</span><span
>{{ `${stats.sum[attr]}` }}</span>
<span
class="popover-content-attr-cell label bold"
:class="{'hasValue': hasGearValue(attr) }"
>{{ $t('gear') }}:</span><span
>{{ $t('gear') }}:</span>
<span
class="popover-content-attr-cell label"
:class="{'hasValue': hasGearValue(attr) }"
>{{ stats.gear[attr] }}</span><span
>{{ stats.gear[attr] }}</span>
<span
class="popover-content-attr-cell label bold"
:class="{'hasValue': hasClassBonus(attr) }"
>{{ $t('classEquipBonus') }}:</span><span
>{{ $t('classEquipBonus') }}:</span>
<span
class="popover-content-attr-cell label"
:class="{'hasValue': hasClassBonus(attr) }"
>{{ `${stats.classBonus[attr]}` }}</span>

View file

@ -3,23 +3,29 @@
<div v-if="item.locked">
<h4 class="popover-content-title">
{{ `${$t('lockedItem')}` }}
</h4><div
</h4>
<div
v-if="item.specialClass"
class="popover-content-text"
>
{{ `${$t('classLockedItem')}` }}
</div><div
</div>
<div
v-else
class="popover-content-text"
>
{{ `${$t('tierLockedItem')}` }}
</div><p></p>
</div><div v-else>
</div>
<p></p>
</div>
<div v-else>
<h4 class="popover-content-title">
{{ itemText }}
</h4><div class="popover-content-text">
</h4>
<div class="popover-content-text">
{{ itemNotes }}
</div><attributesGrid
</div>
<attributesGrid
:user="user"
:item="item"
/>

View file

@ -13,7 +13,8 @@
@click="hideDialog()"
v-html="icons.close"
></span>
</div><div
</div>
<div
v-if="item != null"
class="content"
>
@ -25,33 +26,42 @@
:override-avatar-gear="memberOverrideAvatarGear(item)"
:sprites-margin="'0px auto auto -1px'"
:show-visual-buffs="false"
/><h4 class="title">
/>
<h4 class="title">
{{ itemText }}
</h4><div
</h4>
<div
class="text"
v-html="itemNotes"
></div><span
></div>
<span
v-if="showClassTag"
class="classTag"
><span
class="svg-icon inline icon-24"
v-html="icons[itemClass]"
></span><span
class="className textCondensed"
:class="itemClass"
>{{ getClassName(itemClass) }}</span></span><attributesGrid
>
<span
class="svg-icon inline icon-24"
v-html="icons[itemClass]"
></span>
<span
class="className textCondensed"
:class="itemClass"
>{{ getClassName(itemClass) }}</span>
</span>
<attributesGrid
v-if="attributesGridVisible"
class="attributesGrid"
:user="user"
:item="item"
/><button
/>
<button
class="btn btn-primary"
@click="equipItem()"
>
{{ $t(isEquipped ? 'unequip' : 'equip') }}
</button>
</div>
</div><div
</div>
<div
slot="modal-footer"
class="clearfix"
></div>

View file

@ -8,10 +8,13 @@
type="text"
:placeholder="$t('search')"
>
</div><div class="form">
</div>
<div class="form">
<h2 v-once>
{{ $t('filter') }}
</h2><h3>{{ this.groupBy === 'type' ? $t('equipmentType') : $t('class') }}</h3><div class="form-group">
</h2>
<h3>{{ this.groupBy === 'type' ? $t('equipmentType') : $t('class') }}</h3>
<div class="form-group">
<div
v-for="group in itemsGroups"
:key="group.key"
@ -23,7 +26,8 @@
v-model="viewOptions[group.key].selected"
class="custom-control-input"
type="checkbox"
><label
>
<label
v-once
class="custom-control-label"
:for="groupBy + group.key"
@ -32,15 +36,18 @@
</div>
</div>
</div>
</div><div class="standard-page">
</div>
<div class="standard-page">
<div class="clearfix">
<h1
v-once
class="float-left mb-4 page-header"
>
{{ $t('equipment') }}
</h1><div class="float-right">
<span class="dropdown-label">{{ $t('sortBy') }}</span><b-dropdown
</h1>
<div class="float-right">
<span class="dropdown-label">{{ $t('sortBy') }}</span>
<b-dropdown
:text="$t(selectedSortGearBy)"
right="right"
>
@ -52,7 +59,9 @@
>
{{ $t(sort) }}
</b-dropdown-item>
</b-dropdown><span class="dropdown-label">{{ $t('groupBy2') }}</span><b-dropdown
</b-dropdown>
<span class="dropdown-label">{{ $t('groupBy2') }}</span>
<b-dropdown
:text="$t(groupBy === 'type' ? 'equipmentType' : 'class')"
right="right"
>
@ -61,7 +70,8 @@
@click="groupBy = 'type'"
>
{{ $t('equipmentType') }}
</b-dropdown-item><b-dropdown-item
</b-dropdown-item>
<b-dropdown-item
:active="groupBy === 'class'"
@click="groupBy = 'class'"
>
@ -69,7 +79,8 @@
</b-dropdown-item>
</b-dropdown>
</div>
</div><drawer
</div>
<drawer
:title="$t('equipment')"
:error-message="(costumeMode && !user.preferences.costume) ? $t('costumeDisabled') : null"
:open-status="openStatus"
@ -83,14 +94,16 @@
:class="{'drawer-tab-text-active': !costumeMode}"
@click="selectDrawerTab('equipment')"
>{{ $t('equipment') }}</a>
</div><div class="clearfix">
</div>
<div class="clearfix">
<div class="drawer-tab float-left">
<a
class="drawer-tab-text"
:class="{'drawer-tab-text-active': costumeMode}"
@click="selectDrawerTab('costume')"
>{{ $t('costume') }}</a>
</div><toggle-switch
</div>
<toggle-switch
class="float-right align-with-tab"
:label="$t(costumeMode ? 'useCostume' : 'autoEquipBattleGear')"
:checked="user.preferences[drawerPreference]"
@ -99,7 +112,8 @@
/>
</div>
</div>
</div><div
</div>
<div
slot="drawer-slider"
class="items items-one-line"
>
@ -113,14 +127,15 @@
:label="label"
:popover-position="'top'"
:show-popover="flatGear[activeItems[group]] && Boolean(flatGear[activeItems[group]].text)"
@click="equipItem(flatGear[activeItems[group]])"
@click="equipItem(flatGear[activeItems[group]])"
>
<template
slot="popoverContent"
slot-scope="context"
>
<equipmentAttributesPopover :item="context.item" />
</template><template
</template>
<template
slot="itemBadge"
slot-scope="context"
>
@ -132,7 +147,8 @@
</template>
</item>
</div>
</drawer><div
</drawer>
<div
v-for="group in itemsGroups"
v-if="!anyFilterSelected || viewOptions[group.key].selected"
:key="group.key"
@ -140,8 +156,11 @@
>
<h2 class="mb-3">
{{ group.label }}
<span class="badge badge-pill badge-default">{{ items[group.key].length }}</span>
</h2><itemRows
<span
class="badge badge-pill badge-default"
>{{ items[group.key].length }}</span>
</h2>
<itemRows
:items="sortItems(items[group.key], selectedSortGearBy)"
:item-width="94"
:item-margin="24"
@ -168,7 +187,8 @@
:show="!costumeMode || user.preferences.costume"
@click="equipItem(context.item)"
/>
</template><template
</template>
<template
slot="popoverContent"
slot-scope="context"
>
@ -178,7 +198,8 @@
</template>
</itemRows>
</div>
</div><equipGearModal
</div>
<equipGearModal
:item="gearToEquip"
:costume-mode="costumeMode"
:is-equipped="gearToEquip == null ? false : activeItems[gearToEquip.type] === gearToEquip.key"

View file

@ -9,13 +9,19 @@
<div
class="pull-right"
:class="`inventory_special_${cardType}`"
></div><h4>{{ $t(cardType + 'Card') }}</h4>
</div><div class="modal-body">
></div>
<h4>{{ $t(cardType + 'Card') }}</h4>
</div>
<div class="modal-body">
<div style="padding:10px">
<p>{{ $t('toAndFromCard', { toName: user.profile.name, fromName}) }}</p><hr><div v-markdown="cardMessage"></div>
<p>{{ $t('toAndFromCard', { toName: user.profile.name, fromName}) }}</p>
<hr>
<div v-markdown="cardMessage"></div>
</div>
</div><div class="modal-footer">
<small class="pull-left">{{ $t(cardType + 'CardExplanation') }}</small><button
</div>
<div class="modal-footer">
<small class="pull-left">{{ $t(cardType + 'CardExplanation') }}</small>
<button
class="btn btn-secondary"
@click="readCard()"
>

View file

@ -12,12 +12,15 @@
type="text"
:placeholder="$t('search')"
>
</div><div class="form">
</div>
<div class="form">
<h2 v-once>
{{ $t('filter') }}
</h2><h3 v-once>
</h2>
<h3 v-once>
{{ $t('equipmentType') }}
</h3><div class="form-group">
</h3>
<div class="form-group">
<div
v-for="group in groups"
:key="group.key"
@ -29,7 +32,8 @@
v-model="group.selected"
class="custom-control-input"
type="checkbox"
><label
>
<label
v-once
class="custom-control-label"
:for="group.key"
@ -38,15 +42,18 @@
</div>
</div>
</div>
</div><div class="standard-page">
</div>
<div class="standard-page">
<div class="clearfix">
<h1
v-once
class="float-left mb-4 page-header"
>
{{ $t('items') }}
</h1><div class="float-right">
<span class="dropdown-label">{{ $t('sortBy') }}</span><b-dropdown
</h1>
<div class="float-right">
<span class="dropdown-label">{{ $t('sortBy') }}</span>
<b-dropdown
:text="$t(sortBy)"
right="right"
>
@ -55,7 +62,8 @@
@click="sortBy = 'quantity'"
>
{{ $t('quantity') }}
</b-dropdown-item><b-dropdown-item
</b-dropdown-item>
<b-dropdown-item
:active="sortBy === 'AZ'"
@click="sortBy = 'AZ'"
>
@ -63,7 +71,8 @@
</b-dropdown-item>
</b-dropdown>
</div>
</div><div
</div>
<div
v-for="group in groups"
v-if="!anyFilterSelected || group.selected"
:key="group.key"
@ -74,7 +83,8 @@
v-if="group.key != 'special'"
class="badge badge-pill badge-default"
>{{ group.quantity }}</span>
</h2><itemRows
</h2>
<itemRows
v-if="group.key === 'eggs'"
:items="items[group.key]"
:item-width="94"
@ -95,7 +105,9 @@
:active="currentDraggingEgg == context.item"
:highlight-border="isHatchable(currentDraggingPotion, context.item)"
@itemDragOver="onDragOver($event, context.item)"
@itemDropped="onDrop($event, context.item)" @itemDragLeave="onDragLeave()" @click="onEggClicked($event, context.item)"
@itemDropped="onDrop($event, context.item)"
@itemDragLeave="onDragLeave()"
@click="onEggClicked($event, context.item)"
>
<template
slot="popoverContent"
@ -103,13 +115,15 @@
>
<h4 class="popover-content-title">
{{ context.item.text }}
</h4><div
</h4>
<div
v-if="currentDraggingPotion == null"
class="popover-content-text"
>
{{ context.item.notes }}
</div>
</template><template
</template>
<template
slot="itemBadge"
slot-scope="context"
>
@ -120,7 +134,8 @@
</template>
</item>
</template>
</itemRows><itemRows
</itemRows>
<itemRows
v-else-if="group.key === 'hatchingPotions'"
:items="items[group.key]"
:item-width="94"
@ -141,7 +156,8 @@
:active="currentDraggingPotion == context.item"
:highlight-border="isHatchable(context.item, currentDraggingEgg)"
@itemDragEnd="onDragEnd($event, context.item)"
@itemDragStart="onDragStart($event, context.item)" @click="onPotionClicked($event, context.item)"
@itemDragStart="onDragStart($event, context.item)"
@click="onPotionClicked($event, context.item)"
>
<template
slot="popoverContent"
@ -149,10 +165,12 @@
>
<h4 class="popover-content-title">
{{ context.item.text }}
</h4><div class="popover-content-text">
</h4>
<div class="popover-content-text">
{{ context.item.notes }}
</div>
</template><template
</template>
<template
slot="itemBadge"
slot-scope="context"
>
@ -163,7 +181,8 @@
</template>
</item>
</template>
</itemRows><itemRows
</itemRows>
<itemRows
v-else
:items="items[group.key]"
:item-width="94"
@ -192,16 +211,20 @@
>
<h4 class="popover-content-title">
{{ context.item.text }}
</h4><questInfo :quest="context.item" />
</div><div v-else>
</h4>
<questInfo :quest="context.item" />
</div>
<div v-else>
<h4 class="popover-content-title">
{{ context.item.text }}
</h4><div
</h4>
<div
class="popover-content-text"
v-html="context.item.notes"
></div>
</div>
</template><template
</template>
<template
slot="itemBadge"
slot-scope="context"
>
@ -214,7 +237,9 @@
</template>
</itemRows>
</div>
</div><hatchedPetDialog /><div
</div>
<hatchedPetDialog />
<div
ref="draggingEggInfo"
class="eggInfo"
>
@ -222,13 +247,15 @@
<div
class="potion-icon"
:class="'Pet_Egg_'+currentDraggingEgg.key"
></div><div class="popover">
></div>
<div class="popover">
<div class="popover-content">
{{ $t('dragThisEgg', {eggName: currentDraggingEgg.text }) }}
</div>
</div>
</div>
</div><div
</div>
<div
v-if="eggClickMode"
ref="clickEggInfo"
class="eggInfo mouse"
@ -237,13 +264,17 @@
<div
class="potion-icon"
:class="'Pet_Egg_'+currentDraggingEgg.key"
></div><div class="popover">
<div class="popover-content">
></div>
<div class="popover">
<div
class="popover-content"
>
{{ $t('clickOnPotionToHatch', {eggName: currentDraggingEgg.text }) }}
</div>
</div>
</div>
</div><div
</div>
<div
ref="draggingPotionInfo"
class="hatchingPotionInfo"
>
@ -251,13 +282,17 @@
<div
class="potion-icon"
:class="'Pet_HatchingPotion_'+currentDraggingPotion.key"
></div><div class="popover">
<div class="popover-content">
></div>
<div class="popover">
<div
class="popover-content"
>
{{ $t('dragThisPotion', {potionName: currentDraggingPotion.text }) }}
</div>
</div>
</div>
</div><div
</div>
<div
v-if="potionClickMode"
ref="clickPotionInfo"
class="hatchingPotionInfo mouse"
@ -266,13 +301,18 @@
<div
class="potion-icon"
:class="'Pet_HatchingPotion_'+currentDraggingPotion.key"
></div><div class="popover">
<div class="popover-content">
></div>
<div class="popover">
<div
class="popover-content"
>
{{ $t('clickOnEggToHatch', {potionName: currentDraggingPotion.text }) }}
</div>
</div>
</div>
</div><startQuestModal :group="user.party" /><cards-modal :card-options="cardOptions" />
</div>
<startQuestModal :group="user.party" />
<cards-modal :card-options="cardOptions" />
</div>
</template>

View file

@ -12,7 +12,8 @@
<countBadge
:show="true"
:count="itemCount"
/><span
/>
<span
v-drag.food="item.key"
class="item-content"
:class="'Pet_Food_'+item.key"
@ -20,14 +21,16 @@
@itemDragStart="dragstart($event)"
></span>
</div>
</div><b-popover
</div>
<b-popover
:target="itemId"
triggers="hover"
placement="top"
>
<h4 class="popover-content-title">
{{ itemName || item.text() }}
</h4><div
</h4>
<div
class="popover-content-text"
v-html="item.notes()"
></div>

View file

@ -12,23 +12,28 @@
class="dialog-header title"
>
{{ $t('hatchedPetGeneric') }}
</div><div class="inner-content">
</div>
<div class="inner-content">
<div class="pet-background">
<div :class="pet.class"></div>
</div><h4 class="title">
</div>
<h4 class="title">
{{ pet.name }}
</h4><div
</h4>
<div
v-if="!hideText"
v-markdown="$t('hatchedPetHowToUse', { stableUrl: '/inventory/stable' })"
class="text"
></div><button
></div>
<button
class="btn btn-primary"
@click="close()"
>
{{ $t('onward') }}
</button>
</div>
</div><div
</div>
<div
slot="modal-footer"
class="clearfix"
></div>

View file

@ -7,27 +7,33 @@
<div class="potionEggGroup">
<div class="potionEggBackground">
<div :class="'Pet_HatchingPotion_'+hatchablePet.potionKey"></div>
</div><div class="potionEggBackground">
</div>
<div class="potionEggBackground">
<div :class="'Pet_Egg_'+hatchablePet.eggKey"></div>
</div>
</div><h4 class="title">
</div>
<h4 class="title">
{{ hatchablePet.name }}
</h4><div
</h4>
<div
class="text"
v-html="$t('hatchDialogText', { potionName: hatchablePet.potionName, eggName: hatchablePet.eggName, petName: hatchablePet.name })"
></div>
</div><span
</div>
<span
slot="modal-header"
class="svg-icon icon-10"
@click="closeHatchPetDialog()"
v-html="icons.close"
></span><div slot="modal-footer">
></span>
<div slot="modal-footer">
<button
class="btn btn-primary"
@click="hatchPet(hatchablePet)"
>
{{ $t('hatch') }}
</button><button
</button>
<button
class="btn btn-secondary btn-flat"
@click="closeHatchPetDialog()"
>

View file

@ -9,7 +9,8 @@
<div
id="npmMattStable"
class="npc_matt"
></div><b-popover
></div>
<b-popover
triggers="hover"
placement="right"
target="npmMattStable"
@ -19,26 +20,31 @@
class="popover-content-title"
>
{{ $t('mattBoch') }}
</h4><div
</h4>
<div
v-once
class="popover-content-text"
>
{{ $t('mattBochText1') }}
</div>
</b-popover>
</div><div class="form-group">
</div>
<div class="form-group">
<input
v-model="searchText"
class="form-control input-search"
type="text"
:placeholder="$t('search')"
>
</div><div class="form">
</div>
<div class="form">
<h2 v-once>
{{ $t('filter') }}
</h2><h3 v-once>
</h2>
<h3 v-once>
{{ $t('pets') }}
</h3><div class="form-group">
</h3>
<div class="form-group">
<div
v-for="petGroup in petGroups"
:key="petGroup.key"
@ -51,16 +57,19 @@
class="custom-control-input"
type="checkbox"
:disabled="viewOptions[petGroup.key].animalCount == 0"
><label
>
<label
v-once
class="custom-control-label"
:for="petGroup.key"
>{{ petGroup.label }}</label>
</div>
</div>
</div><h3 v-once>
</div>
<h3 v-once>
{{ $t('mounts') }}
</h3><div class="form-group">
</h3>
<div class="form-group">
<div
v-for="mountGroup in mountGroups"
:key="mountGroup.key"
@ -73,32 +82,38 @@
class="custom-control-input"
type="checkbox"
:disabled="viewOptions[mountGroup.key].animalCount == 0"
><label
>
<label
v-once
class="custom-control-label"
:for="mountGroup.key"
>{{ mountGroup.label }}</label>
</div>
</div>
</div><div class="form-group clearfix">
</div>
<div class="form-group clearfix">
<h3 class="float-left">
{{ $t('hideMissing') }}
</h3><toggle-switch
</h3>
<toggle-switch
class="float-right"
:checked="hideMissing"
@change="updateHideMissing"
/>
</div>
</div>
</div><div class="standard-page">
</div>
<div class="standard-page">
<div class="clearfix">
<h1
v-once
class="float-left mb-4 page-header"
>
{{ $t('stable') }}
</h1><div class="float-right">
<span class="dropdown-label">{{ $t('sortBy') }}</span><b-dropdown
</h1>
<div class="float-right">
<span class="dropdown-label">{{ $t('sortBy') }}</span>
<b-dropdown
:text="$t(selectedSortBy)"
right="right"
>
@ -112,17 +127,22 @@
</b-dropdown-item>
</b-dropdown>
</div>
</div><h2 class="mb-3">
</div>
<h2 class="mb-3">
{{ $t('pets') }}
<span class="badge badge-pill badge-default">{{ countOwnedAnimals(petGroups[0], 'pet') }}</span>
</h2><div
<span
class="badge badge-pill badge-default"
>{{ countOwnedAnimals(petGroups[0], 'pet') }}</span>
</h2>
<div
v-for="(petGroup, index) in petGroups"
v-if="!anyFilterSelected || viewOptions[petGroup.key].selected"
:key="petGroup.key"
>
<h4 v-if="viewOptions[petGroup.key].animalCount !== 0">
{{ petGroup.label }}
</h4><div
</h4>
<div
v-for="(group, key, index) in pets(petGroup, hideMissing, selectedSortBy, searchTextThrottled)"
v-if="index === 0 || $_openedItemRows_isToggled(petGroup.key)"
class="pet-row d-flex"
@ -155,24 +175,30 @@
</template>
</petItem>
</div>
</div><div
</div>
<div
v-if="petGroup.key !== 'specialPets' && petGroup.key !== 'wackyPets'"
class="btn btn-flat btn-show-more"
@click="setShowMore(petGroup.key)"
>
{{ $_openedItemRows_isToggled(petGroup.key) ? $t('showLess') : $t('showMore') }}
</div>
</div><h2>
</div>
<h2>
{{ $t('mounts') }}
<span class="badge badge-pill badge-default">{{ countOwnedAnimals(mountGroups[0], 'mount') }}</span>
</h2><div
<span
class="badge badge-pill badge-default"
>{{ countOwnedAnimals(mountGroups[0], 'mount') }}</span>
</h2>
<div
v-for="mountGroup in mountGroups"
v-if="!anyFilterSelected || viewOptions[mountGroup.key].selected"
:key="mountGroup.key"
>
<h4 v-if="viewOptions[mountGroup.key].animalCount != 0">
{{ mountGroup.label }}
</h4><div
</h4>
<div
v-for="(group, key, index) in mounts(mountGroup, hideMissing, selectedSortBy, searchTextThrottled)"
v-if="index === 0 || $_openedItemRows_isToggled(mountGroup.key)"
class="pet-row d-flex"
@ -188,7 +214,10 @@
:show-popover="true"
@click="selectMount(item)"
>
<span slot="popoverContent"><h4 class="popover-content-title">{{ item.name }}</h4></span><template
<span slot="popoverContent">
<h4 class="popover-content-title">{{ item.name }}</h4>
</span>
<template
slot="itemBadge"
slot-scope="context"
>
@ -200,14 +229,16 @@
</template>
</mountItem>
</div>
</div><div
</div>
<div
v-if="mountGroup.key !== 'specialMounts'"
class="btn btn-flat btn-show-more"
@click="setShowMore(mountGroup.key)"
>
{{ $_openedItemRows_isToggled(mountGroup.key) ? $t('showLess') : $t('showMore') }}
</div>
</div><inventoryDrawer>
</div>
<inventoryDrawer>
<template
slot="item"
slot-scope="ctx"
@ -223,7 +254,9 @@
/>
</template>
</inventoryDrawer>
</div><hatchedPetDialog :hide-text="true" /><div
</div>
<hatchedPetDialog :hide-text="true" />
<div
ref="dragginFoodInfo"
class="foodInfo"
>
@ -231,13 +264,17 @@
<div
class="food-icon"
:class="'Pet_Food_'+currentDraggingFood.key"
></div><div class="popover">
<div class="popover-content">
></div>
<div class="popover">
<div
class="popover-content"
>
{{ $t('dragThisFood', {foodName: currentDraggingFood.text() }) }}
</div>
</div>
</div>
</div><div
</div>
<div
v-if="foodClickMode"
ref="clickFoodInfo"
class="foodInfo mouse"
@ -246,13 +283,19 @@
<div
class="food-icon"
:class="'Pet_Food_'+currentDraggingFood.key"
></div><div class="popover">
<div class="popover-content">
></div>
<div class="popover">
<div
class="popover-content"
>
{{ $t('clickOnPetToFeed', {foodName: currentDraggingFood.text() }) }}
</div>
</div>
</div>
</div><mount-raised-modal /><welcome-modal /><hatching-modal :hatchable-pet.sync="hatchablePet" />
</div>
<mount-raised-modal />
<welcome-modal />
<hatching-modal :hatchable-pet.sync="hatchablePet" />
</div>
</template>

View file

@ -12,12 +12,14 @@
<slot
name="itemBadge"
:item="item"
></slot><span
></slot>
<span
class="item-content"
:class="itemClass()"
></span>
</div>
</div><b-popover
</div>
<b-popover
v-if="showPopover"
:target="itemId"
triggers="hover"

View file

@ -9,22 +9,26 @@
>
<div class="dialog-header title">
{{ $t('raisedPet', {pet: mount.text()}) }}
</div><div class="inner-content">
</div>
<div class="inner-content">
<div class="pet-background">
<div
class="mount"
:class="`Mount_Icon_${mount.key}`"
></div>
</div><h4 class="title">
</div>
<h4 class="title">
{{ mount.text() }}
</h4><button
</h4>
<button
class="btn btn-primary onward"
@click="close()"
>
{{ $t('onward') }}
</button>
</div>
</div><div
</div>
<div
slot="modal-footer"
class="clearfix"
></div>

View file

@ -12,7 +12,8 @@
@mouseover.native="$emit('onHover')"
@mouseout.native="$emit('onHover')"
/>
</div><div
</div>
<div
class="member-stats"
:class="{'col-8': !expanded && !isHeader}"
>
@ -20,9 +21,11 @@
<class-badge
v-if="classBadgePosition === 'next-to-name'"
:member-class="member.stats.class"
/><div class="d-flex flex-column profile-name-character">
/>
<div class="d-flex flex-column profile-name-character">
<h3 class="character-name">
{{ member.profile.name }}<div
{{ member.profile.name }}
<div
v-if="isBuffed"
v-b-tooltip.hover.bottom="$t('buffed')"
class="is-buffed"
@ -32,31 +35,37 @@
v-html="icons.buff"
></div>
</div>
</h3><div class="small-text character-level">
</h3>
<div class="small-text character-level">
<span
v-if="member.auth && member.auth.local && member.auth.local.username"
class="mr-1"
>@{{ member.auth.local.username }}</span><span
>@{{ member.auth.local.username }}</span>
<span
v-if="member.auth && member.auth.local && member.auth.local.username"
class="mr-1"
></span><span>{{ characterLevel }}</span>
></span>
<span>{{ characterLevel }}</span>
</div>
</div>
</div><stats-bar
</div>
<stats-bar
:icon="icons.health"
:value="member.stats.hp"
:max-value="MAX_HEALTH"
:tooltip="$t('health')"
progress-class="bg-health"
:condensed="condensed"
/><stats-bar
/>
<stats-bar
:icon="icons.experience"
:value="member.stats.exp"
:max-value="toNextLevel"
:tooltip="$t('experience')"
progress-class="bg-experience"
:condensed="condensed"
/><stats-bar
/>
<stats-bar
v-if="hasClass"
:icon="icons.mana"
:value="member.stats.mp"

View file

@ -7,7 +7,8 @@
v-model="searchTerm"
class="form-control"
type="text"
><b-dropdown-item
>
<b-dropdown-item
v-for="member in memberResults"
:key="member._id"
@click="selectMember(member)"

View file

@ -13,7 +13,8 @@
class="form-control"
type="text"
>
</b-dropdown-form><b-dropdown-item
</b-dropdown-form>
<b-dropdown-item
v-for="member in memberResults"
:key="member._id"
@click="selectMember(member)"

View file

@ -8,13 +8,15 @@
<div class="text-center">
<h2 class="col-12">
{{ $t('sureKick') }}
</h2><div
</h2>
<div
v-if="memberToRemove.profile"
class="col-12 removing-member"
>
{{ memberToRemove.profile.name }}
</div>
</div><div class="modal-body">
</div>
<div class="modal-body">
<textarea
v-model="removeMessage"
class="form-control"
@ -22,13 +24,15 @@
rows="5"
:placeholder="$t('optionalMessage')"
></textarea>
</div><div class="modal-footer">
</div>
<div class="modal-footer">
<button
class="pull-left btn btn-danger"
@click="confirmRemoveMember()"
>
{{ $t('yesRemove') }}
</button><button
</button>
<button
class="btn btn-secondary"
@click="close()"
>

View file

@ -8,7 +8,8 @@
>
<div class="modal-header">
<h4>Modify Inventory for {{ user.profile.name }}</h4>
</div><div class="modal-body">
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row">
<div class="col-xs-12">
@ -18,29 +19,36 @@
@click="showInv.gear = true"
>
Show Gear
</button><button
</button>
<button
class="btn btn-secondary pull-right"
ng-if="showInv.gear"
@click="showInv.gear = false"
>
Hide Gear
</button><h4>Gear</h4><div ng-if="showInv.gear">
</button>
<h4>Gear</h4>
<div ng-if="showInv.gear">
<button
class="btn btn-secondary"
@click="setAllItems('gear', true)"
>
Own All
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('gear', false)"
>
Previously Own All
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('gear', undefined)"
>
Never Own All
</button><hr><ul class="list-group">
</button>
<hr>
<ul class="list-group">
<li
v-for="item in content.gear.flat"
class="list-group-item"
@ -50,29 +58,41 @@
class="pull-left"
:class="'shop_' + item.key"
style="margin-right: 10px"
></div>{{ item.text() }}<div class="clearfix">
<label class="radio-inline"><input
type="radio"
:name="'gear-' + item.key"
ng-model="inv.gear[item.key]"
ng-value="true"
>Owned</label><label class="radio-inline"><input
type="radio"
:name="'gear-' + item.key"
ng-model="inv.gear[item.key]"
ng-value="false"
>Previously Owned</label><label class="radio-inline"><input
type="radio"
:name="'gear-' + item.key"
ng-model="inv.gear[item.key]"
ng-value="undefined"
>Never Owned</label>
></div>
{{ item.text() }}
<div class="clearfix">
<label class="radio-inline">
<input
type="radio"
:name="'gear-' + item.key"
ng-model="inv.gear[item.key]"
ng-value="true"
>Owned
</label>
<label class="radio-inline">
<input
type="radio"
:name="'gear-' + item.key"
ng-model="inv.gear[item.key]"
ng-value="false"
>Previously Owned
</label>
<label class="radio-inline">
<input
type="radio"
:name="'gear-' + item.key"
ng-model="inv.gear[item.key]"
ng-value="undefined"
>Never Owned
</label>
</div>
</li>
</ul>
</div>
</div>
</div><hr><div class="row">
</div>
<hr>
<div class="row">
<div class="col-xs-12">
<button
class="btn btn-secondary pull-right"
@ -80,29 +100,36 @@
@click="showInv.special = true"
>
Show Special Items
</button><button
</button>
<button
class="btn btn-secondary pull-right"
ng-if="showInv.special"
@click="showInv.special = false"
>
Hide Special Items
</button><h4>Special Items</h4><div ng-if="showInv.special">
</button>
<h4>Special Items</h4>
<div ng-if="showInv.special">
<button
class="btn btn-secondary"
@click="setAllItems('special', 999)"
>
Set All to 999
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('special', 0)"
>
Set All to 0
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('special', undefined)"
>
Set All to undefined
</button><hr><ul class="list-group">
</button>
<hr>
<ul class="list-group">
<li
v-for="item in content.special"
class="list-group-item"
@ -114,7 +141,9 @@
class="pull-left"
:class="'inventory_special_' + item.key"
style="margin-right: 10px"
></div><p>{{ item.text() }}</p><input
></div>
<p>{{ item.text() }}</p>
<input
class="form-control"
type="number"
ng-model="inv.special[item.key]"
@ -124,7 +153,9 @@
</ul>
</div>
</div>
</div><hr><div class="row">
</div>
<hr>
<div class="row">
<div class="col-xs-12">
<button
class="btn btn-secondary pull-right"
@ -132,34 +163,43 @@
@click="showInv.pets = true"
>
Show Pets
</button><button
</button>
<button
class="btn btn-secondary pull-right"
ng-if="showInv.pets"
@click="showInv.pets = false"
>
Hide Pets
</button><h4>Pets</h4><div ng-if="showInv.pets">
</button>
<h4>Pets</h4>
<div ng-if="showInv.pets">
<button
class="btn btn-secondary"
@click="setAllItems('pets', 45)"
>
Set All to 45
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('pets', 0)"
>
Set All to 0
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('pets', -1)"
>
Set All to -1
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('pets', undefined)"
>
Set All to undefined
</button><hr><h5>Drop Pets</h5><ul class="list-group">
</button>
<hr>
<h5>Drop Pets</h5>
<ul class="list-group">
<li
v-for="(pet, value) in content.pets"
class="list-group-item"
@ -170,14 +210,18 @@
class="pull-left"
:class="'Pet-' + pet"
style="margin-right: 10px"
></div><p>{{ pet }}</p><input
></div>
<p>{{ pet }}</p>
<input
class="form-control"
type="number"
ng-model="inv.pets[pet]"
>
</div>
</li>
</ul><h5>Quest Pets</h5><ul class="list-group">
</ul>
<h5>Quest Pets</h5>
<ul class="list-group">
<li
v-for="(pet, value) in content.questPets"
class="list-group-item"
@ -188,14 +232,18 @@
class="pull-left"
:class="'Pet-' + pet"
style="margin-right: 10px"
></div><p>{{ pet }}</p><input
></div>
<p>{{ pet }}</p>
<input
class="form-control"
type="number"
ng-model="inv.pets[pet]"
>
</div>
</li>
</ul><h5>Special Pets</h5><ul class="list-group">
</ul>
<h5>Special Pets</h5>
<ul class="list-group">
<li
v-for="(pet, value) in content.specialPets"
class="list-group-item"
@ -206,14 +254,18 @@
class="pull-left"
:class="'Pet-' + pet"
style="margin-right: 10px"
></div><p>{{ pet }}</p><input
></div>
<p>{{ pet }}</p>
<input
class="form-control"
type="number"
ng-model="inv.pets[pet]"
>
</div>
</li>
</ul><h5>Premium Pets</h5><ul class="list-group">
</ul>
<h5>Premium Pets</h5>
<ul class="list-group">
<li
v-for="(pet, value) in content.premiumPets"
class="list-group-item"
@ -224,7 +276,9 @@
class="pull-left"
:class="'Pet-' + pet"
style="margin-right: 10px"
></div><p>{{ pet }}</p><input
></div>
<p>{{ pet }}</p>
<input
class="form-control"
type="number"
ng-model="inv.pets[pet]"
@ -234,7 +288,9 @@
</ul>
</div>
</div>
</div><hr><div class="row">
</div>
<hr>
<div class="row">
<div class="col-xs-12">
<button
class="btn btn-secondary pull-right"
@ -242,24 +298,31 @@
@click="showInv.mounts = true"
>
Show Mounts
</button><button
</button>
<button
class="btn btn-secondary pull-right"
ng-if="showInv.mounts"
@click="showInv.mounts = false"
>
Hide Mounts
</button><h4>Mounts</h4><div ng-if="showInv.mounts">
</button>
<h4>Mounts</h4>
<div ng-if="showInv.mounts">
<button
class="btn btn-secondary"
@click="setAllItems('mounts', true)"
>
Set all to Owned
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('mounts', undefined)"
>
Set all to Not Owned
</button><hr><h5>Drop Mounts</h5><ul class="list-group">
</button>
<hr>
<h5>Drop Mounts</h5>
<ul class="list-group">
<li
v-for="(mount, value) in content.mounts"
class="list-group-item"
@ -269,21 +332,30 @@
class="pull-left"
:class="'Mount_Icon_' + mount"
style="margin-right: 10px"
></div>{{ mount }}<div class="clearfix">
<label class="radio-inline"><input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="true"
>Owned</label><label class="radio-inline"><input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="undefined"
>Not Owned</label>
></div>
{{ mount }}
<div class="clearfix">
<label class="radio-inline">
<input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="true"
>Owned
</label>
<label class="radio-inline">
<input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="undefined"
>Not Owned
</label>
</div>
</li>
</ul><h5>Quest Mounts</h5><ul class="list-group">
</ul>
<h5>Quest Mounts</h5>
<ul class="list-group">
<li
v-for="(mount, value) in content.questMounts"
class="list-group-item"
@ -293,21 +365,30 @@
class="pull-left"
:class="'Mount_Icon_' + mount"
style="margin-right: 10px"
></div>{{ mount }}<div class="clearfix">
<label class="radio-inline"><input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="true"
>Owned</label><label class="radio-inline"><input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="undefined"
>Not Owned</label>
></div>
{{ mount }}
<div class="clearfix">
<label class="radio-inline">
<input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="true"
>Owned
</label>
<label class="radio-inline">
<input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="undefined"
>Not Owned
</label>
</div>
</li>
</ul><h5>Special Mounts</h5><ul class="list-group">
</ul>
<h5>Special Mounts</h5>
<ul class="list-group">
<li
v-for="(mount, value) in content.specialMounts"
class="list-group-item"
@ -317,21 +398,30 @@
class="pull-left"
:class="'Mount_Icon_' + mount"
style="margin-right: 10px"
></div>{{ mount }}<div class="clearfix">
<label class="radio-inline"><input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="true"
>Owned</label><label class="radio-inline"><input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="undefined"
>Not Owned</label>
></div>
{{ mount }}
<div class="clearfix">
<label class="radio-inline">
<input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="true"
>Owned
</label>
<label class="radio-inline">
<input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="undefined"
>Not Owned
</label>
</div>
</li>
</ul><h5>Premium Mounts</h5><ul class="list-group">
</ul>
<h5>Premium Mounts</h5>
<ul class="list-group">
<li
v-for="(mount, value) in content.premiumMounts"
class="list-group-item"
@ -341,24 +431,33 @@
class="pull-left"
:class="'Mount_Icon_' + mount"
style="margin-right: 10px"
></div>{{ mount }}<div class="clearfix">
<label class="radio-inline"><input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="true"
>Owned</label><label class="radio-inline"><input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="undefined"
>Not Owned</label>
></div>
{{ mount }}
<div class="clearfix">
<label class="radio-inline">
<input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="true"
>Owned
</label>
<label class="radio-inline">
<input
type="radio"
:name="'mounts-' + mount"
ng-model="inv.mounts[mount]"
ng-value="undefined"
>Not Owned
</label>
</div>
</li>
</ul>
</div>
</div>
</div><hr><div class="row">
</div>
<hr>
<div class="row">
<div class="col-xs-12">
<button
class="btn btn-secondary pull-right"
@ -366,29 +465,36 @@
@click="showInv.hatchingPotions = true"
>
Show Hatching Potions
</button><button
</button>
<button
class="btn btn-secondary pull-right"
ng-if="showInv.hatchingPotions"
@click="showInv.hatchingPotions = false"
>
Hide Hatching Potions
</button><h4>Hatching Potions</h4><div ng-if="showInv.hatchingPotions">
</button>
<h4>Hatching Potions</h4>
<div ng-if="showInv.hatchingPotions">
<button
class="btn btn-secondary"
@click="setAllItems('hatchingPotions', 999)"
>
Set All to 999
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('hatchingPotions', 0)"
>
Set All to 0
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('hatchingPotions', undefined)"
>
Set All to undefined
</button><hr><ul class="list-group">
</button>
<hr>
<ul class="list-group">
<li
v-for="item in content.hatchingPotions"
class="list-group-item"
@ -399,7 +505,9 @@
class="pull-left"
:class="'Pet_HatchingPotion_' + item.key"
style="margin-right: 10px"
></div><p>{{ item.text() }}</p><input
></div>
<p>{{ item.text() }}</p>
<input
class="form-control"
type="number"
ng-model="inv.hatchingPotions[item.key]"
@ -409,7 +517,9 @@
</ul>
</div>
</div>
</div><hr><div class="row">
</div>
<hr>
<div class="row">
<div class="col-xs-12">
<button
class="btn btn-secondary pull-right"
@ -417,29 +527,36 @@
@click="showInv.eggs = true"
>
Show Eggs
</button><button
</button>
<button
class="btn btn-secondary pull-right"
ng-if="showInv.eggs"
@click="showInv.eggs = false"
>
Hide Eggs
</button><h4>Eggs</h4><div ng-if="showInv.eggs">
</button>
<h4>Eggs</h4>
<div ng-if="showInv.eggs">
<button
class="btn btn-secondary"
@click="setAllItems('eggs', 999)"
>
Set All to 999
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('eggs', 0)"
>
Set All to 0
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('eggs', undefined)"
>
Set All to undefined
</button><hr><ul class="list-group">
</button>
<hr>
<ul class="list-group">
<li
v-for="item in content.eggs"
class="list-group-item"
@ -450,7 +567,9 @@
class="pull-left"
:class="'Pet_Egg_' + item.key"
style="margin-right: 10px"
></div><p>{{ item.text() }}</p><input
></div>
<p>{{ item.text() }}</p>
<input
class="form-control"
type="number"
ng-model="inv.eggs[item.key]"
@ -460,7 +579,9 @@
</ul>
</div>
</div>
</div><hr><div class="row">
</div>
<hr>
<div class="row">
<div class="col-xs-12">
<button
class="btn btn-secondary pull-right"
@ -468,29 +589,36 @@
@click="showInv.food = true"
>
Show Food
</button><button
</button>
<button
class="btn btn-secondary pull-right"
ng-if="showInv.food"
@click="showInv.food = false"
>
Hide Food
</button><h4>Food</h4><div ng-if="showInv.food">
</button>
<h4>Food</h4>
<div ng-if="showInv.food">
<button
class="btn btn-secondary"
@click="setAllItems('food', 999)"
>
Set All to 999
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('food', 0)"
>
Set All to 0
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('food', undefined)"
>
Set All to undefined
</button><hr><ul class="list-group">
</button>
<hr>
<ul class="list-group">
<li
v-for="item in content.food"
class="list-group-item"
@ -501,7 +629,9 @@
class="pull-left"
:class="'Pet_Food_' + item.key"
style="margin-right: 10px"
></div><p>{{ item.text() }}</p><input
></div>
<p>{{ item.text() }}</p>
<input
class="form-control"
type="number"
ng-model="inv.food[item.key]"
@ -511,7 +641,9 @@
</ul>
</div>
</div>
</div><hr><div class="row">
</div>
<hr>
<div class="row">
<div class="col-xs-12">
<button
class="btn btn-secondary pull-right"
@ -519,29 +651,36 @@
@click="showInv.quests = true"
>
Show Quests
</button><button
</button>
<button
class="btn btn-secondary pull-right"
ng-if="showInv.quests"
@click="showInv.quests = false"
>
Hide Quests
</button><h4>Quests</h4><div ng-if="showInv.quests">
</button>
<h4>Quests</h4>
<div ng-if="showInv.quests">
<button
class="btn btn-secondary"
@click="setAllItems('quests', 999)"
>
Set All to 999
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('quests', 0)"
>
Set All to 0
</button><button
</button>
<button
class="btn btn-secondary"
@click="setAllItems('quests', undefined)"
>
Set All to undefined
</button><hr><ul class="list-group">
</button>
<hr>
<ul class="list-group">
<li
v-for="item in content.quests"
class="list-group-item"
@ -553,7 +692,9 @@
class="pull-left"
:class="'inventory_quest_scroll_' + item.key"
style="margin-right: 10px"
></div><p>{{ item.text() }}</p><input
></div>
<p>{{ item.text() }}</p>
<input
class="form-control"
type="number"
ng-model="inv.quests[item.key]"
@ -565,13 +706,15 @@
</div>
</div>
</div>
</div><div class="modal-footer">
</div>
<div class="modal-footer">
<button
class="btn btn-secondary"
@click="close()"
>
{{ $t('close') }}
</button><button
</button>
<button
class="btn btn-primary"
@click="close();modifyInventory()"
>

View file

@ -3,7 +3,33 @@
<yesterdaily-modal
:yester-dailies="yesterDailies"
@run-cron="runYesterDailiesAction()"
/><armoire-empty /><new-stuff /><death /><low-health /><level-up /><choose-class /><testing /><testingletiant /><rebirth-enabled /><drops-enabled /><contributor /><won-challenge /><ultimate-gear /><streak /><rebirth /><joined-guild /><joined-challenge /><invited-friend /><login-incentives :data="notificationData" /><quest-completed /><quest-invitation /><verify-username /><generic-achievement :data="notificationData" /><just-add-water /><lost-masterclasser /><mind-over-matter />
/>
<armoire-empty />
<new-stuff />
<death />
<low-health />
<level-up />
<choose-class />
<testing />
<testingletiant />
<rebirth-enabled />
<drops-enabled />
<contributor />
<won-challenge />
<ultimate-gear />
<streak />
<rebirth />
<joined-guild />
<joined-challenge />
<invited-friend />
<login-incentives :data="notificationData" />
<quest-completed />
<quest-invitation />
<verify-username />
<generic-achievement :data="notificationData" />
<just-add-water />
<lost-masterclasser />
<mind-over-matter />
</div>
</template>

View file

@ -7,16 +7,21 @@
>
<h2 class="text-center">
Continue with Amazon
</h2><div
</h2>
<div
v-if="amazonPayments.loggedIn"
id="AmazonPayWallet"
style="width: 400px; height: 228px;"
></div><template v-if="amazonPayments.loggedIn && amazonPayments.type === 'subscription'">
<br><p v-html="$t('amazonPaymentsRecurring')"></p><div
></div>
<template v-if="amazonPayments.loggedIn && amazonPayments.type === 'subscription'">
<br>
<p v-html="$t('amazonPaymentsRecurring')"></p>
<div
id="AmazonPayRecurring"
style="width: 400px; height: 140px;"
></div>
</template><div class="modal-footer">
</template>
<div class="modal-footer">
<div class="text-center">
<button
v-if="amazonPaymentsCanCheckout"

View file

@ -14,43 +14,50 @@
<h2 class="header-invert mx-auto">
{{ $t('support') }}
</h2>
</div><div class="row">
</div>
<div class="row">
<div
class="logo svg-icon mx-auto"
v-html="icons.logo"
></div>
</div>
</div>
</div><div class="d-flex nav justify-content-center">
</div>
<div class="d-flex nav justify-content-center">
<div
class="nav-item text-center"
:class="{active: selectedPage === 'subscribe'}"
@click="selectedPage = 'subscribe'"
>
{{ $t('subscribe') }}
</div><div
</div>
<div
class="nav-item text-center"
:class="{active: selectedPage === 'gems'}"
@click="selectedPage = 'gems'"
>
{{ $t('buyGems') }}
</div>
</div><div v-show="selectedPage === 'gems'">
</div>
<div v-show="selectedPage === 'gems'">
<div v-if="hasSubscription">
<div class="row text-center">
<h2 class="mx-auto text-leadin">
{{ $t('subscriptionAlreadySubscribedLeadIn') }}
</h2>
</div><div class="row text-center">
</div>
<div class="row text-center">
<div class="col-6 offset-3">
<p>{{ $t("gemsPurchaseNote") }}</p>
</div>
</div>
</div><div class="row text-center">
</div>
<div class="row text-center">
<h2 class="mx-auto text-leadin">
{{ $t('gemBenefitLeadin') }}
</h2>
</div><div class="row">
</div>
<div class="row">
<div class="col">
<div class="row">
<div class="col-md-2 offset-1">
@ -60,22 +67,11 @@
v-html="icons.check"
></div>
</div>
</div><div class="col-md-8 align-self-center">
</div>
<div class="col-md-8 align-self-center">
<p>{{ $t('gemBenefit1') }}</p>
</div>
</div><div class="row">
<div class="col-md-2 offset-1">
<div class="d-flex bubble justify-content-center align-items-center">
<div
class="svg-icon check mx-auto"
v-html="icons.check"
></div>
</div>
</div><div class="col-md-8 align-self-center">
<p>{{ $t('gemBenefit2') }}</p>
</div>
</div>
</div><div class="col">
<div class="row">
<div class="col-md-2 offset-1">
<div class="d-flex bubble justify-content-center align-items-center">
@ -84,10 +80,14 @@
v-html="icons.check"
></div>
</div>
</div><div class="col-md-8 align-self-center">
<p>{{ $t('gemBenefit3') }}</p>
</div>
</div><div class="row">
<div class="col-md-8 align-self-center">
<p>{{ $t('gemBenefit2') }}</p>
</div>
</div>
</div>
<div class="col">
<div class="row">
<div class="col-md-2 offset-1">
<div class="d-flex bubble justify-content-center align-items-center">
<div
@ -95,12 +95,27 @@
v-html="icons.check"
></div>
</div>
</div><div class="col-md-8 align-self-center">
</div>
<div class="col-md-8 align-self-center">
<p>{{ $t('gemBenefit3') }}</p>
</div>
</div>
<div class="row">
<div class="col-md-2 offset-1">
<div class="d-flex bubble justify-content-center align-items-center">
<div
class="svg-icon check mx-auto"
v-html="icons.check"
></div>
</div>
</div>
<div class="col-md-8 align-self-center">
<p>{{ $t('gemBenefit4') }}</p>
</div>
</div>
</div>
</div><div class="card-deck gem-deck">
</div>
<div class="card-deck gem-deck">
<div
class="card text-center col-3"
:class="{active: gemAmount === 20 }"
@ -111,12 +126,16 @@
style="'height: 55px; width: 47.5px; margin-top: 1.85em;'"
v-html="icons.twentyOneGems"
></div>
</div><div class="card-body">
</div>
<div class="card-body">
<div class="gem-count">
20
</div><div class="gem-text">
</div>
<div class="gem-text">
{{ $t('gems') }}
</div><div class="divider"></div><button
</div>
<div class="divider"></div>
<button
class="btn btn-primary"
@click="gemAmount === 20 ? gemAmount = 0 : gemAmount = 20"
>
@ -124,11 +143,13 @@
</button>
</div>
</div>
</div><div class="row text-center">
</div>
<div class="row text-center">
<h2 class="mx-auto text-payment">
{{ $t('choosePaymentMethod') }}
</h2>
</div><div class="payments-column">
</div>
<div class="payments-column">
<button
class="purchase btn btn-primary payment-button payment-item"
@click="showStripe({})"
@ -136,47 +157,57 @@
<div
class="svg-icon credit-card-icon"
v-html="icons.creditCardIcon"
></div>{{ $t('card') }}
</button><button
></div>
{{ $t('card') }}
</button>
<button
class="btn payment-item paypal-checkout payment-button"
@click="openPaypal(paypalCheckoutLink, 'gems')"
>
&nbsp;<img
&nbsp;
<img
src="~@/assets/images/paypal-checkout.png"
:alt="$t('paypal')"
>&nbsp;
</button><amazon-button
</button>
<amazon-button
class="payment-item"
:amazon-data="{type: 'single'}"
/>
</div><div class="row text-center">
</div>
<div class="row text-center">
<div
class="svg-icon mx-auto"
style="'height: 24px; width: 24px;'"
v-html="icons.heart"
></div>
</div><div class="row text-center text-outtro">
</div>
<div class="row text-center text-outtro">
<div class="col-6 offset-3">
{{ $t('buyGemsSupportsDevs') }}
</div>
</div>
</div><div v-show="selectedPage === 'subscribe'">
</div>
<div v-show="selectedPage === 'subscribe'">
<div v-if="hasSubscription">
<div class="row text-center">
<h2 class="mx-auto text-leadin">
{{ $t('subscriptionAlreadySubscribedLeadIn') }}
</h2>
</div><div class="row text-center">
</div>
<div class="row text-center">
<div class="col-10 offset-1">
<p v-html="$t('subscriptionAlreadySubscribed1')"></p>
</div>
</div>
</div><div v-if="!hasSubscription">
</div>
<div v-if="!hasSubscription">
<div class="row text-center">
<h2 class="mx-auto text-leadin">
{{ $t('subscriptionBenefitLeadin') }}
</h2>
</div><div class="row">
</div>
<div class="row">
<div class="col">
<div class="row">
<div class="col-md-2 offset-1">
@ -186,33 +217,11 @@
v-html="icons.check"
></div>
</div>
</div><div class="col-md-8 align-self-center">
</div>
<div class="col-md-8 align-self-center">
<p>{{ $t('subscriptionBenefit1') }}</p>
</div>
</div><div class="row">
<div class="col-md-2 offset-1">
<div class="d-flex bubble justify-content-center align-items-center">
<div
class="svg-icon check mx-auto"
v-html="icons.check"
></div>
</div>
</div><div class="col-md-8 align-self-center">
<p>{{ $t('subscriptionBenefit2') }}</p>
</div>
</div><div class="row">
<div class="col-md-2 offset-1">
<div class="d-flex bubble justify-content-center align-items-center">
<div
class="svg-icon check mx-auto"
v-html="icons.check"
></div>
</div>
</div><div class="col-md-8 align-self-center">
<p>{{ $t('subscriptionBenefit3') }}</p>
</div>
</div>
</div><div class="col">
<div class="row">
<div class="col-md-2 offset-1">
<div class="d-flex bubble justify-content-center align-items-center">
@ -221,10 +230,40 @@
v-html="icons.check"
></div>
</div>
</div><div class="col-md-8 align-self-center">
</div>
<div class="col-md-8 align-self-center">
<p>{{ $t('subscriptionBenefit2') }}</p>
</div>
</div>
<div class="row">
<div class="col-md-2 offset-1">
<div class="d-flex bubble justify-content-center align-items-center">
<div
class="svg-icon check mx-auto"
v-html="icons.check"
></div>
</div>
</div>
<div class="col-md-8 align-self-center">
<p>{{ $t('subscriptionBenefit3') }}</p>
</div>
</div>
</div>
<div class="col">
<div class="row">
<div class="col-md-2 offset-1">
<div class="d-flex bubble justify-content-center align-items-center">
<div
class="svg-icon check mx-auto"
v-html="icons.check"
></div>
</div>
</div>
<div class="col-md-8 align-self-center">
<p>{{ $t('subscriptionBenefit4') }}</p>
</div>
</div><div class="row">
</div>
<div class="row">
<div class="col-md-2 offset-1">
<div class="d-flex bubble justify-content-center align-items-center">
<div
@ -232,10 +271,12 @@
v-html="icons.check"
></div>
</div>
</div><div class="col-md-8 align-self-center">
</div>
<div class="col-md-8 align-self-center">
<p>{{ $t('subscriptionBenefit5') }}</p>
</div>
</div><div class="row">
</div>
<div class="row">
<div class="col-md-2 offset-1">
<div class="d-flex bubble justify-content-center align-items-center">
<div
@ -243,103 +284,136 @@
v-html="icons.check"
></div>
</div>
</div><div class="col-md-8 align-self-center">
</div>
<div class="col-md-8 align-self-center">
<p>{{ $t('subscriptionBenefit6') }}</p>
</div>
</div>
</div>
</div><div class="card-deck">
</div>
<div class="card-deck">
<div
class="card text-center"
:class="{active: subscriptionPlan === 'basic_earned'}"
>
<div class="card-body">
<div class="subscription-price">
<span class="superscript">$</span><span>5</span><span class="superscript muted">.00</span>
</div><div
<span class="superscript">$</span>
<span>5</span>
<span class="superscript muted">.00</span>
</div>
<div
v-once
class="small"
>
{{ $t('everyMonth') }}
</div><div class="divider"></div><p
</div>
<div class="divider"></div>
<p
v-markdown="$t('earnGemsMonthly', {cap:25})"
class="benefits"
></p><div class="spacer"></div><button
></p>
<div class="spacer"></div>
<button
class="btn btn-primary"
@click="subscriptionPlan = 'basic_earned'"
>
{{ subscriptionPlan === "basic_earned" ? $t('selected') : $t('select') }}
</button>
</div>
</div><div
</div>
<div
class="card text-center"
:class="{active: subscriptionPlan === 'basic_3mo'}"
>
<div class="card-body">
<div class="subscription-price">
<span class="superscript">$</span><span>15</span><span class="superscript muted">.00</span>
</div><div
<span class="superscript">$</span>
<span>15</span>
<span class="superscript muted">.00</span>
</div>
<div
v-once
class="small"
>
{{ $t('everyXMonths', {interval: 3}) }}
</div><div class="divider"></div><p
</div>
<div class="divider"></div>
<p
v-markdown="$t('earnGemsMonthly', {cap:30})"
class="benefits"
></p><p
></p>
<p
v-markdown="$t('receiveMysticHourglass')"
class="benefits"
></p><button
></p>
<button
class="btn btn-primary"
@click="subscriptionPlan = 'basic_3mo'"
>
{{ subscriptionPlan === "basic_3mo" ? $t('selected') : $t('select') }}
</button>
</div>
</div><div
</div>
<div
class="card text-center"
:class="{active: subscriptionPlan === 'basic_6mo'}"
>
<div class="card-body">
<div class="subscription-price">
<span class="superscript">$</span><span>30</span><span class="superscript muted">.00</span>
</div><div
<span class="superscript">$</span>
<span>30</span>
<span class="superscript muted">.00</span>
</div>
<div
v-once
class="small"
>
{{ $t('everyXMonths', {interval: 6}) }}
</div><div class="divider"></div><p
</div>
<div class="divider"></div>
<p
v-markdown="$t('earnGemsMonthly', {cap:35})"
class="benefits"
></p><p
></p>
<p
v-markdown="$t('receiveMysticHourglasses', {amount:2})"
class="benefits"
></p><button
></p>
<button
class="btn btn-primary"
@click="subscriptionPlan = 'basic_6mo'"
>
{{ subscriptionPlan === "basic_6mo" ? $t('selected') : $t('select') }}
</button>
</div>
</div><div
</div>
<div
class="card text-center"
:class="{active: subscriptionPlan === 'basic_12mo'}"
>
<div class="card-body">
<div class="subscription-price">
<span class="superscript">$</span><span>48</span><span class="superscript muted">.00</span>
</div><div
<span class="superscript">$</span>
<span>48</span>
<span class="superscript muted">.00</span>
</div>
<div
v-once
class="small"
>
{{ $t('everyYear') }}
</div><div class="divider"></div><p
</div>
<div class="divider"></div>
<p
v-markdown="$t('earnGemsMonthly', {cap:45})"
class="benefits"
></p><p
></p>
<p
v-markdown="$t('receiveMysticHourglasses', {amount:4})"
class="benefits"
></p><button
></p>
<button
class="btn btn-primary"
@click="subscriptionPlan = 'basic_12mo'"
>
@ -347,7 +421,8 @@
</button>
</div>
</div>
</div><div
</div>
<div
v-if="subscriptionPlan"
class="row text-center"
>
@ -357,12 +432,14 @@
>
{{ $t('choosePaymentMethod') }}
</h2>
</div><div class="row text-center">
</div>
<div class="row text-center">
<a
v-once
class="mx-auto"
>{{ $t('haveCouponCode') }}</a>
</div><div
</div>
<div
v-if="subscriptionPlan"
class="payments-column"
>
@ -373,26 +450,32 @@
<div
class="svg-icon credit-card-icon"
v-html="icons.creditCardIcon"
></div>{{ $t('card') }}
</button><button
></div>
{{ $t('card') }}
</button>
<button
class="btn payment-item paypal-checkout payment-button"
@click="openPaypal(paypalSubscriptionLink, 'subscription')"
>
&nbsp;<img
&nbsp;
<img
src="~@/assets/images/paypal-checkout.png"
:alt="$t('paypal')"
>&nbsp;
</button><amazon-button
</button>
<amazon-button
class="payment-item"
:amazon-data="{type: 'subscription', subscription: subscriptionPlan}"
/>
</div><div class="row text-center">
</div>
<div class="row text-center">
<div
class="svg-icon mx-auto"
style="'height: 24px; width: 24px;'"
v-html="icons.heart"
></div>
</div><div class="row text-center text-outtro">
</div>
<div class="row text-center text-outtro">
<div class="col-6 offset-3">
{{ $t('subscribeSupportsDevs') }}
</div>

View file

@ -6,22 +6,30 @@
:modal-class="['modal-hidden-footer']"
>
<div slot="modal-header">
<div class="icon-container warning-container d-flex align-items-center justify-content-center">
<div
class="icon-container warning-container d-flex align-items-center justify-content-center"
>
<div
v-once
class="svg-icon warning"
v-html="icons.warning"
></div>
</div>
</div><div class="row">
</div>
<div class="row">
<div class="col-12 modal-body-col">
<h2>{{ config && config.group ? $t('cancelGroupSub') : $t('cancelSub') }}</h2><span class="cancel-text">{{ config && config.group ? $t('confirmCancelGroupPlan') : $t('confirmCancelSub') }}</span><button
<h2>{{ config && config.group ? $t('cancelGroupSub') : $t('cancelSub') }}</h2>
<span
class="cancel-text"
>{{ config && config.group ? $t('confirmCancelGroupPlan') : $t('confirmCancelSub') }}</span>
<button
v-once
class="btn btn-danger mt-4 mb-3"
@click="close(); cancelSubscription(config)"
>
{{ $t('cancelSub') }}
</button><a
</button>
<a
v-once
class="standard-link"
@click="close()"

View file

@ -11,18 +11,26 @@
class="svg-icon close"
@click="close()"
v-html="icons.close"
></div><div class="icon-container check-container d-flex align-items-center justify-content-center">
></div>
<div class="icon-container check-container d-flex align-items-center justify-content-center">
<div
v-once
class="svg-icon check"
v-html="icons.check"
></div>
</div>
</div><div class="row">
</div>
<div class="row">
<div class="col-12 modal-body-col">
<h2>{{ $t(isGroup ? 'canceledGroupPlan' : 'subCanceledTitle') }}</h2><div class="details-block">
<span>{{ $t('subWillBecomeInactive') }}<br><strong>{{ isGroup ? groupDateTerminated : dateTerminated }}</strong></span>
</div><span
<h2>{{ $t(isGroup ? 'canceledGroupPlan' : 'subCanceledTitle') }}</h2>
<div class="details-block">
<span>
{{ $t('subWillBecomeInactive') }}
<br>
<strong>{{ isGroup ? groupDateTerminated : dateTerminated }}</strong>
</span>
</div>
<span
v-once
class="auto-renew small-text"
>{{ $t('paymentCanceledDisputes') }}</span>

View file

@ -14,9 +14,16 @@
>
<h3 class="panel-heading clearfix">
<div class="float-right">
<span v-if="gift.gems.fromBalance">{{ $t('sendGiftGemsBalance', {number: userLoggedIn.balance * 4}) }}</span><span v-if="!gift.gems.fromBalance">{{ $t('sendGiftCost', {cost: gift.gems.amount / 4}) }}</span>
</div>{{ $t('gemsPopoverTitle') }}
</h3><div class="panel-body">
<span
v-if="gift.gems.fromBalance"
>{{ $t('sendGiftGemsBalance', {number: userLoggedIn.balance * 4}) }}</span>
<span
v-if="!gift.gems.fromBalance"
>{{ $t('sendGiftCost', {cost: gift.gems.amount / 4}) }}</span>
</div>
{{ $t('gemsPopoverTitle') }}
</h3>
<div class="panel-body">
<div class="row">
<div class="col-md-6">
<div class="form-group">
@ -29,7 +36,8 @@
:max="gift.gems.fromBalance ? userLoggedIn.balance * 4 : 9999"
>
</div>
</div><div class="col-md-6">
</div>
<div class="col-md-6">
<div class="btn-group">
<button
class="btn btn-secondary"
@ -37,7 +45,8 @@
@click="gift.gems.fromBalance = true"
>
{{ $t('sendGiftFromBalance') }}
</button><button
</button>
<button
class="btn btn-secondary"
:class="{active: !gift.gems.fromBalance}"
@click="gift.gems.fromBalance = false"
@ -46,7 +55,8 @@
</button>
</div>
</div>
</div><div class="row">
</div>
<div class="row">
<div class="col-md-12">
<p
class="small"
@ -55,14 +65,16 @@
</div>
</div>
</div>
</div><div
</div>
<div
class="panel panel-default"
:class="gift.type=='subscription' ? 'panel-primary' : 'transparent'"
@click="gift.type = 'subscription'"
>
<h3 class="panel-heading">
{{ $t('subscription') }}
</h3><div class="panel-body">
</h3>
<div class="panel-body">
<div class="row">
<div class="col-md-12">
<div class="form-group">
@ -71,24 +83,30 @@
v-if="block.target !== 'group' && block.canSubscribe === true"
class="radio"
>
<label><input
v-model="gift.subscription.key"
type="radio"
name="subRadio"
:value="block.key"
>{{ $t('sendGiftSubscription', {price: block.price, months: block.months}) }}</label>
<label>
<input
v-model="gift.subscription.key"
type="radio"
name="subRadio"
:value="block.key"
>
{{ $t('sendGiftSubscription', {price: block.price, months: block.months}) }}
</label>
</div>
</div>
</div>
</div>
</div>
</div><textarea
</div>
<textarea
v-model="gift.message"
class="form-control"
rows="3"
:placeholder="$t('sendGiftMessagePlaceholder')"
></textarea><!--include ../formatting-help-->
</div><div class="modal-footer">
></textarea>
<!--include ../formatting-help-->
</div>
<div class="modal-footer">
<button
v-if="fromBal"
class="btn btn-primary"
@ -96,7 +114,8 @@
@click="sendGift()"
>
{{ $t("send") }}
</button><div
</button>
<div
v-else
class="payments-column mx-auto"
:class="{'payments-disabled': !gift.subscription.key && gift.gems.amount < 1}"
@ -109,17 +128,21 @@
<div
class="svg-icon credit-card-icon"
v-html="icons.creditCardIcon"
></div>{{ $t('card') }}
</button><button
></div>
{{ $t('card') }}
</button>
<button
class="btn payment-item paypal-checkout payment-button"
:disabled="!gift.subscription.key && gift.gems.amount < 1"
@click="openPaypalGift({gift: gift, giftedTo: userReceivingGems._id, receiverName})"
>
&nbsp;<img
&nbsp;
<img
src="~@/assets/images/paypal-checkout.png"
:alt="$t('paypal')"
>&nbsp;
</button><amazon-button
</button>
<amazon-button
class="payment-item mb-0"
:amazon-data="{type: 'single', gift, giftedTo: userReceivingGems._id, receiverName}"
:amazon-disabled="!gift.subscription.key && gift.gems.amount < 1"

View file

@ -13,48 +13,75 @@
class="svg-icon check"
v-html="icons.check"
></div>
</div><h2>{{ $t(isFromBalance ? 'success' : 'paymentSuccessful') }}</h2>
</div><div slot="modal-footer">
</div>
<h2>{{ $t(isFromBalance ? 'success' : 'paymentSuccessful') }}</h2>
</div>
<div slot="modal-footer">
<div
v-once
class="small-text"
>
{{ $t('giftSubscriptionText4') }}
</div>
</div><div class="row">
</div>
<div class="row">
<div class="col-12 modal-body-col">
<template v-if="paymentData.paymentType === 'gems'">
<strong v-once>{{ $t('paymentYouReceived') }}</strong><div class="details-block gems">
<strong v-once>{{ $t('paymentYouReceived') }}</strong>
<div class="details-block gems">
<div
v-once
class="svg-icon"
v-html="icons.gem"
></div><span>20</span>
></div>
<span>20</span>
</div>
</template><template v-if="paymentData.paymentType === 'gift-gems' || paymentData.paymentType === 'gift-gems-balance'">
<span v-html="$t('paymentYouSentGems', {name: paymentData.giftReceiver})"></span><div class="details-block gems">
</template>
<template
v-if="paymentData.paymentType === 'gift-gems' || paymentData.paymentType === 'gift-gems-balance'"
>
<span v-html="$t('paymentYouSentGems', {name: paymentData.giftReceiver})"></span>
<div class="details-block gems">
<div
v-once
class="svg-icon"
v-html="icons.gem"
></div><span>{{ paymentData.gift.gems.amount }}</span>
></div>
<span>{{ paymentData.gift.gems.amount }}</span>
</div>
</template><template v-if="paymentData.paymentType === 'gift-subscription'">
<span v-html="$t('paymentYouSentSubscription', {name: paymentData.giftReceiver, months: paymentData.subscription.months})"></span>
</template><template v-if="paymentData.paymentType === 'subscription'">
<strong v-once>{{ $t('nowSubscribed') }}</strong><div class="details-block">
<span v-html="$t('paymentSubBilling', {amount: paymentData.subscription.price, months: paymentData.subscription.months})"></span>
</template>
<template v-if="paymentData.paymentType === 'gift-subscription'">
<span
v-html="$t('paymentYouSentSubscription', {name: paymentData.giftReceiver, months: paymentData.subscription.months})"
></span>
</template>
<template v-if="paymentData.paymentType === 'subscription'">
<strong v-once>{{ $t('nowSubscribed') }}</strong>
<div class="details-block">
<span
v-html="$t('paymentSubBilling', {amount: paymentData.subscription.price, months: paymentData.subscription.months})"
></span>
</div>
</template><template v-if="paymentData.paymentType === 'groupPlan'">
<span v-html="$t(paymentData.newGroup ? 'groupPlanCreated' : 'groupPlanUpgraded', {groupName: paymentData.group.name})"></span><div class="details-block">
<span v-html="$t('paymentSubBilling', {amount: groupPlanCost, months: paymentData.subscription.months})"></span>
</template>
<template v-if="paymentData.paymentType === 'groupPlan'">
<span
v-html="$t(paymentData.newGroup ? 'groupPlanCreated' : 'groupPlanUpgraded', {groupName: paymentData.group.name})"
></span>
<div class="details-block">
<span
v-html="$t('paymentSubBilling', {amount: groupPlanCost, months: paymentData.subscription.months})"
></span>
</div>
</template><template v-if="paymentData.paymentType === 'groupPlan' || paymentData.paymentType === 'subscription'">
</template>
<template
v-if="paymentData.paymentType === 'groupPlan' || paymentData.paymentType === 'subscription'"
>
<span
v-once
class="small-text auto-renew"
>{{ $t('paymentAutoRenew') }}</span>
</template><button
</template>
<button
v-once
class="btn btn-primary"
@click="close()"

Some files were not shown because too many files have changed in this diff Show more