-
-
@@ -98,6 +116,7 @@ export default {
default: null,
},
level: Number,
+ neighboursSelected: Object,
},
setup(props, { emit }) {
const settings = inject(settingsInjectionKey);
@@ -106,6 +125,8 @@ export default {
const showEntries = ref(false);
const directoryViewRef = ref();
+ const selectedClasses = ref([]);
+
const doubleClickCallback = () => {
if (directoryLike.value) {
emit('cd', props.entry.path);
@@ -128,6 +149,16 @@ export default {
const getSelected = () => directoryViewRef.value?.getSelected?.() ?? [];
+ const selectAll = () => {
+ directoryViewRef.value?.selection.selectAll();
+ }
+
+ const deselectAllForward = () => {
+ directoryViewRef.value?.selection.deselectAllForward();
+ }
+
+ const escapeName = (string) => string.replace(/[^ -~]/gi, c => `
${JSON.stringify(c).replace(/^['"]|['"]$/g, '')}`)
+
watch(props.entry, () => {
if (props.entry.type === 'directory' || (props.entry.type === 'symbolic link' && props.entry.target?.type === 'directory')) {
icon.value = FolderIcon;
@@ -138,16 +169,27 @@ export default {
}
}, { immediate: true });
+ watch([() => props.neighboursSelected, () => props.entry.selected, () => settings.directoryView?.view], () => selectedClasses.value = [
+ 'border-dashed border-red-600/50 first:border-l-2 last:border-r-2',
+ props.entry.selected ? 'bg-red-600/5 first:border-l-red-600/50 last:border-r-red-600/50' : 'first:border-l-transparent last:border-r-transparent',
+ props.entry.selected && (!props.neighboursSelected.above || settings.directoryView?.view !== 'list') ? 'border-t-2' : 'border-t-0',
+ props.entry.selected && (!props.neighboursSelected.below || settings.directoryView?.view !== 'list') ? 'border-b-2' : 'border-b-0',
+ ], { immediate: true, deep: true });
+
return {
settings,
icon,
directoryLike,
+ selectedClasses,
showEntries,
directoryViewRef,
doubleClickCallback,
getEntries,
toggleShowEntries,
getSelected,
+ selectAll,
+ deselectAllForward,
+ escapeName,
DirectoryEntryList,
nextTick,
}
@@ -169,6 +211,7 @@ export default {
'toggleSelected',
'startProcessing',
'stopProcessing',
+ 'deselectAll',
]
}