FCDM-website-new/wp-content/plugins/wp-file-manager/lib/js/jquery.elfinder.js

453 lines
11 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*** jQuery UI droppable performance tune for elFinder ***/
(function(){
if (jQuery.ui) {
if (jQuery.ui.ddmanager) {
var origin = jQuery.ui.ddmanager.prepareOffsets;
jQuery.ui.ddmanager.prepareOffsets = function( t, event ) {
var isOutView = function(elem) {
if (elem.is(':hidden')) {
return true;
}
var rect = elem[0].getBoundingClientRect();
return document.elementFromPoint(rect.left, rect.top) || document.elementFromPoint(rect.left + rect.width, rect.top + rect.height)? false : true;
};
if (event.type === 'mousedown' || t.options.elfRefresh) {
var i, d,
m = jQuery.ui.ddmanager.droppables[ t.options.scope ] || [],
l = m.length;
for ( i = 0; i < l; i++ ) {
d = m[ i ];
if (d.options.autoDisable && (!d.options.disabled || d.options.autoDisable > 1)) {
d.options.disabled = isOutView(d.element);
d.options.autoDisable = d.options.disabled? 2 : 1;
}
}
}
// call origin function
return origin( t, event );
};
}
}
})();
/**
*
* jquery.binarytransport
*
* @description. jQuery ajax transport for making binary data type requests.
*
*/
(function($, undefined) {
"use strict";
// use this transport for "binary" data type
jQuery.ajaxTransport("+binary", function(options, originalOptions, jqXHR) {
// check for conditions and support for blob / arraybuffer response type
if (window.FormData && ((options.dataType && (options.dataType == 'binary')) || (options.data && ((window.ArrayBuffer && options.data instanceof ArrayBuffer) || (window.Blob && options.data instanceof Blob))))) {
var callback;
// Cross domain only allowed if supported through XMLHttpRequest
return {
send: function( headers, complete ) {
var i,
dataType = options.responseType || "blob",
xhr = options.xhr();
xhr.open(
options.type,
options.url,
options.async,
options.username,
options.password
);
// Apply custom fields if provided
if ( options.xhrFields ) {
for ( i in options.xhrFields ) {
xhr[ i ] = options.xhrFields[ i ];
}
}
// Override mime type if needed
if ( options.mimeType && xhr.overrideMimeType ) {
xhr.overrideMimeType( options.mimeType );
}
// X-Requested-With header
// For cross-domain requests, seeing as conditions for a preflight are
// akin to a jigsaw puzzle, we simply never set it to be sure.
// (it can always be set on a per-request basis or even using ajaxSetup)
// For same-domain requests, won't change header if already provided.
if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
headers[ "X-Requested-With" ] = "XMLHttpRequest";
}
// Set headers
for ( i in headers ) {
xhr.setRequestHeader( i, headers[ i ] );
}
// Callback
callback = function( type ) {
return function() {
if ( callback ) {
callback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;
if ( type === "abort" ) {
xhr.abort();
} else if ( type === "error" ) {
complete(
xhr.status,
xhr.statusText
);
} else {
var data = {};
data[options.dataType] = xhr.response;
complete(
xhr.status,
xhr.statusText,
data,
xhr.getAllResponseHeaders()
);
}
}
};
};
// Listen to events
xhr.onload = callback();
xhr.onabort = xhr.onerror = xhr.ontimeout = callback( "error" );
// Create the abort callback
callback = callback( "abort" );
try {
xhr.responseType = dataType;
// Do send the request (this may raise an exception)
xhr.send( options.data || null );
} catch ( e ) {
if ( callback ) {
throw e;
}
}
},
abort: function() {
if ( callback ) {
callback();
}
}
};
}
});
})(window.jQuery);
/*!
* jQuery UI Touch Punch 0.2.3
*
* Copyright 20112014, Dave Furfero
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Depends:
* jquery.ui.widget.js
* jquery.ui.mouse.js
*/
(function ($) {
// Detect touch support
jQuery.support.touch = 'ontouchend' in document;
// Ignore browsers without touch support
if (!jQuery.support.touch) {
return;
}
var mouseProto = jQuery.ui.mouse.prototype,
_mouseInit = mouseProto._mouseInit,
_mouseDestroy = mouseProto._mouseDestroy,
touchHandled,
posX, posY;
/**
* Simulate a mouse event based on a corresponding touch event
* @param {Object} event A touch event
* @param {String} simulatedType The corresponding mouse event
*/
function simulateMouseEvent (event, simulatedType) {
// Ignore multi-touch events
if (event.originalEvent.touches.length > 1) {
return;
}
if (! jQuery(event.currentTarget).hasClass('touch-punch-keep-default')) {
event.preventDefault();
}
var touch = event.originalEvent.changedTouches[0],
simulatedEvent = document.createEvent('MouseEvents');
// Initialize the simulated mouse event using the touch event's coordinates
simulatedEvent.initMouseEvent(
simulatedType, // type
true, // bubbles
true, // cancelable
window, // view
1, // detail
touch.screenX, // screenX
touch.screenY, // screenY
touch.clientX, // clientX
touch.clientY, // clientY
false, // ctrlKey
false, // altKey
false, // shiftKey
false, // metaKey
0, // button
null // relatedTarget
);
// Dispatch the simulated event to the target element
event.target.dispatchEvent(simulatedEvent);
}
/**
* Handle the jQuery UI widget's touchstart events
* @param {Object} event The widget element's touchstart event
*/
mouseProto._touchStart = function (event) {
var self = this;
// Ignore the event if another widget is already being handled
if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) {
return;
}
// Track element position to avoid "false" move
posX = event.originalEvent.changedTouches[0].screenX.toFixed(0);
posY = event.originalEvent.changedTouches[0].screenY.toFixed(0);
// Set the flag to prevent other widgets from inheriting the touch event
touchHandled = true;
// Track movement to determine if interaction was a click
self._touchMoved = false;
// Simulate the mouseover event
simulateMouseEvent(event, 'mouseover');
// Simulate the mousemove event
simulateMouseEvent(event, 'mousemove');
// Simulate the mousedown event
simulateMouseEvent(event, 'mousedown');
};
/**
* Handle the jQuery UI widget's touchmove events
* @param {Object} event The document's touchmove event
*/
mouseProto._touchMove = function (event) {
// Ignore event if not handled
if (!touchHandled) {
return;
}
// Ignore if it's a "false" move (position not changed)
var x = event.originalEvent.changedTouches[0].screenX.toFixed(0);
var y = event.originalEvent.changedTouches[0].screenY.toFixed(0);
// Ignore if it's a "false" move (position not changed)
if (Math.abs(posX - x) <= 4 && Math.abs(posY - y) <= 4) {
return;
}
// Interaction was not a click
this._touchMoved = true;
// Simulate the mousemove event
simulateMouseEvent(event, 'mousemove');
};
/**
* Handle the jQuery UI widget's touchend events
* @param {Object} event The document's touchend event
*/
mouseProto._touchEnd = function (event) {
// Ignore event if not handled
if (!touchHandled) {
return;
}
// Simulate the mouseup event
simulateMouseEvent(event, 'mouseup');
// Simulate the mouseout event
simulateMouseEvent(event, 'mouseout');
// If the touch interaction did not move, it should trigger a click
if (!this._touchMoved) {
// Simulate the click event
simulateMouseEvent(event, 'click');
}
// Unset the flag to allow other widgets to inherit the touch event
touchHandled = false;
this._touchMoved = false;
};
/**
* A duck punch of the jQuery.ui.mouse _mouseInit method to support touch events.
* This method extends the widget with bound touch event handlers that
* translate touch events to mouse events and pass them to the widget's
* original mouse event handling methods.
*/
mouseProto._mouseInit = function () {
var self = this;
if (self.element.hasClass('touch-punch')) {
// Delegate the touch handlers to the widget's element
self.element.on({
touchstart: jQuery.proxy(self, '_touchStart'),
touchmove: jQuery.proxy(self, '_touchMove'),
touchend: jQuery.proxy(self, '_touchEnd')
});
}
// Call the original jQuery.ui.mouse init method
_mouseInit.call(self);
};
/**
* Remove the touch event handlers
*/
mouseProto._mouseDestroy = function () {
var self = this;
if (self.element.hasClass('touch-punch')) {
// Delegate the touch handlers to the widget's element
self.element.off({
touchstart: jQuery.proxy(self, '_touchStart'),
touchmove: jQuery.proxy(self, '_touchMove'),
touchend: jQuery.proxy(self, '_touchEnd')
});
}
// Call the original jQuery.ui.mouse destroy method
_mouseDestroy.call(self);
};
})(jQuery);
jQuery.fn.elfinder = function(o, o2) {
if (o === 'instance') {
return this.getElFinder();
} else if (o === 'ondemand') {
}
return this.each(function() {
var cmd = typeof o === 'string' ? o : '',
bootCallback = typeof o2 === 'function'? o2 : void(0),
elfinder = this.elfinder,
opts, reloadCallback;
if (!elfinder) {
if (jQuery.isPlainObject(o)) {
new elFinder(this, o, bootCallback);
}
} else {
switch(cmd) {
case 'close':
case 'hide':
elfinder.hide();
break;
case 'open':
case 'show':
elfinder.show();
break;
case 'destroy':
elfinder.destroy();
break;
case 'reload':
case 'restart':
if (elfinder) {
opts = jQuery.extend(true, elfinder.options, jQuery.isPlainObject(o2)? o2 : {});
bootCallback = elfinder.bootCallback;
if (elfinder.reloadCallback && jQuery.isFunction(elfinder.reloadCallback)) {
elfinder.reloadCallback(opts, bootCallback);
} else {
elfinder.destroy();
new elFinder(this, opts, bootCallback);
}
}
break;
}
}
});
};
jQuery.fn.getElFinder = function() {
var instance;
this.each(function() {
if (this.elfinder) {
instance = this.elfinder;
return false;
}
});
return instance;
};
jQuery.fn.elfUiWidgetInstance = function(name) {
try {
return this[name]('instance');
} catch(e) {
// fallback for jQuery UI < 1.11
var data = this.data('ui-' + name);
if (data && typeof data === 'object' && data.widgetFullName === 'ui-' + name) {
return data;
}
return null;
}
};
// function scrollRight
if (! jQuery.fn.scrollRight) {
jQuery.fn.extend({
scrollRight: function (val) {
var node = this.get(0);
if (val === undefined) {
return Math.max(0, node.scrollWidth - (node.scrollLeft + node.clientWidth));
}
return this.scrollLeft(node.scrollWidth - node.clientWidth - val);
}
});
}
// function scrollBottom
if (! jQuery.fn.scrollBottom) {
jQuery.fn.extend({
scrollBottom: function(val) {
var node = this.get(0);
if (val === undefined) {
return Math.max(0, node.scrollHeight - (node.scrollTop + node.clientHeight));
}
return this.scrollTop(node.scrollHeight - node.clientHeight - val);
}
});
}