Skip to content

Instantly share code, notes, and snippets.

Paul Kinlan PaulKinlan

View GitHub Profile
View index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
View console.help.js
console.help = function(arg) {
if(arg === null || arg === undefined) return console.log(arg);
if(typeof(arg) === 'string') return console.log(arg);
if('__help' in arg) { console.log(arg.__help); }
if('__help' in arg.constructor) { console.log(arg.constructor.__help); }
console.log(arg);
}
.bind(console);
@PaulKinlan
PaulKinlan / index.js
Created Jul 31, 2017
requirebin sketch
View index.js
// Welcome! require() some modules from npm (like you were using browserify)
// and then hit Run Code to run your code on the right side.
// Modules get downloaded from browserify-cdn and bundled in your browser.
require('xmldom-alpha')
View range.js
const range = function* (stop = 0, step = 1) {
const shouldStop = (n)=>stop >= 0 ? (n < stop) : (n > stop);
const interval = (n)=>stop >= 0 ? n + step : n - step;
let itr = function*() {
let i = 0;
while (shouldStop(i)) {
yield i;
i = interval(i);
}
};
View range.js
const range = (stop) => { stop = stop || 0; const shouldStop = (n) => stop >= 0 ? (n < stop) : (n > stop); const interval = (n) => stop >= 0 ? n + 1 : n - 1; let itr = {}; itr[Symbol.iterator] = function* () { let i = 0; while(shouldStop(i)) { yield i; i = interval(i);}}; return itr; };
for(let i of range(100))
console.log(i)
for(let i of range(-100))
console.log(i)
@PaulKinlan
PaulKinlan / applyTemplate.js
Last active Sep 12, 2018
Simple Templating
View applyTemplate.js
const applyTemplate = (templateElement, data) => {
const element = templateElement.content.cloneNode(true);
const treeWalker = document.createTreeWalker(element, NodeFilter.SHOW_ELEMENT, () => NodeFilter.FILTER_ACCEPT);
while(treeWalker.nextNode()) {
const node = treeWalker.currentNode;
for(let bindAttr in node.dataset) {
let isBindableAttr = (bindAttr.indexOf('bind_') == 0) ? true : false;
if(isBindableAttr) {
let dataKeyString = node.dataset[bindAttr];
View screenrecord.js
(function() {
// Download locally
function download(blob) {
var url = window.URL.createObjectURL(blob);
var a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = 'test.webm';
document.body.appendChild(a);
a.click();
@PaulKinlan
PaulKinlan / canvasrecord.js
Last active May 19, 2020
Screen recorder in JS
View canvasrecord.js
(function() {
let canvas = document.querySelector('canvas');
// Optional frames per second argument.
let stream = canvas.captureStream(25);
var options = {mimeType: 'video/webm; codecs=vp9'};
let recorder = new MediaRecorder(stream, options);
let blobs = [];
function download(blob) {
var url = window.URL.createObjectURL(blob);
@PaulKinlan
PaulKinlan / waitForElement.js
Last active May 29, 2020
waitForElement.js
View waitForElement.js
function waitForElement(selector) {
return new Promise(function(resolve, reject) {
var element = document.querySelector(selector);
if(element) {
resolve(element);
return;
}
var observer = new MutationObserver(function(mutations) {
View monitorEvents.js
function monitorEvents(element) {
var log = function(e) { console.log(e);};
var events = [];
for(var i in element) {
if(i.startsWith("on")) events.push(i.substr(2));
}
events.forEach(function(eventName) {
element.addEventListener(eventName, log);
});
You can’t perform that action at this time.