This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import axios from 'axios' | |
let mockingEnabled = false | |
const mocks = {} | |
export function addMock(url, data) { | |
mocks[url] = data | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const {fetch: origFetch} = window; | |
window.fetch = async (...args) => { | |
console.log("fetch called with args:", args); | |
const response = await origFetch(...args); | |
/* work with the cloned response in a separate promise | |
chain -- could use the same chain with `await`. */ | |
response | |
.clone() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var RealXMLHttpRequest = window.XMLHttpRequest; | |
window.XMLHttpRequest = function(){ | |
var asynchrony = new RealXMLHttpRequest(); | |
var realOpen = asynchrony.open; | |
// steal the OPEN method | Has to be open to send header | |
asynchrony.open = function(method, url){ | |
realOpen.apply(asynchrony, arguments); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export const kFormat = (num) => | |
Math.abs(num) > 999 | |
? Math.sign(num) * (Math.abs(num) / 1000).toFixed(1) + 'k' | |
: Math.sign(num) * Math.abs(num) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
getReadableTS(){. //. Human readable timestamp for automatic file naming | |
const date = new Date(); | |
const year = date.getFullYear(); | |
const month = `${date.getMonth() + 1}`.padStart(2, '0'); | |
const day =`${date.getDate()}`.padStart(2, '0'); | |
const hour = date.getHours(); | |
const minutes = date.getMinutes(); | |
const seconds = date.getSeconds(); | |
return `${year}${month}${day}_${hour}${minutes}${seconds}` | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function getCryptoRange(min, max) { | |
const range = max - min + 1 | |
const mBits = Math.ceil(Math.log2(range)) | |
const mBytes = Math.ceil(mBits / 8) | |
const nAllowed = Math.floor((256 ** mBytes) / range) * range | |
const arBytes = new Uint8Array(mBytes) | |
let value | |
do { | |
crypto.getRandomValues(arBytes) | |
value = arBytes.reduce((acc, x, n) => acc + x * 256 ** n, 0) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var winEcrypt = ( ( _w )=>{ | |
let oKey = {}; | |
return { | |
"base64ToArrayBuffer": function(base64) { | |
var binary_string = _w.atob(base64); | |
var len = binary_string.length; | |
var bytes = new Uint8Array(len); | |
for (var i = 0; i < len; i++) { | |
bytes[i] = binary_string.charCodeAt(i); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Desc: Produce CSV with client-side JS. Contruct Blob and Download as CSV file | |
let nativeCSV = ( ( _d )=>{ | |
let oCnt, jnCSV, sCSV, blCSV, elCSV; // config, json, array, blob, and element | |
let retObj = { | |
"init": ( _oCnt )=>{ | |
oCnt = _oCnt; | |
if( oCnt.fileName.indexOf("####") !== -1) { | |
oCnt.fileName = oCnt.fileName.replace("####", Date.now() );} | |
jnCSV = sCSV = blCSV = elCSV = ""; | |
return retObj; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function squash(object) { // Deep JavaScript Object Squash | |
return Object | |
.entries(object) | |
.map(([key, value]) => Object.assign({ key }, value && typeof value === "object" | |
? { value: '', children: squash(value) } | |
: { value, children: [] } | |
)); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
// Advanced eCom UX Patterns | |
// Show email promo image (branded) reveal once, every 7 days | |
// Open drawer to email panel when clicked | |
var fElmRevPromo = function( _d, _aIds ){ | |
var _eRev = _d.getElementById( _aIds[0] ), _sBrand="LTD"; | |
var _eRevI = _d.getElementsByClassName( _aIds[1] )[0]; | |
return { | |
init: function( sBrand ){ |