View emoji-favicon.html
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>☃️</text></svg>"> |
View spin-the-needle.js
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<title>Make</title> | |
<style> | |
</style> | |
</head> | |
<body> |
View object-diff.js
// From: NicolasLetellier @ https://gist.github.com/Yimiprod/7ee176597fef230d1451#gistcomment-3058093 | |
function objectDiff(object, base) { | |
function changes(object, base) { | |
const accumulator = {}; | |
Object.keys(base).forEach((key) => { | |
if (object[key] === undefined) { | |
accumulator[`-${key}`] = base[key]; | |
} | |
}); |
View search_all_up.sh
#!/bin/bash | |
search_all_up() { | |
# extended from https://stackoverflow.com/a/19011599/370746 | |
local look=${PWD%/} | |
while [[ -n $look ]]; do | |
for name in $@ ; do | |
[[ -e $look/$name ]] && { | |
printf '%s\n' "$look/$name" | |
return |
View ansi.js
// regexp group 1: visible text group 2: ansi codes | |
// eslint-disable-next-line no-control-regex | |
const ansiMatcher = new RegExp("([^\u001B\u009B]*)([\u001B\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\u0007)|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))|$)", "g") | |
function stripAnsi (s) { | |
return s.replace(ansiMatcher, "$1") | |
} | |
function truncateAnsi (s, len) { | |
let total = 0 |
View resize-table.js
// table resize test for tty-table | |
const Table = require("tty-table") | |
const Chalk = require("chalk") | |
let failures = [] | |
function test (width, truncate, marginLeft) { | |
let output = new Table([ | |
{minWidth: 6, shrink: 0}, |
View isInViewport.js
function isInViewport (elem, partially) { | |
let box = elem.getBoundingClientRect(), | |
top = box.top, | |
bottom = box.bottom, | |
right = box.right, | |
left = box.left, | |
h = window.innerHeight || document.documentElement.clientHeight, | |
w = window.innerWidth || document.documentElement.clientWidth, | |
fully = (top >= 0 && box.left >= 0 && bottom <= h && box.right <= w); |
View console.js
// save: | |
localStorage.temp = JSON.stringify(Array.from(document.querySelectorAll('input')).map(x => {console.log(x.value); return x.value})) | |
// restore: | |
JSON.parse(localStorage.temp).forEach((x,i) => document.querySelectorAll('input').item(i).value = x) |
View .htaccess
# for Dreamhost, need to adjust FcgidWrapper path for other hosts | |
AddHandler fcgid-script .html | |
FcgidWrapper "/dh/cgi-system/php72.cgi" .html |
View xhrRequest.js
const encs = {json: 'application/json', text: 'text/plain', url: 'application/x-www-form-urlencoded', form: 'multipart/form-data'}, | |
xhrRequestDefaults = {method: 'POST', encoding: 'url', beforeCallback: function () {}, openedCallback: function () {}}; | |
/** | |
* Make http request to url with object data as body | |
* @param {string} url | |
* @param {(object | string)} [data] - post data, formatting controlled by encoding | |
* @param {object} [options] - object of options | |
* @param {string} [options.encoding] - body encoding 'none', 'url', 'form', 'json', 'text' or mime (content) type, default: 'url' | |
* @param {string} [options.contentType] - override automatic contentType, null disable automatic without sending one | |
* @param {function} [options.method] - 'GET', 'POST', 'PUT', etc, default: 'POST' |
NewerOlder