diff --git a/resources/assets/src/js/__tests__/user.test.js b/resources/assets/src/js/__tests__/user.test.js
index a060f4c2..1fa970ab 100644
--- a/resources/assets/src/js/__tests__/user.test.js
+++ b/resources/assets/src/js/__tests__/user.test.js
@@ -12,6 +12,7 @@ describe('tests for "closet" module', () => {
const fetch = jest.fn()
.mockReturnValueOnce(Promise.resolve({ type: 'skin', hash: 1 }))
.mockReturnValueOnce(Promise.resolve({ type: 'cape', hash: 2 }))
+ .mockReturnValueOnce(Promise.resolve({ type: 'skin', hash: 3 }))
.mockReturnValueOnce(Promise.reject());
const trans = jest.fn(key => key);
const url = jest.fn(path => path);
@@ -55,6 +56,9 @@ describe('tests for "closet" module', () => {
+
`;
await $('#next > .item-body').click();
@@ -65,6 +69,15 @@ describe('tests for "closet" module', () => {
});
expect($('#next').hasClass('item-selected')).toBe(true);
expect(MSP.changeCape).toBeCalledWith('textures/2');
+ expect($('#textures-indicator').text()).toBe('general.cape');
+
+ await $('[tid="3"] > .item-body').click();
+ expect(fetch).toBeCalledWith({
+ type: 'POST',
+ url: 'skinlib/info/3',
+ dataType: 'json'
+ });
+ expect(MSP.changeSkin).toBeCalledWith('textures/3');
expect($('#textures-indicator').text()).toBe('general.skin & general.cape');
await $('#next > .item-body').click();
@@ -400,6 +413,60 @@ describe('tests for "closet" module', () => {
});
expect($.fn.jqPaginator).toBeCalled();
});
+
+ it('set texture', async () => {
+ const fetch = jest.fn()
+ .mockReturnValueOnce(Promise.resolve({ errno: 0, msg: 'success' }))
+ .mockReturnValueOnce(Promise.resolve({ errno: 1, msg: 'warning' }))
+ .mockReturnValueOnce(Promise.reject());
+ const url = jest.fn(path => path);
+ const toastr = {
+ success: jest.fn(),
+ warning: jest.fn(),
+ info: jest.fn()
+ };
+ const swal = jest.fn();
+ const modal = jest.fn();
+ const showAjaxError = jest.fn();
+ window.fetch = fetch;
+ window.url = url;
+ window.toastr = toastr;
+ window.swal = swal;
+ $.fn.modal = modal;
+ window.showAjaxError = showAjaxError;
+
+ document.body.innerHTML = `
+
+
+ `;
+ const setTexture = require(modulePath).setTexture;
+
+ await setTexture();
+ expect(toastr.info).toBeCalledWith('user.emptySelectedPlayer');
+
+ $('input').prop('checked', true);
+ await setTexture();
+ expect(toastr.info).toBeCalledWith('user.emptySelectedTexture');
+
+ $('#textures-indicator').data('skin', 1);
+ $('#textures-indicator').data('cape', 2);
+ await setTexture();
+ expect(fetch).toBeCalledWith({
+ type: 'POST',
+ url: 'user/player/set',
+ dataType: 'json',
+ data: { 'pid': '1', 'tid[skin]': 1, 'tid[cape]': 2 }
+ });
+ expect(swal).toBeCalledWith({ type: 'success', html: 'success' });
+ expect(modal).toBeCalledWith('hide');
+
+ await setTexture();
+ expect(toastr.warning).toBeCalledWith('warning');
+ expect(modal.mock.calls.length).toBe(1);
+
+ await setTexture();
+ expect(showAjaxError).toBeCalled();
+ });
});
describe('tests for "player" module', () => {
@@ -720,59 +787,6 @@ describe('tests for "player" module', () => {
await addNewPlayer();
expect(showAjaxError).toBeCalled();
});
-
- it('set texture', async () => {
- const fetch = jest.fn()
- .mockReturnValueOnce(Promise.resolve({ errno: 0, msg: 'success' }))
- .mockReturnValueOnce(Promise.resolve({ errno: 1, msg: 'warning' }))
- .mockReturnValueOnce(Promise.reject());
- const url = jest.fn(path => path);
- const toastr = {
- success: jest.fn(),
- warning: jest.fn(),
- info: jest.fn()
- };
- const swal = jest.fn();
- const modal = jest.fn();
- const showAjaxError = jest.fn();
- window.fetch = fetch;
- window.url = url;
- window.toastr = toastr;
- window.swal = swal;
- $.fn.modal = modal;
- window.selectedTextures = {};
- window.showAjaxError = showAjaxError;
-
- document.body.innerHTML = `
-
- `;
- const setTexture = require(modulePath).setTexture;
-
- setTexture();
- expect(toastr.info).toBeCalledWith('user.emptySelectedPlayer');
-
- $('input').prop('checked', true);
- setTexture();
- expect(toastr.info).toBeCalledWith('user.emptySelectedTexture');
-
- window.selectedTextures = { skin: 1, cape: 2 };
- await setTexture();
- expect(fetch).toBeCalledWith({
- type: 'POST',
- url: 'user/player/set',
- dataType: 'json',
- data: { 'pid': '1', 'tid[skin]': 1, 'tid[cape]': 2 }
- });
- expect(swal).toBeCalledWith({ type: 'success', html: 'success' });
- expect(modal).toBeCalledWith('hide');
-
- await setTexture();
- expect(toastr.warning).toBeCalledWith('warning');
- expect(modal.mock.calls.length).toBe(1);
-
- await setTexture();
- expect(showAjaxError).toBeCalled();
- });
});
describe('tests for "profile" module', () => {
diff --git a/resources/assets/src/js/user/closet.js b/resources/assets/src/js/user/closet.js
index 94d006ad..850b0bdc 100644
--- a/resources/assets/src/js/user/closet.js
+++ b/resources/assets/src/js/user/closet.js
@@ -2,13 +2,12 @@
'use strict';
-var selectedTextures = [];
-
$(document).ready(initCloset);
$('body').on('click', '.item-body', async function () {
$('.item-selected').parent().removeClass('item-selected');
let $item = $(this).parent();
+ const $indicator = $('#textures-indicator');
$item.addClass('item-selected');
@@ -23,16 +22,14 @@ $('body').on('click', '.item-body', async function () {
if (type == 'cape') {
MSP.changeCape(url(`textures/${hash}`));
- selectedTextures['cape'] = tid;
+ $indicator.data('cape', tid);
} else {
MSP.changeSkin(url(`textures/${hash}`));
- selectedTextures['skin'] = tid;
+ $indicator.data('skin', tid);
}
- let skin = selectedTextures['skin'],
- cape = selectedTextures['cape'];
-
- let $indicator = $('#textures-indicator');
+ const skin = $indicator.data('skin');
+ const cape = $indicator.data('cape');
if (skin !== undefined && cape !== undefined) {
$indicator.text(`${trans('general.skin')} & ${trans('general.cape')}`);
@@ -299,6 +296,45 @@ async function setAsAvatar(tid) {
}
}
+async function setTexture() {
+ const $indicator = $('#textures-indicator');
+ let pid = 0,
+ skin = $indicator.data('skin'),
+ cape = $indicator.data('cape');
+
+ $('input[name="player"]').each(function(){
+ if (this.checked) pid = this.id;
+ });
+
+ if (! pid) {
+ toastr.info(trans('user.emptySelectedPlayer'));
+ } else if (skin == undefined && cape == undefined) {
+ toastr.info(trans('user.emptySelectedTexture'));
+ } else {
+ try {
+ const { errno, msg } = await fetch({
+ type: 'POST',
+ url: url('user/player/set'),
+ dataType: 'json',
+ data: {
+ 'pid': pid,
+ 'tid[skin]': skin,
+ 'tid[cape]': cape
+ }
+ });
+
+ if (errno == 0) {
+ swal({ type: 'success', html: msg });
+ $('#modal-use-as').modal('hide');
+ } else {
+ toastr.warning(msg);
+ }
+ } catch (error) {
+ showAjaxError(error);
+ }
+ }
+}
+
if (typeof require !== 'undefined' && typeof module !== 'undefined') {
module.exports = {
setAsAvatar,
@@ -308,5 +344,6 @@ if (typeof require !== 'undefined' && typeof module !== 'undefined') {
renameClosetItem,
removeFromCloset,
initCloset,
+ setTexture,
};
}
diff --git a/resources/assets/src/js/user/player.js b/resources/assets/src/js/user/player.js
index 1409371e..954bff41 100644
--- a/resources/assets/src/js/user/player.js
+++ b/resources/assets/src/js/user/player.js
@@ -1,4 +1,4 @@
-/* global MSP, defaultSkin, selectedTextures */
+/* global MSP, defaultSkin */
'use strict';
@@ -204,47 +204,8 @@ async function addNewPlayer() {
}
}
-async function setTexture() {
- let pid = 0,
- skin = selectedTextures['skin'],
- cape = selectedTextures['cape'];
-
- $('input[name="player"]').each(function(){
- if (this.checked) pid = this.id;
- });
-
- if (! pid) {
- toastr.info(trans('user.emptySelectedPlayer'));
- } else if (skin == undefined && cape == undefined) {
- toastr.info(trans('user.emptySelectedTexture'));
- } else {
- try {
- const { errno, msg } = await fetch({
- type: 'POST',
- url: url('user/player/set'),
- dataType: 'json',
- data: {
- 'pid': pid,
- 'tid[skin]': skin,
- 'tid[cape]': cape
- }
- });
-
- if (errno == 0) {
- swal({ type: 'success', html: msg });
- $('#modal-use-as').modal('hide');
- } else {
- toastr.warning(msg);
- }
- } catch (error) {
- showAjaxError(error);
- }
- }
-}
-
if (typeof require !== 'undefined' && typeof module !== 'undefined') {
module.exports = {
- setTexture,
addNewPlayer,
clearTexture,
deletePlayer,