Skip to content

Commit 9e00f18

Browse files
committed
implement breadcrumbs
1 parent e171996 commit 9e00f18

File tree

3 files changed

+64
-29
lines changed

3 files changed

+64
-29
lines changed

public/css/lfm.css

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,15 @@ a {
4646
font-size: 24px;
4747
}
4848

49+
.breadcrumb-item:not(.active) {
50+
transition: .2s color;
51+
}
52+
53+
.breadcrumb-item:not(.active):hover {
54+
cursor: pointer;
55+
color: #75C7C3;
56+
}
57+
4958
#main {
5059
width: 100%;
5160
}

public/js/script.js

Lines changed: 49 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ $(document).ready(function () {
8787
.attr('data-multiple', action.multiple)
8888
.append($('<i>').addClass('fas fa-fw fa-' + action.icon))
8989
.append($('<span>').text(action.label))
90+
.click(function () {
91+
window[$(this).data('action')](action.multiple ? getSelectedItems() : getOneSelectedElement());
92+
})
9093
)
9194
);
9295
});
@@ -96,6 +99,10 @@ $(document).ready(function () {
9699
$('<a>').addClass('dropdown-item').attr('data-sortby', sort.by)
97100
.append($('<i>').addClass('fas fa-fw fa-' + sort.icon))
98101
.append($('<span>').text(sort.label))
102+
.click(function() {
103+
sort_type = sort.by;
104+
loadItems();
105+
})
99106
);
100107
});
101108
loadFolders();
@@ -171,33 +178,10 @@ $(document).on('click', '[data-display]', function() {
171178
loadItems();
172179
});
173180

174-
$(document).on('click', '[data-sortby]', function() {
175-
sort_type = $(this).data('sortby');
176-
loadItems();
177-
});
178-
179-
$(document).on('click', '[data-action]', function () {
180-
var dataToProcess = $(this).data('multiple') ? getSelectedItems() : getOneSelectedElement();
181-
182-
window[$(this).data('action')](dataToProcess);
183-
});
184-
185181
// ======================
186182
// == Folder actions ==
187183
// ======================
188184

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'));
193-
194-
if (clickedElement.is_file) {
195-
use(getSelectedItems());
196-
} else {
197-
goTo(clickedElement.url);
198-
}
199-
});
200-
201185
function getOneSelectedElement(orderOfItem) {
202186
var index = orderOfItem !== undefined ? orderOfItem : selected[0];
203187
return items[index];
@@ -306,7 +290,7 @@ var refreshFoldersAndItems = function (data) {
306290
var hideNavAndShowEditor = function (data) {
307291
$('#nav-buttons > ul').addClass('d-none');
308292
$('#content').html(data).removeClass('preserve_actions_space');
309-
$('#actions').addClass('d-none');
293+
clearSelected();
310294
}
311295

312296
function loadFolders() {
@@ -323,6 +307,7 @@ function loadItems() {
323307
.done(function (data) {
324308
selected = [];
325309
var response = JSON.parse(data);
310+
var working_dir = response.working_dir;
326311
items = response.items;
327312
var hasItems = items.length !== 0;
328313
$('#empty').toggleClass('d-none', hasItems);
@@ -332,11 +317,17 @@ function loadItems() {
332317
$('#content').addClass(response.display).addClass('preserve_actions_space');
333318

334319
items.forEach(function (item, index) {
335-
items[(new Date()).getTime()] = item;
336-
337320
var template = $('#item-template').clone()
338321
.removeAttr('id class')
339-
.attr('data-id', index);
322+
.attr('data-id', index)
323+
.click(toggleSelected)
324+
.dblclick(function (e) {
325+
if (item.is_file) {
326+
use(getSelectedItems());
327+
} else {
328+
goTo(item.url);
329+
}
330+
});
340331

341332
if (item.thumb_url) {
342333
var image = $('<div>').css('background-image', 'url("' + item.thumb_url + '?timestamp=' + item.time + '")');
@@ -351,9 +342,38 @@ function loadItems() {
351342
$('#content').append(template);
352343
});
353344
}
345+
354346
$('#nav-buttons > ul').removeClass('d-none');
355-
$('#working_dir').val(response.working_dir);
356-
console.log('Current working_dir : ' + $('#working_dir').val());
347+
348+
$('#working_dir').val(working_dir);
349+
console.log('Current working_dir : ' + working_dir);
350+
var breadcrumbs = [];
351+
var validSegments = working_dir.split('/').filter(function (e) { return e; });
352+
validSegments.forEach(function (segment, index) {
353+
if (index === 0) {
354+
// set root folder name as the first breadcrumb
355+
breadcrumbs.push($("[data-path='/" + segment + "']").text());
356+
} else {
357+
breadcrumbs.push(segment);
358+
}
359+
});
360+
361+
$('#breadcrumbs > ol').html('');
362+
breadcrumbs.forEach(function (breadcrumb, index) {
363+
var li = $('<li>').addClass('breadcrumb-item').text(breadcrumb);
364+
365+
if (index === breadcrumbs.length - 1) {
366+
li.addClass('active').attr('aria-current', 'page');
367+
} else {
368+
li.click(function () {
369+
// go to corresponding path
370+
goTo('/' + validSegments.slice(0, 1 + index).join('/'));
371+
});
372+
}
373+
374+
$('#breadcrumbs > ol').append(li);
375+
});
376+
357377
var atRootFolder = getPreviousDir() == '';
358378
$('#to-previous').toggleClass('d-none invisible-lg', atRootFolder);
359379
$('#show_tree').toggleClass('d-none', !atRootFolder).toggleClass('d-block', atRootFolder);

src/views/index.blade.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,12 @@
7979
<div id="main">
8080
<div id="alerts"></div>
8181

82+
<nav aria-label="breadcrumb" class="d-none d-lg-block" id="breadcrumbs">
83+
<ol class="breadcrumb">
84+
<li class="breadcrumb-item invisible">Home</li>
85+
</ol>
86+
</nav>
87+
8288
<div id="empty" class="d-none">
8389
<i class="far fa-folder-open"></i>
8490
{{ trans('laravel-filemanager::lfm.message-empty') }}

0 commit comments

Comments
 (0)