diff --git a/website/client/components/avatar.vue b/website/client/components/avatar.vue
index 078278d1d7..857982f142 100644
--- a/website/client/components/avatar.vue
+++ b/website/client/components/avatar.vue
@@ -1,5 +1,5 @@
-.avatar(:style="{width, height, paddingTop}", :class="backgroundClass")
+.avatar(:style="{width, height, paddingTop}", :class="backgroundClass", @click.prevent='castEnd()')
.character-sprites
template(v-if="!avatarOnly")
// Mount Body
@@ -185,6 +185,10 @@ export default {
return result;
},
+ castEnd (e) {
+ if (!this.$store.state.castingSpell) return;
+ this.$root.$emit('castEnd', this.member, 'user', e);
+ },
},
};
diff --git a/website/client/components/notifications.vue b/website/client/components/notifications.vue
index 48a3ad269a..9cabe4ad5a 100644
--- a/website/client/components/notifications.vue
+++ b/website/client/components/notifications.vue
@@ -405,7 +405,7 @@ export default {
let userReadNotifsPromise = false;
- if (notificationsToRead.length >= 0) {
+ if (notificationsToRead.length > 0) {
await axios.post('/api/v3/notifications/read', {
notificationIds: notificationsToRead,
});
diff --git a/website/client/components/tasks/column.vue b/website/client/components/tasks/column.vue
index 961b198f14..931bf8bb05 100644
--- a/website/client/components/tasks/column.vue
+++ b/website/client/components/tasks/column.vue
@@ -28,7 +28,6 @@
@click="openBuyDialog(reward)"
)
- .bottom-gradient
.column-background(
v-if="isUser === true",
:class="{'initial-description': tasks[`${type}s`].length === 0}",
diff --git a/website/client/components/tasks/spells.vue b/website/client/components/tasks/spells.vue
new file mode 100644
index 0000000000..6ad6baeda9
--- /dev/null
+++ b/website/client/components/tasks/spells.vue
@@ -0,0 +1,364 @@
+
+div
+ div.dragInfo.mouse(ref="clickPotionInfo", v-if="potionClickMode")
+ .spell.col-12.row
+ .col-8.details
+ p.title {{spell.text()}}
+ p.notes {{ `Click on a ${spell.target} to cast!`}}
+ .col-4.mana
+ .img(:class='`shop_${spell.key} shop-sprite item-img`')
+
+ drawer(:title="$t('spells')",
+ v-if='user.stats.class && !user.preferences.disableClasses',
+ v-mousePosition="30", @mouseMoved="mouseMoved($event)")
+ div(slot="drawer-slider")
+ .container.spell-container
+ .row
+ .col-3(
+ @click='castStart(skill)',
+ v-for='(skill, key) in spells[user.stats.class]',
+ v-if='user.stats.lvl >= skill.lvl',
+ popover-trigger='mouseenter',
+ popover-placement='top',
+ :popover='skillNotes(skill)')
+ .spell.col-12.row
+ .col-8.details
+ a(:class='{"disabled": spellDisabled(key)}')
+ p.title {{skill.text()}}
+ p.notes {{skill.notes()}}
+ .col-4.mana
+ .img(:class='`shop_${skill.key} shop-sprite item-img`')
+ .mana-text
+ .svg-icon(v-html="icons.mana")
+ div {{skill.mana}}
+
+
+
+
+
diff --git a/website/client/components/tasks/task.vue b/website/client/components/tasks/task.vue
index c5df8352a1..4599ffc091 100644
--- a/website/client/components/tasks/task.vue
+++ b/website/client/components/tasks/task.vue
@@ -377,9 +377,11 @@ export default {
if (target.tagName === 'A') { // Link
return;
- } else {
+ } else if (!this.$store.state.castingSpell) {
this.$emit('editTask', task);
}
+
+ this.$root.$emit('castEnd', task, 'task', e);
},
async score (direction) {
// TODO move to an action
diff --git a/website/client/components/tasks/user.vue b/website/client/components/tasks/user.vue
index 07ed3737d4..d3474f3ffa 100644
--- a/website/client/components/tasks/user.vue
+++ b/website/client/components/tasks/user.vue
@@ -105,7 +105,7 @@
:item="ctx.item",
v-if="ctx.item.purchaseType === 'gear'"
)
-
+ spells