Skip to content

Commit 8a2b9d8

Browse files
committed
implement multiple selection toggle button
1 parent 1163966 commit 8a2b9d8

File tree

3 files changed

+59
-40
lines changed

3 files changed

+59
-40
lines changed

public/css/lfm.css

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ a {
4545
@media screen and (min-width: 992px) {
4646
#main {
4747
width: calc(100% - 300px);
48-
margin-left: 1rem;
48+
/*margin-left: 1rem;*/
49+
padding: 1rem;
4950
}
5051

5152
.invisible-lg {

public/js/script.js

Lines changed: 52 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
var show_list;
22
var show_tree = false;
33
var sort_type = 'alphabetic';
4-
var multi_selection_enabled = true;
4+
var multi_selection_enabled = false;
55
var selected = [];
66
var items = [];
77

@@ -31,14 +31,36 @@ $.fn.fab = function (options) {
3131
});
3232
};
3333

34-
Array.prototype.toggleElement = function (element) {
35-
var element_index = this.indexOf(element);
34+
function toggleSelected (e) {
35+
if (!multi_selection_enabled) {
36+
selected = [];
37+
}
38+
39+
var sequence = $(e.target).closest('a').data('id');
40+
var element_index = selected.indexOf(sequence);
3641
if (element_index === -1) {
37-
this.push(element);
42+
selected.push(sequence);
3843
} else {
39-
this.splice(element_index, 1);
44+
selected.splice(element_index, 1);
4045
}
41-
};
46+
47+
updateSelectedStyle();
48+
}
49+
50+
function clearSelected () {
51+
selected = [];
52+
53+
updateSelectedStyle();
54+
}
55+
56+
function updateSelectedStyle() {
57+
items.forEach(function (item, index) {
58+
$('[data-id=' + index + ']')
59+
.find('.square')
60+
.toggleClass('selected', selected.indexOf(index) > -1);
61+
});
62+
toggleActions();
63+
}
4264

4365
$(document).ready(function () {
4466
$('#fab').fab({
@@ -98,6 +120,14 @@ $(document).ready(function () {
98120

99121
$('#multi_selection_toggle').click(function () {
100122
multi_selection_enabled = !multi_selection_enabled;
123+
124+
$('#multi_selection_toggle i')
125+
.toggleClass('fa-check-square', multi_selection_enabled)
126+
.toggleClass('fa-square', !multi_selection_enabled);
127+
128+
if (!multi_selection_enabled) {
129+
clearSelected();
130+
}
101131
});
102132

103133
$('#to-previous').click(function () {
@@ -147,46 +177,36 @@ $(document).on('click', '[data-sortby]', function() {
147177
});
148178

149179
$(document).on('click', '[data-action]', function () {
150-
if ($(this).data('multiple')) {
151-
window[$(this).data('action')](getSelectedItems());
152-
} else {
153-
window[$(this).data('action')](getOneSelectedElement());
154-
}
180+
var dataToProcess = $(this).data('multiple') ? getSelectedItems() : getOneSelectedElement();
181+
182+
window[$(this).data('action')](dataToProcess);
155183
});
156184

157185
// ======================
158186
// == Folder actions ==
159187
// ======================
160188

161-
$(document).on('click', '#content a', function (e) {
162-
var element = $(e.target).closest('a');
189+
$(document).on('click', '#content a', toggleSelected);
190+
191+
$(document).on('dblclick', '#content a', function (e) {
192+
var clickedElement = getOneSelectedElement($(e.target).closest('a').data('id'));
163193

164-
if (multi_selection_enabled) {
165-
selected.toggleElement(element.data('id'));
166-
element.find('.square').toggleClass('selected');
167-
toggleActions();
194+
if (clickedElement.is_file) {
195+
use(getSelectedItems());
168196
} else {
169-
if (element.is_file) {
170-
use(getOneSelectedElement().url);
171-
} else {
172-
goTo(getOneSelectedElement().url);
173-
}
197+
goTo(clickedElement.url);
174198
}
175199
});
176200

177-
function getOneSelectedElement(item_id) {
178-
if (item_id === undefined) {
179-
item_id = selected[0];
180-
}
181-
return items[item_id];
201+
function getOneSelectedElement(orderOfItem) {
202+
return items[orderOfItem || selected[0]];
182203
}
183204

184205
function getSelectedItems() {
185-
var arr_objects = [];
186-
selected.forEach(function (id, index) {
206+
return selected.reduce(function (arr_objects, id) {
187207
arr_objects.push(getOneSelectedElement(id));
188-
});
189-
return arr_objects;
208+
return arr_objects
209+
}, []);
190210
}
191211

192212
function toggleActions() {
@@ -454,9 +474,7 @@ function preview(items) {
454474
}
455475

456476
function move(items) {
457-
performLfmRequest('move', {
458-
items: items.map(function (item) { return item.name; })
459-
})
477+
performLfmRequest('move', { items: items.map(function (item) { return item.name; }) })
460478
.done(refreshFoldersAndItems);
461479
}
462480

src/views/index.blade.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,19 @@
3333
<a class="navbar-brand d-block d-lg-none" id="show_tree">
3434
<i class="fas fa-bars fa-fw"></i>
3535
</a>
36-
<a class="navbar-brand">{{ trans('laravel-filemanager::lfm.nav-home') }}</a>
36+
<a class="navbar-brand d-block d-lg-none">{{ trans('laravel-filemanager::lfm.nav-home') }}</a>
3737
<a id="loading" class="navbar-brand"><i class="fas fa-spinner fa-spin"></i></a>
3838
<a class="navbar-toggler collapsed border-0 px-1 py-2 m-0 ml-auto" data-toggle="collapse" data-target="#nav-buttons">
3939
<i class="fas fa-cog fa-fw"></i>
4040
</a>
4141
<div class="collapse navbar-collapse" id="nav-buttons">
4242
<ul class="navbar-nav ml-auto">
43-
{{-- <li>
44-
<a id="multi_selection_toggle">
45-
<i class="fa fa-check-square fa-fw"></i>
43+
<li class="nav-item">
44+
<a class="nav-link" id="multi_selection_toggle">
45+
<i class="fa fa-square fa-fw"></i>
4646
<span>{{ trans('laravel-filemanager::lfm.menu-multiple') }}</span>
4747
</a>
48-
</li> --}}
48+
</li>
4949
<li class="nav-item">
5050
<a class="nav-link" data-display="grid">
5151
<i class="fas fa-th-large fa-fw"></i>

0 commit comments

Comments
 (0)