fix up selections to work with ctrl/shift and right-click -- its a bit clunky but works, redid numbering to make that work and condensed down to 1 common code block for context menu for figures and dirs now

This commit is contained in:
2021-07-06 17:40:53 +10:00
parent 95303fafac
commit 3c56cac1ef

View File

@@ -121,7 +121,7 @@
{# rare event of empty folder, still need to show back button #} {# rare event of empty folder, still need to show back button #}
{% if folders and entry_data|length == 0 %} {% if folders and entry_data|length == 0 %}
{% if cwd != root %} {% if cwd != root %}
<figure class="px-1 dir" dir="{{cwd|ParentPath}}"> <figure class="px-1 dir entry" ecnt="1" dir="{{cwd|ParentPath}}">
<span style="font-size:{{(size|int-22)/2}}" class="fa-stack"> <span style="font-size:{{(size|int-22)/2}}" class="fa-stack">
<i style="color:grey" class="fas fa-folder fa-stack-2x"></i> <i style="color:grey" class="fas fa-folder fa-stack-2x"></i>
<i class="fas fa-level-up-alt fa-flip-horizontal fa-stack-1x fa-inverse"></i> <i class="fas fa-level-up-alt fa-flip-horizontal fa-stack-1x fa-inverse"></i>
@@ -139,7 +139,7 @@
{% for obj in entry_data %} {% for obj in entry_data %}
{% if loop.index==1 and folders %} {% if loop.index==1 and folders %}
{% if cwd != root %} {% if cwd != root %}
<figure class="px-1 dir" dir="{{cwd|ParentPath}}"> <figure class="px-1 dir entry" ecnt="{{loop.index}}" dir="{{cwd|ParentPath}}">
<span style="font-size:{{(size|int-22)/2}}" class="fa-stack"> <span style="font-size:{{(size|int-22)/2}}" class="fa-stack">
<i style="color:grey" class="fas fa-folder fa-stack-2x"></i> <i style="color:grey" class="fas fa-folder fa-stack-2x"></i>
<i class="fas fa-level-up-alt fa-flip-horizontal fa-stack-1x fa-inverse"></i> <i class="fas fa-level-up-alt fa-flip-horizontal fa-stack-1x fa-inverse"></i>
@@ -187,7 +187,7 @@
{% endif %} {% endif %}
{% if obj.type.name != "Directory" %} {% if obj.type.name != "Directory" %}
{% if (not folders) or ((obj.in_dir.in_path.path_prefix+'/'+obj.in_dir.rel_path+'/'+obj.name) | TopLevelFolderOf(cwd)) %} {% if (not folders) or ((obj.in_dir.in_path.path_prefix+'/'+obj.in_dir.rel_path+'/'+obj.name) | TopLevelFolderOf(cwd)) %}
<figure id="{{obj.id}}" img="{{loop.index-1}}" class="figure mx-1" path_type="{{obj.in_dir.in_path.type.name}}" size="{{obj.file_details.size_mb}}" hash="{{obj.file_details.hash}}" in_dir="{{obj.in_dir.in_path.path_prefix}}/{{obj.in_dir.rel_path}}" fname="{{obj.name}}" yr="{{obj.file_details.year}}" date="{{obj.file_details.year}}{{"%02d" % obj.file_details.month}}{{"%02d" % obj.file_details.day}}" pretty_date="{{obj.file_details.day}}/{{obj.file_details.month}}/{{obj.file_details.year}}"> <figure id="{{obj.id}}" ecnt="{{loop.index}}" class="figure entry mx-1" path_type="{{obj.in_dir.in_path.type.name}}" size="{{obj.file_details.size_mb}}" hash="{{obj.file_details.hash}}" in_dir="{{obj.in_dir.in_path.path_prefix}}/{{obj.in_dir.rel_path}}" fname="{{obj.name}}" yr="{{obj.file_details.year}}" date="{{obj.file_details.year}}{{"%02d" % obj.file_details.month}}{{"%02d" % obj.file_details.day}}" pretty_date="{{obj.file_details.day}}/{{obj.file_details.month}}/{{obj.file_details.year}}">
{% if obj.type.name=="Image" %} {% if obj.type.name=="Image" %}
<div style="position:relative; width:100%"> <div style="position:relative; width:100%">
<a href="{{obj.in_dir.in_path.path_prefix}}/{{obj.in_dir.rel_path}}/{{obj.name}}"><img class="thumb" height="{{size}}" src="data:image/jpeg;base64,{{obj.file_details.thumbnail}}"></img></a> <a href="{{obj.in_dir.in_path.path_prefix}}/{{obj.in_dir.rel_path}}/{{obj.name}}"><img class="thumb" height="{{size}}" src="data:image/jpeg;base64,{{obj.file_details.thumbnail}}"></img></a>
@@ -222,7 +222,7 @@
{% endif %} {% endif %}
{# if this dir is the toplevel of the cwd, show the folder icon #} {# if this dir is the toplevel of the cwd, show the folder icon #}
{% if dirname| TopLevelFolderOf(cwd) %} {% if dirname| TopLevelFolderOf(cwd) %}
<figure class="px-1 dir" id={{obj.id}} dir="{{dirname}}"> <figure class="px-1 dir entry" id={{obj.id}} ecnt={{loop.index}} dir="{{dirname}}">
<i style="font-size:{{size|int-22}};" class="fas fa-folder"></i> <i style="font-size:{{size|int-22}};" class="fas fa-folder"></i>
<figcaption class="figure-caption text-center text-wrap text-break">{{obj.name}}</figcaption> <figcaption class="figure-caption text-center text-wrap text-break">{{obj.name}}</figcaption>
</figure class="figure"> </figure class="figure">
@@ -404,19 +404,25 @@ function DoSel(e, el)
} }
if( e.shiftKey ) if( e.shiftKey )
{ {
st=Number($('.highlight').first().attr('img')) st=Number($('.highlight').first().attr('ecnt'))
end=Number($('.highlight').last().attr('img')) end=Number($('.highlight').last().attr('ecnt'))
clicked=Number($(el).attr('img')) clicked=Number($(el).attr('ecnt'))
if( ! folders )
{
st -= 1
end -= 1
clicked -= 1
}
// if we shift-click first element, then st/end are NaN, so just highlightthe one clicked // if we shift-click first element, then st/end are NaN, so just highlightthe one clicked
if( isNaN(st) ) if( isNaN(st) )
{ {
$('.figure').slice( clicked, clicked+1 ).addClass('highlight') $('.entry').slice( clicked, clicked+1 ).addClass('highlight')
return return
} }
if( clicked > end ) if( clicked > end )
$('.figure').slice( end, clicked+1 ).addClass('highlight') $('.entry').slice( end, clicked+1 ).addClass('highlight')
else else
$('.figure').slice( clicked, st ).addClass('highlight') $('.entry').slice( clicked, st ).addClass('highlight')
return return
} }
$('.highlight').removeClass('highlight') $('.highlight').removeClass('highlight')
@@ -435,6 +441,24 @@ function SetButtonState() {
} }
} }
function FiguresOrDirsOrBoth() {
var figure=false
var dir=false
$('.highlight').each(function( index ) {
if( $(this).hasClass('figure') ) {
figure=true
}
if( $(this).hasClass('dir') ) {
dir=true
}
} )
if( figure & ! dir )
return "figure"
if( ! figure & dir )
return "dir"
return "both"
}
function SelContainsBinAndNotBin() { function SelContainsBinAndNotBin() {
var bin=false var bin=false
var not_bin=false var not_bin=false
@@ -465,45 +489,25 @@ $('.figure').click( function(e) { DoSel(e, this ); SetButtonState(); return fals
$(document).on('click', function(e) { $('.highlight').removeClass('highlight') ; SetButtonState() }); $(document).on('click', function(e) { $('.highlight').removeClass('highlight') ; SetButtonState() });
// different context menu on directory
$.contextMenu({
selector: '.dir',
build: function($triggerElement, e){
if( NoSel() )
DoSel(e, e.currentTarget )
item_list = {
ai: {
name: "Scan file for faces",
items: {
{% for p in people %}
"ai-{{p.tag}}": {"name": "{{p.tag}}"},
{% endfor %}
"ai-all": {"name": "all"},
}
}
}
return {
callback: function( key, options) {
if( key.startsWith("ai")) { RunAIOnSeln(key) }
},
items: item_list
};
}
});
// different context menu on files // different context menu on files
$.contextMenu({ $.contextMenu({
selector: '.figure', selector: '.entry',
build: function($triggerElement, e){ build: function($triggerElement, e){
if( NoSel() ) // when right-clicking & no selection add one OR deal with ctrl/shift right-lick as it always changes seln
if( NoSel() || e.ctrlKey || e.shiftKey )
DoSel(e, e.currentTarget ) DoSel(e, e.currentTarget )
if( FiguresOrDirsOrBoth() == "figure" )
item_list = { item_list = {
details: { name: "Details..." }, details: { name: "Details..." },
view: { name: "View File" }, view: { name: "View File" },
sep: "---", sep: "---",
move: { name: "Move selected file(s) to new storage folder" }, move: { name: "Move selected file(s) to new storage folder" },
sep2: "---", sep2: "---" }
ai: { else
item_list = {}
item_list['ai'] = {
name: "Scan file for faces", name: "Scan file for faces",
items: { items: {
{% for p in people %} {% for p in people %}
@@ -512,7 +516,7 @@ $.contextMenu({
"ai-all": {"name": "all"}, "ai-all": {"name": "all"},
} }
} }
}
if( SelContainsBinAndNotBin() ) { if( SelContainsBinAndNotBin() ) {
item_list['both']= { name: 'Cannot delete and restore at same time', disabled: true } item_list['both']= { name: 'Cannot delete and restore at same time', disabled: true }
} else { } else {