mirror of
https://github.com/penpot/penpot.git
synced 2026-09-19 02:16:14 +00:00
Move SPA routing out of the URL fragment into the normal query string. The screen travels in a reserved `screen` key holding the route name (`?screen=workspace&team-id=…`); every other param keeps its name. `rt/nav` and `rt/resolve` keep their signatures. This deletes the fragment-mirroring URL surgery, simplifies link-preview (the server sees everything) and nginx (single path, no SPA fallback rules needed), and migrates OIDC redirects, email links, e2e helpers and plugin test utils to the new format. Legacy `#/…` URLs translate client-side for one Penpot version (`legacy-routes`, marked TODO(next-version)); non-SPA paths are untouched. AI-assisted-by: muse-spark-1.3-contributor
253 lines
9.2 KiB
HTML
253 lines
9.2 KiB
HTML
<!doctype html>
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"
|
|
xmlns:o="urn:schemas-microsoft-com:office:office">
|
|
|
|
<head>
|
|
<title>
|
|
</title>
|
|
<!--[if !mso]><!-- -->
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<!--<![endif]-->
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<style type="text/css">
|
|
#outlook a {
|
|
padding: 0;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
padding: 0;
|
|
-webkit-text-size-adjust: 100%;
|
|
-ms-text-size-adjust: 100%;
|
|
}
|
|
|
|
table,
|
|
td {
|
|
border-collapse: collapse;
|
|
mso-table-lspace: 0pt;
|
|
mso-table-rspace: 0pt;
|
|
}
|
|
|
|
img {
|
|
border: 0;
|
|
height: auto;
|
|
line-height: 100%;
|
|
outline: none;
|
|
text-decoration: none;
|
|
-ms-interpolation-mode: bicubic;
|
|
}
|
|
|
|
p {
|
|
display: block;
|
|
margin: 13px 0;
|
|
}
|
|
</style>
|
|
<!--[if mso]>
|
|
<xml>
|
|
<o:OfficeDocumentSettings>
|
|
<o:AllowPNG/>
|
|
<o:PixelsPerInch>96</o:PixelsPerInch>
|
|
</o:OfficeDocumentSettings>
|
|
</xml>
|
|
<![endif]-->
|
|
<!--[if lte mso 11]>
|
|
<style type="text/css">
|
|
.mj-outlook-group-fix { width:100% !important; }
|
|
</style>
|
|
<![endif]-->
|
|
<!--[if !mso]><!-->
|
|
<link href="https://fonts.googleapis.com/css?family=Source%20Sans%20Pro" rel="stylesheet" type="text/css">
|
|
<style type="text/css">
|
|
@import url(https://fonts.googleapis.com/css?family=Source%20Sans%20Pro);
|
|
</style>
|
|
<!--<![endif]-->
|
|
<style type="text/css">
|
|
@media only screen and (min-width:480px) {
|
|
.mj-column-per-100 {
|
|
width: 100% !important;
|
|
max-width: 100%;
|
|
}
|
|
|
|
.mj-column-px-425 {
|
|
width: 425px !important;
|
|
max-width: 425px;
|
|
}
|
|
}
|
|
</style>
|
|
<style type="text/css">
|
|
@media only screen and (max-width:480px) {
|
|
table.mj-full-width-mobile {
|
|
width: 100% !important;
|
|
}
|
|
|
|
td.mj-full-width-mobile {
|
|
width: auto !important;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body style="background-color:#E5E5E5;">
|
|
<div style="background-color:#E5E5E5;">
|
|
<!--[if mso | IE]>
|
|
<table
|
|
align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
|
|
>
|
|
<tr>
|
|
<td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
|
|
<![endif]-->
|
|
<div style="margin:0px auto;max-width:600px;">
|
|
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%;">
|
|
<tbody>
|
|
<tr>
|
|
<td style="direction:ltr;font-size:0px;padding:0;text-align:center;">
|
|
<!--[if mso | IE]>
|
|
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
|
|
|
<tr>
|
|
|
|
<td
|
|
class="" style="vertical-align:top;width:600px;"
|
|
>
|
|
<![endif]-->
|
|
<div class="mj-column-per-100 mj-outlook-group-fix"
|
|
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;"
|
|
width="100%">
|
|
<tr>
|
|
<td align="left" style="font-size:0px;padding:16px;word-break:break-word;">
|
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
|
style="border-collapse:collapse;border-spacing:0px;">
|
|
<tbody>
|
|
<tr>
|
|
<td style="width:97px;">
|
|
<img height="32" src="{{ public-uri }}/images/email/logo-penpot.svg"
|
|
style="border:0;display:block;outline:none;text-decoration:none;height:32px;width:100%;font-size:13px;"
|
|
width="97" />
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<!--[if mso | IE]>
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</table>
|
|
<![endif]-->
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!--[if mso | IE]>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<table
|
|
align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
|
|
>
|
|
<tr>
|
|
<td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
|
|
<![endif]-->
|
|
<div style="background:#FFFFFF;background-color:#FFFFFF;margin:0px auto;max-width:600px;">
|
|
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
|
style="background:#FFFFFF;background-color:#FFFFFF;width:100%;">
|
|
<tbody>
|
|
<tr>
|
|
<td style="direction:ltr;font-size:0px;padding:20px 0;text-align:center;">
|
|
<!--[if mso | IE]>
|
|
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
|
|
|
<tr>
|
|
|
|
<td
|
|
class="" style="vertical-align:top;width:600px;"
|
|
>
|
|
<![endif]-->
|
|
<div class="mj-column-per-100 mj-outlook-group-fix"
|
|
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;"
|
|
width="100%">
|
|
<tr>
|
|
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
|
<div
|
|
style="font-family:Source Sans Pro, sans-serif;font-size:24px;font-weight:600;line-height:150%;text-align:left;color:#000000;">
|
|
Hello!</div>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
|
<div
|
|
style="font-family:Source Sans Pro, sans-serif;font-size:16px;line-height:150%;text-align:left;color:#000000;">
|
|
<p>
|
|
{{requested-by|abbreviate:25}} ({{requested-by-email}}) wants to have access to the
|
|
“{{team-name|abbreviate:25}}” Team.
|
|
</p>
|
|
<p>
|
|
To provide access, please click the button below:
|
|
</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="center" vertical-align="middle"
|
|
style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
|
style="border-collapse:separate;line-height:100%;">
|
|
<tr>
|
|
<td align="center" bgcolor="#6911d4" role="presentation"
|
|
style="border:none;border-radius:8px;cursor:auto;mso-padding-alt:10px 25px;background:#6911d4;"
|
|
valign="middle">
|
|
<a href="{{ public-uri }}/?screen=dashboard-members&team-id={{team-id}}&invite-email={{requested-by-email|urlescape}}"
|
|
style="display:inline-block;background:#6911d4;color:#FFFFFF;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:8px;"
|
|
target="_blank"> GIVE ACCESS TO “{{team-name|abbreviate:25}}” TEAM </a>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
|
<div
|
|
style="font-family:Source Sans Pro, sans-serif;font-size:16px;line-height:150%;text-align:left;color:#000000;">
|
|
<p>If you do not wish to grant access at this time, you can simply disregard this email.</p>
|
|
<p>Thank you</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
|
<div
|
|
style="font-family:Source Sans Pro, sans-serif;font-size:16px;line-height:150%;text-align:left;color:#000000;">
|
|
The Penpot team.</div>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<!--[if mso | IE]>
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
</table>
|
|
<![endif]-->
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
{% include "app/email/includes/footer.html" %}
|
|
|
|
</div>
|
|
</body>
|
|
|
|
</html>
|