123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- "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);
|