inkcite 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +20 -0
- data/README.md +110 -0
- data/Rakefile +8 -0
- data/assets/facebook-like.css +62 -0
- data/assets/facebook-like.js +59 -0
- data/assets/init/config.yml +97 -0
- data/assets/init/helpers.tsv +31 -0
- data/assets/init/source.html +60 -0
- data/assets/init/source.txt +6 -0
- data/bin/inkcite +6 -0
- data/inkcite.gemspec +42 -0
- data/lib/inkcite.rb +32 -0
- data/lib/inkcite/cli/base.rb +128 -0
- data/lib/inkcite/cli/build.rb +130 -0
- data/lib/inkcite/cli/init.rb +58 -0
- data/lib/inkcite/cli/preview.rb +30 -0
- data/lib/inkcite/cli/server.rb +123 -0
- data/lib/inkcite/cli/test.rb +61 -0
- data/lib/inkcite/email.rb +219 -0
- data/lib/inkcite/mailer.rb +140 -0
- data/lib/inkcite/minifier.rb +151 -0
- data/lib/inkcite/parser.rb +111 -0
- data/lib/inkcite/renderer.rb +177 -0
- data/lib/inkcite/renderer/base.rb +186 -0
- data/lib/inkcite/renderer/button.rb +168 -0
- data/lib/inkcite/renderer/div.rb +29 -0
- data/lib/inkcite/renderer/element.rb +82 -0
- data/lib/inkcite/renderer/footnote.rb +132 -0
- data/lib/inkcite/renderer/google_analytics.rb +35 -0
- data/lib/inkcite/renderer/image.rb +95 -0
- data/lib/inkcite/renderer/image_base.rb +82 -0
- data/lib/inkcite/renderer/in_browser.rb +38 -0
- data/lib/inkcite/renderer/like.rb +73 -0
- data/lib/inkcite/renderer/link.rb +243 -0
- data/lib/inkcite/renderer/litmus.rb +33 -0
- data/lib/inkcite/renderer/lorem.rb +39 -0
- data/lib/inkcite/renderer/mobile_image.rb +67 -0
- data/lib/inkcite/renderer/mobile_style.rb +40 -0
- data/lib/inkcite/renderer/mobile_toggle.rb +27 -0
- data/lib/inkcite/renderer/outlook_background.rb +48 -0
- data/lib/inkcite/renderer/partial.rb +31 -0
- data/lib/inkcite/renderer/preheader.rb +22 -0
- data/lib/inkcite/renderer/property.rb +39 -0
- data/lib/inkcite/renderer/responsive.rb +334 -0
- data/lib/inkcite/renderer/span.rb +21 -0
- data/lib/inkcite/renderer/table.rb +67 -0
- data/lib/inkcite/renderer/table_base.rb +149 -0
- data/lib/inkcite/renderer/td.rb +92 -0
- data/lib/inkcite/uploader.rb +173 -0
- data/lib/inkcite/util.rb +85 -0
- data/lib/inkcite/version.rb +3 -0
- data/lib/inkcite/view.rb +745 -0
- data/lib/inkcite/view/context.rb +38 -0
- data/lib/inkcite/view/media_query.rb +60 -0
- data/lib/inkcite/view/tag_stack.rb +38 -0
- data/test/email_spec.rb +16 -0
- data/test/parser_spec.rb +72 -0
- data/test/project/config.yml +98 -0
- data/test/project/helpers.tsv +56 -0
- data/test/project/images/inkcite.jpg +0 -0
- data/test/project/source.html +58 -0
- data/test/project/source.txt +6 -0
- data/test/renderer/button_spec.rb +45 -0
- data/test/renderer/div_spec.rb +101 -0
- data/test/renderer/element_spec.rb +31 -0
- data/test/renderer/footnote_spec.rb +57 -0
- data/test/renderer/image_spec.rb +82 -0
- data/test/renderer/link_spec.rb +84 -0
- data/test/renderer/mobile_image_spec.rb +27 -0
- data/test/renderer/mobile_style_spec.rb +37 -0
- data/test/renderer/td_spec.rb +126 -0
- data/test/renderer_spec.rb +28 -0
- data/test/view_spec.rb +15 -0
- metadata +333 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e3066d2404f84bcdf743a160b8c85cc838cd19c0
|
4
|
+
data.tar.gz: 73adb02dd0f48a81a2b9223a5f03d221c18fa908
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 39ff00165434c67e13ae7b72fa5cb90c4991530ab5005059d0c7f64c118c62a55b7be3cc60d147f44536bbf710934a4c7c455c248f205e75c7ca87730451fe41
|
7
|
+
data.tar.gz: aa990339b0f3ef6b949231ad2d5efd27eb5218f2e6ccd525a4413a8e421a84d480c3579a11a2bb5e89be862f6483e45130b396f3d66cdb71c1c99f075d695146
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2013 Inkceptional
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
# Inkcite
|
2
|
+
|
3
|
+
Inkcite is an opinionated workflow for building modern, responsive email.
|
4
|
+
Like [Middleman] is to static web sites, Inkcite makes it easy for email
|
5
|
+
developers to keep their code DRY (don’t repeat yourself) and integrate
|
6
|
+
versioning, testing and minification into their workflow.
|
7
|
+
|
8
|
+
* Easy, flexible templates, variables and helpers
|
9
|
+
* ERB for easy A/B testing and versioning
|
10
|
+
* Automatic link tagging and tracking
|
11
|
+
* [Litmus] integration for compatibility
|
12
|
+
* Preview distribution lists
|
13
|
+
* Content inclusion/exclusion rules
|
14
|
+
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
Inkcite is a Ruby gem. Ruby comes pre-installed on Mac OS X and Linux. If
|
18
|
+
you’re using Windows, try [RubyInstaller].
|
19
|
+
|
20
|
+
```
|
21
|
+
gem install inkcite
|
22
|
+
```
|
23
|
+
|
24
|
+
## Getting Started
|
25
|
+
|
26
|
+
After Inkcite is installed, you will have access to the `inkcite` command.
|
27
|
+
Create a new Inkcite email at your terminal or command prompt:
|
28
|
+
|
29
|
+
```
|
30
|
+
inkcite init MY_EMAIL
|
31
|
+
```
|
32
|
+
|
33
|
+
This will create a new directory called `MY_EMAIL` and fill it with the source
|
34
|
+
files for your new email project. It includes a subdirectory called `images`
|
35
|
+
where you store all images for your email.
|
36
|
+
|
37
|
+
Change directories into your new project and start the preview server:
|
38
|
+
|
39
|
+
```
|
40
|
+
cd MY_EMAIL
|
41
|
+
inkcite server
|
42
|
+
```
|
43
|
+
|
44
|
+
Inkcite’s preview server gives you a live view of your email as you build it
|
45
|
+
by modifying the `source.html`, `helpers.tsv`, `source.txt` and `config.yml`
|
46
|
+
files. Open your browser to `http://localhost:4567` to see your email as you
|
47
|
+
build it. As you make changes, simply refresh your browser to see up-to-date
|
48
|
+
results.
|
49
|
+
|
50
|
+
The `config.yml` file has an extensive set of properties that influence the
|
51
|
+
HTML code that Inkcite produces plus how it sends preview emails.
|
52
|
+
|
53
|
+
During development, you can refer to your command prompt or terminal window to
|
54
|
+
see important warnings (such as missing images or links).
|
55
|
+
|
56
|
+
## Email Previews
|
57
|
+
|
58
|
+
When you’re ready to see what your email looks like in an email client,
|
59
|
+
Inkcite will send previews on demand. Make sure you have configured the
|
60
|
+
`smtp` settings in the `config.yml` file so that Inkcite can send email via
|
61
|
+
your SMTP server. When you’re ready to send:
|
62
|
+
|
63
|
+
``` inkcite preview ```
|
64
|
+
|
65
|
+
With no other parameters, this will send a preview version of your email to
|
66
|
+
the `from` email address you configured. You can also use the preview command
|
67
|
+
to send to your email to internal or client distribution lists for review.
|
68
|
+
|
69
|
+
## Compatibility Testing
|
70
|
+
|
71
|
+
Testing your Inkcite-built emails with [Litmus] is easy. Make sure you have
|
72
|
+
configured the `litmus` section of the `config.yml` file.
|
73
|
+
|
74
|
+
``` inkcite test ```
|
75
|
+
|
76
|
+
The will create a new email test using your default set of email clients and
|
77
|
+
send a preview version of the email to Litmus for testing. Subsequent runs of
|
78
|
+
the test command will update the same test. Log into your Litmus account to
|
79
|
+
review the results of the test.
|
80
|
+
|
81
|
+
## Production Builds
|
82
|
+
|
83
|
+
After you’ve previewed and tested your email, you’re ready to create the
|
84
|
+
production-ready email files. From the project directory:
|
85
|
+
|
86
|
+
``` inkcite build ```
|
87
|
+
|
88
|
+
By default, this will create the production version of your email. This
|
89
|
+
includes fully-qualified URLs for images, link tracking and tagging and a host
|
90
|
+
of other preflight features.
|
91
|
+
|
92
|
+
## Bug Reports
|
93
|
+
|
94
|
+
Github Issues is used for managing bug reports and feature requests. If you
|
95
|
+
run into issues, please search the issues and submit new problems:
|
96
|
+
https://github.com/inkceptional/inkcite/issues
|
97
|
+
|
98
|
+
The best way to get quick responses to your issues and swift fixes to your
|
99
|
+
bugs is to submit detailed bug reports, include test cases and respond to
|
100
|
+
developer questions in a timely manner.
|
101
|
+
|
102
|
+
## License
|
103
|
+
|
104
|
+
Copyright (c) 2014 Jeffrey D. Hoffman. MIT Licensed, see [LICENSE] for
|
105
|
+
details.
|
106
|
+
|
107
|
+
[Middleman]: http://middlemanapp.com
|
108
|
+
[Litmus]: http://litmus.com
|
109
|
+
[rubyinstaller]: http://rubyinstaller.org/
|
110
|
+
[LICENSE]: https://github.com/inkceptional/inkcite/blob/master/LICENSE
|
data/Rakefile
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
#dialog-wrap {
|
2
|
+
display: none;
|
3
|
+
position: absolute;
|
4
|
+
background-color: rgba(82, 82, 82, 0.7);
|
5
|
+
border-radius: 8px;
|
6
|
+
padding: 10px;
|
7
|
+
z-index: 10;
|
8
|
+
}
|
9
|
+
|
10
|
+
#dialog {
|
11
|
+
background-color: #fff;
|
12
|
+
border: 1px solid #555;
|
13
|
+
color: #333333;
|
14
|
+
font-family: "lucida grande",tahoma,verdana,arial,sans-serif;
|
15
|
+
font-size: 11px;
|
16
|
+
line-height: 1.28;
|
17
|
+
text-align: left;
|
18
|
+
}
|
19
|
+
|
20
|
+
#dialog h2 {
|
21
|
+
background-color: #6D84B4;
|
22
|
+
color: #FFFFFF;
|
23
|
+
font-size: 14px;
|
24
|
+
font-weight: bold;
|
25
|
+
margin: 0;
|
26
|
+
padding: 5px 10px;
|
27
|
+
}
|
28
|
+
|
29
|
+
#dialog-content {
|
30
|
+
padding: 15px;
|
31
|
+
width: 450px;
|
32
|
+
height: 100px;
|
33
|
+
}
|
34
|
+
|
35
|
+
#dialog-buttons {
|
36
|
+
background-color: #f2f2f2;
|
37
|
+
border-top: 1px solid #ccc;
|
38
|
+
padding: 8px 10px;
|
39
|
+
text-align: right;
|
40
|
+
}
|
41
|
+
|
42
|
+
#dialog-buttons a {
|
43
|
+
display: inline-block;
|
44
|
+
border: 1px solid #29447E;
|
45
|
+
border-bottom-color: #1A356E;
|
46
|
+
background-color: #5B74A8;
|
47
|
+
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);
|
48
|
+
text-decoration: none;
|
49
|
+
color: #fff;
|
50
|
+
font-size: 13px;
|
51
|
+
font-weight: bold;
|
52
|
+
}
|
53
|
+
|
54
|
+
#dialog-buttons a span {
|
55
|
+
display: inline-block;
|
56
|
+
border-top: 1px solid #8A9CC2;
|
57
|
+
padding: 2px 6px 3px;
|
58
|
+
}
|
59
|
+
|
60
|
+
.loading {
|
61
|
+
background: url(spinner.gif) no-repeat center;
|
62
|
+
}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
var loaded = false;
|
2
|
+
|
3
|
+
function closeLike() {
|
4
|
+
$('#dialog-wrap').fadeOut('slow');
|
5
|
+
return false;
|
6
|
+
}
|
7
|
+
|
8
|
+
function openLike() {
|
9
|
+
|
10
|
+
if (!loaded) {
|
11
|
+
loaded = true;
|
12
|
+
|
13
|
+
(function(d, s, id) {
|
14
|
+
var js, fjs = d.getElementsByTagName(s)[0];
|
15
|
+
if (d.getElementById(id)) return;
|
16
|
+
js = d.createElement(s); js.id = id;
|
17
|
+
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
|
18
|
+
fjs.parentNode.insertBefore(js, fjs);
|
19
|
+
}(document, 'script', 'facebook-jssdk'));
|
20
|
+
|
21
|
+
var waitForFB;
|
22
|
+
waitForFB = function() {
|
23
|
+
var $dialog = $('#dialog-wrap');
|
24
|
+
var $iframe = $dialog.find('iframe');
|
25
|
+
if ($iframe.contents().length != 1) {
|
26
|
+
setTimeout(waitForFB, 100);
|
27
|
+
} else {
|
28
|
+
$dialog.find('#dialog-content').removeClass('loading');
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
waitForFB();
|
33
|
+
}
|
34
|
+
|
35
|
+
var $window = $(window);
|
36
|
+
var $dialog = $('#dialog-wrap');
|
37
|
+
|
38
|
+
var top = Math.round(($window.height() - $dialog.outerHeight()) / 2) + $window.scrollTop();
|
39
|
+
if (top < 0) {
|
40
|
+
top = 0;
|
41
|
+
}
|
42
|
+
|
43
|
+
var left = Math.round(($window.width() - $dialog.outerWidth()) / 2) + $window.scrollLeft();
|
44
|
+
if (left < 0) {
|
45
|
+
left = 0;
|
46
|
+
}
|
47
|
+
|
48
|
+
$dialog.css({ top: top, left: left });
|
49
|
+
|
50
|
+
$dialog.fadeIn('slow');
|
51
|
+
|
52
|
+
return false;
|
53
|
+
}
|
54
|
+
|
55
|
+
$(function() {
|
56
|
+
if (window.location.hash === '#like') {
|
57
|
+
openLike();
|
58
|
+
}
|
59
|
+
});
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# When true (recommended), appends a cache-busting timestamp to the
|
2
|
+
# images referenced in the email. This ensures the client always
|
3
|
+
# retrieves the latest version of the image and helpful during client
|
4
|
+
# previews. Generally this should be disabled in production.
|
5
|
+
cache-bust: true
|
6
|
+
|
7
|
+
# When true copies image alt-text to the title property. Populating both
|
8
|
+
# presents a more consistent image tooltip experience.
|
9
|
+
copy-alt-to-title: false
|
10
|
+
|
11
|
+
# When true (recommended), minifies the HTML and CSS of the email. Should
|
12
|
+
# usually be disabled in development to make debugging easier.
|
13
|
+
minify: true
|
14
|
+
|
15
|
+
# When true (recommended), enables image optimization using ImageOptim.
|
16
|
+
# http://imageoptim.com
|
17
|
+
optimize-images: true
|
18
|
+
|
19
|
+
# When empty links are found in content, this is the URL that will be
|
20
|
+
# included instead - so that clients understand this link is missing
|
21
|
+
# and needs to be provided.
|
22
|
+
missing-link-url: 'https://github.com/404'
|
23
|
+
|
24
|
+
# Inkcite can generate multiple versions of an email from a single source
|
25
|
+
# file which is useful for targeted mailings and a/b testing. Specify a
|
26
|
+
# unique, single-word identifier for each version.
|
27
|
+
#versions:
|
28
|
+
# - past_customer
|
29
|
+
# - prospect
|
30
|
+
|
31
|
+
# SMTP settings for sending previews to the small list of internal and client
|
32
|
+
# addresses specified below. Most importantly, specify the address your test
|
33
|
+
# emails will be sent 'from:'
|
34
|
+
smtp:
|
35
|
+
host: 'smtp.gmail.com'
|
36
|
+
port: 587
|
37
|
+
domain: 'yourdomain.com'
|
38
|
+
username: ''
|
39
|
+
password: ''
|
40
|
+
from: 'Your Name <email@domain.com>'
|
41
|
+
|
42
|
+
# Specify the distribution lists for preview versions of your email.
|
43
|
+
recipients:
|
44
|
+
client:
|
45
|
+
- 'Awesome Client <awesome.client@domain.com>'
|
46
|
+
internal:
|
47
|
+
- 'Creative Director <creative.director@domain.com>'
|
48
|
+
- 'Proofreader <proof.reader@domain.com>'
|
49
|
+
|
50
|
+
# Easy Litmus integration for compatibility testing.
|
51
|
+
# http://litmusapp.com
|
52
|
+
litmus:
|
53
|
+
subdomain: ''
|
54
|
+
username: ''
|
55
|
+
password: ''
|
56
|
+
|
57
|
+
# Easy deployment of static assets to a CDN or publicly-accessible
|
58
|
+
# server - required when your email has images.
|
59
|
+
sftp:
|
60
|
+
host: ''
|
61
|
+
path: ''
|
62
|
+
username: ''
|
63
|
+
password: ''
|
64
|
+
|
65
|
+
# Link tagging ensures that every link in the email includes a
|
66
|
+
# name-value pair. This is useful if you harvest data from your
|
67
|
+
# website analytics. {id} will be replaced with the unique ID
|
68
|
+
# from the link if you're concerned about which link the
|
69
|
+
# recipient clicked to get to your website.
|
70
|
+
tag-links: "from_email=myemail|{id}"
|
71
|
+
|
72
|
+
# Optionally, if your email newsletter links to multiple websites
|
73
|
+
# and you only want to tag links to a specific domain, include
|
74
|
+
# that domain in this setting.
|
75
|
+
#tag-links-domain: 'clientdomain.com'
|
76
|
+
|
77
|
+
|
78
|
+
# Environment-specific overrides allow you to change any setting
|
79
|
+
# for each environment (e.g local development vs. client preview).
|
80
|
+
|
81
|
+
# These overrides apply to your local development environment when
|
82
|
+
# you are viewing the email in your browser via Inkcite's server.
|
83
|
+
development:
|
84
|
+
minify: false
|
85
|
+
|
86
|
+
# These overrides apply to previews both internally and to external
|
87
|
+
# clients and sent with Inkcite's preview function.
|
88
|
+
preview:
|
89
|
+
view-in-browser-url: 'http://preview.contenthost.com/path/{filename}'
|
90
|
+
image-host: 'http://preview.imagehost.com/emails/'
|
91
|
+
|
92
|
+
# These overrides apply to the final, ready-to-send files.
|
93
|
+
production:
|
94
|
+
cache-bust: false
|
95
|
+
image-host: "http://production.imagehost.com/emails/myemail"
|
96
|
+
view-in-browser-url: 'http://production.contenthost.com/path/{filename}'
|
97
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
// This file helps you keep your email code DRY (don't repeat yourself)
|
2
|
+
// by allowing you to easily define constants and custom tags.
|
3
|
+
//
|
4
|
+
// The keys and values in this file are tab-delimited.
|
5
|
+
|
6
|
+
// Palette
|
7
|
+
#background #ffffff
|
8
|
+
#text #000000
|
9
|
+
#link #0099cc
|
10
|
+
|
11
|
+
// Default font styles
|
12
|
+
font-family sans-serif
|
13
|
+
font-size 15
|
14
|
+
line-height 19
|
15
|
+
|
16
|
+
// This is an example of a custom tag. Tabs delimit the tag name, its open and
|
17
|
+
// close values. Inkcite will replace instances of {big} and {/big} with these
|
18
|
+
// values, respectively. Notice that it allows its color, which defaults to
|
19
|
+
// #444444, to be configured in your HTML as in {big color=#ff0000}.
|
20
|
+
big <div style="font-size: 18px; font-weight: bold; color: $color=#444444$"> </div>
|
21
|
+
|
22
|
+
// Bullet-proof buttons
|
23
|
+
button-border-radius 5
|
24
|
+
button-float center
|
25
|
+
button-padding 8
|
26
|
+
button-width 175
|
27
|
+
|
28
|
+
// Dimensions
|
29
|
+
width 500
|
30
|
+
|
31
|
+
wrap {table width=100% bgcolor={#background}}{td font-family="{font-family}" align=center} {/td}{/table}
|
@@ -0,0 +1,60 @@
|
|
1
|
+
{wrap}
|
2
|
+
|
3
|
+
{preheader}This preheader will only be visible in supporting clients.{/preheader}
|
4
|
+
|
5
|
+
{table padding=10 width={width} mobile="fill"}
|
6
|
+
{td font=default align=left}
|
7
|
+
|
8
|
+
{img src=logo.gif height=50 width=200 alt="Company Logo"}<br>
|
9
|
+
|
10
|
+
The {img} helper automatically uses placehold.it when the specified image is missing from the images/ folder. It also sets the <code>display</code>-style to block and will warn you when you've forgotten to set dimensions. {img| are responsive-ready - you can set this image to <code>hide</code>, <code>fill</code> or show a different image using the <code>mobile-src</code> property.
|
11
|
+
|
12
|
+
{img src=billboard.jpg height=180 width={width} mobile="fill"}<br>
|
13
|
+
|
14
|
+
{lorem sentences=10}<br><br>
|
15
|
+
|
16
|
+
{button id="call-to-action" href="http://inkceptional.com"}I'm a Responsive Button{/button}<br>
|
17
|
+
|
18
|
+
{/td}
|
19
|
+
{/table}
|
20
|
+
|
21
|
+
{table width={width} padding=10 float=center valign=top mobile="drop"}
|
22
|
+
{td width=50%}
|
23
|
+
|
24
|
+
{img src=kittens.jpg width=250 height=150 mobile="fill"}<br>
|
25
|
+
|
26
|
+
{big}{lorem type=headline}{/big}
|
27
|
+
|
28
|
+
{lorem sentences=8}<br><br>
|
29
|
+
|
30
|
+
{button id="call-to-action2" href="http://inkceptional.com"}Create & Send{/button}
|
31
|
+
|
32
|
+
{/td}
|
33
|
+
{td width=50% bgcolor=#eeeeee font=default}
|
34
|
+
|
35
|
+
{big}{lorem type=headline}{/big}
|
36
|
+
{lorem sentences=3}<br><br>
|
37
|
+
|
38
|
+
{big}{lorem type=headline}{/big}
|
39
|
+
{lorem sentences=3}<br><br>
|
40
|
+
|
41
|
+
{big color=#990000}{lorem type=headline}{/big}
|
42
|
+
{lorem sentences=3}
|
43
|
+
|
44
|
+
{/td}
|
45
|
+
{/table}
|
46
|
+
|
47
|
+
{table padding=10 width={width} float=center mobile="fill"}
|
48
|
+
{td align=left font=small}
|
49
|
+
|
50
|
+
{img src=footer.jpg height=100 width={width} mobile="hide"}<br>
|
51
|
+
|
52
|
+
<% if email? %>
|
53
|
+
This email was sent to [email]. {a id="unsubscribe" href=#}Click here to unsubscribe{/a}.
|
54
|
+
Using ERB, this unsubscribe notice will only appear in the 'email' format of this project.
|
55
|
+
<% end %>
|
56
|
+
|
57
|
+
{/td}
|
58
|
+
{/table}
|
59
|
+
|
60
|
+
{/wrap}
|