mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
feat(invite): inital pass on sending new user invite email, #2353
This commit is contained in:
parent
e92f2ecea1
commit
6088f83408
@ -39,7 +39,6 @@ func Register(r *macaron.Macaron) {
|
|||||||
r.Get("/dashboard/*", reqSignedIn, Index)
|
r.Get("/dashboard/*", reqSignedIn, Index)
|
||||||
|
|
||||||
// sign up
|
// sign up
|
||||||
r.Get("/signup", Index)
|
|
||||||
r.Post("/api/user/signup", bind(m.CreateUserCommand{}), wrap(SignUp))
|
r.Post("/api/user/signup", bind(m.CreateUserCommand{}), wrap(SignUp))
|
||||||
|
|
||||||
// reset password
|
// reset password
|
||||||
|
@ -3,7 +3,8 @@ package dtos
|
|||||||
import m "github.com/grafana/grafana/pkg/models"
|
import m "github.com/grafana/grafana/pkg/models"
|
||||||
|
|
||||||
type AddInviteForm struct {
|
type AddInviteForm struct {
|
||||||
Email string `json:"email" binding:"Required"`
|
Email string `json:"email" binding:"Required"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Role m.RoleType `json:"role" binding:"Required"`
|
Role m.RoleType `json:"role" binding:"Required"`
|
||||||
|
SkipEmails bool `json:"skipEmails"`
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/bus"
|
"github.com/grafana/grafana/pkg/bus"
|
||||||
"github.com/grafana/grafana/pkg/middleware"
|
"github.com/grafana/grafana/pkg/middleware"
|
||||||
m "github.com/grafana/grafana/pkg/models"
|
m "github.com/grafana/grafana/pkg/models"
|
||||||
|
"github.com/grafana/grafana/pkg/setting"
|
||||||
"github.com/grafana/grafana/pkg/util"
|
"github.com/grafana/grafana/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -22,6 +23,9 @@ func AddOrgInvite(c *middleware.Context, inviteDto dtos.AddInviteForm) Response
|
|||||||
if !inviteDto.Role.IsValid() {
|
if !inviteDto.Role.IsValid() {
|
||||||
return ApiError(400, "Invalid role specified", nil)
|
return ApiError(400, "Invalid role specified", nil)
|
||||||
}
|
}
|
||||||
|
if !util.IsEmail(inviteDto.Email) {
|
||||||
|
return ApiError(400, "Invalid email specified", nil)
|
||||||
|
}
|
||||||
|
|
||||||
// first try get existing user
|
// first try get existing user
|
||||||
userQuery := m.GetUserByLoginQuery{LoginOrEmail: inviteDto.Email}
|
userQuery := m.GetUserByLoginQuery{LoginOrEmail: inviteDto.Email}
|
||||||
@ -52,5 +56,24 @@ func AddOrgInvite(c *middleware.Context, inviteDto dtos.AddInviteForm) Response
|
|||||||
return ApiError(500, "Failed to save invite to database", err)
|
return ApiError(500, "Failed to save invite to database", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// send invite email
|
||||||
|
if !inviteDto.SkipEmails {
|
||||||
|
emailCmd := m.SendEmailCommand{
|
||||||
|
To: []string{inviteDto.Email},
|
||||||
|
Template: "new_user_invite.html",
|
||||||
|
Data: map[string]interface{}{
|
||||||
|
"NameOrEmail": util.StringsFallback2(cmd.Name, cmd.Email),
|
||||||
|
"OrgName": c.OrgName,
|
||||||
|
"Email": c.Email,
|
||||||
|
"LinkUrl": setting.ToAbsUrl("signup/invited/" + cmd.Code),
|
||||||
|
"InvitedBy": util.StringsFallback2(c.Name, c.Email),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := bus.Dispatch(&emailCmd); err != nil {
|
||||||
|
return ApiError(500, "Failed to send email invite", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return ApiSuccess("ok, done!")
|
return ApiSuccess("ok, done!")
|
||||||
}
|
}
|
||||||
|
8
pkg/util/strings.go
Normal file
8
pkg/util/strings.go
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
package util
|
||||||
|
|
||||||
|
func StringsFallback2(val1 string, val2 string) string {
|
||||||
|
if val1 != "" {
|
||||||
|
return val1
|
||||||
|
}
|
||||||
|
return val2
|
||||||
|
}
|
867
public/emails/new_user_invite.html
Normal file
867
public/emails/new_user_invite.html
Normal file
@ -0,0 +1,867 @@
|
|||||||
|
{{Subject .Subject "{{.InvitedBy}} has invited you to join Grafana"}}
|
||||||
|
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width"/>
|
||||||
|
<style>
|
||||||
|
/**********************************************
|
||||||
|
* Ink v1.0.5 - Copyright 2013 ZURB Inc *
|
||||||
|
**********************************************/
|
||||||
|
|
||||||
|
/* Client-specific Styles & Reset */
|
||||||
|
|
||||||
|
#outlook a {
|
||||||
|
padding:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body{
|
||||||
|
width:100% !important;
|
||||||
|
min-width: 100%;
|
||||||
|
-webkit-text-size-adjust:100%;
|
||||||
|
-ms-text-size-adjust:100%;
|
||||||
|
margin:0;
|
||||||
|
padding:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ExternalClass {
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ExternalClass,
|
||||||
|
.ExternalClass p,
|
||||||
|
.ExternalClass span,
|
||||||
|
.ExternalClass font,
|
||||||
|
.ExternalClass td,
|
||||||
|
.ExternalClass div {
|
||||||
|
line-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#backgroundTable {
|
||||||
|
margin:0;
|
||||||
|
padding:0;
|
||||||
|
width:100% !important;
|
||||||
|
line-height: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
outline:none;
|
||||||
|
text-decoration:none;
|
||||||
|
-ms-interpolation-mode: bicubic;
|
||||||
|
width: auto;
|
||||||
|
max-width: 100%;
|
||||||
|
float: left;
|
||||||
|
clear: both;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
center {
|
||||||
|
width: 100%;
|
||||||
|
min-width: 580px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a img {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin: 0 0 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-spacing: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
word-break: break-word;
|
||||||
|
-webkit-hyphens: auto;
|
||||||
|
-moz-hyphens: auto;
|
||||||
|
hyphens: auto;
|
||||||
|
border-collapse: collapse !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table, tr, td {
|
||||||
|
padding: 0;
|
||||||
|
vertical-align: top;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
color: #d9d9d9;
|
||||||
|
background-color: #d9d9d9;
|
||||||
|
height: 1px;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Responsive Grid */
|
||||||
|
|
||||||
|
table.body {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.container {
|
||||||
|
width: 580px;
|
||||||
|
margin: 0 auto;
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.row {
|
||||||
|
padding: 0px;
|
||||||
|
width: 100%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.container table.row {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.wrapper {
|
||||||
|
padding: 10px 20px 0px 0px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.columns,
|
||||||
|
table.column {
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.columns td,
|
||||||
|
table.column td {
|
||||||
|
padding: 0px 0px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.columns td.sub-columns,
|
||||||
|
table.column td.sub-columns,
|
||||||
|
table.columns td.sub-column,
|
||||||
|
table.column td.sub-column {
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.sub-column, td.sub-columns {
|
||||||
|
min-width: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.row td.last,
|
||||||
|
table.container td.last {
|
||||||
|
padding-right: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.one { width: 30px; }
|
||||||
|
table.two { width: 80px; }
|
||||||
|
table.three { width: 130px; }
|
||||||
|
table.four { width: 180px; }
|
||||||
|
table.five { width: 230px; }
|
||||||
|
table.six { width: 280px; }
|
||||||
|
table.seven { width: 330px; }
|
||||||
|
table.eight { width: 380px; }
|
||||||
|
table.nine { width: 430px; }
|
||||||
|
table.ten { width: 480px; }
|
||||||
|
table.eleven { width: 530px; }
|
||||||
|
table.twelve { width: 580px; }
|
||||||
|
|
||||||
|
table.one center { min-width: 30px; }
|
||||||
|
table.two center { min-width: 80px; }
|
||||||
|
table.three center { min-width: 130px; }
|
||||||
|
table.four center { min-width: 180px; }
|
||||||
|
table.five center { min-width: 230px; }
|
||||||
|
table.six center { min-width: 280px; }
|
||||||
|
table.seven center { min-width: 330px; }
|
||||||
|
table.eight center { min-width: 380px; }
|
||||||
|
table.nine center { min-width: 430px; }
|
||||||
|
table.ten center { min-width: 480px; }
|
||||||
|
table.eleven center { min-width: 530px; }
|
||||||
|
table.twelve center { min-width: 580px; }
|
||||||
|
|
||||||
|
table.one .panel center { min-width: 10px; }
|
||||||
|
table.two .panel center { min-width: 60px; }
|
||||||
|
table.three .panel center { min-width: 110px; }
|
||||||
|
table.four .panel center { min-width: 160px; }
|
||||||
|
table.five .panel center { min-width: 210px; }
|
||||||
|
table.six .panel center { min-width: 260px; }
|
||||||
|
table.seven .panel center { min-width: 310px; }
|
||||||
|
table.eight .panel center { min-width: 360px; }
|
||||||
|
table.nine .panel center { min-width: 410px; }
|
||||||
|
table.ten .panel center { min-width: 460px; }
|
||||||
|
table.eleven .panel center { min-width: 510px; }
|
||||||
|
table.twelve .panel center { min-width: 560px; }
|
||||||
|
|
||||||
|
.body .columns td.one,
|
||||||
|
.body .column td.one { width: 8.333333%; }
|
||||||
|
.body .columns td.two,
|
||||||
|
.body .column td.two { width: 16.666666%; }
|
||||||
|
.body .columns td.three,
|
||||||
|
.body .column td.three { width: 25%; }
|
||||||
|
.body .columns td.four,
|
||||||
|
.body .column td.four { width: 33.333333%; }
|
||||||
|
.body .columns td.five,
|
||||||
|
.body .column td.five { width: 41.666666%; }
|
||||||
|
.body .columns td.six,
|
||||||
|
.body .column td.six { width: 50%; }
|
||||||
|
.body .columns td.seven,
|
||||||
|
.body .column td.seven { width: 58.333333%; }
|
||||||
|
.body .columns td.eight,
|
||||||
|
.body .column td.eight { width: 66.666666%; }
|
||||||
|
.body .columns td.nine,
|
||||||
|
.body .column td.nine { width: 75%; }
|
||||||
|
.body .columns td.ten,
|
||||||
|
.body .column td.ten { width: 83.333333%; }
|
||||||
|
.body .columns td.eleven,
|
||||||
|
.body .column td.eleven { width: 91.666666%; }
|
||||||
|
.body .columns td.twelve,
|
||||||
|
.body .column td.twelve { width: 100%; }
|
||||||
|
|
||||||
|
td.offset-by-one { padding-left: 50px; }
|
||||||
|
td.offset-by-two { padding-left: 100px; }
|
||||||
|
td.offset-by-three { padding-left: 150px; }
|
||||||
|
td.offset-by-four { padding-left: 200px; }
|
||||||
|
td.offset-by-five { padding-left: 250px; }
|
||||||
|
td.offset-by-six { padding-left: 300px; }
|
||||||
|
td.offset-by-seven { padding-left: 350px; }
|
||||||
|
td.offset-by-eight { padding-left: 400px; }
|
||||||
|
td.offset-by-nine { padding-left: 450px; }
|
||||||
|
td.offset-by-ten { padding-left: 500px; }
|
||||||
|
td.offset-by-eleven { padding-left: 550px; }
|
||||||
|
|
||||||
|
td.expander {
|
||||||
|
visibility: hidden;
|
||||||
|
width: 0px;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.columns .text-pad,
|
||||||
|
table.column .text-pad {
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.columns .left-text-pad,
|
||||||
|
table.columns .text-pad-left,
|
||||||
|
table.column .left-text-pad,
|
||||||
|
table.column .text-pad-left {
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.columns .right-text-pad,
|
||||||
|
table.columns .text-pad-right,
|
||||||
|
table.column .right-text-pad,
|
||||||
|
table.column .text-pad-right {
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Block Grid */
|
||||||
|
|
||||||
|
.block-grid {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 580px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block-grid td {
|
||||||
|
display: inline-block;
|
||||||
|
padding:10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.two-up td {
|
||||||
|
width:270px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.three-up td {
|
||||||
|
width:173px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.four-up td {
|
||||||
|
width:125px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.five-up td {
|
||||||
|
width:96px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.six-up td {
|
||||||
|
width:76px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seven-up td {
|
||||||
|
width:62px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.eight-up td {
|
||||||
|
width:52px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Alignment & Visibility Classes */
|
||||||
|
|
||||||
|
table.center, td.center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1.center,
|
||||||
|
h2.center,
|
||||||
|
h3.center,
|
||||||
|
h4.center,
|
||||||
|
h5.center,
|
||||||
|
h6.center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.center {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.center {
|
||||||
|
margin: 0 auto;
|
||||||
|
float: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-for-small,
|
||||||
|
.hide-for-desktop {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Typography */
|
||||||
|
|
||||||
|
body, table.body, h1, h2, h3, h4, h5, h6, p, td {
|
||||||
|
color: #222222;
|
||||||
|
font-family: "Helvetica", "Arial", sans-serif;
|
||||||
|
font-weight: normal;
|
||||||
|
padding:0;
|
||||||
|
margin: 0;
|
||||||
|
text-align: left;
|
||||||
|
line-height: 1.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
word-break: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {font-size: 40px;}
|
||||||
|
h2 {font-size: 36px;}
|
||||||
|
h3 {font-size: 32px;}
|
||||||
|
h4 {font-size: 28px;}
|
||||||
|
h5 {font-size: 24px;}
|
||||||
|
h6 {font-size: 20px;}
|
||||||
|
body, table.body, p, td {font-size: 14px;line-height:19px;}
|
||||||
|
|
||||||
|
p.lead, p.lede, p.leed {
|
||||||
|
font-size: 18px;
|
||||||
|
line-height:21px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
small {
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #2ba6cb;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #2795b6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:active {
|
||||||
|
color: #2795b6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:visited {
|
||||||
|
color: #2ba6cb !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 a,
|
||||||
|
h2 a,
|
||||||
|
h3 a,
|
||||||
|
h4 a,
|
||||||
|
h5 a,
|
||||||
|
h6 a {
|
||||||
|
color: #2ba6cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 a:active,
|
||||||
|
h2 a:active,
|
||||||
|
h3 a:active,
|
||||||
|
h4 a:active,
|
||||||
|
h5 a:active,
|
||||||
|
h6 a:active {
|
||||||
|
color: #2ba6cb !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 a:visited,
|
||||||
|
h2 a:visited,
|
||||||
|
h3 a:visited,
|
||||||
|
h4 a:visited,
|
||||||
|
h5 a:visited,
|
||||||
|
h6 a:visited {
|
||||||
|
color: #2ba6cb !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Panels */
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
background: #f2f2f2;
|
||||||
|
border: 1px solid #d9d9d9;
|
||||||
|
padding: 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sub-grid table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sub-grid td.sub-columns {
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Buttons */
|
||||||
|
|
||||||
|
table.button,
|
||||||
|
table.tiny-button,
|
||||||
|
table.small-button,
|
||||||
|
table.medium-button,
|
||||||
|
table.large-button {
|
||||||
|
width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.button td,
|
||||||
|
table.tiny-button td,
|
||||||
|
table.small-button td,
|
||||||
|
table.medium-button td,
|
||||||
|
table.large-button td {
|
||||||
|
display: block;
|
||||||
|
width: auto !important;
|
||||||
|
text-align: center;
|
||||||
|
background: #2ba6cb;
|
||||||
|
border: 1px solid #2284a1;
|
||||||
|
color: #ffffff;
|
||||||
|
padding: 8px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.tiny-button td {
|
||||||
|
padding: 5px 0 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.small-button td {
|
||||||
|
padding: 8px 0 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.medium-button td {
|
||||||
|
padding: 12px 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.large-button td {
|
||||||
|
padding: 21px 0 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.button td a,
|
||||||
|
table.tiny-button td a,
|
||||||
|
table.small-button td a,
|
||||||
|
table.medium-button td a,
|
||||||
|
table.large-button td a {
|
||||||
|
font-weight: bold;
|
||||||
|
text-decoration: none;
|
||||||
|
font-family: Helvetica, Arial, sans-serif;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.tiny-button td a {
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.small-button td a {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.medium-button td a {
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.large-button td a {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.button:hover td,
|
||||||
|
table.button:visited td,
|
||||||
|
table.button:active td {
|
||||||
|
background: #2795b6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.button:hover td a,
|
||||||
|
table.button:visited td a,
|
||||||
|
table.button:active td a {
|
||||||
|
color: #fff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.button:hover td,
|
||||||
|
table.tiny-button:hover td,
|
||||||
|
table.small-button:hover td,
|
||||||
|
table.medium-button:hover td,
|
||||||
|
table.large-button:hover td {
|
||||||
|
background: #2795b6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.button:hover td a,
|
||||||
|
table.button:active td a,
|
||||||
|
table.button td a:visited,
|
||||||
|
table.tiny-button:hover td a,
|
||||||
|
table.tiny-button:active td a,
|
||||||
|
table.tiny-button td a:visited,
|
||||||
|
table.small-button:hover td a,
|
||||||
|
table.small-button:active td a,
|
||||||
|
table.small-button td a:visited,
|
||||||
|
table.medium-button:hover td a,
|
||||||
|
table.medium-button:active td a,
|
||||||
|
table.medium-button td a:visited,
|
||||||
|
table.large-button:hover td a,
|
||||||
|
table.large-button:active td a,
|
||||||
|
table.large-button td a:visited {
|
||||||
|
color: #ffffff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.secondary td {
|
||||||
|
background: #e9e9e9;
|
||||||
|
border-color: #d0d0d0;
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.secondary td a {
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.secondary:hover td {
|
||||||
|
background: #d0d0d0 !important;
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.secondary:hover td a,
|
||||||
|
table.secondary td a:visited,
|
||||||
|
table.secondary:active td a {
|
||||||
|
color: #555 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.success td {
|
||||||
|
background: #5da423;
|
||||||
|
border-color: #457a1a;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.success:hover td {
|
||||||
|
background: #457a1a !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.alert td {
|
||||||
|
background: #c60f13;
|
||||||
|
border-color: #970b0e;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.alert:hover td {
|
||||||
|
background: #970b0e !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.radius td {
|
||||||
|
-webkit-border-radius: 3px;
|
||||||
|
-moz-border-radius: 3px;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.round td {
|
||||||
|
-webkit-border-radius: 500px;
|
||||||
|
-moz-border-radius: 500px;
|
||||||
|
border-radius: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Outlook First */
|
||||||
|
|
||||||
|
body.outlook p {
|
||||||
|
display: inline !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Media Queries */
|
||||||
|
|
||||||
|
@media only screen and (max-width: 600px) {
|
||||||
|
|
||||||
|
table[class="body"] img {
|
||||||
|
width: auto !important;
|
||||||
|
height: auto !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class="body"] center {
|
||||||
|
min-width: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class="body"] .container {
|
||||||
|
width: 95% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class="body"] .row {
|
||||||
|
width: 100% !important;
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class="body"] .wrapper {
|
||||||
|
display: block !important;
|
||||||
|
padding-right: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class="body"] .columns,
|
||||||
|
table[class="body"] .column {
|
||||||
|
table-layout: fixed !important;
|
||||||
|
float: none !important;
|
||||||
|
width: 100% !important;
|
||||||
|
padding-right: 0px !important;
|
||||||
|
padding-left: 0px !important;
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class="body"] .wrapper.first .columns,
|
||||||
|
table[class="body"] .wrapper.first .column {
|
||||||
|
display: table !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class="body"] table.columns td,
|
||||||
|
table[class="body"] table.column td {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class="body"] .columns td.one,
|
||||||
|
table[class="body"] .column td.one { width: 8.333333% !important; }
|
||||||
|
table[class="body"] .columns td.two,
|
||||||
|
table[class="body"] .column td.two { width: 16.666666% !important; }
|
||||||
|
table[class="body"] .columns td.three,
|
||||||
|
table[class="body"] .column td.three { width: 25% !important; }
|
||||||
|
table[class="body"] .columns td.four,
|
||||||
|
table[class="body"] .column td.four { width: 33.333333% !important; }
|
||||||
|
table[class="body"] .columns td.five,
|
||||||
|
table[class="body"] .column td.five { width: 41.666666% !important; }
|
||||||
|
table[class="body"] .columns td.six,
|
||||||
|
table[class="body"] .column td.six { width: 50% !important; }
|
||||||
|
table[class="body"] .columns td.seven,
|
||||||
|
table[class="body"] .column td.seven { width: 58.333333% !important; }
|
||||||
|
table[class="body"] .columns td.eight,
|
||||||
|
table[class="body"] .column td.eight { width: 66.666666% !important; }
|
||||||
|
table[class="body"] .columns td.nine,
|
||||||
|
table[class="body"] .column td.nine { width: 75% !important; }
|
||||||
|
table[class="body"] .columns td.ten,
|
||||||
|
table[class="body"] .column td.ten { width: 83.333333% !important; }
|
||||||
|
table[class="body"] .columns td.eleven,
|
||||||
|
table[class="body"] .column td.eleven { width: 91.666666% !important; }
|
||||||
|
table[class="body"] .columns td.twelve,
|
||||||
|
table[class="body"] .column td.twelve { width: 100% !important; }
|
||||||
|
|
||||||
|
table[class="body"] td.offset-by-one,
|
||||||
|
table[class="body"] td.offset-by-two,
|
||||||
|
table[class="body"] td.offset-by-three,
|
||||||
|
table[class="body"] td.offset-by-four,
|
||||||
|
table[class="body"] td.offset-by-five,
|
||||||
|
table[class="body"] td.offset-by-six,
|
||||||
|
table[class="body"] td.offset-by-seven,
|
||||||
|
table[class="body"] td.offset-by-eight,
|
||||||
|
table[class="body"] td.offset-by-nine,
|
||||||
|
table[class="body"] td.offset-by-ten,
|
||||||
|
table[class="body"] td.offset-by-eleven {
|
||||||
|
padding-left: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class="body"] table.columns td.expander {
|
||||||
|
width: 1px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class="body"] .right-text-pad,
|
||||||
|
table[class="body"] .text-pad-right {
|
||||||
|
padding-left: 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class="body"] .left-text-pad,
|
||||||
|
table[class="body"] .text-pad-left {
|
||||||
|
padding-right: 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class="body"] .hide-for-small,
|
||||||
|
table[class="body"] .show-for-desktop {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class="body"] .show-for-small,
|
||||||
|
table[class="body"] .hide-for-desktop {
|
||||||
|
display: inherit !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<style>
|
||||||
|
|
||||||
|
table.facebook td {
|
||||||
|
background: #3b5998;
|
||||||
|
border-color: #2d4473;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.facebook:hover td {
|
||||||
|
background: #2d4473 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.twitter td {
|
||||||
|
background: #00acee;
|
||||||
|
border-color: #0087bb;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.twitter:hover td {
|
||||||
|
background: #0087bb !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.google-plus td {
|
||||||
|
background-color: #DB4A39;
|
||||||
|
border-color: #CC0000;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.google-plus:hover td {
|
||||||
|
background: #CC0000 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.template-label {
|
||||||
|
color: #ffffff;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.callout .wrapper {
|
||||||
|
padding-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.callout .panel {
|
||||||
|
background: #ECF8FF;
|
||||||
|
border-color: #b9e5ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
background: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer .wrapper {
|
||||||
|
background: #ebebeb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer h5 {
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.columns .text-pad {
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.columns .left-text-pad {
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.columns .right-text-pad {
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 600px) {
|
||||||
|
|
||||||
|
table[class="body"] .right-text-pad {
|
||||||
|
padding-left: 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table[class="body"] .left-text-pad {
|
||||||
|
padding-right: 10px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<table class="body">
|
||||||
|
<tr>
|
||||||
|
<td class="center" align="center" valign="top">
|
||||||
|
<center>
|
||||||
|
|
||||||
|
<table class="row header">
|
||||||
|
<tr>
|
||||||
|
<td class="center" align="center">
|
||||||
|
<center>
|
||||||
|
|
||||||
|
<table class="container">
|
||||||
|
<tr>
|
||||||
|
<td class="wrapper last">
|
||||||
|
|
||||||
|
<table class="twelve columns">
|
||||||
|
<tr>
|
||||||
|
<td class="six sub-columns center">
|
||||||
|
<img src="http://docs.grafana.org/img/logo_transparent_200x75.png" style="width: 150px; float: none; display: inline">
|
||||||
|
</td>
|
||||||
|
<td class="expander"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</center>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table class="container">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
<table class="row">
|
||||||
|
<tr>
|
||||||
|
<td class="wrapper last">
|
||||||
|
|
||||||
|
<table class="twelve columns">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h1>You're invited to sign up to Grafana and join {{.OrgName}}</h1>
|
||||||
|
</td>
|
||||||
|
<td class="expander"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table class="row">
|
||||||
|
<tr>
|
||||||
|
<td class="wrapper last">
|
||||||
|
<table class="twelve columns">
|
||||||
|
<tr>
|
||||||
|
<td class="center">
|
||||||
|
<table class="button radius">
|
||||||
|
<tbody><tr>
|
||||||
|
<td>
|
||||||
|
<a href="{{.LinkUrl}}">Complete Sign Up</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody></table>
|
||||||
|
</td>
|
||||||
|
<td class="expander"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!-- container end below -->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</center>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user