/******************************************************************** * UTILS *********************************************************************/ 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() ); /******************************************************************** * MANY TO MANY *********************************************************************/ var fake_data_points = [ { id: 1, name: 'Can its beauty be refurbished?' }, { id: 2, name: 'Offers online car cleaning?' }, { id: 3, name: 'Has shopping cart?' } ]; var fake_projects = [ { id: 1, name: 'Auto' }, { id: 2, name: 'Beauty' } ]; var fake_data_points_to_project = [ { id: 1, data_point_id: 1, project_id: 1 }, { id: 2, data_point_id: 1, project_id: 2 }, { id: 4, data_point_id: 2, project_id: 1 }, { id: 5, data_point_id: 2, project_id: 2 } ]; exports.get_many_to_many = function(params) { var many_to_many_data = _.where(params.many_to_many, params.lookup); var related_table_index = _.indexBy(params.related_table, 'id'); return _.map(many_to_many_data, function(object) { return related_table_index[object[params.related_id]]; }); }; get_many_to_many({ many_to_many: fake_data_points_to_project, table: fake_data_points, related_table: fake_data_points, lookup: {'data_point_id': 1}, related_id: 'project_id' });