Skip to content

Instantly share code, notes, and snippets.

Thomas Wilburn thomaswilburn

Block or report user

Report or block thomaswilburn

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View loadDocs.js
var { google } = require("googleapis");
var async = require("async");
var os = require("os");
var path = require("path");
var { authenticate } = require("./googleauth");
module.exports = function(grunt) {
grunt.registerTask("docs", "Load Google Docs into the data folder", function() {
View index.js
var http = require("http");
var https = require("https");
var { SourceMapConsumer } = require("source-map");
var fs = require("fs").promises;
var path = require("path");
var fetch = function(address) {
return new Promise(function(ok, fail) {
var parsed = new URL(address);
var remote = parsed.protocol == "http:" ? http : https;
View gist:76a1a519a76f3e8ef897271bbdb8e6e4
var request = require("request");
var dateFormat = require("dateformat");
var today = new Date();
/* Format the date to be todays date in mm-dd-yyy format for later use */
today = dateFormat(today, "mm-dd-yyyy");
onCallDateFormat = dateFormat(today, "yyyy-mm-dd");
var jiraUrl = "";
@thomaswilburn
thomaswilburn / index.html
Created Jul 7, 2019
Demo of making a D3 chart
View index.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>Hello!</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
This space intentionally left blank. Test
@thomaswilburn
thomaswilburn / htmlparser.js
Last active Jun 20, 2019
A terrible HTML parser that you might be able use to scrape (well-constructed) pages from Google Apps Script
View htmlparser.js
var Node = function(type) {
this.type = type;
this.tagName = null;
this.attributes = {};
this.children = [];
this.parentElement = null;
this.textContent = "";
};
Node.prototype = {
@thomaswilburn
thomaswilburn / main.js
Created May 16, 2019
Code excerpts from White Lies
View main.js
var directors = {
"image": require("./image-scene"),
"audio": require("./audio-scene"),
"map": require("./map-scene")
};
// state of the last block and director
var lastBlock = null;
var director = null;
// check blocks in reverse order
@thomaswilburn
thomaswilburn / commonmark.js
Last active Apr 10, 2019
CommonMark-ish rendering into Google Docs
View commonmark.js
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
function renderMD(body, lines) {
if (typeof lines == "string") {
lines = lines.split("\n");
}
lines.forEach(function(line) {
if (line.match(/^[-=+]+$/)) {
return body.appendHorizontalRule();
View generators.js
// test data -- we also use an identical "test.csv" to check streams
var csv = `
one,two,three
1,2,3
a,b,c
"1,000",1000,"hey there"
`.trim();
// easy numeric indexes for iterables
var forEach = function*(iter) {
@thomaswilburn
thomaswilburn / shadowpuppet.js
Last active Jul 3, 2018
One-way databinding
View shadowpuppet.js
/*
A library for wiring a state object up to HTML
- [data-bound] = Sets the innerHTML of the element
- [:attributeName] or [attr:attributeName] = Sets the value of attributeName
- [class:className] = Toggles className based on truthiness
- [on:event] = Bind event listeners to this element
It's like an unholy fusion of Vue and Backbone. Call set() on the state object to trigger a render.
@thomaswilburn
thomaswilburn / CSVWriter.bas
Created Mar 5, 2018
Scripting Excel to write CSV from VBA
View CSVWriter.bas
' Class module CSVWriter
Private Excel As Object
Private sheet As Object
Private book As Object
Private rowNum As Integer
Private Sub Class_Initialize()
Set Excel = CreateObject("Excel.Application")
Set book = Excel.Workbooks.Add
Set sheet = book.ActiveSheet
You can’t perform that action at this time.