Skip to content

Instantly share code, notes, and snippets.

View lewisrodgers's full-sized avatar

Lewis Rodgers lewisrodgers

View GitHub Profile
@lewisrodgers
lewisrodgers / sticky-footer.html
Last active November 8, 2016 05:12
CSS solution to keep footer at the bottom of the page even when there is not enough content to do so normally. http://codepen.io/lewis-rodgers/pen/RoPgdN
@lewisrodgers
lewisrodgers / reducer-count-unique-items.js
Last active January 27, 2017 13:54
Reducer: Count number of unique items in a list
var list = ["foo", "foo", "bar", "bar", "bar"];
var results = list.reduce(reducer, {});
console.log(results); // {"foo": 2, "bar": 3}
/**
* Callback function for the `reduce()` method.
*
* @param acc accumulated value previously returned in the last invocation of the callback
@lewisrodgers
lewisrodgers / pub-sub.js
Created January 29, 2017 22:12
Simple publish/subscribe implementation.
var Eventbus = {
topics: {},
/**
* Adds topic to `topics` object if it doesn't exist
* and adds listener to same topic.
*
* @param {string} topic
* @param {function} listener
*/
/**
* Add to run block of angular module
*/
$rootScope.$on('$stateChangeSuccess', function() {
document.body.scrollTop = document.documentElement.scrollTop = 0;
}
@lewisrodgers
lewisrodgers / simple-httprequest.js
Last active January 29, 2017 22:14
Just enough javascript to do a GET request.
var endpoint = 'https://jsonplaceholder.typicode.com/users';
// 1. https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest
var request = new XMLHttpRequest();
request.addEventListener('load', function() {
console.log(this.responseText);
})
request.open('GET', endpoint);
request.send();
@lewisrodgers
lewisrodgers / master-detail service pattern.js
Last active January 29, 2017 22:21
Boilerplate service for getting 1 or all records of a type.
angular
.module('app')
.service('MyService', myService);
function myService($http) {
/**
* First, send a get request for all records of a type,
* then filter response down to specific record.
*/
@lewisrodgers
lewisrodgers / organize-by.js
Created January 31, 2017 20:16
Splits an array of objects into groups
/**
* Expects data to be an array of objects.
* The key will be one of the keys in the objects.
*/
function organizeBy(key, data) {
var results = {};
data.forEach(function(obj) {
var value = obj[key];
if (!results[value]) {
results[value] = [];
# Possible versioning stratgy.
# Only integers are allowed with the `version` property of the manifest.json.
script:
- GIT_HASH=$(git rev-parse --short HEAD)
- jq ".version_name = \"build-$GIT_HASH\"" manifest.json | spong manifest.json
#!/bin/bash
# This script is used to update a chrome extension that's already
# been uploaded to the Chrome Web Store. You'll need to know the
# chrome extension's ID that you want to update.
# To find the app ID see: https://developer.chrome.com/webstore/publish#get-the-app-id
#
# usage:
# ./chrome-web-store-api-update-utility.sh $APP_ID
@lewisrodgers
lewisrodgers / gcp-get-tokens-utility.sh
Last active December 29, 2017 14:41
Retrieve OAuth 2.0 access and refresh tokens for Google Cloud Platform
#!/bin/bash
# This script generates a `tokens.json` file.
#
# example:
# {
# "access_token" : "ya29.Glst...",
# "expires_in" : 3600,
# "refresh_token" : "1/dd3t...",
# "token_type" : "Bearer"