You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.2 KiB
JavaScript

'use strict';
// eslint-disable-next-line no-unused-vars
const WPFormsUtils = window.WPFormsUtils || ( function( document, window, $ ) {
/**
* Public functions and properties.
*
* @since 1.7.6
*
* @type {object}
*/
const app = {
/**
* Wrapper to trigger a native or custom event and return the event object.
*
* @since 1.7.6
*
* @param {jQuery} $element Element to trigger event on.
* @param {string} eventName Event name to trigger (custom or native).
* @param {Array} args Trigger arguments.
*
* @returns {Event} Event object.
*/
triggerEvent: function( $element, eventName, args = [] ) {
let eventObject = new $.Event( eventName );
$element.trigger( eventObject, args );
return eventObject;
},
/**
* Debounce.
*
* This function comes directly from underscore.js:
*
* Returns a function, that, as long as it continues to be invoked, will not
* be triggered. The function will be called after it stops being called for
* N milliseconds. If `immediate` is passed, trigger the function on the
* leading edge, instead of the trailing.
*
* Debouncing is removing unwanted input noise from buttons, switches or other user input.
* Debouncing prevents extra activations or slow functions from triggering too often.
*
* @param {Function} func The function to be debounced.
* @param {int} wait The amount of time to delay calling func.
* @param {bool} immediate Whether or not to trigger the function on the leading edge.
*
* @returns {Function} Returns a function that, as long as it continues to be invoked, will not be triggered.
*/
debounce: function( func, wait, immediate ) {
var timeout;
return function() {
var context = this,
args = arguments;
var later = function() {
timeout = null;
if ( ! immediate ) {
func.apply( context, args );
}
};
var callNow = immediate && ! timeout;
clearTimeout( timeout );
timeout = setTimeout( later, wait );
if ( callNow ) {
func.apply( context, args );
}
};
},
};
// Provide access to public functions/properties.
return app;
}( document, window, jQuery ) );