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:
negue
2017-09-27 21:07:42 +02:00
committed by GitHub
parent d40543f4ca
commit 76c3e51660
6 changed files with 26 additions and 8 deletions

View File

@@ -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>

View File

@@ -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")

View File

@@ -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;
} }

View File

@@ -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;
} }

View File

@@ -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,

View File

@@ -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,