Make responsive for closet

fix #89
This commit is contained in:
Pig Fang 2017-11-06 11:07:24 +08:00
parent 4d21fb5b02
commit 594954dbe2
4 changed files with 43 additions and 3 deletions

View File

@ -34,8 +34,11 @@ class ClosetController extends Controller
{ {
$category = $request->input('category', 'skin'); $category = $request->input('category', 'skin');
$page = abs($request->input('page', 1)); $page = abs($request->input('page', 1));
$per_page = (int) $request->input('perPage', 6);
$q = $request->input('q', null); $q = $request->input('q', null);
$per_page = $per_page > 0 ? $per_page : 6;
$items = collect(); $items = collect();
if ($q) { if ($q) {
@ -48,11 +51,11 @@ class ClosetController extends Controller
} }
// pagination // pagination
$total_pages = ceil($items->count() / 6); $total_pages = ceil($items->count() / $per_page);
return response()->json([ return response()->json([
'category' => $category, 'category' => $category,
'items' => $items->forPage($page, 6)->values(), 'items' => $items->forPage($page, $per_page)->values(),
'total_pages' => $total_pages 'total_pages' => $total_pages
]); ]);
} }

View File

@ -152,12 +152,24 @@ describe('tests for "closet" module', () => {
data: { data: {
category: 'skin', category: 'skin',
page: 1, page: 1,
perPage: 0,
q: 'q' q: 'q'
} }
}); });
expect($('#closet-paginator').attr('last-skin-page')).toBe('1'); expect($('#closet-paginator').attr('last-skin-page')).toBe('1');
}); });
it('calculate capacity of closet', () => {
document.body.innerHTML = `
<div id="skin-category" style="width: 900px">
<div class="item" style="width: 50px; margin-right: 10.5px"></div>
</div>
`;
const getCapacityOfCloset = require(modulePath).getCapacityOfCloset;
expect(getCapacityOfCloset()).toBe(28);
});
it('rename item', async () => { it('rename item', async () => {
const fetch = jest.fn() const fetch = jest.fn()
.mockReturnValue(Promise.resolve({ errno: 0, msg: 'success' })); .mockReturnValue(Promise.resolve({ errno: 0, msg: 'success' }));

View File

@ -142,6 +142,7 @@ function reloadCloset(category, page, search) {
data: { data: {
category: category, category: category,
page: page, page: page,
perPage: getCapacityOfCloset(),
q: search q: search
} }
}).then(({ items, category, total_pages }) => { }).then(({ items, category, total_pages }) => {
@ -157,6 +158,18 @@ function reloadCloset(category, page, search) {
}).catch(showAjaxError); }).catch(showAjaxError);
} }
/**
* Get the capacity of closet.
*
* @returns {number}
*/
function getCapacityOfCloset() {
return ~~(
$('#skin-category').width() /
($('.item').width() + parseFloat($('.item').css('margin-right')))
) * 2;
}
function renameClosetItem(tid, oldName) { function renameClosetItem(tid, oldName) {
let newTextureName = ''; let newTextureName = '';
@ -243,6 +256,7 @@ if (typeof require !== 'undefined' && typeof module !== 'undefined') {
setAsAvatar, setAsAvatar,
renderCloset, renderCloset,
reloadCloset, reloadCloset,
getCapacityOfCloset,
renameClosetItem, renameClosetItem,
removeFromCloset, removeFromCloset,
}; };

View File

@ -30,7 +30,7 @@ class ClosetControllerTest extends TestCase
public function testGetClosetData() public function testGetClosetData()
{ {
$textures = factory(Texture::class, 5)->create(); $textures = factory(Texture::class, 10)->create();
$closet = new Closet($this->user->uid); $closet = new Closet($this->user->uid);
$textures->each(function ($texture) use ($closet) { $textures->each(function ($texture) use ($closet) {
$closet->add($texture->tid, $texture->name); $closet->add($texture->tid, $texture->name);
@ -45,6 +45,17 @@ class ClosetControllerTest extends TestCase
'items' => [['tid', 'name', 'type', 'add_at']] 'items' => [['tid', 'name', 'type', 'add_at']]
]); ]);
// Responsive
$result = json_decode($this->call('get', '/user/closet-data?perPage=0')
->getContent(), true);
$this->assertEquals(6, count($result['items']));
$result = json_decode($this->call('get', '/user/closet-data?perPage=8')
->getContent(), true);
$this->assertEquals(8, count($result['items']));
$result = json_decode($this->call('get', '/user/closet-data?perPage=8&page=2')
->getContent(), true);
$this->assertEquals(2, count($result['items']));
// Get capes // Get capes
$cape = factory(Texture::class, 'cape')->create(); $cape = factory(Texture::class, 'cape')->create();
$closet->add($cape->tid, 'custom_name'); $closet->add($cape->tid, 'custom_name');