mirror of
https://github.com/lrsjng/h5ai.git
synced 2025-05-28 14:04:45 -04:00
Changes context-menu to pure delete function.
This commit is contained in:
parent
91a9621648
commit
0b6b2b0f33
7 changed files with 158 additions and 94 deletions
|
@ -61,11 +61,10 @@ var H5AI_CONFIG = {
|
||||||
},
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Show a context menu when hovering a file entry.
|
Allow entry deletion.
|
||||||
*/
|
*/
|
||||||
"context-menu": {
|
"delete": {
|
||||||
"enabled": true,
|
"enabled": true
|
||||||
"deleteBtn": true
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
30
src/_h5ai/css/inc/delete.less
Normal file
30
src/_h5ai/css/inc/delete.less
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
|
||||||
|
#delete {
|
||||||
|
display: none;
|
||||||
|
.topbar-right;
|
||||||
|
.transition(all 0.2s ease-in-out);
|
||||||
|
|
||||||
|
&.failed {
|
||||||
|
background-color: rgba(255,0,0,0.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#delete-auth {
|
||||||
|
display: none;
|
||||||
|
position: fixed;
|
||||||
|
z-index: 5;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
.vert-gradient(rgb(241,241,241), rgb(228,228,228));
|
||||||
|
border: 1px solid rgb(210,210,210);
|
||||||
|
|
||||||
|
input {
|
||||||
|
display: block;
|
||||||
|
margin: 4px 6px;
|
||||||
|
border: 1px solid rgb(210,210,210);
|
||||||
|
font-family: Ubuntu, sans-serif;
|
||||||
|
color: #555;
|
||||||
|
background-color: rgba(255,255,255,1);
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,6 +19,7 @@ body {
|
||||||
|
|
||||||
@import "inc/topbar";
|
@import "inc/topbar";
|
||||||
@import "inc/download";
|
@import "inc/download";
|
||||||
|
@import "inc/delete";
|
||||||
@import "inc/filter";
|
@import "inc/filter";
|
||||||
|
|
||||||
@import "inc/content";
|
@import "inc/content";
|
||||||
|
|
|
@ -1,84 +0,0 @@
|
||||||
|
|
||||||
modulejs.define('ext/context-menu', ['_', '$', 'core/settings', 'core/entry', 'core/event', 'core/resource'], function (_, $, allsettings, entry, event, resource) {
|
|
||||||
|
|
||||||
var defaults = {
|
|
||||||
enabled: false,
|
|
||||||
deleteBtn: false
|
|
||||||
},
|
|
||||||
|
|
||||||
settings = _.extend({}, defaults, allsettings['context-menu']),
|
|
||||||
|
|
||||||
template = '<div class="context-menu">' +
|
|
||||||
'<ul></ul>' +
|
|
||||||
'</div>',
|
|
||||||
|
|
||||||
// deleteTmp = '<li class="delete">delete</li>',
|
|
||||||
deleteTmp = '<li class="delete"><img src="' + resource.image('delete') + '" /> <span>delete</span></li>',
|
|
||||||
// deleteTmp = '<li class="delete"><img src="' + resource.image('delete') + '" /></li>',
|
|
||||||
|
|
||||||
|
|
||||||
createDeleteBtn = function (entry, $ul) {
|
|
||||||
|
|
||||||
var $del = $(deleteTmp).appendTo($ul);
|
|
||||||
|
|
||||||
$del.on('click', function (event) {
|
|
||||||
|
|
||||||
console.log('delete', entry.label);
|
|
||||||
$.ajax({
|
|
||||||
url: resource.api(),
|
|
||||||
data: {
|
|
||||||
action: 'delete',
|
|
||||||
href: entry.absHref
|
|
||||||
},
|
|
||||||
dataType: 'json',
|
|
||||||
success: function (json) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
createMenu = function (entry) {
|
|
||||||
|
|
||||||
var $html = $(template),
|
|
||||||
$ul = $html.find('ul');
|
|
||||||
|
|
||||||
$html.on('click', function (event) {
|
|
||||||
|
|
||||||
event.stopPropagation();
|
|
||||||
event.preventDefault();
|
|
||||||
});
|
|
||||||
|
|
||||||
createDeleteBtn(entry, $ul);
|
|
||||||
|
|
||||||
entry.$extended.find('a').append($html);
|
|
||||||
},
|
|
||||||
|
|
||||||
init = function () {
|
|
||||||
|
|
||||||
if (!settings.enabled) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
event.sub('entry.mouseenter', function (entry) {
|
|
||||||
|
|
||||||
if (!entry.isFolder()) {
|
|
||||||
var ctx = entry.$extended.find('.context-menu');
|
|
||||||
if (ctx.length) {
|
|
||||||
ctx.show();
|
|
||||||
} else {
|
|
||||||
createMenu(entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
event.sub('entry.mouseleave', function (entry) {
|
|
||||||
|
|
||||||
// entry.$extended.find('.context-menu').remove();
|
|
||||||
entry.$extended.find('.context-menu').hide();
|
|
||||||
});
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
init();
|
|
||||||
});
|
|
107
src/_h5ai/js/inc/ext/delete.js
Normal file
107
src/_h5ai/js/inc/ext/delete.js
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
|
||||||
|
modulejs.define('ext/delete', ['_', '$', 'core/settings', 'core/entry', 'core/event', 'core/resource'], function (_, $, allsettings, entry, event, resource) {
|
||||||
|
|
||||||
|
var defaults = {
|
||||||
|
enabled: false
|
||||||
|
},
|
||||||
|
|
||||||
|
settings = _.extend({}, defaults, allsettings['delete']),
|
||||||
|
|
||||||
|
deleteBtnTemplate = '<li id="delete">' +
|
||||||
|
'<a href="#">' +
|
||||||
|
'<img src="' + resource.image('delete') + '" alt="delete" />' +
|
||||||
|
'<span class="l10n-delete">delete</span>' +
|
||||||
|
'</a>' +
|
||||||
|
'</li>',
|
||||||
|
authTemplate = '<div id="delete-auth">' +
|
||||||
|
'<input id="delete-auth-user" type="text" value="" placeholder="user" />' +
|
||||||
|
'<input id="delete-auth-password" type="text" value="" placeholder="password" />' +
|
||||||
|
'</div>',
|
||||||
|
|
||||||
|
selectedHrefsStr = '',
|
||||||
|
$delete, $img, $deleteAuth, $deleteUser, $deletePassword,
|
||||||
|
|
||||||
|
failed = function () {
|
||||||
|
|
||||||
|
$delete.addClass('failed');
|
||||||
|
setTimeout(function () {
|
||||||
|
$delete.removeClass('failed');
|
||||||
|
}, 1000);
|
||||||
|
},
|
||||||
|
|
||||||
|
handleResponse = function (json) {
|
||||||
|
|
||||||
|
$delete.removeClass('current');
|
||||||
|
$img.attr('src', resource.image('delete'));
|
||||||
|
|
||||||
|
if (!json || json.code) {
|
||||||
|
if (json && json.code === 401) {
|
||||||
|
$deleteAuth
|
||||||
|
.css({
|
||||||
|
left: $delete.offset().left,
|
||||||
|
top: $delete.offset().top + $delete.outerHeight()
|
||||||
|
})
|
||||||
|
.show();
|
||||||
|
$deleteUser.focus();
|
||||||
|
}
|
||||||
|
failed();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
requestDeletion = function (hrefsStr) {
|
||||||
|
|
||||||
|
$delete.addClass('current');
|
||||||
|
$img.attr('src', resource.image('loading.gif', true));
|
||||||
|
$.ajax({
|
||||||
|
url: resource.api(),
|
||||||
|
data: {
|
||||||
|
action: 'delete',
|
||||||
|
hrefs: hrefsStr,
|
||||||
|
user: $deleteUser.val(),
|
||||||
|
password: $deletePassword.val()
|
||||||
|
},
|
||||||
|
dataType: 'json',
|
||||||
|
success: handleResponse
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
onSelection = function (entries) {
|
||||||
|
|
||||||
|
selectedHrefsStr = '';
|
||||||
|
if (entries.length) {
|
||||||
|
selectedHrefsStr = _.map(entries, function (entry) {
|
||||||
|
|
||||||
|
return entry.absHref;
|
||||||
|
}).join(':');
|
||||||
|
$delete.appendTo('#navbar').show();
|
||||||
|
} else {
|
||||||
|
$delete.hide();
|
||||||
|
$deleteAuth.hide();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
init = function () {
|
||||||
|
|
||||||
|
if (!settings.enabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$delete = $(deleteBtnTemplate)
|
||||||
|
.find('a').on('click', function (event) {
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
$deleteAuth.hide();
|
||||||
|
requestDeletion(selectedHrefsStr);
|
||||||
|
}).end()
|
||||||
|
.appendTo('#navbar');
|
||||||
|
$img = $delete.find('img');
|
||||||
|
|
||||||
|
$deleteAuth = $(authTemplate).appendTo('body');
|
||||||
|
$deleteUser = $deleteAuth.find('#delete-auth-user');
|
||||||
|
$deletePassword = $deleteAuth.find('#delete-auth-password');
|
||||||
|
|
||||||
|
event.sub('selection', onSelection);
|
||||||
|
};
|
||||||
|
|
||||||
|
init();
|
||||||
|
});
|
|
@ -24,9 +24,9 @@
|
||||||
// @include "view/viewmode.js"
|
// @include "view/viewmode.js"
|
||||||
|
|
||||||
// @include "ext/autoupdate.js"
|
// @include "ext/autoupdate.js"
|
||||||
// @include "ext/context-menu.js"
|
|
||||||
// @include "ext/crumb.js"
|
// @include "ext/crumb.js"
|
||||||
// @include "ext/custom.js"
|
// @include "ext/custom.js"
|
||||||
|
// @include "ext/delete.js"
|
||||||
// @include "ext/download.js"
|
// @include "ext/download.js"
|
||||||
// @include "ext/dropbox.js"
|
// @include "ext/dropbox.js"
|
||||||
// @include "ext/filter.js"
|
// @include "ext/filter.js"
|
||||||
|
|
|
@ -162,14 +162,25 @@ else if ($action === "upload") {
|
||||||
|
|
||||||
else if ($action === "delete") {
|
else if ($action === "delete") {
|
||||||
|
|
||||||
list($href) = check_keys(array("href"));
|
json_fail(1, "deletion disabled", !$options["delete"]["enabled"]);
|
||||||
|
|
||||||
|
list($hrefs) = check_keys(array("hrefs"));
|
||||||
|
|
||||||
|
$hrefs = explode(":", trim($hrefs));
|
||||||
|
$errors = array();
|
||||||
|
|
||||||
|
foreach ($hrefs as $href) {
|
||||||
$absPath = $h5ai->getAbsPath($href);
|
$absPath = $h5ai->getAbsPath($href);
|
||||||
|
|
||||||
if (unlink($absPath)) {
|
if (!unlink($absPath)) {
|
||||||
json_exit();
|
$errors[] = $href;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($errors->size) {
|
||||||
|
json_fail(1, "deletion failed for some");
|
||||||
} else {
|
} else {
|
||||||
json_fail(1, "deletion failed");
|
json_exit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue