mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-15 13:47:33 +01:00
sep 25 fixes (#9075)
* on class change: remove owned gear from pinned items * move dragging item-info closer to the cursor (food / hatching potion) * remove v-once at attributesPopover (if the parent component is recycled the old data stays active) * prevent popover to show data of an item that was removed - but the popover stays opened
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
div
|
div
|
||||||
h4.popover-content-title {{ itemText }}
|
h4.popover-content-title {{ itemText }}
|
||||||
.popover-content-text {{ itemNotes }}
|
.popover-content-text {{ itemNotes }}
|
||||||
.popover-content-attr(v-for="attr in ATTRIBUTES", :key="attr", v-once)
|
.popover-content-attr(v-for="attr in ATTRIBUTES", :key="attr")
|
||||||
span.popover-content-attr-key {{ `${$t(attr)}: ` }}
|
span.popover-content-attr-key {{ `${$t(attr)}: ` }}
|
||||||
span.popover-content-attr-val {{ `+${item[attr]}` }}
|
span.popover-content-attr-val {{ `+${item[attr]}` }}
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -68,12 +68,13 @@
|
|||||||
.items.items-one-line(slot="drawer-slider")
|
.items.items-one-line(slot="drawer-slider")
|
||||||
item.pointer(
|
item.pointer(
|
||||||
v-for="(label, group) in gearTypesToStrings",
|
v-for="(label, group) in gearTypesToStrings",
|
||||||
:key="group",
|
:key="flatGear[activeItems[group]] ? flatGear[activeItems[group]].key : group",
|
||||||
:item="flatGear[activeItems[group]]",
|
:item="flatGear[activeItems[group]]",
|
||||||
:itemContentClass="flatGear[activeItems[group]] ? 'shop_' + flatGear[activeItems[group]].key : null",
|
:itemContentClass="flatGear[activeItems[group]] ? 'shop_' + flatGear[activeItems[group]].key : null",
|
||||||
:emptyItem="!flatGear[activeItems[group]] || flatGear[activeItems[group]].key.indexOf('_base_0') !== -1",
|
:emptyItem="!flatGear[activeItems[group]] || flatGear[activeItems[group]].key.indexOf('_base_0') !== -1",
|
||||||
:label="label",
|
:label="label",
|
||||||
:popoverPosition="'top'",
|
:popoverPosition="'top'",
|
||||||
|
:showPopover="flatGear[activeItems[group]] && Boolean(flatGear[activeItems[group]].text)",
|
||||||
@click="equipItem(flatGear[activeItems[group]])",
|
@click="equipItem(flatGear[activeItems[group]])",
|
||||||
)
|
)
|
||||||
template(slot="popoverContent", scope="context")
|
template(slot="popoverContent", scope="context")
|
||||||
|
|||||||
@@ -201,6 +201,7 @@ import QuestInfo from '../../shops/quests/questInfo.vue';
|
|||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
|
||||||
const allowedSpecialItems = ['snowball', 'spookySparkles', 'shinySeed', 'seafoam'];
|
const allowedSpecialItems = ['snowball', 'spookySparkles', 'shinySeed', 'seafoam'];
|
||||||
|
|
||||||
import notifications from 'client/mixins/notifications';
|
import notifications from 'client/mixins/notifications';
|
||||||
import DragDropDirective from 'client/directives/dragdrop.directive';
|
import DragDropDirective from 'client/directives/dragdrop.directive';
|
||||||
import MouseMoveDirective from 'client/directives/mouseposition.directive';
|
import MouseMoveDirective from 'client/directives/mouseposition.directive';
|
||||||
@@ -444,8 +445,9 @@ export default {
|
|||||||
|
|
||||||
mouseMoved ($event) {
|
mouseMoved ($event) {
|
||||||
if (this.potionClickMode) {
|
if (this.potionClickMode) {
|
||||||
this.$refs.clickPotionInfo.style.left = `${$event.x + 20}px`;
|
// dragging potioninfo is 180px wide (90 would be centered)
|
||||||
this.$refs.clickPotionInfo.style.top = `${$event.y + 20}px`;
|
this.$refs.clickPotionInfo.style.left = `${$event.x - 70}px`;
|
||||||
|
this.$refs.clickPotionInfo.style.top = `${$event.y}px`;
|
||||||
} else {
|
} else {
|
||||||
lastMouseMoveEvent = $event;
|
lastMouseMoveEvent = $event;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -451,7 +451,7 @@
|
|||||||
|
|
||||||
.popover {
|
.popover {
|
||||||
position: inherit;
|
position: inherit;
|
||||||
width: 100px;
|
width: 180px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.popover-content {
|
.popover-content {
|
||||||
@@ -971,8 +971,8 @@
|
|||||||
|
|
||||||
mouseMoved ($event) {
|
mouseMoved ($event) {
|
||||||
if (this.foodClickMode) {
|
if (this.foodClickMode) {
|
||||||
this.$refs.clickFoodInfo.style.left = `${$event.x + 20}px`;
|
this.$refs.clickFoodInfo.style.left = `${$event.x - 70}px`;
|
||||||
this.$refs.clickFoodInfo.style.top = `${$event.y + 20}px`;
|
this.$refs.clickFoodInfo.style.top = `${$event.y}px`;
|
||||||
} else {
|
} else {
|
||||||
lastMouseMoveEvent = $event;
|
lastMouseMoveEvent = $event;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
NotAuthorized,
|
NotAuthorized,
|
||||||
BadRequest,
|
BadRequest,
|
||||||
} from '../libs/errors';
|
} from '../libs/errors';
|
||||||
import { removePinnedGearByClass, addPinnedGearByClass } from './pinnedGearUtils';
|
import { removePinnedGearByClass, removePinnedItemsByOwnedGear, addPinnedGearByClass } from './pinnedGearUtils';
|
||||||
|
|
||||||
function resetClass (user, req = {}) {
|
function resetClass (user, req = {}) {
|
||||||
removePinnedGearByClass(user);
|
removePinnedGearByClass(user);
|
||||||
@@ -49,6 +49,8 @@ module.exports = function changeClass (user, req = {}, analytics) {
|
|||||||
user.items.gear.owned[`weapon_${klass}_0`] = true;
|
user.items.gear.owned[`weapon_${klass}_0`] = true;
|
||||||
if (klass === 'rogue') user.items.gear.owned[`shield_${klass}_0`] = true;
|
if (klass === 'rogue') user.items.gear.owned[`shield_${klass}_0`] = true;
|
||||||
|
|
||||||
|
removePinnedItemsByOwnedGear(user);
|
||||||
|
|
||||||
if (analytics) {
|
if (analytics) {
|
||||||
analytics.track('change class', {
|
analytics.track('change class', {
|
||||||
uuid: user._id,
|
uuid: user._id,
|
||||||
|
|||||||
@@ -104,6 +104,18 @@ function removePinnedGearAddPossibleNewOnes (user, itemPath, newItemKey) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* removes all pinned gear that the user already owns (like class starter gear which has been pinned before)
|
||||||
|
* @param user
|
||||||
|
*/
|
||||||
|
function removePinnedItemsByOwnedGear (user) {
|
||||||
|
each(user.items.gear.owned, (bool, key) => {
|
||||||
|
if (bool) {
|
||||||
|
removeItemByPath(user, `gear.flat.${key}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns {boolean} TRUE added the item / FALSE removed it
|
* @returns {boolean} TRUE added the item / FALSE removed it
|
||||||
*/
|
*/
|
||||||
@@ -150,6 +162,7 @@ module.exports = {
|
|||||||
addPinnedGear,
|
addPinnedGear,
|
||||||
removePinnedGearByClass,
|
removePinnedGearByClass,
|
||||||
removePinnedGearAddPossibleNewOnes,
|
removePinnedGearAddPossibleNewOnes,
|
||||||
|
removePinnedItemsByOwnedGear,
|
||||||
togglePinnedItem,
|
togglePinnedItem,
|
||||||
removeItemByPath,
|
removeItemByPath,
|
||||||
isPinned,
|
isPinned,
|
||||||
|
|||||||
Reference in New Issue
Block a user