Skip to content

Instantly share code, notes, and snippets.

View ccnokes's full-sized avatar

Cameron Nokes ccnokes

View GitHub Profile
@ccnokes
ccnokes / poller.js
Last active August 29, 2015 14:03
Poller object
function Poller(interval, cb, limit) {
var _this = this;
this.interval = interval || 250;
this.poll = null;
this.limit = limit;
var count = 0;
this.poll = setInterval(function() {
if(typeof cb == 'function') {
if(_this.limit) {
@ccnokes
ccnokes / whenready.js
Last active August 29, 2015 14:03
WhenReady object. Fires callback when all conditions are satisfied.
//executes a callback when all conditions are satisfied
function WhenReady(obj, cb) {
this.conditions = obj;
this.readyCallback = cb;
}
WhenReady.prototype = {
satisfyCondition: function(o) {
if(typeof o == 'object') {
//custom string manipulation class
class MyString {
constructor(str) {
this.str = str;
}
replaceVowels(replacement) {
this.str = this.str.replace(/a|e|i|o|u/gi, replacement);
}
//The valueOf() method returns the primitive value of the specified object.
valueOf() {
@ccnokes
ccnokes / async-series.js
Last active October 6, 2016 03:36
Async series with reduce
function asyncThing() {
return new Promise(res => {
setTimeout(() => {
res(Math.random());
}, 1000);
});
}
function series(...promises) {
return promises.reduce((p, fn) => p.then(fn), Promise.resolve());
@ccnokes
ccnokes / stateful-module.js
Created October 25, 2016 03:31
stateful module
let count = 0;
module.exports = {
get count() {
return count;
}
increment() {
return count++;
}
};
@ccnokes
ccnokes / works-in-main-or-render.js
Last active October 27, 2016 03:41
Basic pattern for using an main process only API in either the main or renderer in Electron
const electron = require('electron');
const Menu = electron.Menu || electron.remote.Menu;
//now you can use it seamlessly in either main or renderer
console.log(Menu);
const crypto = require('crypto');
// this usually takes a few seconds
function work(limit = 100000) {
let start = Date.now();
n = 0;
while(n < limit) {
crypto.randomBytes(2048);
n++;
}
const $webview = document.querySelector('webview');
const $loader = document.querySelector('.loader');
let isInitialLoad = true;
$webview.addEventListener('did-start-loading', () => {
// we use client side rendering in the web app, so the loader is only needed on the first page load
if(isInitialLoad) {
$webview.classList.add('hide');
$loader.classList.remove('loader-hide');
isInitialLoad = false;
@ccnokes
ccnokes / sum-objs.js
Created February 22, 2017 22:22
Function that sums objects of the same shape
// objs[] *must* be the same shape
// returns new object with summation of all properties
function sumObjs(objs) {
const keys = Object.keys(objs[0]);
// initialize return object with 0s
const ret = keys.reduce((aggr, k) => {
aggr[k] = 0;
return aggr;
}, {});
// sum each property
@ccnokes
ccnokes / pipe.js
Last active May 21, 2017 02:06
Pipe function, taken from twitter
// sync version
const pipe = (...fns) => x => fns.reduce((v, f) => f(v), x);
// example
const newFunc = pipe(fn1, fn2, fn3);
const result = newFunc(arg);
// async version
// take a series of promise producing functions and return a single promise