diff --git a/website/client/assets/scss/item.scss b/website/client/assets/scss/item.scss
index f880f096a5..d9468d9f9d 100644
--- a/website/client/assets/scss/item.scss
+++ b/website/client/assets/scss/item.scss
@@ -46,6 +46,10 @@
&.highlight {
box-shadow: 0 0 8px 8px rgba($black, 0.16), 0 5px 10px 0 rgba($black, 0.12) !important;
}
+
+ &.highlight-border {
+ border-color: $purple-500;
+ }
}
.flat .item {
diff --git a/website/client/assets/scss/modal.scss b/website/client/assets/scss/modal.scss
index 27993d83c9..dc79171453 100644
--- a/website/client/assets/scss/modal.scss
+++ b/website/client/assets/scss/modal.scss
@@ -22,7 +22,6 @@
line-height: 1.2;
text-align: center;
color: $gray-50;
- display: inline-block;
}
.text {
diff --git a/website/client/components/inventory/equipment/equipGearModal.vue b/website/client/components/inventory/equipment/equipGearModal.vue
new file mode 100644
index 0000000000..0a1b884ed4
--- /dev/null
+++ b/website/client/components/inventory/equipment/equipGearModal.vue
@@ -0,0 +1,165 @@
+
+ b-modal#equipgear-modal(
+ :visible="true",
+ v-if="item != null",
+ :hide-header="true",
+ @change="onChange($event)"
+ )
+ div.close
+ span.svg-icon.inline.icon-10(aria-hidden="true", v-html="icons.close", @click="hideDialog()")
+
+ div.content(v-if="item != null")
+
+ div.inner-content
+ avatar(
+ :member="user",
+ :avatarOnly="true",
+ :withBackground="true",
+ :overrideAvatarGear="memberOverrideAvatarGear(item)"
+ )
+
+ h4.title {{ itemText }}
+ div.text(v-html="itemNotes")
+
+ equipmentAttributesGrid.bordered(
+ :item="item",
+ v-if="attributesGridVisible"
+ )
+
+ button.btn.btn-primary(@click="equipItem()") {{ $t(isEquipped ? 'unequip' : 'equip') }}
+
+ div.clearfix(slot="modal-footer")
+
+
+
+
+
+
diff --git a/website/client/components/inventory/equipment/index.vue b/website/client/components/inventory/equipment/index.vue
index cd31e6aed2..48c2d1990b 100644
--- a/website/client/components/inventory/equipment/index.vue
+++ b/website/client/components/inventory/equipment/index.vue
@@ -22,10 +22,14 @@
h1.float-left.mb-0.page-header(v-once) {{ $t('equipment') }}
.float-right
span.dropdown-label {{ $t('sortBy') }}
- b-dropdown(:text="'Sort 1'", right=true)
- b-dropdown-item(href="#") Option 1
- b-dropdown-item(href="#") Option 2
- b-dropdown-item(href="#") Option 3
+ b-dropdown(:text="$t(selectedSortGearBy)", right=true)
+ b-dropdown-item(
+ v-for="sort in sortGearBy",
+ @click="selectedSortGearBy = sort",
+ :active="selectedSortGearBy === sort",
+ :key="sort"
+ ) {{ $t(sort) }}
+
span.dropdown-label {{ $t('groupBy2') }}
b-dropdown(:text="$t(groupBy === 'type' ? 'equipmentType' : 'class')", right=true)
b-dropdown-item(@click="groupBy = 'type'", :active="groupBy === 'type'") {{ $t('equipmentType') }}
@@ -88,10 +92,11 @@
)
h2
| {{ group.label }}
+ |
span.badge.badge-pill.badge-default {{items[group.key].length}}
itemRows(
- :items="items[group.key]",
+ :items="sortItems(items[group.key], selectedSortGearBy)",
:itemWidth=94,
:itemMargin=24,
:noItemsLabel="$t('noGearItemsOfType', { type: group.label })"
@@ -102,28 +107,32 @@
:itemContentClass="'shop_' + context.item.key",
:emptyItem="!context.item || context.item.key.indexOf('_base_0') !== -1",
:key="context.item.key",
+ @click="openEquipDialog(context.item)"
)
template(slot="itemBadge", scope="context")
starBadge(
:selected="activeItems[context.item.type] === context.item.key",
:show="!costume || user.preferences.costume",
- @click="equip(context.item)",
+ @click="openEquipDialog(context.item)",
)
template(slot="popoverContent", scope="context")
equipmentAttributesPopover(:item="context.item")
-
-
+ equipGearModal(
+ :item="gearToEquip",
+ @equipItem="equipItem($event)",
+ @change="changeModalState($event)",
+ :costumeMode="costume",
+ :isEquipped="gearToEquip == null ? false : activeItems[gearToEquip.type] === gearToEquip.key"
+ )
+
diff --git a/website/client/components/ui/drawer.vue b/website/client/components/ui/drawer.vue
index 9602ab93e6..ae52fc6d8c 100644
--- a/website/client/components/ui/drawer.vue
+++ b/website/client/components/ui/drawer.vue
@@ -92,7 +92,7 @@
}
.drawer-slider {
- padding: 12px 0 0 0;
+ padding: 12px 0 0 8px;
overflow-x: auto;
overflow-y: hidden;
white-space: nowrap;
diff --git a/website/client/components/ui/itemRows.vue b/website/client/components/ui/itemRows.vue
index 2dbace0fd9..c05b24a683 100644
--- a/website/client/components/ui/itemRows.vue
+++ b/website/client/components/ui/itemRows.vue
@@ -10,7 +10,7 @@
div(v-if="items.length === 0")
p(v-once) {{ noItemsLabel }}
- .btn.btn-show-more(
+ .btn-flat.btn-show-more(
@click="showAll = !showAll",
v-if="items.length > itemsPerRow()"
) {{ showAll ? $t('showLess') : $t('showMore') }}
diff --git a/website/client/directives/dragdrop.directive.js b/website/client/directives/dragdrop.directive.js
index 03b7cc5ab9..d8aedafb82 100644
--- a/website/client/directives/dragdrop.directive.js
+++ b/website/client/directives/dragdrop.directive.js
@@ -1,8 +1,10 @@
+/*
import {emit} from './directive.common';
+
import _keys from 'lodash/keys';
import _without from 'lodash/without';
-
+*/
/**
* DRAG_GROUP is a static custom value
* KEY_OF_ITEM
@@ -11,14 +13,15 @@ import _without from 'lodash/without';
* v-drag.drop.DRAG_GROUP="KEY_OF_ITEM" @itemDropped="callback" @itemDragOver="optional"
*/
+/*
const DROPPED_EVENT_NAME = 'itemDropped';
const DRAGSTART_EVENT_NAME = 'itemDragStart';
const DRAGEND_EVENT_NAME = 'itemDragEnd';
const DRAGOVER_EVENT_NAME = 'itemDragOver';
const DRAGLEAVE_EVENT_NAME = 'itemDragLeave';
-
+*/
export default {
- bind (el, binding, vnode) {
+ /* bind (el, binding, vnode) {
el.isDropHandler = binding.modifiers.drop === true;
el.dragGroup = _without(_keys(binding.modifiers), 'drop')[0];
el.key = binding.value;
@@ -32,17 +35,20 @@ export default {
};
emit(vnode, DRAGSTART_EVENT_NAME, dragStartEventData);
+
+ if(!el.handleDragEnd) {
+ el.handleDragEnd = () => {
+ let dragEndEventData = {};
+ emit(vnode, DRAGEND_EVENT_NAME, dragEndEventData);
+ };
+
+ // need to add the listener after the drag begin, cause its fired right after start :/
+ setTimeout(function () {
+ el.addEventListener('dragend', el.handleDragEnd);
+ }, 50);
+ }
};
el.addEventListener('dragstart', el.handleDrag);
-
- el.handleDragEnd = () => {
- let dragEndEventData = {};
-
- emit(vnode, DRAGEND_EVENT_NAME, dragEndEventData);
- };
-
-
- el.addEventListener('dragend', el.handleDrag);
} else {
el.handleDragOver = (ev) => {
let dragOverEventData = {
@@ -51,6 +57,7 @@ export default {
event: ev,
};
+ console.info('dragover');
emit(vnode, DRAGOVER_EVENT_NAME, dragOverEventData);
if (dragOverEventData.dropable) {
@@ -62,10 +69,13 @@ export default {
draggingKey: ev.dataTransfer.getData('KEY'),
};
+ console.info('dragdrop');
emit(vnode, DROPPED_EVENT_NAME, dropEventData);
};
el.handleDragLeave = () => {
+
+ console.info('dragleave');
emit(vnode, DRAGLEAVE_EVENT_NAME, {});
};
@@ -73,7 +83,7 @@ export default {
el.addEventListener('dragleave', el.handleDragLeave);
el.addEventListener('drop', el.handleDrop);
}
- },
+ }, */
unbind (el) {
if (!el.isDropHandler) {
diff --git a/website/client/store/actions/common.js b/website/client/store/actions/common.js
index f9adb779bd..ae242fea7b 100644
--- a/website/client/store/actions/common.js
+++ b/website/client/store/actions/common.js
@@ -23,12 +23,11 @@ export function hatch (store, params) {
// .catch((err) => console.error('equip', err));
}
-export function feed (store, params) {
+export async function feed (store, params) {
const user = store.state.user.data;
feedOp(user, {params});
- axios
+ let response = await axios
.post(`/api/v3/user/feed/${params.pet}/${params.food}`);
- // TODO
- // .then((res) => console.log('equip', res))
- // .catch((err) => console.error('equip', err));
+
+ return response.data;
}
diff --git a/website/common/locales/en/gear.json b/website/common/locales/en/gear.json
index 97dea78e86..2d2d71b1b8 100644
--- a/website/common/locales/en/gear.json
+++ b/website/common/locales/en/gear.json
@@ -662,8 +662,8 @@
"armorArmoireYellowPartyDressText": "Yellow Party Dress",
"armorArmoireYellowPartyDressNotes": "Yellow Party Dress: You're perceptive, strong, smart, and so fashionable! Increases Perception, Strength, and Intelligence by <%= attrs %> each. Enchanted Armoire: Yellow Hairbow Set (Item 2 of 2).",
- "headgear": "headgear",
- "headgearCapitalized": "Headgear",
+ "headgear": "helm",
+ "headgearCapitalized": "Helm",
"headBase0Text": "No Helm",
"headBase0Notes": "No headgear.",
diff --git a/website/common/locales/en/newClient.json b/website/common/locales/en/newClient.json
index 53189da793..bda3f7c2c9 100644
--- a/website/common/locales/en/newClient.json
+++ b/website/common/locales/en/newClient.json
@@ -274,5 +274,9 @@
"self_improvement": "Self-Improvement",
"spirituality": "Spirituality",
"time_management": "Time-Management + Accountability",
- "recovery_support_groups": "Recovery + Support Groups"
+ "recovery_support_groups": "Recovery + Support Groups",
+ "equip": "Equip",
+ "unequip": "Unequip",
+ "sortByName": "Name",
+ "haveHatchablePet": "You have a <%= potion %> hatching potion and <%= egg %> egg to hatch this pet! Click the paw print to hatch."
}