mirror of
https://github.com/penpot/penpot.git
synced 2026-09-18 18:06: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
258 lines
9.5 KiB
HTML
258 lines
9.5 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 {{name|abbreviate:25}}!</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;">
|
|
We received a request to change your current email to {{ pending-email }}.</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;">
|
|
Click the link below to confirm the change.</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="#31EFB8" role="presentation"
|
|
style="border:none;border-radius:3px;cursor:auto;mso-padding-alt:10px 25px;background:#31EFB8;"
|
|
valign="middle">
|
|
<a href="{{ public-uri }}/?screen=auth-verify-token&token={{token}}"
|
|
style="display:inline-block;background:#31EFB8;color:#1F1F1F;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:3px;"
|
|
target="_blank"> Confirm email change </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;">
|
|
If you did not request this change, consider changing your password for security reasons.</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;">
|
|
Enjoy!</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>
|