mirror of
https://github.com/Studio-42/elFinder
synced 2026-06-08 12:37:09 +00:00
335 lines
7.8 KiB
JavaScript
335 lines
7.8 KiB
JavaScript
|
|
elFinder.prototype.commands.quicklook.plugins = [
|
|
|
|
/**
|
|
* Images preview plugin
|
|
*
|
|
* @param elFinder.commands.quicklook
|
|
**/
|
|
function(ql) {
|
|
var mimes = ['image/jpeg', 'image/png', 'image/gif'],
|
|
preview = ql.preview;
|
|
|
|
// what kind of images we can display
|
|
$.each(navigator.mimeTypes, function(i, o) {
|
|
var mime = o.type;
|
|
|
|
if (mime.indexOf('image/') === 0 && $.inArray(mime, mimes)) {
|
|
mimes.push(mime);
|
|
}
|
|
});
|
|
|
|
preview.bind('update', function(e) {
|
|
var file = e.file,
|
|
img;
|
|
|
|
if ($.inArray(file.mime, mimes) !== -1) {
|
|
// this is our file - stop event propagation
|
|
e.stopImmediatePropagation();
|
|
|
|
img = $('<img/>')
|
|
.hide()
|
|
.appendTo(preview)
|
|
.load(function() {
|
|
// timeout - because of strange safari bug -
|
|
// sometimes cant get image height 0_o
|
|
setTimeout(function() {
|
|
var prop = (img.width()/img.height()).toFixed(2);
|
|
preview.bind('changesize', function() {
|
|
var pw = parseInt(preview.width()),
|
|
ph = parseInt(preview.height()),
|
|
w, h;
|
|
|
|
if (prop < (pw/ph).toFixed(2)) {
|
|
h = ph;
|
|
w = Math.floor(h * prop);
|
|
} else {
|
|
w = pw;
|
|
h = Math.floor(w/prop);
|
|
}
|
|
img.width(w).height(h).css('margin-top', h < ph ? Math.floor((ph - h)/2) : 0);
|
|
|
|
})
|
|
.trigger('changesize');
|
|
|
|
// hide info/icon
|
|
ql.hideinfo();
|
|
//show image
|
|
img.fadeIn(100);
|
|
}, 1)
|
|
})
|
|
.attr('src', ql.fm.url(file.hash));
|
|
}
|
|
|
|
});
|
|
},
|
|
|
|
/**
|
|
* HTML preview plugin
|
|
*
|
|
* @param elFinder.commands.quicklook
|
|
**/
|
|
function(ql) {
|
|
var mimes = ['text/html', 'application/xhtml+xml'],
|
|
preview = ql.preview,
|
|
fm = ql.fm;
|
|
|
|
preview.bind('update', function(e) {
|
|
var file = e.file, jqxhr;
|
|
|
|
if ($.inArray(file.mime, mimes) !== -1) {
|
|
e.stopImmediatePropagation();
|
|
|
|
// stop loading on change file if not loaded yet
|
|
preview.one('change', function() {
|
|
jqxhr.state() == 'pending' && jqxhr.reject();
|
|
});
|
|
|
|
jqxhr = fm.request({
|
|
data : {cmd : 'get', target : file.hash, current : file.phash},
|
|
preventDefault : true
|
|
})
|
|
.done(function(data) {
|
|
ql.hideinfo();
|
|
doc = $('<iframe class="elfinder-quicklook-preview-html"/>').appendTo(preview)[0].contentWindow.document;
|
|
doc.open();
|
|
doc.write(data.content);
|
|
doc.close();
|
|
});
|
|
}
|
|
})
|
|
},
|
|
|
|
/**
|
|
* Texts preview plugin
|
|
*
|
|
* @param elFinder.commands.quicklook
|
|
**/
|
|
function(ql) {
|
|
var fm = ql.fm,
|
|
mimes = fm.res('mimes', 'text'),
|
|
preview = ql.preview;
|
|
|
|
|
|
preview.bind('update', function(e) {
|
|
var file = e.file,
|
|
mime = file.mime,
|
|
jqxhr;
|
|
|
|
if (mime.indexOf('text/') === 0 || $.inArray(mime, mimes) !== -1) {
|
|
e.stopImmediatePropagation();
|
|
|
|
// stop loading on change file if not loadin yet
|
|
preview.one('change', function() {
|
|
jqxhr.state() == 'pending' && jqxhr.reject();
|
|
});
|
|
|
|
jqxhr = fm.request({
|
|
data : {cmd : 'get', target : file.hash },
|
|
preventDefault : true
|
|
})
|
|
.done(function(data) {
|
|
ql.hideinfo();
|
|
$('<div class="elfinder-quicklook-preview-text-wrapper"><pre class="elfinder-quicklook-preview-text">'+fm.escape(data.content)+'</pre></div>').appendTo(preview);
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* PDF preview plugin
|
|
*
|
|
* @param elFinder.commands.quicklook
|
|
**/
|
|
function(ql) {
|
|
var fm = ql.fm,
|
|
mime = 'application/pdf',
|
|
preview = ql.preview,
|
|
active = false;
|
|
|
|
if ((fm.UA.Safari && fm.OS == 'mac') || fm.UA.IE) {
|
|
active = true;
|
|
} else {
|
|
$.each(navigator.plugins, function(i, plugins) {
|
|
$.each(plugins, function(i, plugin) {
|
|
if (plugin.type == mime) {
|
|
return !(active = true);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
active && preview.bind('update', function(e) {
|
|
var file = e.file, node;
|
|
|
|
if (file.mime == mime) {
|
|
e.stopImmediatePropagation();
|
|
preview.one('change', function() {
|
|
node.unbind('load').remove();
|
|
});
|
|
|
|
node = $('<iframe class="elfinder-quicklook-preview-pdf"/>')
|
|
.hide()
|
|
.appendTo(preview)
|
|
.load(function() {
|
|
ql.hideinfo();
|
|
node.show();
|
|
})
|
|
.attr('src', fm.url(file.hash));
|
|
}
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
/**
|
|
* Flash preview plugin
|
|
*
|
|
* @param elFinder.commands.quicklook
|
|
**/
|
|
function(ql) {
|
|
var fm = ql.fm,
|
|
mime = 'application/x-shockwave-flash',
|
|
preview = ql.preview,
|
|
active = false;
|
|
|
|
$.each(navigator.plugins, function(i, plugins) {
|
|
$.each(plugins, function(i, plugin) {
|
|
if (plugin.type == mime) {
|
|
return !(active = true);
|
|
}
|
|
});
|
|
});
|
|
|
|
active && preview.bind('update', function(e) {
|
|
var file = e.file,
|
|
node;
|
|
|
|
if (file.mime == mime) {
|
|
e.stopImmediatePropagation();
|
|
ql.hideinfo();
|
|
preview.append((node = $('<embed class="elfinder-quicklook-preview-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="'+fm.url(file.hash)+'" quality="high" type="application/x-shockwave-flash" />')));
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* HTML5 audio preview plugin
|
|
*
|
|
* @param elFinder.commands.quicklook
|
|
**/
|
|
function(ql) {
|
|
var preview = ql.preview,
|
|
autoplay = !!ql.options['autoplay'],
|
|
mimes = {
|
|
'audio/mpeg' : 'mp3',
|
|
'audio/mpeg3' : 'mp3',
|
|
'audio/mp3' : 'mp3',
|
|
'audio/x-mpeg3' : 'mp3',
|
|
'audio/x-mp3' : 'mp3',
|
|
'audio/x-wav' : 'wav',
|
|
'audio/wav' : 'wav',
|
|
'audio/x-m4a' : 'm4a',
|
|
'audio/aac' : 'm4a',
|
|
'audio/mp4' : 'm4a',
|
|
'audio/x-mp4' : 'm4a',
|
|
'audio/ogg' : 'ogg'
|
|
},
|
|
node;
|
|
|
|
preview.bind('update', function(e) {
|
|
var file = e.file,
|
|
type = mimes[file.mime];
|
|
|
|
if (ql.support.audio[type]) {
|
|
e.stopImmediatePropagation();
|
|
|
|
node = $('<audio class="elfinder-quicklook-preview-audio" controls preload="auto" autobuffer><source src="'+ql.fm.url(file.hash)+'" /></audio>')
|
|
.appendTo(preview);
|
|
autoplay && node[0].play();
|
|
}
|
|
}).bind('change', function() {
|
|
if (node && node.parent().length) {
|
|
node[0].pause();
|
|
node.remove();
|
|
node= null;
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* HTML5 video preview plugin
|
|
*
|
|
* @param elFinder.commands.quicklook
|
|
**/
|
|
function(ql) {
|
|
var preview = ql.preview,
|
|
autoplay = !!ql.options['autoplay'],
|
|
mimes = {
|
|
'video/mp4' : 'mp4',
|
|
'video/x-m4v' : 'mp4',
|
|
'video/ogg' : 'ogg',
|
|
'application/ogg' : 'ogg',
|
|
'video/webm' : 'webm'
|
|
},
|
|
node;
|
|
|
|
preview.bind('update', function(e) {
|
|
var file = e.file,
|
|
type = mimes[file.mime];
|
|
|
|
if (ql.support.video[type]) {
|
|
e.stopImmediatePropagation();
|
|
|
|
ql.hideinfo();
|
|
node = $('<video class="elfinder-quicklook-preview-video" controls preload="auto" autobuffer><source src="'+ql.fm.url(file.hash)+'" /></video>').appendTo(preview);
|
|
autoplay && node[0].play();
|
|
|
|
}
|
|
}).bind('change', function() {
|
|
if (node && node.parent().length) {
|
|
node[0].pause();
|
|
node.remove();
|
|
node= null;
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Audio/video preview plugin using browser plugins
|
|
*
|
|
* @param elFinder.commands.quicklook
|
|
**/
|
|
function(ql) {
|
|
var preview = ql.preview,
|
|
mimes = [],
|
|
node;
|
|
|
|
$.each(navigator.plugins, function(i, plugins) {
|
|
$.each(plugins, function(i, plugin) {
|
|
(plugin.type.indexOf('audio/') === 0 || plugin.type.indexOf('video/') === 0) && mimes.push(plugin.type);
|
|
});
|
|
});
|
|
|
|
preview.bind('update', function(e) {
|
|
var file = e.file,
|
|
mime = file.mime,
|
|
video;
|
|
|
|
if ($.inArray(file.mime, mimes) !== -1) {
|
|
e.stopImmediatePropagation();
|
|
(video = mime.indexOf('video/') === 0) && ql.hideinfo();
|
|
node = $('<embed src="'+ql.fm.url(file.hash)+'" type="'+mime+'" class="elfinder-quicklook-preview-'+(video ? 'video' : 'audio')+'"/>')
|
|
.appendTo(preview);
|
|
}
|
|
}).bind('change', function() {
|
|
if (node && node.parent().length) {
|
|
node.remove();
|
|
node= null;
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
] |