mirror of
https://github.com/lrsjng/h5ai.git
synced 2025-03-19 12:00:01 +01:00
Changes context-menu to pure delete function.
This commit is contained in:
parent
91a9621648
commit
0b6b2b0f33
@ -61,11 +61,10 @@ var H5AI_CONFIG = {
|
||||
},
|
||||
|
||||
/*
|
||||
Show a context menu when hovering a file entry.
|
||||
Allow entry deletion.
|
||||
*/
|
||||
"context-menu": {
|
||||
"enabled": true,
|
||||
"deleteBtn": true
|
||||
"delete": {
|
||||
"enabled": 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/download";
|
||||
@import "inc/delete";
|
||||
@import "inc/filter";
|
||||
|
||||
@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 "ext/autoupdate.js"
|
||||
// @include "ext/context-menu.js"
|
||||
// @include "ext/crumb.js"
|
||||
// @include "ext/custom.js"
|
||||
// @include "ext/delete.js"
|
||||
// @include "ext/download.js"
|
||||
// @include "ext/dropbox.js"
|
||||
// @include "ext/filter.js"
|
||||
|
@ -162,14 +162,25 @@ else if ($action === "upload") {
|
||||
|
||||
else if ($action === "delete") {
|
||||
|
||||
list($href) = check_keys(array("href"));
|
||||
json_fail(1, "deletion disabled", !$options["delete"]["enabled"]);
|
||||
|
||||
$absPath = $h5ai->getAbsPath($href);
|
||||
list($hrefs) = check_keys(array("hrefs"));
|
||||
|
||||
if (unlink($absPath)) {
|
||||
json_exit();
|
||||
$hrefs = explode(":", trim($hrefs));
|
||||
$errors = array();
|
||||
|
||||
foreach ($hrefs as $href) {
|
||||
$absPath = $h5ai->getAbsPath($href);
|
||||
|
||||
if (!unlink($absPath)) {
|
||||
$errors[] = $href;
|
||||
}
|
||||
}
|
||||
|
||||
if ($errors->size) {
|
||||
json_fail(1, "deletion failed for some");
|
||||
} else {
|
||||
json_fail(1, "deletion failed");
|
||||
json_exit();
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user