From a3800900134c7eefed000007c605a29531a69e5c Mon Sep 17 00:00:00 2001 From: negue Date: Tue, 8 Aug 2017 03:04:46 +0200 Subject: [PATCH] [WIP] multiple fixes (#8916) * change quest banner backgrond * itemRows in inventory * use itemRows in inventory/items - showLess/showMore as default labels - extend white space if theres no button available * hide popover if dragging is active - show dragging info on first click (without to move) * use itemRows in inventory/stable * fix some strings * highlight currently dragging item in inventory/items - auto attach info on click - z-index * fix shopItem label color * fix floating npcs in banner * hatched-pet-dialog in items / stable * change all ctx to context --- .../quest_shop__banner_background_web.png | Bin 9426 -> 0 bytes .../shops/quest_shop_banner_background.png | Bin 0 -> 13418 bytes .../components/achievements/levelUp.vue | 43 ++-- .../components/inventory/equipment/index.vue | 54 ++--- website/client/components/inventory/item.vue | 5 +- .../components/inventory/items/index.vue | 171 +++++++++----- .../inventory/stable/hatchedPetDialog.vue | 95 ++++++++ .../components/inventory/stable/index.vue | 221 ++++++++---------- .../client/components/shops/market/index.vue | 1 + .../client/components/shops/quests/index.vue | 10 +- .../components/shops/seasonal/index.vue | 1 + website/client/components/shops/shopItem.vue | 6 +- .../components/shops/timeTravelers/index.vue | 3 +- website/client/components/ui/itemRows.vue | 18 +- website/client/libs/createAnimal.js | 25 ++ website/common/locales/en/newClient.json | 13 +- 16 files changed, 415 insertions(+), 251 deletions(-) delete mode 100644 website/client/assets/images/shops/quest_shop__banner_background_web.png create mode 100644 website/client/assets/images/shops/quest_shop_banner_background.png create mode 100644 website/client/components/inventory/stable/hatchedPetDialog.vue create mode 100644 website/client/libs/createAnimal.js diff --git a/website/client/assets/images/shops/quest_shop__banner_background_web.png b/website/client/assets/images/shops/quest_shop__banner_background_web.png deleted file mode 100644 index 872e8b7e380325a8c8643ed6e7ee451338eaed92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9426 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 Nbxp1oU%C14{{R?5=Oh3C literal 0 HcmV?d00001 diff --git a/website/client/components/achievements/levelUp.vue b/website/client/components/achievements/levelUp.vue index 44c7b3eff3..b77b8f39aa 100644 --- a/website/client/components/achievements/levelUp.vue +++ b/website/client/components/achievements/levelUp.vue @@ -47,30 +47,33 @@ a.tumblr-share-button(:data-href='socialLevelLink', data-notes='none') - diff --git a/website/client/components/inventory/equipment/index.vue b/website/client/components/inventory/equipment/index.vue index 92fbf02111..cd31e6aed2 100644 --- a/website/client/components/inventory/equipment/index.vue +++ b/website/client/components/inventory/equipment/index.vue @@ -72,13 +72,13 @@ :label="label", :popoverPosition="'top'", ) - template(slot="popoverContent", scope="ctx") - equipmentAttributesPopover(:item="ctx.item") - template(slot="itemBadge", scope="ctx") + template(slot="popoverContent", scope="context") + equipmentAttributesPopover(:item="context.item") + template(slot="itemBadge", scope="context") starBadge( :selected="true", :show="!costume || user.preferences.costume", - @click="equip(ctx.item)", + @click="equip(context.item)", ) div( v-for="group in itemsGroups", @@ -90,29 +90,27 @@ | {{ group.label }} span.badge.badge-pill.badge-default {{items[group.key].length}} - .items - item( - v-for="(item, index) in items[group.key]", - v-if="viewOptions[group.key].open || index < itemsPerLine", - :item="item", - :itemContentClass="'shop_' + item.key", - :emptyItem="!item || item.key.indexOf('_base_0') !== -1", - :key="item.key", - ) - template(slot="itemBadge", scope="ctx") - starBadge( - :selected="activeItems[ctx.item.type] === ctx.item.key", - :show="!costume || user.preferences.costume", - @click="equip(ctx.item)", - ) - template(slot="popoverContent", scope="ctx") - equipmentAttributesPopover(:item="ctx.item") - div(v-if="items[group.key].length === 0") - p(v-once) {{ $t('noGearItemsOfType', { type: group.label }) }} - a.btn.btn-show-more( - v-if="items[group.key].length > itemsPerLine", - @click="viewOptions[group.key].open = !viewOptions[group.key].open" - ) {{ viewOptions[group.key].open ? $t('showLessItems', { type: group.label }) : $t('showAllItems', { type: group.label, items: items[group.key].length }) }} + itemRows( + :items="items[group.key]", + :itemWidth=94, + :itemMargin=24, + :noItemsLabel="$t('noGearItemsOfType', { type: group.label })" + ) + template(slot="item", scope="context") + item( + :item="context.item", + :itemContentClass="'shop_' + context.item.key", + :emptyItem="!context.item || context.item.key.indexOf('_base_0') !== -1", + :key="context.item.key", + ) + template(slot="itemBadge", scope="context") + starBadge( + :selected="activeItems[context.item.type] === context.item.key", + :show="!costume || user.preferences.costume", + @click="equip(context.item)", + ) + template(slot="popoverContent", scope="context") + equipmentAttributesPopover(:item="context.item") + + + diff --git a/website/client/components/inventory/stable/index.vue b/website/client/components/inventory/stable/index.vue index 0405044aaa..91c31c67a0 100644 --- a/website/client/components/inventory/stable/index.vue +++ b/website/client/components/inventory/stable/index.vue @@ -54,7 +54,7 @@ @change="updateHideMissing" ) - .standard-page(v-resize="500", @resized="availableContentWidth = $event.width - 48") + .standard-page .clearfix h1.float-left.mb-0.page-header(v-once) {{ $t('stable') }} @@ -80,41 +80,39 @@ ) h4(v-if="viewOptions[petGroup.key].animalCount != 0") {{ petGroup.label }} - div.items - div( - v-for="pet in pets(petGroup, viewOptions[petGroup.key].open, hideMissing, selectedSortBy, searchTextThrottled, availableContentWidth)", - :key="pet.key", - v-drag.drop.food="pet.key", - @itemDragOver="onDragOver($event, pet)", - @itemDropped="onDrop($event, pet)", - @itemDragLeave="onDragLeave()", - :class="{'last': pet.isLastInRow}" - ) - petItem( - :item="pet", - :itemContentClass="getPetItemClass(pet)", - :popoverPosition="'top'", - :progress="pet.progress", - :emptyItem="!pet.isOwned()", - :showPopover="pet.isOwned()", - :highlightBorder="highlightPet == pet.key", - @click="petClicked(pet)" + itemRows( + :items="pets(petGroup, hideMissing, selectedSortBy, searchTextThrottled)", + :itemWidth=94, + :itemMargin=24, + ) + template(slot="item", scope="context") + div( + v-drag.drop.food="context.item.key", + @itemDragOver="onDragOver($event, context.item)", + @itemDropped="onDrop($event, context.item)", + @itemDragLeave="onDragLeave()", + :class="{'last': context.item.isLastInRow}" ) - span(slot="popoverContent") - div(v-if="pet.isOwned()") - h4.popover-content-title {{ pet.name }} + petItem( + :item="context.item", + :itemContentClass="getPetItemClass(context.item)", + :popoverPosition="'top'", + :progress="context.item.progress", + :emptyItem="!context.item.isOwned()", + :showPopover="context.item.isOwned()", + :highlightBorder="highlightPet == context.item.key", + @click="petClicked(context.item)" + ) + span(slot="popoverContent") + div(v-if="context.item.isOwned()") + h4.popover-content-title {{ context.item.name }} - template(slot="itemBadge", scope="ctx") - starBadge( - :selected="ctx.item.key === currentPet", - :show="ctx.item.isOwned()", - @click="selectPet(ctx.item)", - ) - - .btn.btn-show-more( - @click="viewOptions[petGroup.key].open = !viewOptions[petGroup.key].open", - v-if="viewOptions[petGroup.key].animalCount != 0" - ) {{ $t(viewOptions[petGroup.key].open ? 'showLessAnimals' : 'showAllAnimals', { color: petGroup.label, type: $t('pets')}) }} + template(slot="itemBadge", scope="context") + starBadge( + :selected="context.item.key === currentPet", + :show="context.item.isOwned()", + @click="selectPet(context.item)", + ) h2 | {{ $t('mounts') }} @@ -128,29 +126,28 @@ ) h4(v-if="viewOptions[mountGroup.key].animalCount != 0") {{ mountGroup.label }} - div.items - mountItem( - v-for="mount in mounts(mountGroup, viewOptions[mountGroup.key].open, hideMissing, selectedSortBy, searchTextThrottled, availableContentWidth)", - :item="mount", - :itemContentClass="mount.isOwned() ? ('Mount_Icon_' + mount.key) : 'PixelPaw GreyedOut'", - :key="mount.key", - :popoverPosition="'top'", - :emptyItem="!mount.isOwned()", - :showPopover="mount.isOwned()", - ) - span(slot="popoverContent") - h4.popover-content-title {{ mount.name }} - template(slot="itemBadge", scope="ctx") - starBadge( - :selected="ctx.item.key === currentMount", - :show="mount.isOwned()", - @click="selectMount(ctx.item)", - ) - - .btn.btn-show-more( - @click="viewOptions[mountGroup.key].open = !viewOptions[mountGroup.key].open", - v-if="viewOptions[mountGroup.key].animalCount != 0" - ) {{ $t(viewOptions[mountGroup.key].open ? 'showLessAnimals' : 'showAllAnimals', { color: mountGroup.label, type: $t('mounts')}) }} + itemRows( + :items="mounts(mountGroup, hideMissing, selectedSortBy, searchTextThrottled)", + :itemWidth=94, + :itemMargin=24, + ) + template(slot="item", scope="context") + mountItem( + :item="context.item", + :itemContentClass="context.item.isOwned() ? ('Mount_Icon_' + context.item.key) : 'PixelPaw GreyedOut'", + :key="context.item.key", + :popoverPosition="'top'", + :emptyItem="!context.item.isOwned()", + :showPopover="context.item.isOwned()", + ) + span(slot="popoverContent") + h4.popover-content-title {{ context.item.name }} + template(slot="itemBadge", scope="context") + starBadge( + :selected="context.item.key === currentMount", + :show="context.item.isOwned()", + @click="selectMount(context.item)", + ) drawer( :title="$t('quickInventory')", @@ -189,14 +186,14 @@ :itemWidth=94, :itemMargin=24, ) - template(slot="item", scope="ctx") + template(slot="item", scope="context") foodItem( - :item="ctx.item", - :itemCount="userItems.food[ctx.item.key]", - :active="currentDraggingFood == ctx.item", + :item="context.item", + :itemCount="userItems.food[context.item.key]", + :active="currentDraggingFood == context.item", @itemDragEnd="onDragEnd()", - @itemDragStart="onDragStart($event, ctx.item)", - @itemClick="onFoodClicked($event, ctx.item)" + @itemDragStart="onDragStart($event, context.item)", + @itemClick="onFoodClicked($event, context.item)" ) b-modal#welcome-modal( @@ -231,6 +228,12 @@ button.btn.btn-primary(@click="hatchPet(hatchablePet)") {{ $t('hatch') }} button.btn.btn-secondary.btn-flat(@click="closeHatchPetDialog()") {{ $t('cancel') }} + hatchedPetDialog( + :pet="hatchedPet", + :hideText="true", + @closed="closeHatchedPetDialog()" + ) + div.foodInfo(ref="dragginFoodInfo") div(v-if="currentDraggingFood != null") div.food-icon(:class="'Pet_Food_'+currentDraggingFood.key") @@ -420,6 +423,8 @@ position: absolute; left: -500px; + z-index: 1080; + &.mouse { position: fixed; pointer-events: none @@ -446,17 +451,16 @@ import _each from 'lodash/each'; import _sortBy from 'lodash/sortBy'; - import _take from 'lodash/take'; import _filter from 'lodash/filter'; - import _drop from 'lodash/drop'; import _flatMap from 'lodash/flatMap'; import _throttle from 'lodash/throttle'; - import _last from 'lodash/last'; import Item from '../item'; + import ItemRows from 'client/components/ui/itemRows'; import PetItem from './petItem'; import MountItem from './mountItem.vue'; import FoodItem from './foodItem'; + import HatchedPetDialog from './hatchedPetDialog'; import Drawer from 'client/components/ui/drawer'; import toggleSwitch from 'client/components/ui/toggleSwitch'; import StarBadge from 'client/components/ui/starBadge'; @@ -467,6 +471,8 @@ import DragDropDirective from 'client/directives/dragdrop.directive'; import MouseMoveDirective from 'client/directives/mouseposition.directive'; + import createAnimal from 'client/libs/createAnimal'; + import svgInformation from 'assets/svg/information.svg'; import svgClose from 'assets/svg/close.svg'; @@ -475,10 +481,13 @@ // import deepFreeze from 'client/libs/deepFreeze'; // const specialMounts = + let lastMouseMoveEvent = {}; + export default { components: { PetItem, Item, + ItemRows, FoodItem, MountItem, Drawer, @@ -490,6 +499,7 @@ StarBadge, CountBadge, DrawerSlider, + HatchedPetDialog, }, directives: { resize: ResizeDirective, @@ -521,11 +531,11 @@ highlightPet: '', hatchablePet: null, + hatchedPet: null, foodClickMode: false, currentDraggingFood: null, selectedDrawerTab: 0, - availableContentWidth: 0, }; }, watch: { @@ -581,7 +591,6 @@ petGroups.map((petGroup) => { this.$set(this.viewOptions, petGroup.key, { selected: true, - open: false, animalCount: 0, }); }); @@ -627,7 +636,6 @@ mountGroups.map((mountGroup) => { this.$set(this.viewOptions, mountGroup.key, { selected: true, - open: false, animalCount: 0, }); }); @@ -698,28 +706,7 @@ default: { _each(animalGroup.petSource.eggs, (egg) => { _each(animalGroup.petSource.potions, (potion) => { - let animalKey = `${egg.key}-${potion.key}`; - - animals.push({ - key: animalKey, - eggKey: egg.key, - eggName: egg.text(), - potionKey: potion.key, - potionName: potion.text(), - name: this.content[`${type}Info`][animalKey].text(), - isOwned () { - return userItems[`${type}s`][animalKey] > 0; - }, - mountOwned () { - return userItems.mounts[this.key] > 0; - }, - isAllowedToFeed () { - return type === 'pet' && this.isOwned() && !this.mountOwned(); - }, - isHatchable () { - return userItems.eggs[egg.key] > 0 && userItems.hatchingPotions[potion.key] > 0; - }, - }); + animals.push(createAnimal(egg, potion, type, this.content, userItems)); }); }); } @@ -730,7 +717,7 @@ return animals; }, - listAnimals (animalGroup, type, isOpen, hideMissing, sort, searchText, availableSpace) { + listAnimals (animalGroup, type, hideMissing, sort, searchText) { let animals = this.getAnimalList(animalGroup, type); let isPetList = type === 'pet'; let withProgress = isPetList && animalGroup.key !== 'specialPets'; @@ -770,32 +757,14 @@ } } - let animalRows = []; + let animalRows = withProgress ? _flatMap(animals, (a) => { + let progress = this.userItems[`${type}s`][a.key]; - let itemsPerRow = Math.floor(availableSpace / (94 + 20)); - - let rowsToShow = isOpen ? Math.ceil(animals.length / itemsPerRow) : 1; - - for (let i = 0; i < rowsToShow; i++) { - let skipped = _drop(animals, i * itemsPerRow); - let row = _take(skipped, itemsPerRow); - - let rowWithProgressData = withProgress ? _flatMap(row, (a) => { - let progress = this.userItems[`${type}s`][a.key]; - - return { - ...a, - progress, - }; - }) : row; - - let lastRowItem = _last(rowWithProgressData); - if (lastRowItem) { - lastRowItem.isLastInRow = true; - } - - animalRows.push(...rowWithProgressData); - } + return { + ...a, + progress, + }; + }) : animals; this.viewOptions[animalGroup.key].animalCount = animals.length; @@ -813,12 +782,12 @@ return `${countOwned.length}/${countAll}`; }, - pets (animalGroup, showAll, hideMissing, sortBy, searchText, availableSpace) { - return this.listAnimals(animalGroup, 'pet', showAll, hideMissing, sortBy, searchText, availableSpace); + pets (animalGroup, hideMissing, sortBy, searchText) { + return this.listAnimals(animalGroup, 'pet', hideMissing, sortBy, searchText); }, - mounts (animalGroup, showAll, hideMissing, sortBy, searchText, availableSpace) { - return this.listAnimals(animalGroup, 'mount', showAll, hideMissing, sortBy, searchText, availableSpace); + mounts (animalGroup, hideMissing, sortBy, searchText) { + return this.listAnimals(animalGroup, 'mount', hideMissing, sortBy, searchText); }, getPetItemClass (pet) { @@ -856,6 +825,7 @@ hatchPet (pet) { this.$store.dispatch('common:hatch', {egg: pet.eggKey, hatchingPotion: pet.potionKey}); + this.hatchedPet = pet; this.closeHatchPetDialog(); }, @@ -910,6 +880,9 @@ closeHatchPetDialog () { this.$root.$emit('hide::modal', 'hatching-modal'); }, + closeHatchedPetDialog () { + this.hatchedPet = null; + }, resetHatchablePet ($event) { if (!$event) { @@ -921,6 +894,10 @@ if (this.currentDraggingFood === null || this.currentDraggingFood !== food) { this.currentDraggingFood = food; this.foodClickMode = true; + + this.$nextTick(() => { + this.mouseMoved(lastMouseMoveEvent); + }); } else { this.currentDraggingFood = null; this.foodClickMode = false; @@ -931,6 +908,8 @@ if (this.foodClickMode) { this.$refs.clickFoodInfo.style.left = `${$event.x + 20}px`; this.$refs.clickFoodInfo.style.top = `${$event.y + 20}px`; + } else { + lastMouseMoveEvent = $event; } }, }, diff --git a/website/client/components/shops/market/index.vue b/website/client/components/shops/market/index.vue index de8c378395..b9d8354837 100644 --- a/website/client/components/shops/market/index.vue +++ b/website/client/components/shops/market/index.vue @@ -348,6 +348,7 @@ .npc { position: absolute; left: 0; + top: 0; width: 100%; height: 216px; background: url('~assets/images/shops/market_banner_web_alexnpc.png'); diff --git a/website/client/components/shops/quests/index.vue b/website/client/components/shops/quests/index.vue index 135d8549db..a72f0fe065 100644 --- a/website/client/components/shops/quests/index.vue +++ b/website/client/components/shops/quests/index.vue @@ -87,8 +87,6 @@ :items="questItems(category, selectedSortItemsBy, searchTextThrottled, hideLocked, hidePinned)", :itemWidth=94, :itemMargin=24, - :showAllLabel="$t('showAllGeneric', { type: category.text })", - :showLessLabel="$t('showLessGeneric', { type: category.text })" ) template(slot="item", scope="ctx") shopItem( @@ -275,7 +273,7 @@ height: 216px; .background { - background: url('~assets/images/shops/quest_shop__banner_background_web.png'); + background: url('~assets/images/shops/quest_shop_banner_background.png'); background-repeat: repeat-x; @@ -298,13 +296,15 @@ } .npc { + width: 100%; position: absolute; left: 0; - width: 100%; - height: 216px; + top: 0; + height: 100%; background: url('~assets/images/shops/quest_shop__banner_web_iannpc.png'); background-repeat: no-repeat; + .featured-label { position: absolute; bottom: -14px; diff --git a/website/client/components/shops/seasonal/index.vue b/website/client/components/shops/seasonal/index.vue index 07ce9cf990..81f1557dd0 100644 --- a/website/client/components/shops/seasonal/index.vue +++ b/website/client/components/shops/seasonal/index.vue @@ -281,6 +281,7 @@ .npc { position: absolute; left: 0; + top: 0; width: 100%; height: 216px; background: url('~assets/images/shops/seasonal_shop_closed_banner_web_leslienpc.png'); diff --git a/website/client/components/shops/shopItem.vue b/website/client/components/shops/shopItem.vue index a70f8fc2e8..8071f70686 100644 --- a/website/client/components/shops/shopItem.vue +++ b/website/client/components/shops/shopItem.vue @@ -21,7 +21,7 @@ b-popover( div.price span.svg-icon.inline.icon-16(v-html="icons[getSvgClass()]") - span.price-label(:class="priceType") {{ price }} + span.price-label(:class="getSvgClass()") {{ price }} @@ -76,6 +76,10 @@ b-popover( &.gold { color: $yellow-10 } + + &.hourglasses { + color: $blue-10; + } } span.svg-icon.inline.lock { diff --git a/website/client/components/shops/timeTravelers/index.vue b/website/client/components/shops/timeTravelers/index.vue index 30d5842e6a..415642c0d6 100644 --- a/website/client/components/shops/timeTravelers/index.vue +++ b/website/client/components/shops/timeTravelers/index.vue @@ -78,8 +78,6 @@ :items="travelersItems(category, selectedSortItemsBy, searchTextThrottled, hidePinned)", :itemWidth=94, :itemMargin=24, - :showAllLabel="$t('showAllGeneric', { type: category.text })", - :showLessLabel="$t('showLessGeneric', { type: category.text })" ) template(slot="item", scope="ctx") shopItem( @@ -236,6 +234,7 @@ .npc { position: absolute; left: 0; + top: 0; width: 100%; height: 216px; background: url('~assets/images/shops/time_travelers_open_banner_web_tylerandvickynpcs.png'); diff --git a/website/client/components/ui/itemRows.vue b/website/client/components/ui/itemRows.vue index b09adb0ef6..2dbace0fd9 100644 --- a/website/client/components/ui/itemRows.vue +++ b/website/client/components/ui/itemRows.vue @@ -7,13 +7,24 @@ :item="item", ) + div(v-if="items.length === 0") + p(v-once) {{ noItemsLabel }} + .btn.btn-show-more( @click="showAll = !showAll", v-if="items.length > itemsPerRow()" - ) {{ showAll ? showLessLabel : showAllLabel }} + ) {{ showAll ? $t('showLess') : $t('showMore') }} + + div.fill-height(v-else) + +