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
@@ -1,13 +1,15 @@
<template>
<div>
<approval-modal :task="task" /><div
<approval-modal :task="task" />
<div
v-if="!approvalRequested && !multipleApprovalsRequested"
class="claim-bottom-message d-flex align-items-center"
>
<div
class="mr-auto ml-2"
v-html="message"
></div><div
></div>
<div
v-if="!userIsAssigned"
class="ml-auto mr-2"
>
@@ -15,7 +17,8 @@
class="claim-color"
@click="claim()"
>{{ $t('claim') }}</a>
</div><div
</div>
<div
v-if="userIsAssigned"
class="ml-auto mr-2"
>
@@ -24,15 +27,18 @@
@click="unassign()"
>{{ $t('removeClaim') }}</a>
</div>
</div><div
</div>
<div
v-if="approvalRequested && userIsManager"
class="claim-bottom-message d-flex align-items-center justify-content-around"
>
<a
class="approve-color"
@click="approve()"
>{{ $t('approveTask') }}</a><a @click="needsWork()">{{ $t('needsWork') }}</a>
</div><div
>{{ $t('approveTask') }}</a>
<a @click="needsWork()">{{ $t('needsWork') }}</a>
</div>
<div
v-if="multipleApprovalsRequested && userIsManager"
class="claim-bottom-message d-flex align-items-center"
>
@@ -12,14 +12,16 @@
>
<div class="col-8">
<strong>{{ approval.userId.profile.name }}</strong>
</div><div class="col-2">
</div>
<div class="col-2">
<button
class="btn btn-primary"
@click="approve(index)"
>
{{ $t('approve') }}
</button>
</div><div class="col-2">
</div>
<div class="col-2">
<button
class="btn btn-secondary"
@click="needsWork(index)"
@@ -28,7 +30,8 @@
</button>
</div>
</div>
</div><div class="modal-footer">
</div>
<div class="modal-footer">
<button
class="btn btn-secondary"
@click="close()"
@@ -9,53 +9,65 @@
v-if="brokenChallengeTask && brokenChallengeTask.challenge"
class="modal-body"
>
<div v-if="brokenChallengeTask.challenge.broken === 'TASK_DELETED' || brokenChallengeTask.challenge.broken === 'CHALLENGE_TASK_NOT_FOUND'">
<h2>{{ $t('brokenTask') }}</h2><div>
<div
v-if="brokenChallengeTask.challenge.broken === 'TASK_DELETED' || brokenChallengeTask.challenge.broken === 'CHALLENGE_TASK_NOT_FOUND'"
>
<h2>{{ $t('brokenTask') }}</h2>
<div>
<button
class="btn btn-primary"
@click="unlink('keep')"
>
{{ $t('keepIt') }}
</button><button
</button>
<button
class="btn btn-danger"
@click="removeTask(obj)"
>
{{ $t('removeIt') }}
</button>
</div>
</div><div v-if="brokenChallengeTask.challenge.broken === 'CHALLENGE_DELETED'">
<h2>{{ $t('brokenChallenge') }}</h2><div>
</div>
<div v-if="brokenChallengeTask.challenge.broken === 'CHALLENGE_DELETED'">
<h2>{{ $t('brokenChallenge') }}</h2>
<div>
<button
class="btn btn-primary"
@click="unlink('keep-all')"
>
{{ $t('keepThem') }}
</button><button
</button>
<button
class="btn btn-danger"
@click="unlink('remove-all')"
>
{{ $t('removeThem') }}
</button>
</div>
</div><div v-if="brokenChallengeTask.challenge.broken === 'CHALLENGE_CLOSED'">
<h2 v-html="$t('challengeCompleted', {user: brokenChallengeTask.challenge.winner})"></h2><div>
</div>
<div v-if="brokenChallengeTask.challenge.broken === 'CHALLENGE_CLOSED'">
<h2 v-html="$t('challengeCompleted', {user: brokenChallengeTask.challenge.winner})"></h2>
<div>
<button
class="btn btn-primary"
@click="unlink('keep-all')"
>
{{ $t('keepThem') }}
</button><button
</button>
<button
class="btn btn-danger"
@click="unlink('remove-all')"
>
{{ $t('removeThem') }}
</button>
</div>
</div><!-- @TODO: I ported this over, but do we use it anymore?--><!--div(v-if='brokenChallengeTask.challenge.broken === "UNSUBSCRIBED"')p {{ $t('unsubChallenge') }}
</div>
<!-- @TODO: I ported this over, but do we use it anymore?-->
<!--div(v-if='brokenChallengeTask.challenge.broken === "UNSUBSCRIBED"')p {{ $t('unsubChallenge') }}
p
a(@click="unlink('keep-all')") {{ $t('keepThem') }}
| &nbsp;|&nbsp;
a(@click="unlink('remove-all')") {{ $t('removeThem') }}-->
a(@click="unlink('remove-all')") {{ $t('removeThem') }}-->
</div>
</b-modal>
</template>
@@ -2,7 +2,8 @@
<div class="text-center delete-completed">
<div class="help-text">
{{ $t('clearCompletedDescription') }}
</div><div
</div>
<div
class="btn btn-danger"
@click="clearTodos()"
>
+31 -15
View File
@@ -3,21 +3,25 @@
class="tasks-column"
:class="type"
>
<b-modal ref="editTaskModal" /><buy-quest-modal
<b-modal ref="editTaskModal" />
<buy-quest-modal
v-if="type === 'reward'"
:item="selectedItemToBuy || {}"
:price-type="selectedItemToBuy ? selectedItemToBuy.currency : ''"
:with-pin="true"
@change="resetItemToBuy($event)"
/><div class="d-flex align-items-center">
/>
<div class="d-flex align-items-center">
<h2 class="column-title">
{{ $t(typeLabel) }}
</h2><div
</h2>
<div
v-if="badgeCount > 0"
class="badge badge-pill badge-purple column-badge mx-1"
>
{{ badgeCount }}
</div><div class="filters d-flex justify-content-end">
</div>
<div class="filters d-flex justify-content-end">
<div
v-for="filter in typeFilters"
class="filter small-text"
@@ -27,7 +31,8 @@
{{ $t(filter) }}
</div>
</div>
</div><div
</div>
<div
ref="tasksWrapper"
class="tasks-list"
>
@@ -41,13 +46,18 @@
@keypress.enter="quickAdd"
@focus="quickAddFocused = true"
@blur="quickAddFocused = false"
></textarea><transition name="quick-add-tip-slide">
></textarea>
<transition name="quick-add-tip-slide">
<div
v-show="quickAddFocused"
class="quick-add-tip small-text"
v-html="$t('addMultipleTip', {taskType: $t(typeLabel)})"
></div>
</transition><clear-completed-todos v-if="activeFilter.label === 'complete2' && isUser === true && taskList.length > 0" /><div
</transition>
<clear-completed-todos
v-if="activeFilter.label === 'complete2' && isUser === true && taskList.length > 0"
/>
<div
v-if="isUser === true"
ref="columnBackground"
class="column-background"
@@ -58,12 +68,15 @@
class="svg-icon"
:class="`icon-${type}`"
v-html="icons[type]"
></div><h3 v-once>
></div>
<h3 v-once>
{{ $t('theseAreYourTasks', {taskType: $t(typeLabel)}) }}
</h3><div class="small-text">
</h3>
<div class="small-text">
{{ $t(`${type}sDesc`) }}
</div>
</div><draggable
</div>
<draggable
ref="tasksList"
class="sortable-tasks"
:options="{disabled: activeFilter.label === 'scheduled' || !isUser, scrollSensitivity: 64}"
@@ -82,7 +95,8 @@
@moveTo="moveTo"
@taskDestroyed="taskDestroyed"
/>
</draggable><template v-if="hasRewardsList">
</draggable>
<template v-if="hasRewardsList">
<draggable
ref="rewardsList"
class="reward-items"
@@ -107,10 +121,12 @@
class="badge badge-pill badge-item badge-svg"
:class="{'item-selected-badge': ctx.item.pinned, 'hide': !ctx.highlightBorder}"
@click.prevent.stop="togglePinned(ctx.item)"
><span
class="svg-icon inline icon-12 color"
v-html="icons.pin"
></span></span>
>
<span
class="svg-icon inline icon-12 color"
v-html="icons.pin"
></span>
</span>
</template>
</shopItem>
</draggable>
+16 -8
View File
@@ -9,17 +9,21 @@
<div class="col-8 details">
<p class="title">
{{ spell.text() }}
</p><p class="notes">
</p>
<p class="notes">
{{ `Click on a ${spell.target} to cast!` }}
</p><!-- @TODO make that translatable-->
</div><div class="col-4 mana">
</p>
<!-- @TODO make that translatable-->
</div>
<div class="col-4 mana">
<div
class="img"
:class="`shop_${spell.key} shop-sprite item-img`"
></div>
</div>
</div>
</div><div class="drawer-wrapper d-flex justify-content-center">
</div>
<div class="drawer-wrapper d-flex justify-content-center">
<drawer
v-if="user.stats.class && !user.preferences.disableClasses"
v-mousePosition="30"
@@ -40,16 +44,20 @@
>
<div class="spell col-12 row">
<div class="col-8 details">
<a :class="{'disabled': spellDisabled(key)}"></a><div
<a :class="{'disabled': spellDisabled(key)}"></a>
<div
class="img"
:class="`shop_${skill.key} shop-sprite item-img`"
></div><span class="title">{{ skill.text() }}</span>
</div><div class="col-4 mana">
></div>
<span class="title">{{ skill.text() }}</span>
</div>
<div class="col-4 mana">
<div class="mana-text">
<div
class="svg-icon"
v-html="icons.mana"
></div><div>{{ skill.mana }}</div>
></div>
<div>{{ skill.mana }}</div>
</div>
</div>
</div>
@@ -8,7 +8,8 @@
>
<div class="tags-header">
<strong v-once>{{ $t(tagsType.key) }}</strong>
</div><div class="tags-list container">
</div>
<div class="tags-list container">
<div class="row">
<div
v-for="(tag, tagIndex) in tagsType.tags"
@@ -21,7 +22,8 @@
class="custom-control-input"
type="checkbox"
:value="tag.id"
><label
>
<label
v-markdown="tag.name"
class="custom-control-label"
:title="tag.name"
@@ -31,11 +33,13 @@
</div>
</div>
</div>
</div><div class="tags-footer">
</div>
<div class="tags-footer">
<span
class="clear-tags"
@click="clearTags()"
>{{ $t("clearTags") }}</span><span
>{{ $t("clearTags") }}</span>
<span
class="close-tags"
@click="close()"
>{{ $t("close") }}</span>
+106 -55
View File
@@ -9,11 +9,13 @@
v-if="task.group.id"
:task="task"
:group="group"
/><div
/>
<div
class="d-flex"
:class="{'task-not-scoreable': isUser !== true}"
>
<!-- Habits left side control--><div
<!-- Habits left side control-->
<div
v-if="task.type === 'habit'"
class="left-control d-flex align-items-center justify-content-center"
:class="[{'control-bottom-box': this.task.group.id, 'control-top-box': approvalsClass}, controlClass.up.bg]"
@@ -28,13 +30,16 @@
class="svg-icon lock"
:class="controlClass.up.icon"
v-html="icons.lock"
></div><div
></div>
<div
v-else
class="svg-icon positive"
v-html="icons.positive"
></div>
</div>
</div><!-- Dailies and todos left side control--><div
</div>
<!-- Dailies and todos left side control-->
<div
v-if="task.type === 'daily' || task.type === 'todo'"
class="left-control d-flex justify-content-center"
:class="[{'control-bottom-box': this.task.group.id, 'control-top-box': approvalsClass}, controlClass.bg]"
@@ -49,14 +54,17 @@
class="svg-icon lock"
:class="controlClass.icon"
v-html="icons.lock"
></div><div
></div>
<div
v-else
class="svg-icon check"
:class="{'display-check-icon': task.completed, [controlClass.checkbox]: true}"
v-html="icons.check"
></div>
</div>
</div><!-- Task title, description and icons--><div
</div>
<!-- Task title, description and icons-->
<div
class="task-content"
:class="contentClass"
>
@@ -70,7 +78,8 @@
v-markdown="task.text"
class="task-title"
:class="{ 'has-notes': task.notes }"
></h3><menu-dropdown
></h3>
<menu-dropdown
v-if="!isRunningYesterdailies && showOptions"
ref="taskDropdown"
v-b-tooltip.hover.top="$t('options')"
@@ -82,51 +91,69 @@
class="svg-icon dropdown-icon"
v-html="icons.menu"
></div>
</div><div slot="dropdown-content">
</div>
<div slot="dropdown-content">
<div
ref="editTaskItem"
class="dropdown-item edit-task-item"
>
<span class="dropdown-icon-item"><span
class="svg-icon inline edit-icon"
v-html="icons.edit"
></span><span class="text">{{ $t('edit') }}</span></span>
</div><div
<span class="dropdown-icon-item">
<span
class="svg-icon inline edit-icon"
v-html="icons.edit"
></span>
<span class="text">{{ $t('edit') }}</span>
</span>
</div>
<div
v-if="isUser"
class="dropdown-item"
@click="moveToTop"
>
<span class="dropdown-icon-item"><span
class="svg-icon inline push-to-top"
v-html="icons.top"
></span><span class="text">{{ $t('taskToTop') }}</span></span>
</div><div
<span class="dropdown-icon-item">
<span
class="svg-icon inline push-to-top"
v-html="icons.top"
></span>
<span class="text">{{ $t('taskToTop') }}</span>
</span>
</div>
<div
v-if="isUser"
class="dropdown-item"
@click="moveToBottom"
>
<span class="dropdown-icon-item"><span
class="svg-icon inline push-to-bottom"
v-html="icons.bottom"
></span><span class="text">{{ $t('taskToBottom') }}</span></span>
</div><div
<span class="dropdown-icon-item">
<span
class="svg-icon inline push-to-bottom"
v-html="icons.bottom"
></span>
<span class="text">{{ $t('taskToBottom') }}</span>
</span>
</div>
<div
v-if="canDelete(task)"
class="dropdown-item"
@click="destroy"
>
<span class="dropdown-icon-item delete-task-item"><span
class="svg-icon inline delete"
v-html="icons.delete"
></span><span class="text">{{ $t('delete') }}</span></span>
<span class="dropdown-icon-item delete-task-item">
<span
class="svg-icon inline delete"
v-html="icons.delete"
></span>
<span class="text">{{ $t('delete') }}</span>
</span>
</div>
</div>
</menu-dropdown>
</div><div
</div>
<div
v-markdown="task.notes"
class="task-notes small-text"
:class="{'has-checklist': task.notes && hasChecklist}"
></div>
</div><div
</div>
<div
v-if="canViewchecklist"
class="checklist"
:class="{isOpen: !task.collapseChecklist}"
@@ -142,9 +169,11 @@
<div
class="svg-icon"
v-html="icons.checklist"
></div><span>{{ checklistProgress }}</span>
></div>
<span>{{ checklistProgress }}</span>
</div>
</div><div
</div>
<div
v-for="item in task.checklist"
v-if="!task.collapseChecklist"
class="custom-control custom-checkbox checklist-item"
@@ -157,13 +186,15 @@
:checked="item.completed"
:disabled="castingSpell || !isUser"
@change="toggleChecklistItem(item)"
><label
>
<label
v-markdown="item.text"
class="custom-control-label"
:for="`checklist-${item.id}-${random}`"
></label>
</div>
</div><div class="icons small-text d-flex align-items-center">
</div>
<div class="icons small-text d-flex align-items-center">
<div
v-if="task.type === 'todo' && task.date"
class="d-flex align-items-center"
@@ -173,8 +204,10 @@
v-b-tooltip.hover.bottom="$t('dueDate')"
class="svg-icon calendar"
v-html="icons.calendar"
></div><span>{{ dueIn }}</span>
</div><div class="icons-right d-flex justify-content-end">
></div>
<span>{{ dueIn }}</span>
</div>
<div class="icons-right d-flex justify-content-end">
<div
v-if="showStreak"
class="d-flex align-items-center"
@@ -183,17 +216,24 @@
v-b-tooltip.hover.bottom="$t('streakCounter')"
class="svg-icon streak"
v-html="icons.streak"
></div><span v-if="task.type === 'daily'">{{ task.streak }}</span><span v-if="task.type === 'habit'"><span
v-if="task.up"
class="m-0"
>+{{ task.counterUp }}</span><span
v-if="task.up && task.down"
class="m-0"
>&nbsp;|&nbsp;</span><span
v-if="task.down"
class="m-0"
>-{{ task.counterDown }}</span></span>
</div><div
></div>
<span v-if="task.type === 'daily'">{{ task.streak }}</span>
<span v-if="task.type === 'habit'">
<span
v-if="task.up"
class="m-0"
>+{{ task.counterUp }}</span>
<span
v-if="task.up && task.down"
class="m-0"
>&nbsp;|&nbsp;</span>
<span
v-if="task.down"
class="m-0"
>-{{ task.counterDown }}</span>
</span>
</div>
<div
v-if="task.challenge && task.challenge.id"
class="d-flex align-items-center"
>
@@ -202,14 +242,16 @@
v-b-tooltip.hover.bottom="shortName"
class="svg-icon challenge"
v-html="icons.challenge"
></div><div
></div>
<div
v-if="task.challenge.broken"
v-b-tooltip.hover.bottom="$t('brokenChaLink')"
class="svg-icon challenge broken"
@click="handleBrokenTask(task)"
v-html="icons.brokenChallengeIcon"
></div>
</div><div
</div>
<div
v-if="hasTags"
:id="`tags-icon-${task._id}`"
class="d-flex align-items-center"
@@ -218,7 +260,8 @@
class="svg-icon tags"
v-html="icons.tags"
></div>
</div><b-popover
</div>
<b-popover
v-if="hasTags"
:target="`tags-icon-${task._id}`"
triggers="hover"
@@ -231,7 +274,8 @@
class="tags-popover-title"
>
{{ `${$t('tags')}:` }}
</div><div
</div>
<div
v-for="tag in getTagsFor(task)"
v-markdown="tag"
class="tag-label"
@@ -241,7 +285,9 @@
</b-popover>
</div>
</div>
</div><!-- Habits right side control--><div
</div>
<!-- Habits right side control-->
<div
v-if="task.type === 'habit'"
class="right-control d-flex align-items-center justify-content-center"
:class="[{'control-bottom-box': this.task.group.id, 'control-top-box': approvalsClass}, controlClass.down.bg]"
@@ -256,13 +302,16 @@
class="svg-icon lock"
:class="controlClass.down.icon"
v-html="icons.lock"
></div><div
></div>
<div
v-else
class="svg-icon negative"
v-html="icons.negative"
></div>
</div>
</div><!-- Rewards right side control--><div
</div>
<!-- Rewards right side control-->
<div
v-if="task.type === 'reward'"
class="right-control d-flex align-items-center justify-content-center reward-control"
:class="controlClass.bg"
@@ -271,11 +320,13 @@
<div
class="svg-icon"
v-html="icons.gold"
></div><div class="small-text">
></div>
<div class="small-text">
{{ task.value }}
</div>
</div>
</div><approval-footer
</div>
<approval-footer
v-if="task.group.id"
:task="task"
:group="group"
+195 -100
View File
@@ -18,12 +18,14 @@
<div class="clearfix">
<h1 class="float-left">
{{ title }}
</h1><div class="float-right d-flex align-items-center">
</h1>
<div class="float-right d-flex align-items-center">
<span
v-once
class="cancel-task-btn mr-2"
@click="cancel()"
>{{ $t('cancel') }}</span><button
>{{ $t('cancel') }}</span>
<button
v-once
class="btn btn-secondary"
@click="submit()"
@@ -31,8 +33,10 @@
{{ $t('save') }}
</button>
</div>
</div><div class="form-group">
<label v-once>{{ `${$t('text')}*` }}</label><input
</div>
<div class="form-group">
<label v-once>{{ `${$t('text')}*` }}</label>
<input
ref="inputToFocus"
v-model="task.text"
class="form-control title-input"
@@ -41,20 +45,28 @@
spellcheck="true"
:disabled="groupAccessRequiredAndOnPersonalPage || challengeAccessRequired"
>
</div><div class="form-group">
</div>
<div class="form-group">
<label
v-once
class="d-flex align-items-center justify-content-between"
><span>{{ $t('notes') }}</span><small v-once><a
target="_blank"
href="http://habitica.fandom.com/wiki/Markdown_Cheat_Sheet"
>{{ $t('markdownHelpLink') }}</a></small></label><textarea
>
<span>{{ $t('notes') }}</span>
<small v-once>
<a
target="_blank"
href="http://habitica.fandom.com/wiki/Markdown_Cheat_Sheet"
>{{ $t('markdownHelpLink') }}</a>
</small>
</label>
<textarea
v-model="task.notes"
class="form-control"
rows="3"
></textarea>
</div>
</div><div
</div>
<div
class="task-modal-content"
@click="handleClick($event)"
>
@@ -68,13 +80,15 @@
class="option mt-0"
>
<div class="form-group">
<label v-once>{{ $t('cost') }}</label><div class="input-group">
<label v-once>{{ $t('cost') }}</label>
<div class="input-group">
<div class="input-group-prepend input-group-icon align-items-center">
<div
class="svg-icon gold"
v-html="icons.gold"
></div>
</div><input
</div>
<input
v-model="task.value"
class="form-control"
type="number"
@@ -85,11 +99,14 @@
>
</div>
</div>
</div><div
</div>
<div
v-if="checklistEnabled"
class="option mt-0"
>
<label v-once>{{ $t('checklist') }}</label><br><draggable
<label v-once>{{ $t('checklist') }}</label>
<br>
<draggable
v-model="checklist"
:options="{handle: '.grippy', filter: '.task-dropdown'}"
@update="sortedChecklist"
@@ -98,26 +115,32 @@
v-for="(item, $index) in checklist"
class="inline-edit-input-group checklist-group input-group"
>
<span class="grippy"></span><input
<span class="grippy"></span>
<input
v-model="item.text"
class="inline-edit-input checklist-item form-control"
type="text"
><span
>
<span
class="input-group-append"
@click="removeChecklistItem($index)"
><div
class="svg-icon destroy-icon"
v-html="icons.destroy"
></div></span>
>
<div
class="svg-icon destroy-icon"
v-html="icons.destroy"
></div>
</span>
</div>
</draggable><input
</draggable>
<input
v-model="newChecklistItem"
class="inline-edit-input checklist-item form-control"
type="text"
:placeholder="$t('newChecklistItem')"
@keydown.enter="addChecklistItem($event)"
>
</div><div
</div>
<div
v-if="task.type === 'habit'"
class="d-flex justify-content-center"
>
@@ -137,13 +160,15 @@
v-html="icons.positive"
></div>
</div>
</div><div
</div>
<div
class="option-item-label"
:class="task.up ? cssClass('text') : ''"
>
{{ $t('positive') }}
</div>
</div><div
</div>
<div
class="option-item habit-control"
:class="task.down ? 'habit-control-enabled' : cssClass('habit-control-disabled')"
@click="toggleDownDirection()"
@@ -159,19 +184,25 @@
v-html="icons.negative"
></div>
</div>
</div><div
</div>
<div
class="option-item-label"
:class="task.down ? cssClass('text') : ''"
>
{{ $t('negative') }}
</div>
</div>
</div><template v-if="task.type !== 'reward'">
<label v-once><span class="float-left">{{ $t('difficulty') }}</span><div
v-b-tooltip.hover.righttop="$t('difficultyHelp')"
class="svg-icon info-icon"
v-html="icons.information"
></div></label><div class="d-flex justify-content-center difficulty-options">
</div>
<template v-if="task.type !== 'reward'">
<label v-once>
<span class="float-left">{{ $t('difficulty') }}</span>
<div
v-b-tooltip.hover.righttop="$t('difficultyHelp')"
class="svg-icon info-icon"
v-html="icons.information"
></div>
</label>
<div class="d-flex justify-content-center difficulty-options">
<div
class="option-item"
:class="task.priority === 0.1 ? 'option-item-selected' : cssClass('option-disabled')"
@@ -185,13 +216,15 @@
class="svg-icon difficulty-trivial-icon"
v-html="icons.difficultyTrivial"
></div>
</div><div
</div>
<div
class="option-item-label"
:class="task.priority === 0.1 ? cssClass('text') : ''"
>
{{ $t('trivial') }}
</div>
</div><div
</div>
<div
class="option-item"
:class="task.priority === 1 ? 'option-item-selected' : cssClass('option-disabled')"
@click="setDifficulty(1)"
@@ -204,13 +237,15 @@
class="svg-icon difficulty-normal-icon"
v-html="icons.difficultyNormal"
></div>
</div><div
</div>
<div
class="option-item-label"
:class="task.priority === 1 ? cssClass('text') : ''"
>
{{ $t('easy') }}
</div>
</div><div
</div>
<div
class="option-item"
:class="task.priority === 1.5 ? 'option-item-selected' : cssClass('option-disabled')"
@click="setDifficulty(1.5)"
@@ -223,13 +258,15 @@
class="svg-icon difficulty-medium-icon"
v-html="icons.difficultyMedium"
></div>
</div><div
</div>
<div
class="option-item-label"
:class="task.priority === 1.5 ? cssClass('text') : ''"
>
{{ $t('medium') }}
</div>
</div><div
</div>
<div
class="option-item"
:class="task.priority === 2 ? 'option-item-selected' : cssClass('option-disabled')"
@click="setDifficulty(2)"
@@ -242,7 +279,8 @@
class="svg-icon difficulty-hard-icon"
v-html="icons.difficultyHard"
></div>
</div><div
</div>
<div
class="option-item-label"
:class="task.priority === 2 ? cssClass('text') : ''"
>
@@ -250,12 +288,14 @@
</div>
</div>
</div>
</template><div
</template>
<div
v-if="task.type === 'todo'"
class="option"
>
<div class="form-group">
<label v-once>{{ $t('dueDate') }}</label><datepicker
<label v-once>{{ $t('dueDate') }}</label>
<datepicker
v-model="task.date"
:calendar-icon="icons.calendar"
:clear-button="true"
@@ -266,12 +306,14 @@
:highlighted="calendarHighlights"
/>
</div>
</div><div
</div>
<div
v-if="task.type === 'daily'"
class="option"
>
<div class="form-group">
<label v-once>{{ $t('startDate') }}</label><datepicker
<label v-once>{{ $t('startDate') }}</label>
<datepicker
v-model="task.startDate"
:calendar-icon="icons.calendar"
:clear-button="false"
@@ -281,12 +323,14 @@
:highlighted="calendarHighlights"
/>
</div>
</div><div
</div>
<div
v-if="task.type === 'daily'"
class="option"
>
<div class="form-group">
<label v-once>{{ $t('repeats') }}</label><b-dropdown
<label v-once>{{ $t('repeats') }}</label>
<b-dropdown
class="inline-dropdown"
:text="$t(task.frequency)"
>
@@ -300,8 +344,10 @@
{{ $t(frequency) }}
</b-dropdown-item>
</b-dropdown>
</div><div class="form-group">
<label v-once>{{ $t('repeatEvery') }}</label><div class="input-group">
</div>
<div class="form-group">
<label v-once>{{ $t('repeatEvery') }}</label>
<div class="input-group">
<input
v-model="task.everyX"
class="form-control"
@@ -310,16 +356,19 @@
max="9999"
required="required"
:disabled="challengeAccessRequired"
><div class="input-group-append input-group-text">
>
<div class="input-group-append input-group-text">
{{ repeatSuffix }}
</div>
</div>
</div><template v-if="task.frequency === 'weekly'">
</div>
<template v-if="task.frequency === 'weekly'">
<div class="form-group">
<label
v-once
class="d-block"
>{{ $t('repeatOn') }}</label><div
>{{ $t('repeatOn') }}</label>
<div
v-for="(day, dayNumber) in ['su','m','t','w','th','f','s']"
:key="dayNumber"
class="form-check-inline weekday-check mr-0"
@@ -331,7 +380,8 @@
class="custom-control-input"
type="checkbox"
:disabled="challengeAccessRequired"
><label
>
<label
v-once
class="custom-control-label"
:for="`weekday-${dayNumber}`"
@@ -339,11 +389,13 @@
</div>
</div>
</div>
</template><template v-if="task.frequency === 'monthly'">
</template>
<template v-if="task.frequency === 'monthly'">
<label
v-once
class="d-block"
>{{ $t('repeatOn') }}</label><div class="form-radio">
>{{ $t('repeatOn') }}</label>
<div class="form-radio">
<div class="custom-control custom-radio custom-control-inline">
<input
id="repeat-dayOfMonth"
@@ -352,11 +404,13 @@
type="radio"
value="dayOfMonth"
name="repeatsOn"
><label
>
<label
class="custom-control-label"
for="repeat-dayOfMonth"
>{{ $t('dayOfMonth') }}</label>
</div><div class="custom-control custom-radio custom-control-inline">
</div>
<div class="custom-control custom-radio custom-control-inline">
<input
id="repeat-dayOfWeek"
v-model="repeatsOn"
@@ -364,14 +418,16 @@
type="radio"
value="dayOfWeek"
name="repeatsOn"
><label
>
<label
class="custom-control-label"
for="repeat-dayOfWeek"
>{{ $t('dayOfWeek') }}</label>
</div>
</div>
</template>
</div><div
</div>
<div
v-if="isUserTask"
class="tags-select option"
>
@@ -379,7 +435,8 @@
<label
v-once
class="col-12"
>{{ $t('tags') }}</label><div class="col-12">
>{{ $t('tags') }}</label>
<div class="col-12">
<div
class="category-wrap"
:class="{ active: showTagsSelect }"
@@ -388,33 +445,44 @@
<span
v-if="task.tags && task.tags.length === 0"
class="category-select"
><div class="tags-none">{{ $t('none') }}</div><div class="dropdown-toggle"></div></span><span
>
<div class="tags-none">{{ $t('none') }}</div>
<div class="dropdown-toggle"></div>
</span>
<span
v-else
class="category-select"
><div
v-for="tagName in truncatedSelectedTags"
v-markdown="tagName"
class="category-label"
:title="tagName"
></div><div
v-if="remainingSelectedTags.length > 0"
class="tags-more"
>+{{ $t('more', { count: remainingSelectedTags.length }) }}</div><div class="dropdown-toggle"></div></span>
>
<div
v-for="tagName in truncatedSelectedTags"
v-markdown="tagName"
class="category-label"
:title="tagName"
></div>
<div
v-if="remainingSelectedTags.length > 0"
class="tags-more"
>+{{ $t('more', { count: remainingSelectedTags.length }) }}</div>
<div class="dropdown-toggle"></div>
</span>
</div>
</div>
</div><tags-popup
</div>
<tags-popup
v-if="showTagsSelect"
ref="popup"
v-model="task.tags"
:tags="user.tags"
@close="closeTagsPopup()"
/>
</div><div
</div>
<div
v-if="task.type === 'habit'"
class="option"
>
<div class="form-group">
<label v-once>{{ $t('resetStreak') }}</label><b-dropdown
<label v-once>{{ $t('resetStreak') }}</label>
<b-dropdown
class="inline-dropdown"
:text="$t(task.frequency)"
:disabled="challengeAccessRequired"
@@ -429,7 +497,8 @@
</b-dropdown-item>
</b-dropdown>
</div>
</div><div
</div>
<div
v-if="groupId"
class="option group-options"
>
@@ -437,7 +506,8 @@
v-if="task.type === 'todo'"
class="form-group"
>
<label v-once>{{ $t('sharedCompletion') }}</label><b-dropdown
<label v-once>{{ $t('sharedCompletion') }}</label>
<b-dropdown
class="inline-dropdown"
:text="$t(sharedCompletion)"
>
@@ -450,11 +520,13 @@
{{ $t(completionOption) }}
</b-dropdown-item>
</b-dropdown>
</div><div class="form-group row">
</div>
<div class="form-group row">
<label
v-once
class="col-12"
>{{ $t('assignedTo') }}</label><div class="col-12 mt-2">
>{{ $t('assignedTo') }}</label>
<div class="col-12 mt-2">
<div
class="category-wrap"
@click="showAssignedSelect = !showAssignedSelect"
@@ -462,14 +534,18 @@
<span
v-if="assignedMembers && assignedMembers.length === 0"
class="category-select"
>{{ $t('none') }}</span><span
>{{ $t('none') }}</span>
<span
v-else
class="category-select"
><span
v-for="memberId in assignedMembers"
class="mr-1"
>{{ memberNamesById[memberId] }}</span></span>
</div><div
>
<span
v-for="memberId in assignedMembers"
class="mr-1"
>{{ memberNamesById[memberId] }}</span>
</span>
</div>
<div
v-if="showAssignedSelect"
class="category-box"
>
@@ -488,14 +564,16 @@
type="checkbox"
:value="member._id"
@change="toggleAssignment(member._id)"
><label
>
<label
v-once
class="custom-control-label"
:for="`assigned-${member._id}`"
>{{ member.profile.name }}</label>
</div>
</div>
</div><div class="row">
</div>
<div class="row">
<button
class="btn btn-primary"
@click.stop.prevent="showAssignedSelect = !showAssignedSelect"
@@ -506,14 +584,17 @@
</div>
</div>
</div>
</div><div class="form-group">
<label v-once>{{ $t('approvalRequired') }}</label><toggle-switch
</div>
<div class="form-group">
<label v-once>{{ $t('approvalRequired') }}</label>
<toggle-switch
class="d-inline-block"
:checked="requiresApproval"
@change="updateRequiresApproval"
/>
</div>
</div><div
</div>
<div
v-if="task.type !== 'reward'"
class="advanced-settings"
>
@@ -521,14 +602,16 @@
class="advanced-settings-toggle d-flex justify-content-between align-items-center"
@click="showAdvancedOptions = !showAdvancedOptions"
>
<h3>{{ $t('advancedSettings') }}</h3><div class="toggle-up">
<h3>{{ $t('advancedSettings') }}</h3>
<div class="toggle-up">
<div
class="svg-icon"
:class="{'toggle-open': showAdvancedOptions}"
v-html="icons.down"
></div>
</div>
</div><b-collapse
</div>
<b-collapse
id="advancedOptionsCollapse"
v-model="showAdvancedOptions"
>
@@ -538,13 +621,15 @@
class="option"
>
<div class="form-group">
<label v-once>{{ $t('restoreStreak') }}</label><div class="input-group">
<label v-once>{{ $t('restoreStreak') }}</label>
<div class="input-group">
<div class="input-group-prepend streak-addon input-group-icon">
<div
class="svg-icon"
v-html="icons.streak"
></div>
</div><input
</div>
<input
v-model="task.streak"
class="form-control"
type="number"
@@ -553,12 +638,14 @@
>
</div>
</div>
</div><div
</div>
<div
v-if="task.type === 'habit' && isUserTask && purpose === 'edit' && (task.up || task.down)"
class="option"
>
<div class="form-group">
<label v-once>{{ $t('restoreStreak') }}</label><div class="row">
<label v-once>{{ $t('restoreStreak') }}</label>
<div class="row">
<div
v-if="task.up"
class="col-6"
@@ -569,7 +656,8 @@
class="svg-icon"
v-html="icons.positive"
></div>
</div><input
</div>
<input
v-model="task.counterUp"
class="form-control"
type="number"
@@ -577,7 +665,8 @@
required="required"
>
</div>
</div><div
</div>
<div
v-if="task.down"
class="col-6"
>
@@ -587,7 +676,8 @@
class="svg-icon"
v-html="icons.negative"
></div>
</div><input
</div>
<input
v-model="task.counterDown"
class="form-control"
type="number"
@@ -598,17 +688,19 @@
</div>
</div>
</div>
</div><!--.option(v-if="isUserTask && task.type !== 'reward'").form-group
</div>
<!--.option(v-if="isUserTask && task.type !== 'reward'").form-group
label(v-once)
span.float-left {{ $t('attributeAllocation') }}
.svg-icon.info-icon(v-html="icons.information", v-b-tooltip.hover.righttop.html="$t('attributeAllocationHelp')")
.attributes
.custom-control.custom-radio.custom-control-inline(v-for="attr in ATTRIBUTES", :key="attr")
input.custom-control-input(:id="`attribute-${attr}`", type="radio", :value="attr", v-model="task.attribute", :disabled="user.preferences.allocationMode !== 'taskbased'")
label.custom-control-label.attr-description(:for="`attribute-${attr}`", v-once, v-b-popover.hover="$t(`${attr}Text`)") {{ $t(attributesStrings[attr]) }}-->
label.custom-control-label.attr-description(:for="`attribute-${attr}`", v-once, v-b-popover.hover="$t(`${attr}Text`)") {{ $t(attributesStrings[attr]) }}-->
</div>
</b-collapse>
</div><div
</div>
<div
v-if="purpose !== 'create' && !challengeAccessRequired"
class="delete-task-btn d-flex justify-content-center align-items-middle"
@click="destroy()"
@@ -616,10 +708,12 @@
<div
class="svg-icon d-inline-b"
v-html="icons.destroy"
></div><span>{{ $t('deleteTask') }}</span>
></div>
<span>{{ $t('deleteTask') }}</span>
</div>
</form>
</div><div
</div>
<div
slot="modal-footer"
class="task-modal-footer d-flex justify-content-center align-items-center"
@click="handleClick($event)"
@@ -630,7 +724,8 @@
@click="cancel()"
>
{{ $t('cancel') }}
</div><button
</div>
<button
v-once
class="btn btn-primary"
@click="submit()"
+46 -23
View File
@@ -1,11 +1,13 @@
<template>
<div class="row user-tasks-page">
<broken-task-modal /><task-modal
<broken-task-modal />
<task-modal
ref="taskModal"
:task="editingTask || creatingTask"
:purpose="creatingTask !== null ? 'create' : 'edit'"
@cancel="cancelTaskModal()"
/><div class="col-12">
/>
<div class="col-12">
<div class="row tasks-navigation">
<div class="col-12 col-md-4 offset-md-4">
<div class="d-flex">
@@ -14,7 +16,8 @@
class="form-control input-search"
type="text"
:placeholder="$t('search')"
><button
>
<button
class="btn btn-secondary dropdown-toggle ml-2 d-flex align-items-center search-button"
type="button"
:class="{active: selectedTags.length > 0}"
@@ -23,9 +26,11 @@
<div
class="svg-icon filter-icon mr-2"
v-html="icons.filter"
></div><span v-once>{{ $t('tags') }}</span>
></div>
<span v-once>{{ $t('tags') }}</span>
</button>
</div><div
</div>
<div
v-if="isFilterPanelOpen"
class="filter-panel"
@mouseleave="checkMouseOver"
@@ -37,12 +42,14 @@
class="tags-category d-flex"
>
<div class="tags-header">
<strong v-once>{{ $t(tagsType.key) }}</strong><a
<strong v-once>{{ $t(tagsType.key) }}</strong>
<a
v-if="tagsType.key !== 'groups' && !editingTags"
class="d-block"
@click="editTags(tagsType.key)"
>{{ $t('editTags2') }}</a>
</div><div class="tags-list container">
</div>
<div class="tags-list container">
<div
class="row"
:class="{'no-gutters': !editingTags}"
@@ -61,11 +68,13 @@
<div
class="svg-icon inline drag"
v-html="icons.drag"
></div><input
></div>
<input
v-model="tag.name"
class="tag-edit-input inline-edit-input form-control"
type="text"
><div
>
<div
class="input-group-append"
@click="removeTag(tagIndex, tagsType.key)"
>
@@ -75,7 +84,8 @@
></div>
</div>
</div>
</div><div class="col-6 dragSpace">
</div>
<div class="col-6 dragSpace">
<input
v-model="newTag"
class="new-tag-item edit-tag-item inline-edit-input form-control"
@@ -85,7 +95,8 @@
>
</div>
</draggable>
</template><template v-if="editingTags && tagsType.key === 'challenges'">
</template>
<template v-if="editingTags && tagsType.key === 'challenges'">
<div
v-for="(tag, tagIndex) in tagsSnap[tagsType.key]"
class="col-6"
@@ -95,7 +106,8 @@
v-model="tag.name"
class="tag-edit-input inline-edit-input form-control"
type="text"
><div
>
<div
class="input-group-append"
@click="removeTag(tagIndex, tagsType.key)"
>
@@ -106,7 +118,8 @@
</div>
</div>
</div>
</template><template v-if="!editingTags || tagsType.key === 'groups'">
</template>
<template v-if="!editingTags || tagsType.key === 'groups'">
<div
v-for="(tag, tagIndex) in tagsType.tags"
class="col-6"
@@ -118,7 +131,8 @@
type="checkbox"
:checked="isTagSelected(tag)"
@change="toggleTag(tag)"
><label
>
<label
v-markdown="tag.name"
class="custom-control-label"
:for="`tag-${tag.id}`"
@@ -128,27 +142,31 @@
</template>
</div>
</div>
</div><div class="filter-panel-footer clearfix">
</div>
<div class="filter-panel-footer clearfix">
<template v-if="editingTags === true">
<div class="text-center">
<a
v-once
class="mr-3 btn-filters-primary"
@click="saveTags()"
>{{ $t('saveEdits') }}</a><a
>{{ $t('saveEdits') }}</a>
<a
v-once
class="btn-filters-secondary"
@click="cancelTagsEditing()"
>{{ $t('cancel') }}</a>
</div>
</template><template v-else>
</template>
<template v-else>
<div class="float-left">
<a
v-once
class="btn-filters-danger"
@click="resetFilters()"
>{{ $t('resetFilters') }}</a>
</div><div class="float-right">
</div>
<div class="float-right">
<a
v-once
class="btn-filters-secondary"
@@ -158,7 +176,8 @@
</template>
</div>
</div>
</div><div class="create-task-area d-flex">
</div>
<div class="create-task-area d-flex">
<transition name="slide-tasks-btns">
<div
v-if="openCreateBtn"
@@ -178,7 +197,8 @@
></div>
</div>
</div>
</transition><div
</transition>
<div
id="create-task-btn"
class="create-btn diamond-btn btn btn-success"
:class="{open: openCreateBtn}"
@@ -188,7 +208,8 @@
class="svg-icon"
v-html="icons.positive"
></div>
</div><b-tooltip
</div>
<b-tooltip
v-if="!openCreateBtn"
target="create-task-btn"
placement="bottom"
@@ -196,7 +217,8 @@
{{ $t('addTaskToUser') }}
</b-tooltip>
</div>
</div><div class="row tasks-columns">
</div>
<div class="row tasks-columns">
<task-column
v-for="column in columns"
:key="column"
@@ -209,7 +231,8 @@
@openBuyDialog="openBuyDialog($event)"
/>
</div>
</div><spells />
</div>
<spells />
</div>
</template>