mirror of
https://github.com/YunoHost-Apps/limesurvey_ynh.git
synced 2024-09-03 19:36:32 +02:00
369 lines
15 KiB
JavaScript
369 lines
15 KiB
JavaScript
<?php
|
|
|
|
/** This file is part of KCFinder project
|
|
*
|
|
* @desc Folder related functionality
|
|
* @package KCFinder
|
|
* @version 2.51
|
|
* @author Pavel Tzonkov <pavelc@users.sourceforge.net>
|
|
* @copyright 2010, 2011 KCFinder Project
|
|
* @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2
|
|
* @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2
|
|
* @link http://kcfinder.sunhater.com
|
|
*/?>
|
|
|
|
browser.initFolders = function() {
|
|
$('#folders').scroll(function() {
|
|
browser.hideDialog();
|
|
});
|
|
$('div.folder > a').unbind();
|
|
$('div.folder > a').bind('click', function() {
|
|
browser.hideDialog();
|
|
return false;
|
|
});
|
|
$('div.folder > a > span.brace').unbind();
|
|
$('div.folder > a > span.brace').click(function() {
|
|
if ($(this).hasClass('opened') || $(this).hasClass('closed'))
|
|
browser.expandDir($(this).parent());
|
|
});
|
|
$('div.folder > a > span.folder').unbind();
|
|
$('div.folder > a > span.folder').click(function() {
|
|
browser.changeDir($(this).parent());
|
|
});
|
|
$('div.folder > a > span.folder').rightClick(function(e) {
|
|
_.unselect();
|
|
browser.menuDir($(this).parent(), e);
|
|
});
|
|
|
|
if ($.browser.msie && $.browser.version &&
|
|
(parseInt($.browser.version.substr(0, 1)) < 8)
|
|
) {
|
|
var fls = $('div.folder').get();
|
|
var body = $('body').get(0);
|
|
var div;
|
|
$.each(fls, function(i, folder) {
|
|
div = document.createElement('div');
|
|
div.style.display = 'inline';
|
|
div.style.margin = div.style.border = div.style.padding = '0';
|
|
div.innerHTML='<table style="border-collapse:collapse;border:0;margin:0;width:0"><tr><td nowrap="nowrap" style="white-space:nowrap;padding:0;border:0">' + $(folder).html() + "</td></tr></table>";
|
|
body.appendChild(div);
|
|
$(folder).css('width', $(div).innerWidth() + 'px');
|
|
body.removeChild(div);
|
|
});
|
|
}
|
|
};
|
|
|
|
browser.setTreeData = function(data, path) {
|
|
if (!path)
|
|
path = '';
|
|
else if (path.length && (path.substr(path.length - 1, 1) != '/'))
|
|
path += '/';
|
|
path += data.name;
|
|
var selector = '#folders a[href="kcdir:/' + _.escapeDirs(path) + '"]';
|
|
$(selector).data({
|
|
name: data.name,
|
|
path: path,
|
|
readable: data.readable,
|
|
writable: data.writable,
|
|
removable: data.removable,
|
|
hasDirs: data.hasDirs
|
|
});
|
|
$(selector + ' span.folder').addClass(data.current ? 'current' : 'regular');
|
|
if (data.dirs && data.dirs.length) {
|
|
$(selector + ' span.brace').addClass('opened');
|
|
$.each(data.dirs, function(i, cdir) {
|
|
browser.setTreeData(cdir, path + '/');
|
|
});
|
|
} else if (data.hasDirs)
|
|
$(selector + ' span.brace').addClass('closed');
|
|
};
|
|
|
|
browser.buildTree = function(root, path) {
|
|
if (!path) path = "";
|
|
path += root.name;
|
|
var html = '<div class="folder"><a href="kcdir:/' + _.escapeDirs(path) + '"><span class="brace"> </span><span class="folder">' + _.htmlData(root.name) + '</span></a>';
|
|
if (root.dirs) {
|
|
html += '<div class="folders">';
|
|
for (var i = 0; i < root.dirs.length; i++) {
|
|
cdir = root.dirs[i];
|
|
html += browser.buildTree(cdir, path + '/');
|
|
}
|
|
html += '</div>';
|
|
}
|
|
html += '</div>';
|
|
return html;
|
|
};
|
|
|
|
browser.expandDir = function(dir) {
|
|
var path = dir.data('path');
|
|
if (dir.children('.brace').hasClass('opened')) {
|
|
dir.parent().children('.folders').hide(500, function() {
|
|
if (path == browser.dir.substr(0, path.length))
|
|
browser.changeDir(dir);
|
|
});
|
|
dir.children('.brace').removeClass('opened');
|
|
dir.children('.brace').addClass('closed');
|
|
} else {
|
|
if (dir.parent().children('.folders').get(0)) {
|
|
dir.parent().children('.folders').show(500);
|
|
dir.children('.brace').removeClass('closed');
|
|
dir.children('.brace').addClass('opened');
|
|
} else if (!$('#loadingDirs').get(0)) {
|
|
dir.parent().append('<div id="loadingDirs">' + this.label("Loading folders...") + '</div>');
|
|
$('#loadingDirs').css('display', 'none');
|
|
$('#loadingDirs').show(200, function() {
|
|
$.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: browser.baseGetData('expand'),
|
|
data: {dir:path},
|
|
async: false,
|
|
success: function(data) {
|
|
$('#loadingDirs').hide(200, function() {
|
|
$('#loadingDirs').detach();
|
|
});
|
|
if (browser.check4errors(data))
|
|
return;
|
|
|
|
var html = '';
|
|
$.each(data.dirs, function(i, cdir) {
|
|
html += '<div class="folder"><a href="kcdir:/' + _.escapeDirs(path + '/' + cdir.name) + '"><span class="brace"> </span><span class="folder">' + _.htmlData(cdir.name) + '</span></a></div>';
|
|
});
|
|
if (html.length) {
|
|
dir.parent().append('<div class="folders">' + html + '</div>');
|
|
var folders = $(dir.parent().children('.folders').first());
|
|
folders.css('display', 'none');
|
|
$(folders).show(500);
|
|
$.each(data.dirs, function(i, cdir) {
|
|
browser.setTreeData(cdir, path);
|
|
});
|
|
}
|
|
if (data.dirs.length) {
|
|
dir.children('.brace').removeClass('closed');
|
|
dir.children('.brace').addClass('opened');
|
|
} else {
|
|
dir.children('.brace').removeClass('opened');
|
|
dir.children('.brace').removeClass('closed');
|
|
}
|
|
browser.initFolders();
|
|
browser.initDropUpload();
|
|
},
|
|
error: function() {
|
|
$('#loadingDirs').detach();
|
|
browser.alert(browser.label("Unknown error."));
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
};
|
|
|
|
browser.changeDir = function(dir) {
|
|
if (dir.children('span.folder').hasClass('regular')) {
|
|
$('div.folder > a > span.folder').removeClass('current');
|
|
$('div.folder > a > span.folder').removeClass('regular');
|
|
$('div.folder > a > span.folder').addClass('regular');
|
|
dir.children('span.folder').removeClass('regular');
|
|
dir.children('span.folder').addClass('current');
|
|
$('#files').html(browser.label("Loading files..."));
|
|
$.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: browser.baseGetData('chDir'),
|
|
data: {dir:dir.data('path')},
|
|
async: false,
|
|
success: function(data) {
|
|
if (browser.check4errors(data))
|
|
return;
|
|
browser.files = data.files;
|
|
browser.orderFiles();
|
|
browser.dir = dir.data('path');
|
|
browser.dirWritable = data.dirWritable;
|
|
var title = "KCFinder: /" + browser.dir;
|
|
document.title = title;
|
|
if (browser.opener.TinyMCE)
|
|
tinyMCEPopup.editor.windowManager.setTitle(window, title);
|
|
browser.statusDir();
|
|
},
|
|
error: function() {
|
|
$('#files').html(browser.label("Unknown error."));
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
browser.statusDir = function() {
|
|
for (var i = 0, size = 0; i < this.files.length; i++)
|
|
size += parseInt(this.files[i].size);
|
|
size = this.humanSize(size);
|
|
$('#fileinfo').html(this.files.length + ' ' + this.label("files") + ' (' + size + ')');
|
|
};
|
|
|
|
browser.menuDir = function(dir, e) {
|
|
var data = dir.data();
|
|
var html = '<div class="menu">';
|
|
if (this.clipboard && this.clipboard.length) {
|
|
if (this.access.files.copy)
|
|
html += '<a href="kcact:cpcbd"' + (!data.writable ? ' class="denied"' : '') + '>' +
|
|
this.label("Copy {count} files", {count: this.clipboard.length}) + '</a>';
|
|
if (this.access.files.move)
|
|
html += '<a href="kcact:mvcbd"' + (!data.writable ? ' class="denied"' : '') + '>' +
|
|
this.label("Move {count} files", {count: this.clipboard.length}) + '</a>';
|
|
if (this.access.files.copy || this.access.files.move)
|
|
html += '<div class="delimiter"></div>';
|
|
}
|
|
html +=
|
|
'<a href="kcact:refresh">' + this.label("Refresh") + '</a>';
|
|
if (this.support.zip) html+=
|
|
'<div class="delimiter"></div>' +
|
|
'<a href="kcact:download">' + this.label("Download") + '</a>';
|
|
if (this.access.dirs.create || this.access.dirs.rename || this.access.dirs['delete'])
|
|
html += '<div class="delimiter"></div>';
|
|
if (this.access.dirs.create)
|
|
html += '<a href="kcact:mkdir"' + (!data.writable ? ' class="denied"' : '') + '>' +
|
|
this.label("New Subfolder...") + '</a>';
|
|
if (this.access.dirs.rename)
|
|
html += '<a href="kcact:mvdir"' + (!data.removable ? ' class="denied"' : '') + '>' +
|
|
this.label("Rename...") + '</a>';
|
|
if (this.access.dirs['delete'])
|
|
html += '<a href="kcact:rmdir"' + (!data.removable ? ' class="denied"' : '') + '>' +
|
|
this.label("Delete") + '</a>';
|
|
html += '</div>';
|
|
|
|
$('#dialog').html(html);
|
|
this.showMenu(e);
|
|
$('div.folder > a > span.folder').removeClass('context');
|
|
if (dir.children('span.folder').hasClass('regular'))
|
|
dir.children('span.folder').addClass('context');
|
|
|
|
if (this.clipboard && this.clipboard.length && data.writable) {
|
|
|
|
$('.menu a[href="kcact:cpcbd"]').click(function() {
|
|
browser.hideDialog();
|
|
browser.copyClipboard(data.path);
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:mvcbd"]').click(function() {
|
|
browser.hideDialog();
|
|
browser.moveClipboard(data.path);
|
|
return false;
|
|
});
|
|
}
|
|
|
|
$('.menu a[href="kcact:refresh"]').click(function() {
|
|
browser.hideDialog();
|
|
browser.refreshDir(dir);
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:download"]').click(function() {
|
|
browser.hideDialog();
|
|
browser.post(browser.baseGetData('downloadDir'), {dir:data.path});
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:mkdir"]').click(function(e) {
|
|
if (!data.writable) return false;
|
|
browser.hideDialog();
|
|
browser.fileNameDialog(
|
|
e, {dir: data.path},
|
|
'newDir', '', browser.baseGetData('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() {
|
|
browser.refreshDir(dir);
|
|
browser.initDropUpload();
|
|
if (!data.hasDirs) {
|
|
dir.data('hasDirs', true);
|
|
dir.children('span.brace').addClass('closed');
|
|
}
|
|
}
|
|
);
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:mvdir"]').click(function(e) {
|
|
if (!data.removable) return false;
|
|
browser.hideDialog();
|
|
browser.fileNameDialog(
|
|
e, {dir: data.path},
|
|
'newName', data.name, browser.baseGetData('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) {
|
|
browser.alert(browser.label("Unknown error."));
|
|
return;
|
|
}
|
|
var currentDir = (data.path == browser.dir);
|
|
dir.children('span.folder').html(_.htmlData(dt.name));
|
|
dir.data('name', dt.name);
|
|
dir.data('path', _.dirname(data.path) + '/' + dt.name);
|
|
if (currentDir)
|
|
browser.dir = dir.data('path');
|
|
browser.initDropUpload();
|
|
},
|
|
true
|
|
);
|
|
return false;
|
|
});
|
|
|
|
$('.menu a[href="kcact:rmdir"]').click(function() {
|
|
if (!data.removable) return false;
|
|
browser.hideDialog();
|
|
browser.confirm(
|
|
"Are you sure you want to delete this folder and all its content?",
|
|
function(callBack) {
|
|
$.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: browser.baseGetData('deleteDir'),
|
|
data: {dir: data.path},
|
|
async: false,
|
|
success: function(data) {
|
|
if (callBack) callBack();
|
|
if (browser.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');
|
|
pDir.children('span.brace').first().removeClass('closed');
|
|
pDir.parent().children('.folders').detach();
|
|
pDir.data('hasDirs', false);
|
|
}
|
|
if (pDir.data('path') == browser.dir.substr(0, pDir.data('path').length))
|
|
browser.changeDir(pDir);
|
|
browser.initDropUpload();
|
|
});
|
|
},
|
|
error: function() {
|
|
if (callBack) callBack();
|
|
browser.alert(browser.label("Unknown error."));
|
|
}
|
|
});
|
|
}
|
|
);
|
|
return false;
|
|
});
|
|
};
|
|
|
|
browser.refreshDir = function(dir) {
|
|
var path = dir.data('path');
|
|
if (dir.children('.brace').hasClass('opened') || dir.children('.brace').hasClass('closed')) {
|
|
dir.children('.brace').removeClass('opened');
|
|
dir.children('.brace').addClass('closed');
|
|
}
|
|
dir.parent().children('.folders').first().detach();
|
|
if (path == browser.dir.substr(0, path.length))
|
|
browser.changeDir(dir);
|
|
browser.expandDir(dir);
|
|
return true;
|
|
};
|