1
0
mirror of https://github.com/misterunknown/ifm.git synced 2025-08-31 19:31:44 +02:00

implemented multiselect (ctrl+click) and delete (del on keyboard)

This commit is contained in:
Marco Dickert
2017-02-16 17:40:58 +01:00
parent aa21250a75
commit 6264b33c01
2 changed files with 52 additions and 76 deletions

64
ifm.php
View File

@@ -453,13 +453,9 @@ function IFM() {
.append( content );
modalDialog.append( modalContent );
modal.append( modalDialog );
$( document.body ).prepend( modal );
$( document.body ).append( modal );
modal.modal();
modal.on( 'hide.bs.modal', function () {
self.fileChanged = false;
self.editor = null;
$( this ).remove();
});
modal.on('hide.bs.modal', function () { $(this).remove(); });
};
this.hideModal = function() {
@@ -467,7 +463,6 @@ function IFM() {
};
this.refreshFileTable = function () {
if(document.getElementById("multiseloptions"))$("#multiseloptions").remove();
var id=ifm.generateGuid();
ifm.task_add("Refresh", id);
$.ajax({
@@ -484,19 +479,13 @@ function IFM() {
this.rebuildFileTable = function( data ) {
var newRows = $(document.createElement('tbody'));
for(i=0;i<data.length;i++) {
var newrow = '<tr class="clickable-row">';
var multisel = '';
if(self.config.multiselect == 1) {
multisel = '<input type="checkbox" ';
multisel += (!ifm.inArray(data[i].name, ["..", "."]))?'id="'+data[i].name+'" name="multisel"':'style="visibility:hidden"';
multisel += '>';
}
var newrow = '<tr class="clickable-row" data-filename="'+data[i].name+'">';
if(data[i].type=="file") {
newrow += '<td>'+multisel+'<a href="'+self.pathCombine(ifm.currentDir,data[i].name)+'" ';
newrow += '<td><a href="'+self.pathCombine(ifm.currentDir,data[i].name)+'" ';
if( data[i].icon.indexOf( 'file-image' ) !== -1 ) newrow += 'data-toggle="tooltip" title="<img src=\''+self.pathCombine(self.currentDir,data[i].name)+'\' class=\'imgpreview\'>"';
newrow += '><span class="'+data[i].icon+'"></span> '+data[i].name+'</a></td>';
} else {
newrow += '<td>'+multisel+'<a onclick="ifm.changeDirectory(\''+data[i].name+'\')"><span class="'+data[i].icon+'"></span> ';
newrow += '<td><a onclick="ifm.changeDirectory(\''+data[i].name+'\')"><span class="'+data[i].icon+'"></span> ';
if( data[i].name == ".." ) newrow += "[ up ]";
else newrow += data[i].name;
newrow += '</a></td>';
@@ -959,16 +948,6 @@ function IFM() {
{ message: m },
{ type: msgType, delay: 5000, mouse_over: 'pause', offset: { x: 15, y: 65 } }
);
// var message = '<div id="mess"><div class="';
// if(t == "e") message += "message_error";
// else if(t == "s") message += "message_successful";
// else message += "message";
// message += '">'+m+'</div></div>';
// $(document.body).prepend(message);
// $("#mess").delay(2000).fadeOut('slow');
// setTimeout(function() { // remove the message from the DOM after 3 seconds
// $('#mess').remove();
// }, 3000);
};
this.pathCombine = function(a, b) {
if(a == "" && b == "") return "";
@@ -990,8 +969,8 @@ function IFM() {
this.hideSaveQuestion = function() {
$("#savequestion").remove();
};
this.handleMultiSelect = function() {
var amount = $("input[name=multisel]:checked").length;
this.handleMultiselect = function() {
var amount = $("#filetable tr.active").length;
if(amount > 0) {
if(document.getElementById("multiseloptions")===null) {
$(document.body).prepend('<div id="multiseloptions">\
@@ -1010,21 +989,23 @@ function IFM() {
$("#multiseloptions").remove();
}
};
this.multiDeleteDialog = function() {
var form = '<form id="deleteFile"><div class="modal-body"><label>Do you really want to delete these '+$('#filetable tr.active').length+' files?</label>';
form += '</div><div class="modal-footer"><button type="button" class="btn btn-danger" onclick="ifm.multiDelete();ifm.hideModal();return false;">Yes</button>';
form += '<button type="button" class="btn btn-default" onclick="ifm.hideModal();return false;">No</button></div></form>';
self.showModal( form );
};
this.multiDelete = function() {
var jel = $("input[name=multisel]:checked");
if(jel.length == 0) {
ifm.showMessage("No files chosen");
return;
}
var ids = [];
for(var i = 0; i < jel.length; i++) ids.push(jel[i].id);
var elements = $('#filetable tr.active');
var filenames = [];
for(var i=0;typeof(elements[i])!='undefined';filenames.push(elements[i++].getAttribute('data-filename')));
$.ajax({
url: ifm.IFM_SCFN,
url: self.IFM_SCFN,
type: "POST",
data: ({
api: "deleteMultipleFiles",
dir: ifm.currentDir,
filenames: ids
dir: self.currentDir,
filenames: filenames
}),
dataType: "json",
success: function(data) {
@@ -1077,6 +1058,12 @@ function IFM() {
if( event.state && event.state.dir ) dir = event.state.dir;
self.changeDirectory( dir, { pushState: false, absolute: true } );
};
this.handleKeystrokes = function( event ) {
// bind 'del' key
if( event.keyCode == 127 && $('#filetable tr.active').length > 0 ) {
self.multiDeleteDialog();
}
}
// static button bindings and filetable initial filling
this.init = function() {
// bind static buttons
@@ -1092,6 +1079,7 @@ function IFM() {
$("#upload").click(function(){
self.uploadFileDialog();
});
$(document).on( 'keypress', self.handleKeystrokes );
// handle history manipulation
window.onpopstate = self.historyPopstateHandler;