- Create a Google Form with a field to collect email addresses. Pro-tip: use Data Validation to validate string is valid email.
- Click View Responses to view form responses in Google Spreadsheets.
- Open menu Tools > Script editor...
- Paste in Google App Script below and make the following changes:
- Create a Slack API token and replace the value of
SLACK_API_TOKEN
. - Replace "YOUR_TEAM_NAME" with your team's name in the value for
SLACK_API_INVITE_URL
. - Make sure
EMAIL_FIELD_NAME
corresponds to the header text of your Google Spreadsheet's email column.
- Create a Slack API token and replace the value of
- Open menu Resources > Current project's triggers and add a new trigger:
onFormSubmit
,From spreadsheet
,On form submit
. Click Save and accept the authorization request to use the script. - You can optionally configure notifications to receive error messages by email.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Copyright (c) 2011 Dave Furfero, http://furf.com | |
Permission is hereby granted, free of charge, to any person obtaining | |
a copy of this software and associated documentation files (the | |
"Software"), to deal in the Software without restriction, including | |
without limitation the rights to use, copy, modify, merge, publish, | |
distribute, sublicense, and/or sell copies of the Software, and to | |
permit persons to whom the Software is furnished to do so, subject to | |
the following conditions: | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const config: CodegenConfig = { | |
// @ts-ignore TypeScript describes this as a string, but it also supports a | |
// function. | |
schema: { | |
[CONTENTFUL_URI]: { | |
customFetch: initCustomFetch({ | |
accessToken: CONTENTFUL_MANAGEMENT_ACCESS_TOKEN, | |
spaceId: CONTENTFUL_SPACE_ID, | |
environmentId: CONTENTFUL_ENVIRONMENT, | |
}), |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var mongoose = require('mongoose'), | |
// Load User model | |
User = mongoose.model('User'), | |
// Create Thing schema | |
thingSchema = new mongoose.Schema({ | |
_user: { | |
type: ObjectId, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<title>sleep.js</title> | |
</head> | |
<body> | |
<h1>sleep.js</h1> | |
<script src="sleep.js"></script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Simple JavaScript Templating | |
// John Resig - http://ejohn.org/ - MIT Licensed | |
// @see http://ejohn.org/blog/javascript-micro-templating/ | |
(function(){ | |
var cache = {}; | |
this.tmpl = function tmpl(str, data){ | |
// Figure out if we're getting a template, or if we need to | |
// load the template - and be sure to cache the result. | |
var fn = !/\W/.test(str) ? |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
_.mixin({ | |
// Get/set the value of a nested property | |
deep: function (obj, key, value) { | |
var keys = key.replace(/\[(["']?)([^\1]+?)\1?\]/g, '.$2').replace(/^\./, '').split('.'), | |
root, | |
i = 0, | |
n = keys.length; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function makeChange (amount) { | |
var change = {}, | |
i = 0, | |
coins = makeChange.COINS, | |
coin; | |
while (amount && (coin = coins[i++])) { | |
if (amount >= coin) { | |
change[coin] = ~~(amount / coin); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Introducing fu: furf's functional funpack. | |
* "Putting the F-U back in JS!" | |
* | |
* fu.Array.map([1, 2, 3], a => a * 2) => [2, 4, 6] | |
* fu.String.repeat('fu ', 3) => "fu fu fu" | |
*/ | |
this.fu = (function() { | |
const call = Function.prototype.call; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<rmp-mock-video-controller> | |
<rmp-muted-toggle ?muted=${boolean('muted', true)}> | |
<rmp-mute-button id="story.mute" slot="mute-button"> | |
<icon-mute fill></icon-mute> | |
</rmp-mute-button> | |
<rmp-unmute-button id="story.unmute" slot="unmute-button"> | |
<icon-volume fill></icon-volume> | |
</rmp-unmute-button> | |
</rmp-muted-toggle> | |
</rmp-mock-video-controller> |
NewerOlder