Skip to content

Instantly share code, notes, and snippets.


Adam Morris brainysmurf

View GitHub Profile
brainysmurf / Today's
Last active October 13, 2015 20:36
Attach to the responses spreadsheet and set up trigger. Anyone with editing or viewing privileges will be emailed a simple summary of any entries that happened on that day.
View Today's

“Today's Entries" an administrative tool for schools.

  • Adds notifications and data collation to the "responses" Google Sheet (or any Google Sheet)

Copy and paste the below into the script editor, and configure the trigger to run once per day. For further modifications, see the comments in the script.

brainysmurf / Gamified
Last active October 27, 2019 04:31
Copy and paste into a Google Doc, which will turn it into a journaling activity. Requires some setup, for the document itself needs to be formatted with Header1 and Header2 in order to look good.
View Gamified

“Gamified Journal with Notifications" a learning tool for students. Public sample document is available here

  • Turns a Google Document into a very simple Journal
  • Reports how long students spend writing, how many words were written
  • Formats each entry with a header with today's date
  • Notify the teacher each time student adds an entry


  • Self-paced "gamified" journal writing activity

"Blankifier" allows teachers to quickly create a document where every "N" word is replaced with a "blank".

To get started, copy and paste the below into a Google Doc's script editor. Copy and paste text into the document, then click on Blanker -> Blanify


  • Decide how many words to skip before deciding to blank
  • Automatically skips words <= 3 words
brainysmurf / Daily
Last active October 19, 2015 12:49
Implementation for a "Daily Notices" for a school that wants to use GAFE exclusively. Use a google form to populate the entries.
View Daily

Manage your daily notices, or bulletin, entirely within your GAFE, no servers or databases required. This is done by creating a Google Form, and then adding the following scripts to the responses sheet that the form populates onto. Optionally create a Google Site to publish the notices.


  • Users enter into a Google form, and they get picked up and sent to staff either:
    • published onto a Google Site
    • sent out by email
    • both (published onto a site, and then email with link sent out)
  • Users can enter notices in advance
  • Users can enter notices for a date range
  • Have any number of sections ("Whole School", "Secondary", etc.), and notices are collated by those sections
brainysmurf / Make
Last active October 13, 2015 20:35
View Make

A simple Google Document that helps you make tables. Useful for teachers.

  • You can simply make a copy of this document and follow the instructions.
brainysmurf /
Last active November 4, 2015 00:44
Close Down and Open Up Editors via Script
Use this at your own risk.
1) Enter the ID of the folder which contains the files you would like to remove and restore edit access
2) Then running triggerCloseDown will save those editors and remove edit access (and view access) for all editors of that file
3) Then running triggerOpenUp will lookup editors of each file and restore editing access
There is a bug in the proxy provided by awesometables
In a google domain, email addresses should case insensitive
function doGet(e) {
var currentUser = Session.getActiveUser().getEmail().toLowerCase();
var ssUrl = e.parameter.url;
var sheetName = e.parameter.sheet;
var a1Notation = e.parameter.range;
// Exmample of options
var options = {
method: "POST",
contentType : "application/json",
payload: JSON.stringify({
secret: 'you will have to ask me',
awesome_table_filters: {
first_nickname_last: 'StringFilter',
parent_email_1: 'StringFilter',
var gl = false; // for debugging
function onOpen() {
var ui = DocumentApp.getUi();
.addItem('Insert newline every N lines', 'actionEveryNLines')
.addItem('Make Table', 'actionAppendTable')
.addItem('Blankify', 'actionBlankify')
.addItem('Tokenize Sentences', 'actionTokenizeSentences')
In a google domain, email addresses are (probably?) case insensitive
Also, return a date object instead with defined formatting
function doGet(e) {
var currentUser = Session.getActiveUser().getEmail().toLowerCase();
var ssUrl = e.parameter.url;