295 lines
9.0 KiB
JavaScript
295 lines
9.0 KiB
JavaScript
"use strict";
|
|
/**
|
|
* @class elFinder command "info".
|
|
* Display dialog with file properties.
|
|
*
|
|
* @author Dmitry (dio) Levashov, dio@std42.ru
|
|
**/
|
|
|
|
(function($) {
|
|
|
|
elFinder.prototype.commands.info = function() {
|
|
var m = 'msg',
|
|
fm = this.fm,
|
|
spclass = 'elfinder-info-spinner',
|
|
msg = {
|
|
calc : fm.i18n('calc'),
|
|
size : fm.i18n('size'),
|
|
unknown : fm.i18n('unknown'),
|
|
path : fm.i18n('path'),
|
|
aliasfor : fm.i18n('aliasfor'),
|
|
modify : fm.i18n('modify'),
|
|
perms : fm.i18n('perms'),
|
|
locked : fm.i18n('locked'),
|
|
dim : fm.i18n('dim'),
|
|
kind : fm.i18n('kind'),
|
|
files : fm.i18n('files'),
|
|
folders : fm.i18n('folders'),
|
|
items : fm.i18n('items'),
|
|
yes : fm.i18n('yes'),
|
|
no : fm.i18n('no'),
|
|
link : fm.i18n('link'),
|
|
owner : fm.i18n('owner'),
|
|
desc : fm.i18n('description'),
|
|
downloads: fm.i18n('downloads')
|
|
};
|
|
|
|
this.tpl = {
|
|
main : '<div class="ui-helper-clearfix elfinder-info-title"><span class="elfinder-cwd-icon {class} ui-corner-all"/>{title}</div><table class="elfinder-info-tb">{content}</table>',
|
|
itemTitle : '<strong>{name}</strong><span class="elfinder-info-kind">{kind}</span>',
|
|
groupTitle : '<strong>{items}: {num}</strong>',
|
|
row : '<tr><td>{label} : </td><td>{value}</td></tr>',
|
|
spinner : '<span>{text}</span> <span class="'+spclass+' '+spclass+'-'+'{id}"/>'
|
|
}
|
|
|
|
this.alwaysEnabled = true;
|
|
this.updateOnSelect = false;
|
|
this.shortcuts = [{
|
|
pattern : 'ctrl+i'
|
|
}];
|
|
|
|
this.init = function() {
|
|
$.each(msg, function(k, v) {
|
|
msg[k] = fm.i18n(v);
|
|
});
|
|
}
|
|
|
|
this.getstate = function() {
|
|
return 0;
|
|
}
|
|
|
|
this.exec = function(hashes) {
|
|
|
|
var self = this,
|
|
fm = this.fm,
|
|
tpl = this.tpl,
|
|
row = tpl.row,
|
|
files = this.files(hashes),
|
|
cnt = files.length,
|
|
content = [],
|
|
view = tpl.main,
|
|
l = '{label}',
|
|
v = '{value}',
|
|
opts = {
|
|
title : this.title,
|
|
width : 'auto',
|
|
modal : true,
|
|
close: function() {
|
|
$(this).elfinderdialog('destroy');
|
|
}
|
|
},
|
|
count = [],
|
|
replSpinner = function(msg) {
|
|
dialog.find('.' + spclass).parent().text(msg);
|
|
},
|
|
replSpinnerById = function(msg, id) {
|
|
dialog.find('.' + spclass + '-' + id).parent().html(msg);
|
|
},
|
|
id = fm.namespace + '-info-' + $.map(files, function(f) {
|
|
return f.hash
|
|
}).join('-'),
|
|
dialog = fm.getUI().find('#'+id),
|
|
size, tmb, file, title, dcnt;
|
|
|
|
var disabledCommands = Drupal.settings.elfinder.disabledCommands,
|
|
viewDesc = $.inArray('desc', disabledCommands) == -1 ? true : false,
|
|
editDesc = $.inArray('editdesc', disabledCommands) == -1 ? true : false,
|
|
viewOwner = $.inArray('owner', disabledCommands) == -1 ? true : false,
|
|
viewDownloads = $.inArray('downloadcount', disabledCommands) == -1 ? true : false;
|
|
|
|
if (!cnt) {
|
|
return $.Deferred().reject();
|
|
}
|
|
|
|
if (dialog.length) {
|
|
dialog.elfinderdialog('toTop');
|
|
return $.Deferred().resolve();
|
|
}
|
|
|
|
|
|
if (cnt == 1) {
|
|
file = files[0];
|
|
view = view.replace('{class}', fm.mime2class(file.mime));
|
|
title = tpl.itemTitle.replace('{name}', file.name).replace('{kind}', fm.mime2kind(file));
|
|
|
|
if (file.tmb) {
|
|
tmb = fm.option('tmbUrl')+file.tmb;
|
|
}
|
|
|
|
if (!file.read) {
|
|
size = msg.unknown;
|
|
} else if (file.mime != 'directory' || file.alias) {
|
|
size = fm.formatSize(file.size);
|
|
} else {
|
|
/* adding spinner id to separate field updates */
|
|
size = tpl.spinner.replace('{text}', msg.calc).replace('{id}', 'size');
|
|
count.push(file.hash);
|
|
}
|
|
|
|
content.push(row.replace(l, msg.size).replace(v, size));
|
|
file.alias && content.push(row.replace(l, msg.aliasfor).replace(v, file.alias));
|
|
content.push(row.replace(l, msg.path).replace(v, fm.escape(fm.path(file.hash))));
|
|
file.read && content.push(row.replace(l, msg.link).replace(v, '<a href="'+fm.url(file.hash)+'" target="_blank">'+file.name+'</a>'));
|
|
|
|
if (file.dim) { // old api
|
|
content.push(row.replace(l, msg.dim).replace(v, file.dim));
|
|
} else if (file.mime.indexOf('image') !== -1) {
|
|
content.push(row.replace(l, msg.dim).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{id}', 'dim')));
|
|
fm.request({
|
|
data : {cmd : 'dim', target : file.hash},
|
|
preventDefault : true
|
|
})
|
|
.fail(function() {
|
|
replSpinnerById(msg.unknown, 'dim');
|
|
})
|
|
.done(function(data) {
|
|
replSpinnerById(data.dim || msg.unknown, 'dim');
|
|
});
|
|
}
|
|
|
|
content.push(row.replace(l, msg.modify).replace(v, fm.formatDate(file)));
|
|
content.push(row.replace(l, msg.perms).replace(v, fm.formatPermissions(file)));
|
|
content.push(row.replace(l, msg.locked).replace(v, file.locked ? msg.yes : msg.no));
|
|
|
|
/* Don't show fields if command not allowed */
|
|
if (viewOwner) {
|
|
content.push(row.replace(l, Drupal.t('Owner')).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{id}', 'owner')));
|
|
|
|
fm.request({
|
|
data : {cmd : 'owner', target : file.hash},
|
|
preventDefault : true
|
|
})
|
|
.fail(function() {
|
|
replSpinnerById(msg.unknown, 'owner');
|
|
})
|
|
.done(function(data) {
|
|
replSpinnerById(data.owner || msg.unknown, 'owner');
|
|
});
|
|
}
|
|
|
|
/* Don't show fields if command not allowed */
|
|
if (viewDownloads) {
|
|
content.push(row.replace(l, Drupal.t('Downloads')).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{id}', 'downloads')));
|
|
|
|
fm.request({
|
|
data : {cmd : 'downloadcount', target : file.hash},
|
|
preventDefault : true
|
|
})
|
|
.fail(function() {
|
|
replSpinnerById(msg.unknown, 'downloads');
|
|
})
|
|
.done(function(data) {
|
|
replSpinnerById(data.downloadcount || msg.unknown, 'downloads');
|
|
});
|
|
}
|
|
|
|
/* Don't show fields if command not allowed */
|
|
if (viewDesc || editDesc) {
|
|
|
|
var desc = '<div id="elfinder-fm-file-desc">' + msg.calc + '</div>';
|
|
|
|
if (editDesc) {
|
|
|
|
desc = '<textarea cols="20" rows="5" id="elfinder-fm-file-desc" class="ui-widget ui-widget-content" disabled="true" >' + msg.calc + '</textarea><input type="button" id="elfinder-fm-file-desc-btn-save" value="' + fm.i18n('btnSave') + '" />';
|
|
}
|
|
|
|
content.push(row.replace(l, Drupal.t('Description')).replace(v , desc));
|
|
|
|
fm.request({
|
|
data : {cmd : 'desc', target : file.hash},
|
|
preventDefault : true
|
|
})
|
|
.done(function(data) {
|
|
var fieldDesc = dialog.find('#elfinder-fm-file-desc');
|
|
|
|
if (editDesc) {
|
|
fieldDesc.val(data.desc || '');
|
|
fieldDesc.removeAttr('disabled');
|
|
} else {
|
|
fieldDesc.empty();
|
|
fieldDesc.html(data.desc || '');
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
} else {
|
|
view = view.replace('{class}', 'elfinder-cwd-icon-group');
|
|
title = tpl.groupTitle.replace('{items}', msg.items).replace('{num}', cnt);
|
|
dcnt = $.map(files, function(f) {
|
|
return f.mime == 'directory' ? 1 : null
|
|
}).length;
|
|
if (!dcnt) {
|
|
size = 0;
|
|
$.each(files, function(h, f) {
|
|
var s = parseInt(f.size);
|
|
|
|
if (s >= 0 && size >= 0) {
|
|
size += s;
|
|
} else {
|
|
size = 'unknown';
|
|
}
|
|
});
|
|
content.push(row.replace(l, msg.kind).replace(v, msg.files));
|
|
content.push(row.replace(l, msg.size).replace(v, fm.formatSize(size)));
|
|
} else {
|
|
content.push(row.replace(l, msg.kind).replace(v, dcnt == cnt ? msg.folders : msg.folders+' '+dcnt+', '+msg.files+' '+(cnt-dcnt)))
|
|
content.push(row.replace(l, msg.size).replace(v, tpl.spinner.replace('{text}', msg.calc).replace('{id}', 'size')));
|
|
count = $.map(files, function(f) {
|
|
return f.hash
|
|
});
|
|
|
|
}
|
|
}
|
|
|
|
view = view.replace('{title}', title).replace('{content}', content.join(''));
|
|
|
|
dialog = fm.dialog(view, opts);
|
|
dialog.attr('id', id);
|
|
|
|
if (editDesc) {
|
|
var inputDesc = $('#elfinder-fm-file-desc', dialog);
|
|
var btnSave = $('#elfinder-fm-file-desc-btn-save', dialog).button();
|
|
|
|
btnSave.click(function() {
|
|
fm.lockfiles({files : [file.hash]});
|
|
fm.request({
|
|
data : {cmd : 'desc', target : file.hash, content : inputDesc.val()},
|
|
notify : {type : 'desc', cnt : 1}
|
|
})
|
|
.always(function() {
|
|
fm.unlockfiles({files : [file.hash]})
|
|
});
|
|
});
|
|
}
|
|
// load thumbnail
|
|
if (tmb) {
|
|
$('<img/>')
|
|
.load(function() {
|
|
dialog.find('.elfinder-cwd-icon').css('background', 'url("' + tmb + '") center center no-repeat');
|
|
})
|
|
.attr('src', tmb);
|
|
}
|
|
|
|
// send request to count total size
|
|
if (count.length) {
|
|
fm.request({
|
|
data : {cmd : 'size', targets : count},
|
|
preventDefault : true
|
|
})
|
|
.fail(function() {
|
|
replSpinnerById(msg.unknown, 'size');
|
|
})
|
|
.done(function(data) {
|
|
var size = parseInt(data.size);
|
|
fm.log(data.size)
|
|
replSpinnerById(size >= 0 ? fm.formatSize(size) : msg.unknown, 'size');
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
})(jQuery); |