🎉 Hello world

This commit is contained in:
Clement 2020-07-01 15:29:05 +02:00
commit 2e5d981f1b
30 changed files with 1548 additions and 0 deletions

3
.babelrc Normal file
View File

@ -0,0 +1,3 @@
{
"presets": ["es2015"]
}

8
.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
.DS_Store
node_modules
npm-debug.log
bower_components
dist
.sass-cache
.awspublish*
config.json

22
LICENSE Normal file
View File

@ -0,0 +1,22 @@
Copyright (c) 2013-2017 ZURB, inc.
MIT License
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:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

130
README.md Normal file
View File

@ -0,0 +1,130 @@
# Foundation for Emails Template
[![devDependency Status](https://david-dm.org/zurb/foundation-emails-template/dev-status.svg)](https://david-dm.org/zurb/foundation-emails-template#info=devDependencies)
**Please open all issues with this template on the main [Foundation for Emails](http://github.com/zurb/foundation-emails/issues) repo.**
This is the official starter project for [Foundation for Emails](http://foundation.zurb.com/emails), a framework for creating responsive HTML devices that work in any email client. It has a Gulp-powered build system with these features:
- Handlebars HTML templates with [Panini](http://github.com/zurb/panini)
- Simplified HTML email syntax with [Inky](http://github.com/zurb/inky)
- Sass compilation
- Image compression
- Built-in BrowserSync server
- Full email inlining process
## Installation
To use this template, your computer needs [Node.js](https://nodejs.org/en/) 0.12 or greater. The template can be installed with the Foundation CLI, or downloaded and set up manually.
### Using the CLI
Install the Foundation CLI with this command:
```bash
npm install foundation-cli --global
```
Use this command to set up a blank Foundation for Emails project:
```bash
foundation new --framework emails
```
The CLI will prompt you to give your project a name. The template will be downloaded into a folder with this name.
### Manual Setup
To manually set up the template, first download it with Git:
```bash
git clone https://github.com/zurb/foundation-emails-template projectname
```
Then open the folder in your command line, and install the needed dependencies:
```bash
cd projectname
npm install
```
## Build Commands
Run `npm start` to kick off the build process. A new browser tab will open with a server pointing to your project files.
Run `npm run build` to inline your CSS into your HTML along with the rest of the build process.
Run `npm run litmus` to build as above, then submit to litmus for testing. *AWS S3 Account details required (config.json)*
Run `npm run mail` to build as above, then send to specified email address for testing. *SMTP server details required (config.json)*
Run `npm run zip` to build as above, then zip HTML and images for easy deployment to email marketing services.
### Speeding Up Your Build
If you create a lot of emails, your build can start to slow down, as each build rebuilds all of the emails in the
repository. A simple way to keep it fast is to archive emails you no longer need by moving the pages into `src/pages/archive`.
You can also move images that are no longer needed into `src/assets/img/archive`. The build will ignore pages and images that
are inside the archive folder.
## Litmus Tests (config.json)
Testing in Litmus requires the images to be hosted publicly. The provided gulp task handles this by automating hosting to an AWS S3 account. Provide your Litmus and AWS S3 account details in the `example.config.json` and then rename to `config.json`. Litmus config, and `aws.url` are required, however if you follow the [aws-sdk suggestions](http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/node-configuring.html) you don't need to supply the AWS credentials into this JSON.
```json
{
"aws": {
"region": "us-east-1",
"accessKeyId": "YOUR_ACCOUNT_KEY",
"secretAccessKey": "YOUR_ACCOUNT_SECRET",
"params": {
"Bucket": "elasticbeanstalk-us-east-1-THIS_IS_JUST_AN_EXAMPLE"
},
"url": "https://s3.amazonaws.com/elasticbeanstalk-us-east-1-THIS_IS_JUST_AN_EXAMPLE"
},
"litmus": {
"username": "YOUR_LITMUS@EMAIL.com",
"password": "YOUR_ACCOUNT_PASSWORD",
"url": "https://YOUR_ACCOUNT.litmus.com",
"applications": ["ol2003","ol2007","ol2010","ol2011","ol2013","chromegmailnew","chromeyahoo","appmail9","iphone5s","ipad","android4","androidgmailapp"]
}
}
```
## Manual email tests (config.json)
Similar to the Litmus tests, you can have the emails sent to a specified email address. Just like with the Litmus tests, you will need to provide AWS S3 account details in `config.json`. You will also need to specify to details of an SMTP server. The email address to send to emails to can either by configured in the `package.json` file or added as a parameter like so: `npm run mail -- --to="example.com"`
```json
{
"aws": {
"region": "us-east-1",
"accessKeyId": "YOUR_ACCOUNT_KEY",
"secretAccessKey": "YOUR_ACCOUNT_SECRET",
"params": {
"Bucket": "elasticbeanstalk-us-east-1-THIS_IS_JUST_AN_EXAMPLE"
},
"url": "https://s3.amazonaws.com/elasticbeanstalk-us-east-1-THIS_IS_JUST_AN_EXAMPLE"
},
"mail": {
"to": [
"example@domain.com"
],
"from": "Company name <info@company.com",
"smtp": {
"auth": {
"user": "example@domain.com",
"pass": "12345678"
},
"host": "smtp.domain.com",
"secureConnection": true,
"port": 465
}
}
}
```
For a full list of Litmus' supported test clients(applications) see their [client list](https://litmus.com/emails/clients.xml).
**Caution:** AWS Service Fees will result, however, are usually very low do to minimal traffic. Use at your own discretion.

32
example.config.json Normal file
View File

@ -0,0 +1,32 @@
{
"aws": {
"region": "us-east-1",
"accessKeyId": "YOUR_ACCOUNT_KEY",
"secretAccessKey": "YOUR_ACCOUNT_SECRET",
"params": {
"Bucket": "elasticbeanstalk-us-east-1-THIS_IS_JUST_AN_EXAMPLE"
},
"url": "https://s3.amazonaws.com/elasticbeanstalk-us-east-1-THIS_IS_JUST_AN_EXAMPLE"
},
"litmus": {
"username": "YOUR_LITMUS@EMAIL.com",
"password": "YOUR_ACCOUNT_PASSWORD",
"url": "https://YOUR_ACCOUNT.litmus.com",
"applications": ["ol2003","ol2007","ol2010","ol2011","ol2013","chromegmailnew","chromeyahoo","appmail9","iphone5s","ipad","android4","androidgmailapp"]
},
"mail": {
"to": [
"example@domain.com"
],
"from": "Company name <info@company.com",
"smtp": {
"auth": {
"user": "example@domain.com",
"pass": "12345678"
},
"host": "smtp.domain.com",
"secureConnection": true,
"port": 465
}
}
}

232
gulpfile.babel.js Normal file
View File

@ -0,0 +1,232 @@
import gulp from 'gulp';
import plugins from 'gulp-load-plugins';
import browser from 'browser-sync';
import rimraf from 'rimraf';
import panini from 'panini';
import yargs from 'yargs';
import lazypipe from 'lazypipe';
import inky from 'inky';
import fs from 'fs';
import siphon from 'siphon-media-query';
import path from 'path';
import merge from 'merge-stream';
import beep from 'beepbeep';
import colors from 'colors';
const $ = plugins();
// Look for the --production flag
const PRODUCTION = !!(yargs.argv.production);
const EMAIL = yargs.argv.to;
// Declar var so that both AWS and Litmus task can use it.
var CONFIG;
// Build the "dist" folder by running all of the below tasks
gulp.task('build',
gulp.series(clean, pages, sass, images, inline));
// Build emails, run the server, and watch for file changes
gulp.task('default',
gulp.series('build', server, watch));
// Build emails, then send to litmus
gulp.task('litmus',
gulp.series('build', creds, aws, litmus));
// Build emails, then send to EMAIL
gulp.task('mail',
gulp.series('build', creds, aws, mail));
// Build emails, then zip
gulp.task('zip',
gulp.series('build', zip));
// Delete the "dist" folder
// This happens every time a build starts
function clean(done) {
rimraf('dist', done);
}
// Compile layouts, pages, and partials into flat HTML files
// Then parse using Inky templates
function pages() {
return gulp.src(['src/pages/**/*.html', '!src/pages/archive/**/*.html'])
.pipe(panini({
root: 'src/pages',
layouts: 'src/layouts',
partials: 'src/partials',
helpers: 'src/helpers'
}))
.pipe(inky())
.pipe(gulp.dest('dist'));
}
// Reset Panini's cache of layouts and partials
function resetPages(done) {
panini.refresh();
done();
}
// Compile Sass into CSS
function sass() {
return gulp.src('src/assets/scss/app.scss')
.pipe($.if(!PRODUCTION, $.sourcemaps.init()))
.pipe($.sass({
includePaths: ['node_modules/foundation-emails/scss']
}).on('error', $.sass.logError))
.pipe($.if(PRODUCTION, $.uncss(
{
html: ['dist/**/*.html']
})))
.pipe($.if(!PRODUCTION, $.sourcemaps.write()))
.pipe(gulp.dest('dist/css'));
}
// Copy and compress images
function images() {
return gulp.src(['src/assets/img/**/*', '!src/assets/img/archive/**/*'])
.pipe($.imagemin())
.pipe(gulp.dest('./dist/assets/img'));
}
// Inline CSS and minify HTML
function inline() {
return gulp.src('dist/**/*.html')
.pipe($.if(PRODUCTION, inliner('dist/css/app.css')))
.pipe(gulp.dest('dist'));
}
// Start a server with LiveReload to preview the site in
function server(done) {
browser.init({
server: 'dist'
});
done();
}
// Watch for file changes
function watch() {
gulp.watch('src/pages/**/*.html').on('all', gulp.series(pages, inline, browser.reload));
gulp.watch(['src/layouts/**/*', 'src/partials/**/*']).on('all', gulp.series(resetPages, pages, inline, browser.reload));
gulp.watch(['../scss/**/*.scss', 'src/assets/scss/**/*.scss']).on('all', gulp.series(resetPages, sass, pages, inline, browser.reload));
gulp.watch('src/assets/img/**/*').on('all', gulp.series(images, browser.reload));
}
// Inlines CSS into HTML, adds media query CSS into the <style> tag of the email, and compresses the HTML
function inliner(css) {
var css = fs.readFileSync(css).toString();
var mqCss = siphon(css);
var pipe = lazypipe()
.pipe($.inlineCss, {
applyStyleTags: false,
removeStyleTags: true,
preserveMediaQueries: true,
removeLinkTags: false
})
.pipe($.replace, '<!-- <style> -->', `<style>${mqCss}</style>`)
.pipe($.replace, '<link rel="stylesheet" type="text/css" href="css/app.css">', '')
.pipe($.htmlmin, {
collapseWhitespace: true,
minifyCSS: true
});
return pipe();
}
// Ensure creds for Litmus are at least there.
function creds(done) {
var configPath = './config.json';
try { CONFIG = JSON.parse(fs.readFileSync(configPath)); }
catch(e) {
beep();
console.log('[AWS]'.bold.red + ' Sorry, there was an issue locating your config.json. Please see README.md');
process.exit();
}
done();
}
// Post images to AWS S3 so they are accessible to Litmus and manual test
function aws() {
var publisher = !!CONFIG.aws ? $.awspublish.create(CONFIG.aws) : $.awspublish.create();
var headers = {
'Cache-Control': 'max-age=315360000, no-transform, public'
};
return gulp.src('./dist/assets/img/*')
// publisher will add Content-Length, Content-Type and headers specified above
// If not specified it will set x-amz-acl to public-read by default
.pipe(publisher.publish(headers))
// create a cache file to speed up consecutive uploads
//.pipe(publisher.cache())
// print upload updates to console
.pipe($.awspublish.reporter());
}
// Send email to Litmus for testing. If no AWS creds then do not replace img urls.
function litmus() {
var awsURL = !!CONFIG && !!CONFIG.aws && !!CONFIG.aws.url ? CONFIG.aws.url : false;
return gulp.src('dist/**/*.html')
.pipe($.if(!!awsURL, $.replace(/=('|")(\/?assets\/img)/g, "=$1"+ awsURL)))
.pipe($.litmus(CONFIG.litmus))
.pipe(gulp.dest('dist'));
}
// Send email to specified email for testing. If no AWS creds then do not replace img urls.
function mail() {
var awsURL = !!CONFIG && !!CONFIG.aws && !!CONFIG.aws.url ? CONFIG.aws.url : false;
if (EMAIL) {
CONFIG.mail.to = [EMAIL];
}
return gulp.src('dist/**/*.html')
.pipe($.if(!!awsURL, $.replace(/=('|")(\/?assets\/img)/g, "=$1"+ awsURL)))
.pipe($.mail(CONFIG.mail))
.pipe(gulp.dest('dist'));
}
// Copy and compress into Zip
function zip() {
var dist = 'dist';
var ext = '.html';
function getHtmlFiles(dir) {
return fs.readdirSync(dir)
.filter(function(file) {
var fileExt = path.join(dir, file);
var isHtml = path.extname(fileExt) == ext;
return fs.statSync(fileExt).isFile() && isHtml;
});
}
var htmlFiles = getHtmlFiles(dist);
var moveTasks = htmlFiles.map(function(file){
var sourcePath = path.join(dist, file);
var fileName = path.basename(sourcePath, ext);
var moveHTML = gulp.src(sourcePath)
.pipe($.rename(function (path) {
path.dirname = fileName;
return path;
}));
var moveImages = gulp.src(sourcePath)
.pipe($.htmlSrc({ selector: 'img'}))
.pipe($.rename(function (currentpath) {
currentpath.dirname = path.join(fileName, currentpath.dirname.replace('dist', ''));
return currentpath;
}));
return merge(moveHTML, moveImages)
.pipe($.zip(fileName+ '.zip'))
.pipe(gulp.dest('dist'));
});
return merge(moveTasks);
}

56
package.json Normal file
View File

@ -0,0 +1,56 @@
{
"name": "foundation-emails-template",
"version": "1.0.0",
"description": "Basic template for a Foundation for Emails project.",
"repository": "zurb/foundation-emails-template",
"main": "gulpfile.babel.js",
"scripts": {
"start": "gulp",
"build": "gulp --production",
"zip": "gulp zip --production",
"litmus": "gulp litmus --production",
"mail": "gulp mail --production"
},
"author": "ZURB <foundation@zurb.com>",
"license": "MIT",
"dependencies": {
"foundation-emails": "^2.2.1"
},
"devDependencies": {
"babel-core": "^6.3.26",
"babel-preset-es2015": "^6.3.13",
"babel-register": "^6.7.2",
"beepbeep": "^1.2.0",
"browser-sync": "^2.11.0",
"colors": "^1.1.2",
"gulp": "^4.0.0",
"gulp-awspublish": "^3.0.1",
"gulp-cli": "^1.1.0",
"gulp-html-src": "^1.0.0",
"gulp-htmlmin": "^1.1.1",
"gulp-if": "^2.0.0",
"gulp-imagemin": "^2.4.0",
"gulp-inline-css": "^3.0.0",
"gulp-litmus": "0.0.7",
"gulp-load-plugins": "^1.1.0",
"gulp-mail": "^0.1.1",
"gulp-rename": "^1.2.2",
"gulp-replace": "^0.5.4",
"gulp-sass": "^3.1.0",
"gulp-sourcemaps": "^1.6.0",
"gulp-uncss": "^1.0.1",
"gulp-zip": "^3.2.0",
"inky": "^1.3.6",
"lazypipe": "^1.0.1",
"merge-stream": "^1.0.0",
"panini": "^1.3.0",
"rimraf": "^2.3.3",
"siphon-media-query": "^1.0.0",
"yargs": "^4.1.0"
},
"babel": {
"presets": [
"es2015"
]
}
}

1
src/assets/img/.gitkeep Normal file
View File

@ -0,0 +1 @@
# You can delete this file. It's just here to make Git happy.

View File

View File

@ -0,0 +1,147 @@
// Foundation for Emails Settings
// ------------------------------
//
// Table of Contents:
//
// 1. Global
// 2. Grid
// 3. Block Grid
// 4. Typography
// 5. Button
// 6. Callout
// 7. Menu
// 8. Thumbnail
// 1. Global
// ---------
$primary-color: #2199e8;
$secondary-color: #777777;
$success-color: #414141;
$warning-color: #ffae00;
$alert-color: #ec5840;
$light-gray: #f3f3f3;
$medium-gray: #cacaca;
$dark-gray: #8a8a8a;
$black: #0a0a0a;
$white: #fefefe;
$pre-color: #ff6908;
$global-width: 580px;
$global-width-small: 95%;
$global-gutter: 16px;
$body-background: $light-gray;
$container-background: $white;
$global-padding: 16px;
$global-margin: 16px;
$global-radius: 3px;
$global-rounded: 500px;
$global-breakpoint: $global-width + $global-gutter;
// 2. Grid
// -------
$grid-column-count: 12;
$column-padding-bottom: $global-padding;
$container-radius: 0;
// 3. Block Grid
// -------------
$block-grid-max: 8;
$block-grid-gutter: $global-gutter;
// 4. Typography
// -------------
$global-font-color: $black;
$body-font-family: Helvetica, Arial, sans-serif;
$global-font-weight: normal;
$header-color: inherit;
$global-line-height: 1.3;
$global-font-size: 16px;
$body-line-height: $global-line-height;
$header-font-family: $body-font-family;
$header-font-weight: $global-font-weight;
$h1-font-size: 34px;
$h2-font-size: 30px;
$h3-font-size: 28px;
$h4-font-size: 24px;
$h5-font-size: 20px;
$h6-font-size: 18px;
$header-margin-bottom: 10px;
$paragraph-margin-bottom: 10px;
$small-font-size: 80%;
$small-font-color: $medium-gray;
$lead-font-size: $global-font-size * 1.25;
$lead-line-height: 1.6;
$text-padding: 10px;
$subheader-lineheight: 1.4;
$subheader-color: $dark-gray;
$subheader-font-weight: $global-font-weight;
$subheader-margin-top: 4px;
$subheader-margin-bottom: 8px;
$hr-width: $global-width;
$hr-border: 1px solid $black;
$hr-margin: 20px auto;
$anchor-text-decoration: none;
$anchor-color: $primary-color;
$anchor-color-visited: $anchor-color;
$anchor-color-hover: darken($primary-color, 10%);
$anchor-color-active: $anchor-color-hover;
$stat-font-size: 40px;
// 5. Button
// ---------
$button-padding: (
tiny: 4px 8px 4px 8px,
small: 5px 10px 5px 10px,
default: 8px 16px 8px 16px,
large: 10px 20px 10px 20px,
);
$button-font-size: (
tiny: 10px,
small: 12px,
default: 16px,
large: 20px,
);
$button-color: $white;
$button-color-alt: $medium-gray;
$button-font-weight: bold;
$button-margin: 0 0 $global-margin 0;
$button-background: $primary-color;
$button-border: 2px solid $button-background;
$button-radius: $global-radius;
$button-rounded: $global-rounded;
// 6. Callout
// ----------
$callout-background: $white;
$callout-background-fade: 85%;
$callout-padding: 10px;
$callout-margin-bottom: $global-margin;
$callout-border: 1px solid darken($callout-background, 20%);
$callout-border-secondary: 1px solid darken($secondary-color, 20%);
$callout-border-success: 1px solid darken($success-color, 20%);
$callout-border-warning: 1px solid darken($warning-color, 20%);
$callout-border-alert: 1px solid darken($alert-color, 20%);
// 7. Menu
// -------
$menu-item-padding: 10px;
$menu-item-gutter: 10px;
$menu-item-color: $primary-color;
// 8. Thumbnail
// ------------
$thumbnail-border: solid 4px $white;
$thumbnail-margin-bottom: $global-margin;
$thumbnail-shadow: 0 0 0 1px rgba($black, 0.2);
$thumbnail-shadow-hover: 0 0 6px 1px rgba($primary-color, 0.5);
$thumbnail-transition: box-shadow 200ms ease-out;
$thumbnail-radius: $global-radius;

4
src/assets/scss/app.scss Normal file
View File

@ -0,0 +1,4 @@
@import 'settings';
@import 'foundation-emails';
@import 'template/template';

View File

@ -0,0 +1,59 @@
// These are the styles to make some of the templates look extra nice.
// Feel free to remove these styles for production!
// Body Styles
body,
html,
.body {
background: #f3f3f3 !important;
}
.container.header {
background: #f3f3f3;
}
.body-drip {
border-top: 4px solid #F45E43;
}
// Full Width Headers
.header {
background: #8a8a8a;
}
.header .columns {
padding-bottom: 0;
}
.header p {
color: #fff;
padding-top: 15px;
}
.header .wrapper-inner {
padding: 20px;
}
.header .container {
background: transparent;
}
// Social Media
table.button.facebook table td {
background: #3B5998 !important;
border-color: #3B5998;
}
table.button.twitter table td {
background: #1daced !important;
border-color: #1daced;
}
table.button.google table td {
background: #DB4A39 !important;
border-color: #DB4A39;
}
.wrapper.secondary {
background: #f3f3f3;
}

10
src/helpers/raw.js Normal file
View File

@ -0,0 +1,10 @@
/**
* Any code used inside this helper is ignored by Handlebars. Use it if your email service provider uses a Handlebars-like syntax.
* @example
* {{{{raw}}}}
* {{ this }} code won't be parsed.
* {{{{/raw}}}}
*/
module.exports = function(content) {
return content.fn();
}

30
src/layouts/default.html Normal file
View File

@ -0,0 +1,30 @@
{{!-- This is the base layout for your project, and will be used on every page. --}}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<link rel="stylesheet" type="text/css" href="{{root}}css/app.css">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width">
<title>{{subject}}</title>
<!-- <style> -->
</head>
<body>
<span class="preheader">{{description}}</span>
<table class="body">
<tr>
<td class="center" align="center" valign="top">
<center>
{{!-- Pages you create in the src/pages/ folder are inserted here when the flattened emails are created. --}}
{{> body}}
</center>
</td>
</tr>
</table>
<!-- prevent Gmail on iOS font size manipulation -->
<div style="display:none; white-space:nowrap; font:15px courier; line-height:0;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</body>
</html>

View File

@ -0,0 +1,31 @@
{{!-- This is the base layout for your project, and will be used on every page. --}}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<link rel="stylesheet" type="text/css" href="{{root}}css/app.css">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width">
<title>{{subject}}</title>
<!-- <style> -->
</head>
<body>
<span class="preheader">{{description}}</span>
<table class="body">
<tr>
<td class="center" align="center" valign="top">
<center>
{{> body}}
</center>
</td>
</tr>
</table>
<!-- prevent Gmail on iOS font size manipulation -->
<div style="display:none; white-space:nowrap; font:15px courier; line-height:0;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</body>
</html>

View File

51
src/pages/basic.html Normal file
View File

@ -0,0 +1,51 @@
---
subject: My Basic Email Template Subject
---
<wrapper class="header">
<container>
<row class="collapse">
<columns small="6">
<img src="http://placehold.it/200x50/663399">
</columns>
<columns small="6">
<p class="text-right">BASIC</p>
</columns>
</row>
</container>
</wrapper>
<container>
<spacer size="16"></spacer>
<row>
<columns small="12">
<h1>Hi, Susan Calvin</h1>
<p class="lead">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Magni, iste, amet consequatur a veniam.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ut optio nulla et, fugiat. Maiores accusantium nostrum asperiores provident, quam modi ex inventore dolores id aspernatur architecto odio minima perferendis, explicabo. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima quos quasi itaque beatae natus fugit provident delectus, magnam laudantium odio corrupti sit quam. Optio aut ut repudiandae velit distinctio asperiores?</p>
<callout class="primary">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reprehenderit repellendus natus, sint ea optio dignissimos asperiores inventore a molestiae dolorum placeat repellat excepturi mollitia ducimus unde doloremque ad, alias eos!</p>
</callout>
</columns>
</row>
<wrapper class="secondary">
<spacer size="16"></spacer>
<row>
<columns large="6">
<h5>Connect With Us:</h5>
<button class="facebook expand" href="http://zurb.com">Facebook</button>
<button class="twitter expand" href="http://zurb.com">Twitter</button>
<button class="google expand" href="http://zurb.com">Google+</button>
</columns>
<columns large="6">
<h5>Contact Info:</h5>
<p>Phone: 408-341-0600</p>
<p>Email: <a href="mailto:foundation@zurb.com">foundation@zurb.com</a></p>
</columns>
</row>
</wrapper>
</container>

60
src/pages/drip.html Normal file
View File

@ -0,0 +1,60 @@
---
subject: My Drip Email Template Subject
---
<container class="header">
<row class="collapse">
<columns>
<img src="http://placehold.it/150x30/663399" alt="">
</columns>
</row>
</container>
<spacer size="16"></spacer>
<container class="body-drip">
<spacer size="16"></spacer>
<center>
<img src="http://placehold.it/120/663399" alt="">
</center>
<spacer size="16"></spacer>
<row>
<columns>
<h4 class="text-center">Responsive Emails</h4>
<p class="text-center">15 sections | 567 Min</p>
</columns>
</row>
<hr/>
<row>
<columns>
<p class="text-center">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras egestas ullamcorper tristique. Aenean pharetra, ipsum eu varius elementum, odio ex malesuada neque, eget tempus ipsum neque ut ante. Vivamus volutpat faucibus metus quis ultrices. Fusce hendrerit purus in elit tincidunt sollicitudin. Duis ultrices odio id faucibus sagittis. Sed nulla leo, gravida non massa vitae, bibendum interdum sapien. Pellentesque rutrum sem bibendum tellus volutpat congue.</p>
<center>
<button href="#" class="success">Get smarter now &rarrtl;</button>
</center>
</columns>
</row>
<row class="collapsed footer">
<columns>
<spacer size="16"></spacer>
<p class="text-center">@copywrite nobody<br/>
<a href="#">hello@nocopywrite.com</a> | <a href="#">Manage Email Notifications</a> | <a href="#">Unsubscribe</a></p>
<center>
<menu>
<item><img src="http://placehold.it/25/663399" alt=""></item>
<item><img src="http://placehold.it/25/663399" alt=""></item>
<item><img src="http://placehold.it/25/663399" alt=""></item>
<item><img src="http://placehold.it/25/663399" alt=""></item>
<item><img src="http://placehold.it/25/663399" alt=""></item>
</menu>
</center>
</columns>
</row>
</container>

65
src/pages/hero.html Normal file
View File

@ -0,0 +1,65 @@
---
subject: My Hero Email Template Subject
---
<wrapper class="header">
<container>
<row class="collapse">
<columns small="6">
<img src="http://placehold.it/200x50/663399">
</columns>
<columns small="6">
<p class="text-right">HERO</p>
</columns>
</row>
</container>
</wrapper>
<container>
<spacer size="16"></spacer>
<row>
<columns small="12">
<h1>Hi, Elijah Baily</h1>
<p class="lead">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nisi impedit sapiente delectus molestias quia.</p>
<img src="http://placehold.it/580x300" alt="">
<callout class="primary">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Veniam assumenda, praesentium qui vitae voluptate dolores. <a href="#">Click it!</a></p>
</callout>
<h2>Title Ipsum <small>This is a note.</small></h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nisi repellat, harum. Quas nobis id aut, aspernatur, sequi tempora laborum corporis cum debitis, ullam, dolorem dolore quisquam aperiam! Accusantium, ullam, nesciunt. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ducimus consequuntur commodi, aut sed, quas quam optio accusantium recusandae nesciunt, architecto veritatis. Voluptatibus sunt esse dolor ipsum voluptates, assumenda quisquam.</p>
<button class="large secondary" href="#">Click Me!</button>
</columns>
</row>
<wrapper class="secondary">
<spacer size="16"></spacer>
<row>
<columns large="6">
<h5>Connect With Us:</h5>
<button class="facebook expand" href="#">Facebook</button>
<button class="twitter expand" href="#">Twitter</button>
<button class="google expand" href="#">Google+</button>
</columns>
<columns large="6">
<h5>Contact Info:</h5>
<p>Phone: 408-341-0600</p>
<p>Email: <a href="mailto:foundation@zurb.com">foundation@zurb.com</a></p>
</columns>
</row>
</wrapper>
<center>
<menu>
<item href="#">Terms</item>
<item href="#">Privacy</item>
<item href="#">Unsubscribe</item>
</menu>
</center>
</container>

55
src/pages/index.html Normal file
View File

@ -0,0 +1,55 @@
---
layout: index-layout
subject: My Email Templates
---
<spacer size="16"></spacer>
<container>
<spacer size="24"></spacer>
<row>
<columns small="12">
<p class="lead">Hi there!</p>
<p style="color: #484848; line-height: 1.5;">Thanks for downloading <a href="https://get.foundation/emails/docs/">Foundation for Emails!</a> Your days of coding up painful HTML emails are officially over. Youll soon be cranking out some slick, responsive emails in no time! To help get you up and running, we've put together 11 templates for the most common email use cases including newsletters, transactional emails, and marketing blasts. Feel free to customize them to your hearts content.</p>
<spacer size="16"></spacer>
<center>
<menu class="vertical">
<item href="{{root}}basic.html" target="_blank">Basic Template</item>
<item href="{{root}}drip.html" target="_blank">Drip Template</item>
<item href="{{root}}hero.html" target="_blank">Hero Template</item>
<item href="{{root}}marketing.html" target="_blank">Marketing Template</item>
<item href="{{root}}newsletter.html" target="_blank">Newsletter Template</item>
<item href="{{root}}newsletter-2.html" target="_blank">Newsletter 2 Template</item>
<item href="{{root}}order.html" target="_blank">Order Template</item>
<item href="{{root}}password.html" target="_blank">Password Template</item>
<item href="{{root}}sidebar.html" target="_blank">Sidebar Template</item>
<item href="{{root}}sidebar-hero.html" target="_blank">Sidebar Hero Template</item>
<item href="{{root}}welcome.html" target="_blank">Welcome Template</item>
</menu>
</center>
<spacer size="16"></spacer>
<p>Happy Coding,</p>
<p>The Foundation Team</p>
<spacer size="16"></spacer>
</columns>
</row>
</container>
<spacer size="16"></spacer>
<center>
<small>Keep on keepin' on. &lt;3 <a style="color: #cacaca; text-decoration: underline;" href="https://zurb.com/">ZURB</a> </small>
</center>
<spacer size="16"></spacer>

81
src/pages/marketing.html Normal file
View File

@ -0,0 +1,81 @@
---
subject: My Marketing Email Template Subject
---
<container>
<row>
<columns large="4">
<center>
<img src="http://placehold.it/125x200">
</center>
</columns>
<columns large="8">
<h1>Do Something Radical With This App.</h1>
<button class="large" href="#">Sign Up</button>
</columns>
</row>
<spacer size="16"></spacer>
<row>
<columns>
<h3 class="text-center">It's Never Been Easier to Do Things.</h3>
<p class="text-center">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequatur pariatur unde magni repudiandae totam, accusamus facere eligendi. Ad nobis eius porro saepe et ab, aliquid, sed mollitia cumque suscipit aperiam.</p>
</columns>
</row>
<row>
<columns large="4">
<center>
<img src="http://placehold.it/50x50">
</center>
<h5 class="text-center">Feature One</h5>
<p class="text-center">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rerum, quod quam unde earum.</p>
</columns>
<columns large="4">
<center>
<img src="http://placehold.it/50x50">
</center>
<h5 class="text-center">Feature Two</h5>
<p class="text-center">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rerum, quod quam unde earum.</p>
</columns>
<columns large="4">
<center>
<img src="http://placehold.it/50x50">
</center>
<h5 class="text-center">Feature Three</h5>
<p class="text-center">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rerum, quod quam unde earum.</p>
</columns>
</row>
<spacer size="16"></spacer>
<row>
<columns>
<h3 class="text-center">What Are You Waiting For? Get Started Today.</h3>
<spacer size="16"></spacer>
<button class="large expand" href="#">Sign Up</button>
</columns>
</row>
<row class="collapsed footer">
<columns>
<spacer size="16"></spacer>
<p class="text-center">&copy; copyright nobody<br/>
<a href="#">hello@nocopyright.com</a> | <a href="#">Manage Email Notifications</a> | <a href="#">Unsubscribe</a></p>
<center>
<menu>
<item><img src="http://placehold.it/25" alt=""></item>
<item><img src="http://placehold.it/25" alt=""></item>
<item><img src="http://placehold.it/25" alt=""></item>
<item><img src="http://placehold.it/25" alt=""></item>
<item><img src="http://placehold.it/25" alt=""></item>
</menu>
</center>
</columns>
</row>
<spacer size="16"></spacer>
</container>

View File

@ -0,0 +1,43 @@
---
subject: My Other Newsletter Email Template Subject
---
<container>
<spacer size="16"></spacer>
<row>
<columns>
<center>
<img src="http://placehold.it/548x200">
</center>
</columns>
</row>
<row>
<columns large="8">
<h2>This is a title</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quam at, nihil quas harum mollitia dolores odio. Inventore delectus nihil soluta quos, magni doloribus, voluptas aspernatur explicabo atque perspiciatis possimus voluptates.</p>
<p><a href="#">Learn more</a></p>
</columns>
<columns large="4">
<img class="small-float-center" src="http://placehold.it/170x129" alt="">
</columns>
</row>
<row>
<columns large="6">
<h4>Sub Section Title</h4>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quod eum eius numquam sint dolore voluptatibus beatae ab ad, dignissimos fugiat? Nisi odio commodi debitis eveniet tenetur provident aliquid tempora placeat.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quod eum eius numquam sint dolore voluptatibus beatae ab ad, dignissimos fugiat? Nisi odio commodi debitis eveniet tenetur provident aliquid tempora placeat.</p>
</columns>
<columns large="6">
<h4>Sub Section Title</h4>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quod eum eius numquam sint dolore voluptatibus beatae ab ad, dignissimos fugiat? Nisi odio commodi debitis eveniet tenetur provident aliquid tempora placeat.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quod eum eius numquam sint dolore voluptatibus beatae ab ad, dignissimos fugiat? Nisi odio commodi debitis eveniet tenetur provident aliquid tempora placeat.</p>
</columns>
</row>
<row>
<columns>
<p>You received this email because you're signed up to receive updates from us. <a href="#">Click here to unsubscribe.</a></p>
</columns>
</row>
</container>

44
src/pages/newsletter.html Normal file
View File

@ -0,0 +1,44 @@
---
subject: My Newsletter Email Template Subject
---
<container>
<spacer size="16"></spacer>
<row>
<columns>
<h1 class="text-center">The Insider</h1>
<center>
<img src="http://placehold.it/500x200">
</center>
<spacer size="16"></spacer>
<p class="lead">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsa itaque illo doloribus soluta expedita dolores commodi fuga odit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto reiciendis eos magni deleniti accusamus tempore, consectetur! Maxime amet, exercitationem nihil fugit eius esse voluptatum ab incidunt minima, saepe reiciendis ipsum.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto reiciendis eos magni deleniti accusamus tempore, consectetur! Maxime amet, exercitationem nihil fugit eius esse voluptatum ab incidunt minima, saepe reiciendis ipsum.</p>
<row>
<columns large="6">
<h4>More Reading:</h4>
<ul>
<li><a href="#">Lorem Ipsum Dolor Sit Amet</a></li>
<li><a href="#">Lorem Ipsum Dolor Sit Amet</a></li>
<li><a href="#">Lorem Ipsum Dolor Sit Amet</a></li>
</ul>
</columns>
<columns>
<h4>Get Involved:</h4>
<ul>
<li><a href="#">Facebook</a></li>
<li><a href="#">Twitter</a></li>
<li><a href="#">Instagram</a></li>
</ul>
</columns>
</row>
<p><small>You received this email because you're signed up to get updates from us. <a href="#">Click here to unsubscribe.</a></small></p>
</columns>
</row>
</container>

86
src/pages/order.html Normal file
View File

@ -0,0 +1,86 @@
<style type="text/css">
body,
html,
.body {
background: #f3f3f3 !important;
}
</style>
<container>
<spacer size="16"></spacer>
<row>
<columns>
<h1>Thanks for your order.</h1>
<p>Thanks for shopping with us! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ad earum ducimus, non, eveniet neque dolores voluptas architecto sed, voluptatibus aut dolorem odio. Cupiditate a recusandae, illum cum voluptatum modi nostrum.</p>
<spacer size="16"></spacer>
<callout class="secondary">
<row>
<columns large="6">
<p>
<strong>Payment Method</strong><br/>
Dubloons
</p>
<p>
<strong>Email Address</strong><br/>
thecapn@pirates.org
</p>
<p>
<strong>Order ID</strong><br/>
239235983749636
</p>
</columns>
<columns large="6">
<p>
<strong>Shipping Method</strong><br/>
Boat (1&ndash;2 weeks)<br/>
<strong>Shipping Address</strong><br/>
Captain Price<br/>
123 Maple Rd<br/>
Campbell, CA 95112
</p>
</columns>
</row>
</callout>
<h4>Order Details</h4>
<table>
<tr><th>Item</th><th>#</th><th>Price</th></tr>
<tr><td>Ship's Cannon</td><td>2</td><td>$100</td></tr>
<tr><td>Ship's Cannon</td><td>2</td><td>$100</td></tr>
<tr><td>Ship's Cannon</td><td>2</td><td>$100</td></tr>
<tr>
<td colspan="2"><b>Subtotal:</b></td>
<td>$600</td>
</tr>
</table>
<hr/>
<h4>What's Next?</h4>
<p>Our carrier raven will prepare your order for delivery. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Modi necessitatibus itaque debitis laudantium doloribus quasi nostrum distinctio suscipit, magni soluta eius animi voluptatem qui velit eligendi quam praesentium provident culpa?</p>
</columns>
</row>
<row class="footer text-center">
<columns large="3">
<img src="http://placehold.it/170x30" alt="">
</columns>
<columns large="3">
<p>
Call us at 800.555.1923<br/>
Email us at support@discount.boat
</p>
</columns>
<columns large="3">
<p>
123 Maple Rd<br/>
Campbell, CA 95112
</p>
</columns>
</row>
</container>

40
src/pages/password.html Normal file
View File

@ -0,0 +1,40 @@
---
subject: My Password Email Template Subject
---
<container>
<row class="header">
<columns>
<spacer size="16"></spacer>
<h4 class="text-center">Pirate Retirement Services</h4>
</columns>
</row>
<row>
<columns>
<spacer size="32"></spacer>
<center>
<img src="http://placehold.it/250x250">
</center>
<spacer size="16"></spacer>
<h1 class="text-center">Forgot Your Password?</h1>
<spacer size="16"></spacer>
<p class="text-center">It happens. Click the link below to reset your password.</p>
<button class="large expand" href="#">Reset Password</button>
<hr/>
<p><small>You're getting this email because you've signed up for email updates. If you want to opt-out of future emails, <a href="#">unsubscribe here</a>.</small></p>
</columns>
</row>
<spacer size="16"></spacer>
</container>

56
src/pages/readlater.html Normal file
View File

@ -0,0 +1,56 @@
---
subject: ReadLaterByEmail link
---
<container class="header">
<row class="collapse">
<columns>
<img src="https://app.readlater.shikiryu.com/images/logo.png" alt="">
</columns>
</row>
</container>
<spacer size="16"></spacer>
<container class="body-drip">
<spacer size="16"></spacer>
<row>
<columns large="6" style="vertical-align: middle">
<h5 class="text-center">Responsive Emails</h5>
</columns>
<columns large="6">
<img src="http://placehold.it/120/663399" alt="" class="text-center">
</columns>
</row>
<hr/>
<row>
<columns>
<p class="text-center">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras egestas ullamcorper tristique. Aenean pharetra, ipsum eu varius elementum, odio ex malesuada neque, eget tempus ipsum neque ut ante. Vivamus volutpat faucibus metus quis ultrices. Fusce hendrerit purus in elit tincidunt sollicitudin. Duis ultrices odio id faucibus sagittis. Sed nulla leo, gravida non massa vitae, bibendum interdum sapien. Pellentesque rutrum sem bibendum tellus volutpat congue.</p>
<center>
<button href="#" class="success">Link →</button>
</center>
</columns>
</row>
<row class="collapsed footer body-drip">
<columns>
<spacer size="16"></spacer>
<p class="text-center">@ <a href="https://shikiryu.com">Shikiryu</a><br/>
<!--<a href="#">hello@nocopywrite.com</a> | <a href="#">Manage Email Notifications</a> | <a href="#">Unsubscribe</a></p>
<center>
<menu>
<item><img src="http://placehold.it/25/663399" alt=""></item>
<item><img src="http://placehold.it/25/663399" alt=""></item>
<item><img src="http://placehold.it/25/663399" alt=""></item>
<item><img src="http://placehold.it/25/663399" alt=""></item>
<item><img src="http://placehold.it/25/663399" alt=""></item>
</menu>
</center>-->
</columns>
</row>
</container>

View File

@ -0,0 +1,80 @@
---
subject: My Sidebar Hero Email Template Subject
---
<wrapper class="header">
<container>
<row class="collapse">
<columns small="6">
<img src="http://placehold.it/200x50/663399">
</columns>
<columns small="6">
<p class="text-right">SIDEBAR HERO</p>
</columns>
</row>
</container>
</wrapper>
<container>
<spacer size="16"></spacer>
<row>
<columns>
<h1>Hi, Elijah Baily</h1>
<p class="lead">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nisi impedit sapiente delectus molestias quia.</p>
<center>
<img src="http://placehold.it/570x300" alt="">
</center>
<callout class="primary">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Veniam assumenda, praesentium qui vitae voluptate dolores. <a href="#">Click it!</a></p>
</callout>
</columns>
</row>
<row>
<columns large="7">
<h3>Hello, Han Fastolfe</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Laboriosam nobis velit, aliquid pariatur at fugit. Omnis at quae, libero iusto quisquam animi blanditiis neque, alias minima corporis, ab in explicabo?</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Maxime dignissimos voluptas minus, cupiditate voluptatem, voluptatum iste molestiae consectetur temporibus quae dolore nam possimus reprehenderit blanditiis laborum iusto sit. Perspiciatis, dolor.</p>
<callout class="secondary">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa quas optio totam quidem, placeat sunt, sit iusto fugit. Harum omnis deleniti enim nihil iure, quis laudantium veniam velit animi debitis. <a href="#">Click It!</a>
</callout>