Skip to content

Instantly share code, notes, and snippets.

🚀
Terraforming new Worlds

Gianluca Guarini GianlucaGuarini

View GitHub Profile
@GianlucaGuarini
GianlucaGuarini / wait.js
Last active Jan 19, 2018
Functional advanced async (cancellable/abortable) `setTimeout` helper
View wait.js
/**
* Advanced async (cancellable/abortable) `setTimeout` helper
*/
function wait(delay) {
return (val) => {
let timer
let abort
const p = new Promise(function(resolve, reject) {
abort = reject
@GianlucaGuarini
GianlucaGuarini / curry.js
Last active Nov 18, 2017
Function to curry any javascript method
View curry.js
/**
* Function to curry any javascript method
* @param {Function} fn - the target function we want to curry
* @param {...[args]} acc - initial arguments
* @returns {Function|*} it will return a function until the target function
* will receive all its arguments
*/
function curry(fn, ...acc) {
return (...args) => {
args = [...acc, ...args]
@GianlucaGuarini
GianlucaGuarini / accessible-overlays.js
Last active Nov 1, 2017
Simple function to make your overlays element accessible
View accessible-overlays.js
// forked by a script of https://github.com/nilssolanki
import { add } from 'bianco.events'
/**
* A list of all the open overlays, tooltips, sidebars etc.
* @type {Map}
*/
const openOverlays = new Map()
/**
@GianlucaGuarini
GianlucaGuarini / real-device-px-ratio.js
Created Oct 9, 2017
Because devicePixelRatio is not relyable enough
View real-device-px-ratio.js
const resolutions = [
'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=',
'data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA=',
'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==',
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVQYV2P4DwABAQEAWk1v8QAAAABJRU5ErkJggg==',
];
const img = document.createElement('img');
img.src = resolutions[0];
img.srcset = resolutions.map((itm, i) => `${itm} ${i + 1}x`).join(',');
View package.json
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"riot": "^3.4.2"
},
"devDependencies": {
"coffee-script": "^1.12.5",
View promise-sequence.js
function sequence(promises) {
return new Promise((resolve, reject) => {
const rets = []
const gen = (function*() {
// loop as long as we have promises in the queue
while (promises.length) {
// take always the first promise
const promise = promises.shift()
// wait until it's resolved to step to the next iteration
promise
@GianlucaGuarini
GianlucaGuarini / local-storage.js
Last active May 2, 2017
A simple script to deal safely with the localStorage
View local-storage.js
/**
* Deal with the localStorage avoiding odd issues due to paranoids that have disabled it by default
*/
const ls = window.localStorage
/**
* Call any method on the localStorage avoiding to throw errors
* @param {string} method - method we want to call
* @param {array} args - serialized params that will be proxied to the method we are going to call
* @returns {null|string} whatever the method call will return
@GianlucaGuarini
GianlucaGuarini / main.tag
Last active Mar 1, 2018
Simple example to demonstarte how to use es2015 imports with the default riot cli. Install riot via `npm i riot -g` and then run `npm run build`
View main.tag
<main-tag>
<h1>I got the power!</h1>
<h2>The answer is { answer }</h2>
<script>
import something from './something'
this.answer = something.answer
</script>
</main-tag>
@GianlucaGuarini
GianlucaGuarini / data.json
Last active May 2, 2017
Cache a whole SPA website and its assets via app cache, service workers and localstorage
View data.json
{
"secret-message": "hello"
}
@GianlucaGuarini
GianlucaGuarini / read-cookie.js
Last active Dec 12, 2016
Simple function to read a named cookie from the document.cookie string
View read-cookie.js
You can’t perform that action at this time.