drupal-civicrm/sites/all/modules/civicrm/packages/kcfinder/js/091.menus.js
2018-01-14 13:10:16 +00:00

589 lines
21 KiB
JavaScript

/** This file is part of KCFinder project
*
* @desc Context menus
* @package KCFinder
* @version 3.12
* @author Pavel Tzonkov <sunhater@sunhater.com>
* @copyright 2010-2014 KCFinder Project
* @license http://opensource.org/licenses/GPL-3.0 GPLv3
* @license http://opensource.org/licenses/LGPL-3.0 LGPLv3
* @link http://kcfinder.sunhater.com
*/
_.menu = {
init: function() {
$('#menu').html("<ul></ul>").css('display', 'none');
},
addItem: function(href, label, callback, denied) {
if (typeof denied == "undefined")
denied = false;
$('#menu ul').append('<li><a href="' + href + '"' + (denied ? ' class="denied"' : "") + '><span>' + label + '</span></a></li>');
if (!denied && $.isFunction(callback))
$('#menu a[href="' + href + '"]').click(function() {
_.menu.hide();
return callback();
});
},
addDivider: function() {
if ($('#menu ul').html().length)
$('#menu ul').append("<li>-</li>");
},
show: function(e) {
var dlg = $('#menu'),
ul = $('#menu ul');
if (ul.html().length) {
dlg.find('ul').first().menu();
if (typeof e != "undefined") {
var left = e.pageX,
top = e.pageY,
win = $(window);
if ((dlg.outerWidth() + left) > win.width())
left = win.width() - dlg.outerWidth();
if ((dlg.outerHeight() + top) > win.height())
top = win.height() - dlg.outerHeight();
dlg.hide().css({
left: left,
top: top,
width: ""
}).fadeIn('fast');
} else
dlg.fadeIn('fast');
} else
ul.detach();
},
hide: function() {
$('#clipboard').removeClass('selected');
$('div.folder > a > span.folder').removeClass('context');
$('#menu').hide().css('width', "").html("").data('title', null).unbind().click(function() {
return false;
});
$(document).unbind('keydown').keydown(function(e) {
return !_.selectAll(e);
});
}
};
// FILE CONTEXT MENU
_.menuFile = function(file, e) {
_.menu.init();
var data = file.data(),
files = $('.file.selected').get();
// MULTIPLE FILES MENU
if (file.hasClass('selected') && files.length && (files.length > 1)) {
var thumb = false,
notWritable = 0,
cdata;
$.each(files, function(i, cfile) {
cdata = $(cfile).data();
if (cdata.thumb) thumb = true;
if (!data.writable) notWritable++;
});
if (_.opener.callBackMultiple) {
// SELECT FILES
_.menu.addItem("kcact:pick", _.label("Select"), function() {
_.returnFiles(files);
return false;
});
// SELECT THUMBNAILS
if (thumb)
_.menu.addItem("kcact:pick_thumb", _.label("Select Thumbnails"), function() {
_.returnThumbnails(files);
return false;
});
}
if (data.thumb || data.smallThumb || _.support.zip) {
_.menu.addDivider();
// VIEW IMAGE
if (data.thumb || data.smallThumb)
_.menu.addItem("kcact:view", _.label("View"), function() {
_.viewImage(data);
});
// DOWNLOAD
if (_.support.zip)
_.menu.addItem("kcact:download", _.label("Download"), function() {
var pfiles = [];
$.each(files, function(i, cfile) {
pfiles[i] = $(cfile).data('name');
});
_.post(_.getURL('downloadSelected'), {dir:_.dir, files:pfiles});
return false;
});
}
// ADD TO CLIPBOARD
if (_.access.files.copy || _.access.files.move) {
_.menu.addDivider();
_.menu.addItem("kcact:clpbrdadd", _.label("Add to Clipboard"), function() {
var msg = '';
$.each(files, function(i, cfile) {
var cdata = $(cfile).data(),
failed = false;
for (i = 0; i < _.clipboard.length; i++)
if ((_.clipboard[i].name == cdata.name) &&
(_.clipboard[i].dir == _.dir)
) {
failed = true;
msg += cdata.name + ": " + _.label("This file is already added to the Clipboard.") + "\n";
break;
}
if (!failed) {
cdata.dir = _.dir;
_.clipboard[_.clipboard.length] = cdata;
}
});
_.initClipboard();
if (msg.length) _.alert(msg.substr(0, msg.length - 1));
return false;
});
}
// DELETE
if (_.access.files['delete']) {
_.menu.addDivider();
_.menu.addItem("kcact:rm", _.label("Delete"), function() {
if ($(this).hasClass('denied')) return false;
var failed = 0,
dfiles = [];
$.each(files, function(i, cfile) {
var cdata = $(cfile).data();
if (!cdata.writable)
failed++;
else
dfiles[dfiles.length] = _.dir + "/" + cdata.name;
});
if (failed == files.length) {
_.alert(_.label("The selected files are not removable."));
return false;
}
var go = function(callBack) {
_.fadeFiles();
$.ajax({
type: "post",
dataType: "json",
url: _.getURL("rm_cbd"),
data: {files:dfiles},
async: false,
success: function(data) {
if (callBack) callBack();
_.check4errors(data);
_.refresh();
},
error: function() {
if (callBack) callBack();
$('#files > div').css({
opacity: "",
filter: ""
});
_.alert(_.label("Unknown error."));
}
});
};
if (failed)
_.confirm(
_.label("{count} selected files are not removable. Do you want to delete the rest?", {count:failed}),
go
);
else
_.confirm(
_.label("Are you sure you want to delete all selected files?"),
go
);
return false;
}, (notWritable == files.length));
}
_.menu.show(e);
// SINGLE FILE MENU
} else {
$('.file').removeClass('selected');
file.addClass('selected');
$('#fileinfo').html($.$.htmlData(data.name) + " (" + _.humanSize(data.size) + ", " + data.date + ")");
if (_.opener.callBack || _.opener.callBackMultiple) {
// SELECT FILE
_.menu.addItem("kcact:pick", _.label("Select"), function() {
_.returnFile(file);
return false;
});
// SELECT THUMBNAIL
if (data.thumb)
_.menu.addItem("kcact:pick_thumb", _.label("Select Thumbnail"), function() {
_.returnFile(_.thumbsURL + "/" + _.dir + "/" + data.name);
return false;
});
_.menu.addDivider();
}
// VIEW IMAGE
if (data.thumb || data.smallThumb)
_.menu.addItem("kcact:view", _.label("View"), function() {
_.viewImage(data);
});
// DOWNLOAD
_.menu.addItem("kcact:download", _.label("Download"), function() {
$('#menu').html('<form id="downloadForm" method="post" action="' + _.getURL('download') + '"><input type="hidden" name="dir" /><input type="hidden" name="file" /></form>');
$('#downloadForm input').get(0).value = _.dir;
$('#downloadForm input').get(1).value = data.name;
$('#downloadForm').submit();
return false;
});
// ADD TO CLIPBOARD
if (_.access.files.copy || _.access.files.move) {
_.menu.addDivider();
_.menu.addItem("kcact:clpbrdadd", _.label("Add to Clipboard"), function() {
for (i = 0; i < _.clipboard.length; i++)
if ((_.clipboard[i].name == data.name) &&
(_.clipboard[i].dir == _.dir)
) {
_.alert(_.label("This file is already added to the Clipboard."));
return false;
}
var cdata = data;
cdata.dir = _.dir;
_.clipboard[_.clipboard.length] = cdata;
_.initClipboard();
return false;
});
}
if (_.access.files.rename || _.access.files['delete'])
_.menu.addDivider();
// RENAME
if (_.access.files.rename)
_.menu.addItem("kcact:mv", _.label("Rename..."), function() {
if (!data.writable) return false;
_.fileNameDialog(
{dir: _.dir, file: data.name},
'newName', data.name, _.getURL("rename"), {
title: "New file name:",
errEmpty: "Please enter new file name.",
errSlash: "Unallowable characters in file name.",
errDot: "File name shouldn't begins with '.'"
},
_.refresh
);
return false;
}, !data.writable);
// DELETE
if (_.access.files['delete'])
_.menu.addItem("kcact:rm", _.label("Delete"), function() {
if (!data.writable) return false;
_.confirm(_.label("Are you sure you want to delete this file?"),
function(callBack) {
$.ajax({
type: "post",
dataType: "json",
url: _.getURL("delete"),
data: {dir: _.dir, file: data.name},
async: false,
success: function(data) {
if (callBack) callBack();
_.clearClipboard();
if (_.check4errors(data))
return;
_.refresh();
},
error: function() {
if (callBack) callBack();
_.alert(_.label("Unknown error."));
}
});
}
);
return false;
}, !data.writable);
_.menu.show(e);
}
};
// FOLDER CONTEXT MENU
_.menuDir = function(dir, e) {
_.menu.init();
var data = dir.data(),
html = '<ul>';
if (_.clipboard && _.clipboard.length) {
// COPY CLIPBOARD
if (_.access.files.copy)
_.menu.addItem("kcact:cpcbd", _.label("Copy {count} files", {count: _.clipboard.length}), function() {
_.copyClipboard(data.path);
return false;
}, !data.writable);
// MOVE CLIPBOARD
if (_.access.files.move)
_.menu.addItem("kcact:mvcbd", _.label("Move {count} files", {count: _.clipboard.length}), function() {
_.moveClipboard(data.path);
return false;
}, !data.writable);
if (_.access.files.copy || _.access.files.move)
_.menu.addDivider();
}
// REFRESH
_.menu.addItem("kcact:refresh", _.label("Refresh"), function() {
_.refreshDir(dir);
return false;
});
// DOWNLOAD
if (_.support.zip) {
_.menu.addDivider();
_.menu.addItem("kcact:download", _.label("Download"), function() {
_.post(_.getURL("downloadDir"), {dir:data.path});
return false;
});
}
if (_.access.dirs.create || _.access.dirs.rename || _.access.dirs['delete'])
_.menu.addDivider();
// NEW SUBFOLDER
if (_.access.dirs.create)
_.menu.addItem("kcact:mkdir", _.label("New Subfolder..."), function(e) {
if (!data.writable) return false;
_.fileNameDialog(
{dir: data.path},
"newDir", "", _.getURL("newDir"), {
title: "New folder name:",
errEmpty: "Please enter new folder name.",
errSlash: "Unallowable characters in folder name.",
errDot: "Folder name shouldn't begins with '.'"
}, function() {
_.refreshDir(dir);
_.initDropUpload();
if (!data.hasDirs) {
dir.data('hasDirs', true);
dir.children('span.brace').addClass('closed');
}
}
);
return false;
}, !data.writable);
// RENAME
if (_.access.dirs.rename)
_.menu.addItem("kcact:mvdir", _.label("Rename..."), function(e) {
if (!data.removable) return false;
_.fileNameDialog(
{dir: data.path},
"newName", data.name, _.getURL("renameDir"), {
title: "New folder name:",
errEmpty: "Please enter new folder name.",
errSlash: "Unallowable characters in folder name.",
errDot: "Folder name shouldn't begins with '.'"
}, function(dt) {
if (!dt.name) {
_.alert(_.label("Unknown error."));
return;
}
var currentDir = (data.path == _.dir);
dir.children('span.folder').html($.$.htmlData(dt.name));
dir.data('name', dt.name);
dir.data('path', $.$.dirname(data.path) + '/' + dt.name);
if (currentDir)
_.dir = dir.data('path');
_.initDropUpload();
},
true
);
return false;
}, !data.removable);
// DELETE
if (_.access.dirs['delete'])
_.menu.addItem("kcact:rmdir", _.label("Delete"), function() {
if (!data.removable) return false;
_.confirm(
_.label("Are you sure you want to delete this folder and all its content?"),
function(callBack) {
$.ajax({
type: "post",
dataType: "json",
url: _.getURL("deleteDir"),
data: {dir: data.path},
async: false,
success: function(data) {
if (callBack) callBack();
if (_.check4errors(data))
return;
dir.parent().hide(500, function() {
var folders = dir.parent().parent();
var pDir = folders.parent().children('a').first();
dir.parent().detach();
if (!folders.children('div.folder').get(0)) {
pDir.children('span.brace').first().removeClass('opened closed');
pDir.parent().children('.folders').detach();
pDir.data('hasDirs', false);
}
if (pDir.data('path') == _.dir.substr(0, pDir.data('path').length))
_.changeDir(pDir);
_.initDropUpload();
});
},
error: function() {
if (callBack) callBack();
_.alert(_.label("Unknown error."));
}
});
}
);
return false;
}, !data.removable);
_.menu.show(e);
$('div.folder > a > span.folder').removeClass('context');
if (dir.children('span.folder').hasClass('regular'))
dir.children('span.folder').addClass('context');
};
// CLIPBOARD MENU
_.openClipboard = function() {
if (!_.clipboard || !_.clipboard.length) return;
// CLOSE MENU
if ($('#menu a[href="kcact:clrcbd"]').html()) {
$('#clipboard').removeClass('selected');
_.menu.hide();
return;
}
setTimeout(function() {
_.menu.init();
var dlg = $('#menu'),
jStatus = $('#status'),
html = '<li class="list"><div>';
// CLIPBOARD FILES
$.each(_.clipboard, function(i, val) {
var icon = $.$.getFileExtension(val.name);
if (val.thumb)
icon = ".image";
else if (!val.smallIcon || !icon.length)
icon = ".";
icon = "themes/" + _.theme + "/img/files/small/" + icon + ".png";
html += '<a title="' + _.label("Click to remove from the Clipboard") + '" onclick="_.removeFromClipboard(' + i + ')"' + ((i == 0) ? ' class="first"' : "") + '><span style="background-image:url(' + $.$.escapeDirs(icon) + ')">' + $.$.htmlData($.$.basename(val.name)) + '</span></a>';
});
html += '</div></li><li class="div-files">-</li>';
$('#menu ul').append(html);
// DOWNLOAD
if (_.support.zip)
_.menu.addItem("kcact:download", _.label("Download files"), function() {
_.downloadClipboard();
return false;
});
if (_.access.files.copy || _.access.files.move || _.access.files['delete'])
_.menu.addDivider();
// COPY
if (_.access.files.copy)
_.menu.addItem("kcact:cpcbd", _.label("Copy files here"), function() {
if (!_.dirWritable) return false;
_.copyClipboard(_.dir);
return false;
}, !_.dirWritable);
// MOVE
if (_.access.files.move)
_.menu.addItem("kcact:mvcbd", _.label("Move files here"), function() {
if (!_.dirWritable) return false;
_.moveClipboard(_.dir);
return false;
}, !_.dirWritable);
// DELETE
if (_.access.files['delete'])
_.menu.addItem("kcact:rmcbd", _.label("Delete files"), function() {
_.confirm(
_.label("Are you sure you want to delete all files in the Clipboard?"),
function(callBack) {
if (callBack) callBack();
_.deleteClipboard();
}
);
return false;
});
_.menu.addDivider();
// CLEAR CLIPBOARD
_.menu.addItem("kcact:clrcbd", _.label("Clear the Clipboard"), function() {
_.clearClipboard();
return false;
});
$('#clipboard').addClass('selected');
_.menu.show();
var left = $(window).width() - dlg.css({width: ""}).outerWidth(),
top = $(window).height() - dlg.outerHeight() - jStatus.outerHeight(),
lheight = top + dlg.outerTopSpace();
dlg.find('.list').css({
'max-height': lheight,
'overflow-y': "auto",
'overflow-x': "hidden",
width: ""
});
top = $(window).height() - dlg.outerHeight(true) - jStatus.outerHeight(true);
dlg.css({
left: left - 5,
top: top
}).fadeIn("fast");
var a = dlg.find('.list').outerHeight(),
b = dlg.find('.list div').outerHeight();
if (b - a > 10) {
dlg.css({
left: parseInt(dlg.css('left')) - _.scrollbarWidth,
}).width(dlg.width() + _.scrollbarWidth);
}
}, 1);
};