Skip to content

Instantly share code, notes, and snippets.

@Hexrays
Last active October 13, 2016 19:35
Show Gist options
  • Select an option

  • Save Hexrays/9ef0c5e7fe9c2987d69adc5089a9bbc2 to your computer and use it in GitHub Desktop.

Select an option

Save Hexrays/9ef0c5e7fe9c2987d69adc5089a9bbc2 to your computer and use it in GitHub Desktop.
Helpers that replicate common jQuery functions
//helper function
export function $$(selector, context) {
context = context || document;
var elements = context.querySelectorAll(selector);
return Array.prototype.slice.call(elements);
}
export function convertToSnake (str) {
let strArr = str.split(''),
isLastUppercase = false;
for (let ltr in strArr) {
if (!isLastUppercase && strArr[ltr] === strArr[ltr].toUpperCase() && typeof(strArr[ltr]) !== 'number') {
strArr[ltr] = '-' + strArr[ltr].toLowerCase();
isLastUppercase = true;
} else if (strArr[ltr] === strArr[ltr].toUpperCase() && typeof(strArr[ltr]) !== 'number') {
strArr[ltr] = strArr[ltr].toLowerCase();
isLastUppercase = true;
} else {
isLastUppercase = false;
}
}
return strArr.join('');
}
export function addNewClass (el, newClass) {
if (el.classList){
el.classList.add(newClass);
} else {
el.className += ' ' + newClass;
}
}
export function removeClass (el, className) {
if (el.classList){
el.classList.remove(className);
} else {
el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
}
}
export function hasClass(el, className) {
if (el.classList){
return el.classList.contains(className);
}
else {
return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className);
}
}
export function toggleClass(el, className) {
if (el.classList) {
el.classList.toggle(className);
} else {
var classes = el.className.split(' ');
var existingIndex = classes.indexOf(className);
if (existingIndex >= 0)
classes.splice(existingIndex, 1);
else
classes.push(className);
el.className = classes.join(' ');
}
}
export function findAncestor(el, cls) {
while ((el = el.parentElement) && !hasClass(el, cls));
return el;
}
export function removeFromArray(arr, elm) {
let index = arr.indexOf(elm);
if (index > -1) {
arr.splice(index,1);
}
}
export function checkObjectInArray(obj, array) {
let element;
for (element in array) {
if (array.hasOwnProperty(element) && array[element] === obj) {
return true;
}
}
return false;
}
export function append(parent, el) {
parent.appendChild(el);
}
export function after(el, html) {
el.insertAdjacentHTML('afterend', htmlString);
}
export function before(el, html) {
el.insertAdjacentHTML('beforebegin', htmlString);
}
export function round(value, decimals) {
return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
}
export function createRandomRGB(alpha=1) {
return `rgba(${(Math.floor(Math.random() * 256))},${(Math.floor(Math.random() * 256))},${(Math.floor(Math.random() * 256))},${alpha})`;
}
export function debounce(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);
};
};
export function isNodeList(nodes) {
var stringRepr = Object.prototype.toString.call(nodes);
return typeof nodes === 'object' &&
/^\[object (HTMLCollection|NodeList|Object)\]$/.test(stringRepr) &&
(typeof nodes.length === 'number') &&
(nodes.length === 0 || (typeof nodes[0] === "object" && nodes[0].nodeType > 0));
}
export function guid() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
}
export function createRandomRGB(alpha=1) {
return `rgba(${(Math.floor(Math.random() * 256))},${(Math.floor(Math.random() * 256))},${(Math.floor(Math.random() * 256))},${alpha})`;
}
export function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment