mirror of
https://github.com/Choices-js/Choices.git
synced 2024-05-18 13:36:35 +02:00
Remove unused utils
This commit is contained in:
parent
478df0fac1
commit
579138f756
254
src/scripts/dist/choices.js
vendored
254
src/scripts/dist/choices.js
vendored
|
@ -93,17 +93,6 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
/**
|
|
||||||
* Capitalises the first letter of each word in a string
|
|
||||||
* @param {String} str String to capitalise
|
|
||||||
* @return {String} Capitalised string
|
|
||||||
*/
|
|
||||||
var capitalise = exports.capitalise = function capitalise(str) {
|
|
||||||
return str.replace(/\w\S*/g, function (txt) {
|
|
||||||
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a string of random chars
|
* Generates a string of random chars
|
||||||
* @param {Number} length Length of the string to generate
|
* @param {Number} length Length of the string to generate
|
||||||
|
@ -155,15 +144,6 @@ var isType = exports.isType = function isType(type, obj) {
|
||||||
return obj !== undefined && obj !== null && clas === type;
|
return obj !== undefined && obj !== null && clas === type;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests to see if a passed object is a node
|
|
||||||
* @param {Object} obj Object to be tested
|
|
||||||
* @return {Boolean}
|
|
||||||
*/
|
|
||||||
var isNode = exports.isNode = function isNode(o) {
|
|
||||||
return (typeof Node === 'undefined' ? 'undefined' : _typeof(Node)) === 'object' ? o instanceof Node : o && (typeof o === 'undefined' ? 'undefined' : _typeof(o)) === 'object' && typeof o.nodeType === 'number' && typeof o.nodeName === 'string';
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests to see if a passed object is an element
|
* Tests to see if a passed object is an element
|
||||||
* @param {Object} obj Object to be tested
|
* @param {Object} obj Object to be tested
|
||||||
|
@ -214,132 +194,6 @@ var extend = exports.extend = function extend() {
|
||||||
return extended;
|
return extended;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* CSS transition end event listener
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
var whichTransitionEvent = exports.whichTransitionEvent = function whichTransitionEvent() {
|
|
||||||
var t = void 0,
|
|
||||||
el = document.createElement('fakeelement');
|
|
||||||
|
|
||||||
var transitions = {
|
|
||||||
transition: 'transitionend',
|
|
||||||
OTransition: 'oTransitionEnd',
|
|
||||||
MozTransition: 'transitionend',
|
|
||||||
WebkitTransition: 'webkitTransitionEnd'
|
|
||||||
};
|
|
||||||
|
|
||||||
for (t in transitions) {
|
|
||||||
if (el.style[t] !== undefined) {
|
|
||||||
return transitions[t];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CSS animation end event listener
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
var whichAnimationEvent = exports.whichAnimationEvent = function whichAnimationEvent() {
|
|
||||||
var t = void 0,
|
|
||||||
el = document.createElement('fakeelement');
|
|
||||||
|
|
||||||
var animations = {
|
|
||||||
animation: 'animationend',
|
|
||||||
OAnimation: 'oAnimationEnd',
|
|
||||||
MozAnimation: 'animationend',
|
|
||||||
WebkitAnimation: 'webkitAnimationEnd'
|
|
||||||
};
|
|
||||||
|
|
||||||
for (t in animations) {
|
|
||||||
if (el.style[t] !== undefined) {
|
|
||||||
return animations[t];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the ancestors of each element in the current set of matched elements,
|
|
||||||
* up to but not including the element matched by the selector
|
|
||||||
* @param {NodeElement} elem Element to begin search from
|
|
||||||
* @param {NodeElement} parent Parent to find
|
|
||||||
* @param {String} selector Class to find
|
|
||||||
* @return {Array} Array of parent elements
|
|
||||||
*/
|
|
||||||
var getParentsUntil = exports.getParentsUntil = function getParentsUntil(elem, parent, selector) {
|
|
||||||
var parents = [];
|
|
||||||
// Get matches
|
|
||||||
for (; elem && elem !== document; elem = elem.parentNode) {
|
|
||||||
// Check if parent has been reached
|
|
||||||
if (parent) {
|
|
||||||
var parentType = parent.charAt(0);
|
|
||||||
|
|
||||||
// If parent is a class
|
|
||||||
if (parentType === '.') {
|
|
||||||
if (elem.classList.contains(parent.substr(1))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If parent is an ID
|
|
||||||
if (parentType === '#') {
|
|
||||||
if (elem.id === parent.substr(1)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If parent is a data attribute
|
|
||||||
if (parentType === '[') {
|
|
||||||
if (elem.hasAttribute(parent.substr(1, parent.length - 1))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If parent is a tag
|
|
||||||
if (elem.tagName.toLowerCase() === parent) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (selector) {
|
|
||||||
var selectorType = selector.charAt(0);
|
|
||||||
|
|
||||||
// If selector is a class
|
|
||||||
if (selectorType === '.') {
|
|
||||||
if (elem.classList.contains(selector.substr(1))) {
|
|
||||||
parents.push(elem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If selector is an ID
|
|
||||||
if (selectorType === '#') {
|
|
||||||
if (elem.id === selector.substr(1)) {
|
|
||||||
parents.push(elem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If selector is a data attribute
|
|
||||||
if (selectorType === '[') {
|
|
||||||
if (elem.hasAttribute(selector.substr(1, selector.length - 1))) {
|
|
||||||
parents.push(elem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If selector is a tag
|
|
||||||
if (elem.tagName.toLowerCase() === selector) {
|
|
||||||
parents.push(elem);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
parents.push(elem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return parents if any exist
|
|
||||||
if (parents.length === 0) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return parents;
|
|
||||||
};
|
|
||||||
|
|
||||||
var wrap = exports.wrap = function wrap(element, wrapper) {
|
var wrap = exports.wrap = function wrap(element, wrapper) {
|
||||||
wrapper = wrapper || document.createElement('div');
|
wrapper = wrapper || document.createElement('div');
|
||||||
if (element.nextSibling) {
|
if (element.nextSibling) {
|
||||||
|
@ -350,17 +204,6 @@ var wrap = exports.wrap = function wrap(element, wrapper) {
|
||||||
return wrapper.appendChild(element);
|
return wrapper.appendChild(element);
|
||||||
};
|
};
|
||||||
|
|
||||||
var getSiblings = exports.getSiblings = function getSiblings(elem) {
|
|
||||||
var siblings = [];
|
|
||||||
var sibling = elem.parentNode.firstChild;
|
|
||||||
for (; sibling; sibling = sibling.nextSibling) {
|
|
||||||
if (sibling.nodeType === 1 && sibling !== elem) {
|
|
||||||
siblings.push(sibling);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return siblings;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find ancestor in DOM tree
|
* Find ancestor in DOM tree
|
||||||
* @param {NodeElement} el Element to start search from
|
* @param {NodeElement} el Element to start search from
|
||||||
|
@ -392,60 +235,6 @@ var findAncestorByAttrName = exports.findAncestorByAttrName = function findAnces
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Debounce an event handler.
|
|
||||||
* @param {Function} func Function to run after wait
|
|
||||||
* @param {Number} wait The delay before the function is executed
|
|
||||||
* @param {Boolean} immediate If passed, trigger the function on the leading edge, instead of the trailing.
|
|
||||||
* @return {Function} A function will be called after it stops being called for a given delay
|
|
||||||
*/
|
|
||||||
var debounce = exports.debounce = function debounce(func, wait, immediate) {
|
|
||||||
var timeout = void 0;
|
|
||||||
return function () {
|
|
||||||
var context = this,
|
|
||||||
args = arguments;
|
|
||||||
var later = function later() {
|
|
||||||
timeout = null;
|
|
||||||
if (!immediate) func.apply(context, args);
|
|
||||||
};
|
|
||||||
var callNow = immediate && !timeout;
|
|
||||||
clearTimeout(timeout);
|
|
||||||
timeout = setTimeout(later, wait);
|
|
||||||
if (callNow) func.apply(context, args);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get an element's distance from the top of the page
|
|
||||||
* @private
|
|
||||||
* @param {NodeElement} el Element to test for
|
|
||||||
* @return {Number} Elements Distance from top of page
|
|
||||||
*/
|
|
||||||
var getElemDistance = exports.getElemDistance = function getElemDistance(el) {
|
|
||||||
var location = 0;
|
|
||||||
if (el.offsetParent) {
|
|
||||||
do {
|
|
||||||
location += el.offsetTop;
|
|
||||||
el = el.offsetParent;
|
|
||||||
} while (el);
|
|
||||||
}
|
|
||||||
return location >= 0 ? location : 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine element height multiplied by any offsets
|
|
||||||
* @private
|
|
||||||
* @param {HTMLElement} el Element to test for
|
|
||||||
* @return {Number} Height of element
|
|
||||||
*/
|
|
||||||
var getElementOffset = exports.getElementOffset = function getElementOffset(el, offset) {
|
|
||||||
var elOffset = offset;
|
|
||||||
if (elOffset > 1) elOffset = 1;
|
|
||||||
if (elOffset > 0) elOffset = 0;
|
|
||||||
|
|
||||||
return Math.max(el.offsetHeight * elOffset);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the next or previous element from a given start point
|
* Get the next or previous element from a given start point
|
||||||
* @param {HTMLElement} startEl Element to start position from
|
* @param {HTMLElement} startEl Element to start position from
|
||||||
|
@ -467,31 +256,6 @@ var getAdjacentEl = exports.getAdjacentEl = function getAdjacentEl(startEl, clas
|
||||||
return children[startPos + operatorDirection];
|
return children[startPos + operatorDirection];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Get scroll position based on top/bottom position
|
|
||||||
* @private
|
|
||||||
* @return {String} Position of scroll
|
|
||||||
*/
|
|
||||||
var getScrollPosition = exports.getScrollPosition = function getScrollPosition(position) {
|
|
||||||
if (position === 'bottom') {
|
|
||||||
// Scroll position from the bottom of the viewport
|
|
||||||
return Math.max((window.scrollY || window.pageYOffset) + (window.innerHeight || document.documentElement.clientHeight));
|
|
||||||
}
|
|
||||||
// Scroll position from the top of the viewport
|
|
||||||
return window.scrollY || window.pageYOffset;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine whether an element is within the viewport
|
|
||||||
* @param {HTMLElement} el Element to test
|
|
||||||
* @return {String} Position of scroll
|
|
||||||
* @return {Boolean}
|
|
||||||
*/
|
|
||||||
var isInView = exports.isInView = function isInView(el, position, offset) {
|
|
||||||
// If the user has scrolled further than the distance from the element to the top of its parent
|
|
||||||
return this.getScrollPosition(position) > this.getElemDistance(el) + this.getElementOffset(el, offset);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine whether an element is within
|
* Determine whether an element is within
|
||||||
* @param {HTMLElement} el Element to test
|
* @param {HTMLElement} el Element to test
|
||||||
|
@ -526,24 +290,6 @@ var stripHTML = exports.stripHTML = function stripHTML(html) {
|
||||||
return html.replace(/&/g, '&').replace(/>/g, '&rt;').replace(/</g, '<').replace(/"/g, '"');
|
return html.replace(/&/g, '&').replace(/>/g, '&rt;').replace(/</g, '<').replace(/"/g, '"');
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds animation to an element and removes it upon animation completion
|
|
||||||
* @param {Element} el Element to add animation to
|
|
||||||
* @param {String} animation Animation class to add to element
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
var addAnimation = exports.addAnimation = function addAnimation(el, animation) {
|
|
||||||
var animationEvent = whichAnimationEvent();
|
|
||||||
|
|
||||||
var removeAnimation = function removeAnimation() {
|
|
||||||
el.classList.remove(animation);
|
|
||||||
el.removeEventListener(animationEvent, removeAnimation, false);
|
|
||||||
};
|
|
||||||
|
|
||||||
el.classList.add(animation);
|
|
||||||
el.addEventListener(animationEvent, removeAnimation, false);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a random number between a range
|
* Get a random number between a range
|
||||||
* @param {Number} min Minimum range
|
* @param {Number} min Minimum range
|
||||||
|
|
2
src/scripts/dist/choices.js.map
vendored
2
src/scripts/dist/choices.js.map
vendored
File diff suppressed because one or more lines are too long
2
src/scripts/dist/choices.min.js
vendored
2
src/scripts/dist/choices.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1,14 +1,5 @@
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
/**
|
|
||||||
* Capitalises the first letter of each word in a string
|
|
||||||
* @param {String} str String to capitalise
|
|
||||||
* @return {String} Capitalised string
|
|
||||||
*/
|
|
||||||
export const capitalise = function(str) {
|
|
||||||
return str.replace(/\w\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase());
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a string of random chars
|
* Generates a string of random chars
|
||||||
* @param {Number} length Length of the string to generate
|
* @param {Number} length Length of the string to generate
|
||||||
|
@ -39,7 +30,6 @@ export const generateId = function(element, prefix) {
|
||||||
return id;
|
return id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the type of an object
|
* Tests the type of an object
|
||||||
* @param {String} type Type to test object against
|
* @param {String} type Type to test object against
|
||||||
|
@ -61,25 +51,15 @@ export const isType = function(type, obj) {
|
||||||
return obj !== undefined && obj !== null && clas === type;
|
return obj !== undefined && obj !== null && clas === type;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests to see if a passed object is a node
|
|
||||||
* @param {Object} obj Object to be tested
|
|
||||||
* @return {Boolean}
|
|
||||||
*/
|
|
||||||
export const isNode = o => (
|
|
||||||
typeof Node === 'object' ? o instanceof Node :
|
|
||||||
o && typeof o === 'object' && typeof o.nodeType === 'number' && typeof o.nodeName === 'string'
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests to see if a passed object is an element
|
* Tests to see if a passed object is an element
|
||||||
* @param {Object} obj Object to be tested
|
* @param {Object} obj Object to be tested
|
||||||
* @return {Boolean}
|
* @return {Boolean}
|
||||||
*/
|
*/
|
||||||
export const isElement = o => (
|
export const isElement = o => (
|
||||||
typeof HTMLElement === 'object' ? o instanceof HTMLElement : // DOM2
|
typeof HTMLElement === 'object' ? o instanceof HTMLElement : // DOM2
|
||||||
o && typeof o === 'object' && o !== null && o.nodeType === 1 && typeof o.nodeName === 'string'
|
o && typeof o === 'object' && o !== null && o.nodeType === 1 && typeof o.nodeName === 'string'
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Merges unspecified amount of objects into new object
|
* Merges unspecified amount of objects into new object
|
||||||
|
@ -121,132 +101,6 @@ export const extend = function() {
|
||||||
return extended;
|
return extended;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* CSS transition end event listener
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
export const whichTransitionEvent = function() {
|
|
||||||
let t,
|
|
||||||
el = document.createElement('fakeelement');
|
|
||||||
|
|
||||||
const transitions = {
|
|
||||||
transition: 'transitionend',
|
|
||||||
OTransition: 'oTransitionEnd',
|
|
||||||
MozTransition: 'transitionend',
|
|
||||||
WebkitTransition: 'webkitTransitionEnd',
|
|
||||||
};
|
|
||||||
|
|
||||||
for (t in transitions) {
|
|
||||||
if (el.style[t] !== undefined) {
|
|
||||||
return transitions[t];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CSS animation end event listener
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
export const whichAnimationEvent = function() {
|
|
||||||
let t,
|
|
||||||
el = document.createElement('fakeelement');
|
|
||||||
|
|
||||||
const animations = {
|
|
||||||
animation: 'animationend',
|
|
||||||
OAnimation: 'oAnimationEnd',
|
|
||||||
MozAnimation: 'animationend',
|
|
||||||
WebkitAnimation: 'webkitAnimationEnd',
|
|
||||||
};
|
|
||||||
|
|
||||||
for (t in animations) {
|
|
||||||
if (el.style[t] !== undefined) {
|
|
||||||
return animations[t];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the ancestors of each element in the current set of matched elements,
|
|
||||||
* up to but not including the element matched by the selector
|
|
||||||
* @param {NodeElement} elem Element to begin search from
|
|
||||||
* @param {NodeElement} parent Parent to find
|
|
||||||
* @param {String} selector Class to find
|
|
||||||
* @return {Array} Array of parent elements
|
|
||||||
*/
|
|
||||||
export const getParentsUntil = function(elem, parent, selector) {
|
|
||||||
const parents = [];
|
|
||||||
// Get matches
|
|
||||||
for (; elem && elem !== document; elem = elem.parentNode) {
|
|
||||||
// Check if parent has been reached
|
|
||||||
if (parent) {
|
|
||||||
const parentType = parent.charAt(0);
|
|
||||||
|
|
||||||
// If parent is a class
|
|
||||||
if (parentType === '.') {
|
|
||||||
if (elem.classList.contains(parent.substr(1))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If parent is an ID
|
|
||||||
if (parentType === '#') {
|
|
||||||
if (elem.id === parent.substr(1)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If parent is a data attribute
|
|
||||||
if (parentType === '[') {
|
|
||||||
if (elem.hasAttribute(parent.substr(1, parent.length - 1))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If parent is a tag
|
|
||||||
if (elem.tagName.toLowerCase() === parent) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (selector) {
|
|
||||||
const selectorType = selector.charAt(0);
|
|
||||||
|
|
||||||
// If selector is a class
|
|
||||||
if (selectorType === '.') {
|
|
||||||
if (elem.classList.contains(selector.substr(1))) {
|
|
||||||
parents.push(elem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If selector is an ID
|
|
||||||
if (selectorType === '#') {
|
|
||||||
if (elem.id === selector.substr(1)) {
|
|
||||||
parents.push(elem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If selector is a data attribute
|
|
||||||
if (selectorType === '[') {
|
|
||||||
if (elem.hasAttribute(selector.substr(1, selector.length - 1))) {
|
|
||||||
parents.push(elem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If selector is a tag
|
|
||||||
if (elem.tagName.toLowerCase() === selector) {
|
|
||||||
parents.push(elem);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
parents.push(elem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return parents if any exist
|
|
||||||
if (parents.length === 0) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return parents;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const wrap = function(element, wrapper) {
|
export const wrap = function(element, wrapper) {
|
||||||
wrapper = wrapper || document.createElement('div');
|
wrapper = wrapper || document.createElement('div');
|
||||||
if (element.nextSibling) {
|
if (element.nextSibling) {
|
||||||
|
@ -257,17 +111,6 @@ export const wrap = function(element, wrapper) {
|
||||||
return wrapper.appendChild(element);
|
return wrapper.appendChild(element);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getSiblings = function(elem) {
|
|
||||||
const siblings = [];
|
|
||||||
let sibling = elem.parentNode.firstChild;
|
|
||||||
for (; sibling; sibling = sibling.nextSibling) {
|
|
||||||
if (sibling.nodeType === 1 && sibling !== elem) {
|
|
||||||
siblings.push(sibling);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return siblings;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find ancestor in DOM tree
|
* Find ancestor in DOM tree
|
||||||
* @param {NodeElement} el Element to start search from
|
* @param {NodeElement} el Element to start search from
|
||||||
|
@ -299,60 +142,6 @@ export const findAncestorByAttrName = function(el, attr) {
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Debounce an event handler.
|
|
||||||
* @param {Function} func Function to run after wait
|
|
||||||
* @param {Number} wait The delay before the function is executed
|
|
||||||
* @param {Boolean} immediate If passed, trigger the function on the leading edge, instead of the trailing.
|
|
||||||
* @return {Function} A function will be called after it stops being called for a given delay
|
|
||||||
*/
|
|
||||||
export const debounce = function(func, wait, immediate) {
|
|
||||||
let timeout;
|
|
||||||
return function() {
|
|
||||||
let context = this,
|
|
||||||
args = arguments;
|
|
||||||
const later = function() {
|
|
||||||
timeout = null;
|
|
||||||
if (!immediate) func.apply(context, args);
|
|
||||||
};
|
|
||||||
const callNow = immediate && !timeout;
|
|
||||||
clearTimeout(timeout);
|
|
||||||
timeout = setTimeout(later, wait);
|
|
||||||
if (callNow) func.apply(context, args);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get an element's distance from the top of the page
|
|
||||||
* @private
|
|
||||||
* @param {NodeElement} el Element to test for
|
|
||||||
* @return {Number} Elements Distance from top of page
|
|
||||||
*/
|
|
||||||
export const getElemDistance = function(el) {
|
|
||||||
let location = 0;
|
|
||||||
if (el.offsetParent) {
|
|
||||||
do {
|
|
||||||
location += el.offsetTop;
|
|
||||||
el = el.offsetParent;
|
|
||||||
} while (el);
|
|
||||||
}
|
|
||||||
return location >= 0 ? location : 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine element height multiplied by any offsets
|
|
||||||
* @private
|
|
||||||
* @param {HTMLElement} el Element to test for
|
|
||||||
* @return {Number} Height of element
|
|
||||||
*/
|
|
||||||
export const getElementOffset = function(el, offset) {
|
|
||||||
let elOffset = offset;
|
|
||||||
if (elOffset > 1) elOffset = 1;
|
|
||||||
if (elOffset > 0) elOffset = 0;
|
|
||||||
|
|
||||||
return Math.max(el.offsetHeight * elOffset);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the next or previous element from a given start point
|
* Get the next or previous element from a given start point
|
||||||
* @param {HTMLElement} startEl Element to start position from
|
* @param {HTMLElement} startEl Element to start position from
|
||||||
|
@ -372,31 +161,6 @@ export const getAdjacentEl = (startEl, className, direction = 1) => {
|
||||||
return children[startPos + operatorDirection];
|
return children[startPos + operatorDirection];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Get scroll position based on top/bottom position
|
|
||||||
* @private
|
|
||||||
* @return {String} Position of scroll
|
|
||||||
*/
|
|
||||||
export const getScrollPosition = function(position) {
|
|
||||||
if (position === 'bottom') {
|
|
||||||
// Scroll position from the bottom of the viewport
|
|
||||||
return Math.max((window.scrollY || window.pageYOffset) + (window.innerHeight || document.documentElement.clientHeight));
|
|
||||||
}
|
|
||||||
// Scroll position from the top of the viewport
|
|
||||||
return (window.scrollY || window.pageYOffset);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine whether an element is within the viewport
|
|
||||||
* @param {HTMLElement} el Element to test
|
|
||||||
* @return {String} Position of scroll
|
|
||||||
* @return {Boolean}
|
|
||||||
*/
|
|
||||||
export const isInView = function(el, position, offset) {
|
|
||||||
// If the user has scrolled further than the distance from the element to the top of its parent
|
|
||||||
return this.getScrollPosition(position) > (this.getElemDistance(el) + this.getElementOffset(el, offset));
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine whether an element is within
|
* Determine whether an element is within
|
||||||
* @param {HTMLElement} el Element to test
|
* @param {HTMLElement} el Element to test
|
||||||
|
@ -431,25 +195,6 @@ export const stripHTML = html =>
|
||||||
.replace(/</g, '<')
|
.replace(/</g, '<')
|
||||||
.replace(/"/g, '"');
|
.replace(/"/g, '"');
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds animation to an element and removes it upon animation completion
|
|
||||||
* @param {Element} el Element to add animation to
|
|
||||||
* @param {String} animation Animation class to add to element
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
export const addAnimation = (el, animation) => {
|
|
||||||
const animationEvent = whichAnimationEvent();
|
|
||||||
|
|
||||||
const removeAnimation = () => {
|
|
||||||
el.classList.remove(animation);
|
|
||||||
el.removeEventListener(animationEvent, removeAnimation, false);
|
|
||||||
};
|
|
||||||
|
|
||||||
el.classList.add(animation);
|
|
||||||
el.addEventListener(animationEvent, removeAnimation, false);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a random number between a range
|
* Get a random number between a range
|
||||||
* @param {Number} min Minimum range
|
* @param {Number} min Minimum range
|
||||||
|
|
Loading…
Reference in a new issue