/******************************************************************** * UTILS *********************************************************************/ // https://stackoverflow.com/q/779379 setTimeout(function (callback) { // Offload Heavy computation. }, 0); /******************************************************************** * JQUERY serializeArray *********************************************************************/ // Converts form into Array of Objects. // https://plainjs.com/javascript/ajax/serialize-form-data-into-an-array-46/ function serializeArray(form) { var field, l, s = []; if (typeof form == 'object' && form.nodeName == "FORM") { var len = form.elements.length; for (var i = 0; i < len; i++) { field = form.elements[i]; if (field.name && !field.disabled && field.type != 'file' && field.type != 'reset' && field.type != 'submit' && field.type != 'button') { if (field.type == 'select-multiple') { l = form.elements[i].options.length; for (j = 0; j < l; j++) { if (field.options[j].selected) s[s.length] = { name: field.name, value: field.options[j].value }; } } else if ((field.type != 'checkbox' && field.type != 'radio') || field.checked) { s[s.length] = { name: field.name, value: field.value }; } } } } return s; } // Nodejs check if module is called directly const CALLED_DIRECTLY = require.main === module; function splitTextarea(text) { return text.trim().replace(/\s+/, '\n').replace(/\n{2,}/, '').split('\n'); } // Download using fetch API.. import download from 'downloadjs'; const handleBufferDownload = (filename) => { res.arrayBuffer() .then((buffer) => { download(buffer, filename, contentType); stopLoading(); }); }; // http://stackoverflow.com/a/23842171 encodeURIComparison = function() { var arr = []; for(var i=0; i<256; i++) { var char=String.fromCharCode(i); if(encodeURI(char) !== encodeURIComponent(char)) { arr.push({ character: char, encodeURI: encodeURI(char), encodeURIComponent: encodeURIComponent(char) }); } } console.table(arr); }; function encodeQueryParams (url, queryParams) { return Object.keys(queryParams).reduce((a, key) => { a.push(key + '=' + encodeURIComponent(queryParams[key])); return a; }, []).join('&'); } let queryString = encodeQueryParams(queryParams); url += url.indexOf('?') > -1 ? '&' : '?' + queryString; /******************************************************************** * JQUERY COLOR CONTRAST *********************************************************************/ jQuery.Color.fn.contrastColor = function() { var r = this._rgba[0], g = this._rgba[1], b = this._rgba[2]; return (((r*299)+(g*587)+(b*144))/1000) >= 131.5 ? "black" : "white"; }; // usage examples: jQuery.Color("#bada55").contrastColor(); // "black" element.css( "color", jQuery.Color( element, "backgroundColor" ).contrastColor() );