New Website: Phase I (#357)

* Initial commit; starting new design

Dropdown menu

* Begin docs layout of new design

* Get themes under control; button hover splash

* Some basic responsiveness

* Finish responsive layout; several bug fixes

* Avoid flash during color scheme change

* Begin building top of homepage

* docs: Start building quick-assist feature

* Work on homepage a little more

* Keep working on homepage

* More homepage progress

* Some sponsor SVGs

* Add sponsor features

* Implement basic Sponsor Experience box

* Reorganize some styles

* WIP sponsors page

* Start features page WIP

* Minor improvements

* Fix headings; work on features page

* WIP features page

* Continue work on marketing pages

* Continue work on features page

* More features WIP

* Continue features page...

* More work on features page

* Keeping going  :)

* Continue home and features pages

* More homepage/features content, screenshots, tweaks

* Minor fixes to features page

* Minor tweaks

* Work on testimonials

* Work on homepage more

* More homepage work

* Continue work on homepage

* Add some sponsor logos

* Some citation screenshots

* Add citations

* Start making homepage responsive

* Re-add cache busting

Fix docs

* Use markdown syntax highlighting on frontpage

* Rework AJQuery to $_ to not interfere with jQuery

* Rewrite quick assist with AlpineJS, use markdown for contents

* More work on marketing pages

* Rebase and fix code displays

* Syntax highlight on-demand example, fix rollover

* Adjust on-demand demo

* Work on responsiveness

* Keep working on responsiveness

* Mainly finish making design responsive

* Thiccer favicon

* More work on marketing pages

* Keep on going

* Fix link

* Move new site into src folder

* Add open graph image

* Add recorded demo for homepage

* Tweak caption

* Fix Poppins font for now

* Minor tweaks

* Trim demo ending

* Remove unfinished pages

Also update Framer logo

---------

Co-authored-by: Francis Lavoie <lavofr@gmail.com>
This commit is contained in:
Matt Holt 2023-12-11 10:07:34 -07:00 committed by GitHub
parent 5bb6d92c63
commit 07c51663ab
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
191 changed files with 13008 additions and 4970 deletions

View file

@ -0,0 +1,289 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html, body {
min-height: 100%;
}
html {
/* by setting the min-height of both html and body to 100%,
it ensures that flex items are centered on screen, but
also allows body to overflow screen height for tall content */
height: 100%;
}
body {
font: 16px sans-serif;
-webkit-font-smoothing: antialiased;
background: #e8ebf0;
display: flex;
}
a {
color: #2b9cff;
text-decoration: none;
}
a:hover {
color: #0f6ab9;
}
.card {
background: white;
margin: auto;
box-shadow: 0 20px 40px rgba(0, 0, 0, .1);
display: flex;
border-radius: 5px;
width: 100%;
max-width: 800px;
}
.card section {
padding: 50px;
text-align: center;
flex-grow: 1;
}
.card section.head {
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
flex-grow: 0;
background: #f3f7ff;
border-right: 1px solid #e8ebf0;
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
}
.card p {
margin: 0 auto;
max-width: 400px;
line-height: 1.25em;
font-size: 14px;
}
.card .logo {
width: 100%;
max-width: 100px;
display: block;
}
.card h1 {
font-size: 42px;
margin-bottom: 10px;
}
.form-fields {
padding: 20px 0;
}
input {
font-size: 16px;
font-family: 'PT Mono', 'Source Code Pro', monospace;
}
.card input,
.card button {
display: block;
margin: 1em auto;
padding: 8px;
}
.card input[type=text],
.card input[type=email],
.card input[type=password] {
width: 100%;
max-width: 400px;
}
.card button {
font-size: 16px;
font-weight: bold;
padding: 10px 20px;
}
@media (max-width: 800px) {
.card {
flex-direction: column;
}
}
.swal-content p {
margin: .5em 0;
}
#reset-password-step2 {
display: none;
}
.logo-container {
text-align: center;
margin: 20px auto;
}
.logo {
max-width: 100px;
}
.help {
border-bottom: 1px dotted #222;
cursor: help;
}
.beta {
font-size: 12px;
}
.container {
display: flex;
flex-grow: 1;
justify-content: space-between;
font-family: Maven Pro, sans-serif;
}
.container > nav {
background: #f8faff;
width: 25%;
max-width: 250px;
}
.container > nav ul {
list-style: none;
}
.container > nav ul a {
display: block;
padding: 10px 20px;
color: #546c75;
}
.container > nav ul a:hover {
color: #01324b;
background-color: #ebf3fb;
}
.container > nav ul a.current {
background-color: #e0ecfb;
font-weight: bold;
color: #01324b;
}
.container > main {
display: flex;
flex: 1;
align-items: center;
justify-content: center;
}
.container > main.dashboard {
align-items: flex-start;
justify-content: flex-start;
}
.container section {
background: white;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0, 0, 0, .08);
margin: 25px;
}
input[type=text],
input[type=email],
input[type=password] {
padding: 8px;
width: 100%;
max-width: 400px;
border: 1px solid #ccc;
}
form .field {
padding: 0 20px 20px;
max-width: 600px;
margin: 0 auto 20px auto;
border-bottom: 1px solid #eee;
}
form label b {
display: block;
margin-bottom: 10px;
}
form .description {
font-size: 14px;
color: #777;
margin-top: 5px;
}
form button,
form input[type=submit] {
font-size: 16px;
margin: 0 auto;
}
input[type=checkbox] {
cursor: pointer;
transform: scale(1.25);
}
section .pad {
margin: 15px 20px;
}
section button:not([type=submit]),
section .button:not([type=submit]) {
font-size: 14px;
padding: 6px 15px;
margin: auto;
}
section h1 {
font-size: 22px;
font-weight: normal;
}
table {
border-collapse: collapse;
}
tr {
border-bottom: 1px solid #ddd;
}
th,
td {
padding: 10px;
}
th {
background-color: #ebf3ff;
text-align: left;
}

View file

@ -0,0 +1,13 @@
input[name=path] {
font-size: 14px;
padding: 4px;
border-radius: 4px;
width: auto;
/* max-width: 450px; */
max-width: none;
}
a.disabled {
color: #aaa;
cursor: not-allowed;
}

View file

@ -0,0 +1,161 @@
/*
Derived from https://gist.github.com/nicolashery/5765395
Adjusted to be high-contrast
*/
/*
Solarized Light (High Contrast)
Derived from http://ethanschoonover.com/solarized
*/
.chroma {
background: linear-gradient(0deg, #f8fbfd 0%, #edf5fd 100%);
color: #254048;
}
.chroma .c { color: #93a1a1 } /* Comment */
.chroma .err { color: #586e75 } /* Error */
.chroma .g { color: #586e75 } /* Generic */
.chroma .k { color: #577b00 } /* Keyword */
.chroma .l { color: #586e75 } /* Literal */
.chroma .n { color: #586e75 } /* Name */
.chroma .o { color: #577b00 } /* Operator */
.chroma .x { color: #d03d00 } /* Other */
.chroma .p { color: #586e75 } /* Punctuation */
.chroma .cm { color: #93a1a1 } /* Comment.Multiline */
.chroma .cp { color: #577b00 } /* Comment.Preproc */
.chroma .c1 { color: #93a1a1 } /* Comment.Single */
.chroma .cs { color: #577b00 } /* Comment.Special */
.chroma .gd { color: #dc322f; background-color: #efdede } /* Generic.Deleted */
.chroma .ge { color: #586e75; font-style: italic } /* Generic.Emph */
.chroma .gr { color: #dc322f } /* Generic.Error */
.chroma .gh { color: #d03d00 } /* Generic.Heading */
.chroma .gi { color: #577b00; background-color: #ddecdc } /* Generic.Inserted */
.chroma .go { color: #586e75 } /* Generic.Output */
.chroma .gp { color: #586e75 } /* Generic.Prompt */
.chroma .gs { color: #586e75; font-weight: bold } /* Generic.Strong */
.chroma .gu { color: #d03d00 } /* Generic.Subheading */
.chroma .gt { color: #586e75 } /* Generic.Traceback */
.chroma .kc { color: #d03d00 } /* Keyword.Constant */
.chroma .kd { color: #0673bf } /* Keyword.Declaration */
.chroma .kn { color: #577b00 } /* Keyword.Namespace */
.chroma .kp { color: #577b00 } /* Keyword.Pseudo */
.chroma .kr { color: #0673bf } /* Keyword.Reserved */
.chroma .kt { color: #dc322f } /* Keyword.Type */
.chroma .ld { color: #586e75 } /* Literal.Date */
.chroma .m { color: #008076 } /* Literal.Number */
.chroma .s { color: #008076 } /* Literal.String */
.chroma .na { color: #586e75 } /* Name.Attribute */
.chroma .nb { color: #B58900 } /* Name.Builtin */
.chroma .nc { color: #0673bf } /* Name.Class */
.chroma .no { color: #d03d00 } /* Name.Constant */
.chroma .nd { color: #0673bf } /* Name.Decorator */
.chroma .ni { color: #d03d00 } /* Name.Entity */
.chroma .ne { color: #d03d00 } /* Name.Exception */
.chroma .nf { color: #0673bf } /* Name.Function */
.chroma .nl { color: #586e75 } /* Name.Label */
.chroma .nn { color: #586e75 } /* Name.Namespace */
.chroma .nx { color: #586e75 } /* Name.Other */
.chroma .py { color: #586e75 } /* Name.Property */
.chroma .nt { color: #0673bf } /* Name.Tag */
.chroma .nv { color: #0673bf } /* Name.Variable */
.chroma .ow { color: #577b00 } /* Operator.Word */
.chroma .w { color: #586e75 } /* Text.Whitespace */
.chroma .mf { color: #008076 } /* Literal.Number.Float */
.chroma .mh { color: #008076 } /* Literal.Number.Hex */
.chroma .mi { color: #008076 } /* Literal.Number.Integer */
.chroma .mo { color: #008076 } /* Literal.Number.Oct */
.chroma .sb { color: #93a1a1 } /* Literal.String.Backtick */
.chroma .sc { color: #008076 } /* Literal.String.Char */
.chroma .sd { color: #586e75 } /* Literal.String.Doc */
.chroma .s2 { color: #008076 } /* Literal.String.Double */
.chroma .se { color: #d03d00 } /* Literal.String.Escape */
.chroma .sh { color: #586e75 } /* Literal.String.Heredoc */
.chroma .si { color: #008076 } /* Literal.String.Interpol */
.chroma .sx { color: #008076 } /* Literal.String.Other */
.chroma .sr { color: #dc322f } /* Literal.String.Regex */
.chroma .s1 { color: #008076 } /* Literal.String.Single */
.chroma .ss { color: #008076 } /* Literal.String.Symbol */
.chroma .bp { color: #0673bf } /* Name.Builtin.Pseudo */
.chroma .vc { color: #0673bf } /* Name.Variable.Class */
.chroma .vg { color: #0673bf } /* Name.Variable.Global */
.chroma .vi { color: #0673bf } /* Name.Variable.Instance */
.chroma .il { color: #008076 } /* Literal.Number.Integer.Long */
@media (prefers-color-scheme: dark) {
/*
Solarized Dark (High Contrast)
Derived from http://ethanschoonover.com/solarized
*/
.chroma {
background: linear-gradient(0deg, #18384d 0%, #122537 100%);
color: #93a1a1;
}
.chroma .c { color: #586e75 } /* Comment */
.chroma .err { color: #93a1a1 } /* Error */
.chroma .g { color: #93a1a1 } /* Generic */
.chroma .k { color: #76a507 } /* Keyword */
.chroma .l { color: #93a1a1 } /* Literal */
.chroma .n { color: #93a1a1 } /* Name */
.chroma .o { color: #76a507 } /* Operator */
.chroma .x { color: #ec662e } /* Other */
.chroma .p { color: #93a1a1 } /* Punctuation */
.chroma .cm { color: #586e75 } /* Comment.Multiline */
.chroma .cp { color: #76a507 } /* Comment.Preproc */
.chroma .c1 { color: #586e75 } /* Comment.Single */
.chroma .cs { color: #76a507 } /* Comment.Special */
.chroma .gd { color: #dc322f; background-color: #efdede } /* Generic.Deleted */
.chroma .ge { color: #93a1a1; font-style: italic } /* Generic.Emph */
.chroma .gr { color: #dc322f } /* Generic.Error */
.chroma .gh { color: #ec662e } /* Generic.Heading */
.chroma .gi { color: #76a507 } /* Generic.Inserted */
.chroma .go { color: #93a1a1 } /* Generic.Output */
.chroma .gp { color: #93a1a1 } /* Generic.Prompt */
.chroma .gs { color: #93a1a1; font-weight: bold } /* Generic.Strong */
.chroma .gu { color: #ec662e } /* Generic.Subheading */
.chroma .gt { color: #93a1a1 } /* Generic.Traceback */
.chroma .kc { color: #ec662e } /* Keyword.Constant */
.chroma .kd { color: #0090f5 } /* Keyword.Declaration */
.chroma .kn { color: #76a507 } /* Keyword.Namespace */
.chroma .kp { color: #76a507 } /* Keyword.Pseudo */
.chroma .kr { color: #0090f5 } /* Keyword.Reserved */
.chroma .kt { color: #dc322f } /* Keyword.Type */
.chroma .ld { color: #93a1a1 } /* Literal.Date */
.chroma .m { color: #09a598 } /* Literal.Number */
.chroma .s { color: #09a598 } /* Literal.String */
.chroma .na { color: #93a1a1 } /* Name.Attribute */
.chroma .nb { color: #B58900 } /* Name.Builtin */
.chroma .nc { color: #0090f5 } /* Name.Class */
.chroma .no { color: #ec662e } /* Name.Constant */
.chroma .nd { color: #0090f5 } /* Name.Decorator */
.chroma .ni { color: #ec662e } /* Name.Entity */
.chroma .ne { color: #ec662e } /* Name.Exception */
.chroma .nf { color: #0090f5 } /* Name.Function */
.chroma .nl { color: #93a1a1 } /* Name.Label */
.chroma .nn { color: #93a1a1 } /* Name.Namespace */
.chroma .nx { color: #93a1a1 } /* Name.Other */
.chroma .py { color: #93a1a1 } /* Name.Property */
.chroma .nt { color: #0090f5 } /* Name.Tag */
.chroma .nv { color: #0090f5 } /* Name.Variable */
.chroma .ow { color: #76a507 } /* Operator.Word */
.chroma .w { color: #93a1a1 } /* Text.Whitespace */
.chroma .mf { color: #09a598 } /* Literal.Number.Float */
.chroma .mh { color: #09a598 } /* Literal.Number.Hex */
.chroma .mi { color: #09a598 } /* Literal.Number.Integer */
.chroma .mo { color: #09a598 } /* Literal.Number.Oct */
.chroma .sb { color: #586e75 } /* Literal.String.Backtick */
.chroma .sc { color: #09a598 } /* Literal.String.Char */
.chroma .sd { color: #93a1a1 } /* Literal.String.Doc */
.chroma .s2 { color: #09a598 } /* Literal.String.Double */
.chroma .se { color: #ec662e } /* Literal.String.Escape */
.chroma .sh { color: #93a1a1 } /* Literal.String.Heredoc */
.chroma .si { color: #09a598 } /* Literal.String.Interpol */
.chroma .sx { color: #09a598 } /* Literal.String.Other */
.chroma .sr { color: #dc322f } /* Literal.String.Regex */
.chroma .s1 { color: #09a598 } /* Literal.String.Single */
.chroma .ss { color: #09a598 } /* Literal.String.Symbol */
.chroma .bp { color: #0090f5 } /* Name.Builtin.Pseudo */
.chroma .vc { color: #0090f5 } /* Name.Variable.Class */
.chroma .vg { color: #0090f5 } /* Name.Variable.Global */
.chroma .vi { color: #0090f5 } /* Name.Variable.Instance */
.chroma .il { color: #09a598 } /* Literal.Number.Integer.Long */
}

View file

@ -0,0 +1,283 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Inter, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
tab-size: 4;
-moz-tab-size: 4;
}
.wrapper {
max-width: 1400px;
margin-left: auto;
margin-right: auto;
padding-left: 40px;
padding-right: 40px;
}
.text-center {
text-align: center;
}
.text-right {
text-align: right;
}
.float-right {
float: right;
}
a {
color: #0694f1;
text-decoration: none;
}
a:hover {
color: #ff3f2c;
}
header {
display: flex;
justify-content: space-between;
padding: 25px 0;
}
#logo-container {
display: flex;
flex-direction: column;
align-items: flex-end;
}
#logo {
height: 50px;
}
#zerossl-project {
font-size: 12px;
margin-top: -5px;
}
#zerossl-logo {
height: 1.5em;
vertical-align: middle;
}
header nav {
text-align: right;
line-height: 40px;
}
header nav > a {
display: inline-block;
padding-left: 12px;
padding-right: 12px;
text-decoration: none;
color: inherit;
}
header nav > a:hover {
color: #ff3f2c;
}
header nav > a.current {
font-weight: bold;
}
/* Algolia DocSearch */
#search {
display: inline-block;
vertical-align: middle;
}
.DocSearch-Container {
color: initial;
}
.DocSearch-Footer {
margin-top: 0;
}
/* End Algolia DocSearch */
header nav .new {
background-color: #ffe300;
font-size: 75%;
vertical-align: top;
padding: 4px 8px;
border-radius: 1em;
}
header nav .button {
margin: 0 0 0 10px;
padding-top: 2px;
padding-bottom: 2px;
}
button,
.button {
border-radius: 2em;
padding: 10px 20px;
margin: 15px 0;
height: auto;
transition: all .2s;
text-decoration: none;
display: inline-block;
border: 0;
cursor: pointer;
}
button:hover,
.button:hover {
transform: scale(1.05);
}
button:active,
.button:active {
transform: translateY(2px);
}
button.red,
.button.red {
background-color: #d9552b;
color: white;
}
button.red:hover,
.button.red:hover {
background-color: #fd511a;
}
button.blue,
.button.blue {
background-color: #0082d0;
color: white;
}
button.blue:hover,
.button.blue:hover {
background-color: #00aaff;
}
button.gray,
.button.gray {
background-color: #4c6a79;
color: white;
}
button.gray:hover,
.button.gray:hover {
background-color: #4f8098;
}
button.big,
.button.big {
font-size: 125%;
text-transform: uppercase;
font-weight: bold;
padding: 20px 50px;
margin-right: 20px;
}
button.disabled,
.button.disabled,
button:disabled,
.button:disabled {
background-color: #aaa !important;
color: white !important;
transform: none !important;
cursor: not-allowed;
}
p button,
p .button {
font-size: 18px;
padding: 12px 30px;
}
article a:hover {
text-decoration: underline;
}
pre,
code,
kbd {
font-family: 'PT Mono', 'Source Code Pro', monospace;
padding: 3px 6px;
font-size: 95%;
line-height: 1.5em;
}
kbd {
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
border: 1px solid rgba(255, 255, 255, 0.1);
font-size: 80%;
font-weight: bold;
}
footer {
display: flex;
justify-content: space-between;
margin-top: 100px;
padding-bottom: 100px;
line-height: 125%;
}
footer > div {
width: 50%;
}
#footer-logo {
float: left;
max-width: 150px;
margin-right: 35px;
vertical-align: middle;
margin-top: -4px;
}
.copyright {
text-align: right;
font-size: 14px;
color: #999;
}
@media (max-width: 900px) {
header {
flex-direction: column;
gap: 1em;
}
#logo-container {
align-items: center;
}
header nav {
text-align: center;
}
footer {
flex-direction: column;
margin-top: 0;
padding: 20px 0;
}
footer > div {
width: initial;
text-align: center;
margin: 10px 0;
}
#footer-logo {
float: none;
display: block;
margin: 0 auto 25px;
}
.copyright {
text-align: center;
}
}

View file

@ -0,0 +1,32 @@
article {
padding-top: 0 !important;
}
article h1 {
padding-top: 8%;
}
.renderbox {
border-radius: 0;
font-size: 20px;
line-height: 1.6em;
}
.toggle-obj {
padding: 0 .5em;
visibility: hidden;
}
.group:hover > .toggle-obj {
visibility: visible;
}
.collapsed {
display: none;
}
@media (prefers-color-scheme: dark) {
pre > code.json {
background-color: #07212b;
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,298 @@
body {
background-color: #f0f6f9;
}
.notice {
border: 1px solid hsl(42.1, 100%, 46.7%);
line-height: 1.5;
background: hsl(23.2, 100%, 93.9%);
border-radius: 5px;
padding: 1em 2em;
}
.notice code {
padding: 0
}
.download-bar {
display: flex;
justify-content: space-between;
background: white;
border-radius: 4px;
box-shadow: 0 3px 6px rgba(0, 0, 0, .1);
font-size: 20px;
margin-top: 20px;
position: sticky; /* uwu 💓 */
top: 0;
z-index: 1;
}
.download-bar > * {
padding: 15px;
display: flex;
align-items: center;
}
#platform {
padding: 5px 15px;
font-size: 16px;
}
#download {
margin: 0;
padding-left: 30px;
padding-right: 30px;
font-weight: bold;
}
#filter {
margin-top: 1em;
width: 100%;
padding: 15px;
font-size: 24px;
text-align: center;
border: 0;
border-bottom: 1px solid #ccc;
outline: none;
}
#filter.found {
color: green;
}
#filter.not-found {
color: #cc0000;
}
.warning {
margin-top: 20px;
display: inline-block;
font-size: 14px;
font-weight: bold;
padding: 5px 15px;
border-radius: 1em;
color: rgb(255, 208, 0);
background: #333;
}
#darwin-warning {
display: none;
}
input:disabled,
select:disabled,
#optional-packages.disabled {
cursor: not-allowed !important;
}
.loader {
display: inline-block;
font-size: 10px;
text-indent: -9999em;
width: 20px;
height: 20px;
border-radius: 50%;
background: #aaa;
background: -moz-linear-gradient(left, #aaa 10%, rgba(255, 255, 255, 0) 42%);
background: -webkit-linear-gradient(left, #aaa 10%, rgba(255, 255, 255, 0) 42%);
background: -o-linear-gradient(left, #aaa 10%, rgba(255, 255, 255, 0) 42%);
background: -ms-linear-gradient(left, #aaa 10%, rgba(255, 255, 255, 0) 42%);
background: linear-gradient(to right, #aaa 10%, rgba(255, 255, 255, 0) 42%);
animation: load3 1.4s infinite linear;
transform: translateZ(0);
vertical-align: middle;
margin-right: .5em;
margin-top: -2px;
}
#signature .loader {
width: 12px;
height: 12px;
}
.loader:before {
width: 50%;
height: 50%;
background: #fff;
border-radius: 100% 0 0 0;
position: absolute;
top: 0;
left: 0;
content: '';
}
.loader:after {
background: #aaa;
width: 75%;
height: 75%;
border-radius: 50%;
content: '';
margin: auto;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
@-webkit-keyframes load3 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes load3 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
#optional-packages {
margin-top: 2em;
}
.package {
display: flex;
padding: 2em;
background: rgba(255, 255, 255, .4);
border: 10px solid transparent;
box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
cursor: pointer;
transition: all 200ms ease-out;
}
.package:hover {
transform: scale(1.02);
background: #fff;
box-shadow: 0 2px 20px -2px rgba(0, 0, 0, .05);
}
.package.selected {
border-color: rgb(25, 97, 192);
background: #fff;
}
.package-icon {
font-size: 48px;
margin-right: 20px;
}
.package-data {
flex-grow: 1;
}
.package-meta {
float: right;
font-size: 14px;
}
.package-downloads {
margin-right: 1em;
}
.package-version-input {
text-align: center;
max-width: 75px;
padding: 4px;
margin-left: 5px;
border-radius: 5px;
border: 1px solid #aaa;
outline: none;
}
.package-link {
font-size: 20px;
font-weight: bold;
color: inherit;
word-break: break-all;
}
.package-host {
font-size: 14px;
}
.package-modules {
margin-top: 1em;
}
.package-no-modules {
font-style: italic;
color: #555;
font-size: 14px;
}
.module {
margin: 10px 0;
word-wrap: break-word;
}
.module-link {
font-weight: bold;
font-family: 'PT Mono', monospace;
}
.module-desc {
font-size: 14px;
margin-left: 1em;
}
.swal-custom-content {
text-align: left;
}
.swal-custom-content ol {
margin: 1em 0 1em 2em;
}
.swal-custom-content li {
margin-bottom: 10px;
}
@media (max-width: 860px) {
.download-bar {
flex-direction: column;
align-items: center;
}
}
@media (max-width: 600px) {
.download-bar {
font-size: inherit;
}
.download-bar > * {
padding: 5px;
}
}

View file

@ -0,0 +1,334 @@
body {
font-family: 'Inter', sans-serif;
}
.hero {
background-image: url('/resources/images/bg-teal.jpg');
background-repeat: no-repeat;
background-size: cover;
padding-bottom: 100px;
background-position: center;
}
h1 {
text-transform: uppercase;
font-size: 70px;
font-family: Montserrat, sans-serif;
text-align: center;
margin: 70px 0 20px;
}
h2 {
font-size: 28px;
font-weight: normal;
text-align: center;
max-width: 60rem;
margin: 0 auto 50px;
line-height: 1.5em;
}
h3 {
font-family: Montserrat, sans-serif;
font-weight: 400;
font-size: 55px;
}
p {
font-size: 20px;
max-width: 600px;
margin-top: 20px;
line-height: 1.5em;
}
.download-container {
text-align: center;
margin-top: 50px;
}
.download-container .button.big {
margin-bottom: 15px;
}
section {
padding: 100px 0;
}
section.alternate:nth-child(even) {
background-color: #f5f8f9;
}
section.alternate:nth-child(odd) .side-by-side {
flex-direction: row-reverse;
}
.side-by-side {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.side-by-side > * {
width: 48%;
}
.side-by-side img {
max-height: 400px;
}
.code-caption {
font-size: 24px;
font-weight: bold;
margin: 75px auto 20px;
}
code {
font-family: 'PT Mono', monospace;
}
code.block {
display: block;
background: #2f2f2f;
color: #eee;
font-size: 20px;
padding-top: 30px;
padding-bottom: 30px;
line-height: 1.25em;
white-space: pre-wrap;
}
.actions {
padding-top: 100px;
}
code.caddyfile {
background-color: #dbebf3;
color: black;
}
.cf-key {
color: #d22500;
font-weight: bold;
}
.cf-comment {
color: #7291a0;
}
.cf-dir {
color: #006c96;
font-weight: bold;
}
.cf-arg {
color: #008000;
}
.cf-subdir {
color: #835234;
}
code.rest {
background-color: #f0f5f4; /*#073d59;*/
color: #253a28;
}
.footnote {
font-size: 18px;
text-align: center;
}
@media (max-width: 1100px) {
.side-by-side,
section.alternate:nth-child(odd) .side-by-side {
flex-direction: column;
}
section.alternate:nth-child(odd) .side-by-side > img {
flex-direction: column-reverse;
margin-bottom: 50px;
}
.side-by-side-content {
margin-bottom: 50px;
}
.side-by-side > * {
width: initial;
}
p {
max-width: 900px;
}
}
@media (max-width: 900px) {
h1 {
font-size: 50px;
word-wrap: break-word;
}
h2 {
font-size: 24px;
}
}
/* TODO: */
/* TAKEN FROM features.css */
.features-start {
background: linear-gradient(0deg, #13a8f5 0%, #18b125 100%);
color: white;
padding: 35px 0;
}
.main-features {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
padding-top: 2rem;
}
.main-feature {
text-align: center;
padding: 0 2rem;
margin: 3rem 0;
width: 25%;
}
.main-feature img {
height: 130px;
margin-bottom: 15px;
}
.main-feature .title {
font-size: 24px;
font-weight: bold;
margin-bottom: 15px;
}
.main-feature p {
text-align: left;
font-size: 16px;
margin: 0;
}
.feature-points {
display: flex;
justify-content: space-around;
flex-wrap: wrap;
font-size: 28px;
}
.feature-point {
width: 33.333%;
min-width: 300px;
padding: 1rem 3rem;
}
#features-title {
width: 80%;
max-width: 700px;
display: block;
margin: 50px auto 0;
position: relative;
top: 40px;
}
.features-area h3 {
border-bottom: 3px solid #2BABED;
}
.features-area h4 {
text-align: center;
padding-top: 80px;
padding-bottom: 40px;
font-family: Montserrat, sans-serif;
font-size: 40px;
}
.features-area h5 {
font-size: 18px;
text-transform: uppercase;
letter-spacing: 1px;
}
.section-heading {
font-style: italic;
font-size: 20px;
line-height: 2rem;
color: #000;
max-width: 550px;
text-align: center;
margin: 2rem auto 0;
}
.features {
display: flex;
flex-wrap: wrap;
}
.feature {
width: 33.333%;
padding: 25px;
}
.feature p {
margin-top: 5px;
color: #333;
font-size: 18px;
}
@media (max-width: 900px) {
.main-feature {
width: 50%;
margin: 3rem 0;
padding: 0 1rem;
}
.feature {
width: 50%;
}
}
@media (max-width: 700px) {
.pitch {
width: 100%;
border-right: none;
}
.feature-highlight {
padding: 1rem;
}
}
@media (max-width: 500px) {
.main-feature {
width: 100%;
}
.feature {
width: 100%;
}
}

View file

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="-301 240.1 355.9 81.9" style="enable-background:new -301 240.1 355.9 81.9;" xml:space="preserve">
<style type="text/css">
.st0{fill:#27344A;}
.st1{fill:#0052CC;}
</style>
<g id="XMLID_37_">
<path id="XMLID_45_" class="st0" d="M-164.5,297.9c0-0.6-0.7-0.9-1.2-0.5c-0.2,0.2-0.4,0.4-0.7,0.6c-0.7,0.6-1.4,1.1-2.1,1.5
c-0.9,0.5-1.9,0.9-2.8,1.1c-1,0.2-2.1,0.4-3.2,0.4c-2.8,0-5.1-1-6.9-3c-1.9-2-2.8-4.6-2.8-7.8c0-2.5,0.5-4.6,1.4-6.2s2.3-2.9,4-3.8
s3.9-1.6,6.4-2c2.5-0.4,5.2-0.7,7.9-0.9v-0.2c0-1.9-0.7-3.2-2-3.9c-1.3-0.7-3.2-1.1-5.8-1.1c-1.5,0-3.2,0.3-4.9,1
c-1.7,0.6-3,1.1-3.7,1.5h-0.9v-7.8c0-0.3,0.2-0.6,0.5-0.7c1-0.3,2.4-0.6,4.3-0.9c2.2-0.4,4.4-0.6,6.6-0.6c5.3,0,9.1,1,11.4,2.9
s3.5,5,3.5,9.1v22.7c0,0.4-0.3,0.7-0.7,0.7h-7.8c-0.4,0-0.7-0.3-0.7-0.7v-1.4H-164.5z M-164.5,290.6v-6.1c0-0.4-0.4-0.8-0.8-0.7
c-1,0.1-2.1,0.3-3.3,0.4c-1.5,0.2-2.6,0.5-3.3,0.7c-0.9,0.3-1.6,0.9-2.1,1.5c-0.5,0.7-0.7,1.5-0.7,2.6c0,0.7,0.1,1.3,0.2,1.7
c0.1,0.4,0.4,0.9,0.8,1.3c0.4,0.4,0.9,0.7,1.4,0.9c0.5,0.2,1.4,0.3,2.6,0.3c0.9,0,1.9-0.2,2.8-0.7c0.9-0.4,1.6-0.9,2.3-1.6
C-164.6,291-164.5,290.8-164.5,290.6z"/>
<path id="XMLID_44_" class="st0" d="M-116.5,282.3c0,2.8-0.4,5.4-1.1,7.8c-0.7,2.3-1.7,4.3-2.9,5.8c-1.2,1.6-2.6,2.8-4.2,3.6
c-1.6,0.8-3.2,1.2-5,1.2c-1.6,0-3-0.2-4.2-0.6c-0.8-0.3-1.6-0.7-2.5-1.1c-0.5-0.3-1,0.1-1,0.6v12.3c0,0.4-0.3,0.7-0.7,0.7h-7.9
c-0.4,0-0.7-0.3-0.7-0.7v-45.6c0-0.4,0.3-0.7,0.7-0.7h7.9c0.4,0,0.7,0.3,0.7,0.7v1.3c0,0.6,0.7,0.9,1.2,0.5
c1.1-0.9,2.1-1.6,3.2-2.2c1.5-0.8,3.2-1.3,5.1-1.3c3.6,0,6.4,1.6,8.4,4.7C-117.5,272.5-116.5,276.8-116.5,282.3z M-126.1,282.5
c0-3.3-0.5-5.8-1.4-7.3c-1-1.5-2.5-2.3-4.6-2.3c-0.9,0-1.8,0.2-2.7,0.5c-0.8,0.3-1.6,0.7-2.3,1.1c-0.2,0.1-0.3,0.4-0.3,0.6v16.4
c0,0.3,0.2,0.6,0.4,0.7c0.5,0.2,1,0.3,1.5,0.4c0.7,0.1,1.4,0.1,2.1,0.1c2.5,0,4.3-0.9,5.5-2.6
C-126.7,288.4-126.1,285.9-126.1,282.5z"/>
<path id="XMLID_43_" class="st0" d="M-102.1,260.6h-6.1c-1,0-1.9-0.8-1.9-1.9v-4.6c0-1,0.8-1.9,1.9-1.9h6.1c1,0,1.9,0.8,1.9,1.9
v4.6C-100.3,259.8-101.1,260.6-102.1,260.6z M-101.2,300h-7.9c-0.4,0-0.7-0.3-0.7-0.7v-33c0-0.4,0.3-0.7,0.7-0.7h7.9
c0.4,0,0.7,0.3,0.7,0.7v33C-100.5,299.6-100.8,300-101.2,300z"/>
<path id="XMLID_42_" class="st0" d="M-83.2,300h-7.9c-0.4,0-0.7-0.3-0.7-0.7V253c0-0.4,0.3-0.7,0.7-0.7h7.9c0.4,0,0.7,0.3,0.7,0.7
v46.3C-82.5,299.6-82.8,300-83.2,300z"/>
<path id="XMLID_41_" class="st0" d="M-56.2,297.9c0-0.6-0.7-0.9-1.2-0.5c-0.2,0.2-0.4,0.4-0.7,0.6c-0.7,0.6-1.4,1.1-2.1,1.5
c-0.9,0.5-1.9,0.9-2.8,1.1c-1,0.2-2.1,0.4-3.2,0.4c-2.8,0-5.1-1-6.9-3c-1.9-2-2.8-4.6-2.8-7.8c0-2.5,0.5-4.6,1.4-6.2s2.3-2.9,4-3.8
s3.9-1.6,6.4-2c2.5-0.4,5.2-0.7,7.9-0.9v-0.2c0-1.9-0.7-3.2-2-3.9c-1.3-0.7-3.2-1.1-5.8-1.1c-1.5,0-3.2,0.3-4.9,1
c-1.7,0.6-3,1.1-3.7,1.5h-0.9v-7.8c0-0.3,0.2-0.6,0.5-0.7c1-0.3,2.4-0.6,4.3-0.9c2.2-0.4,4.4-0.6,6.6-0.6c5.3,0,9.1,1,11.4,2.9
s3.5,5,3.5,9.1v22.7c0,0.4-0.3,0.7-0.7,0.7h-7.8c-0.4,0-0.7-0.3-0.7-0.7v-1.4H-56.2z M-56.2,290.6v-6.1c0-0.4-0.4-0.8-0.8-0.7
c-1,0.1-2.1,0.3-3.3,0.4c-1.5,0.2-2.6,0.5-3.3,0.7c-0.9,0.3-1.6,0.9-2.1,1.5c-0.5,0.7-0.7,1.5-0.7,2.6c0,0.7,0.1,1.3,0.2,1.7
c0.1,0.4,0.4,0.9,0.8,1.3s0.9,0.7,1.4,0.9c0.5,0.2,1.4,0.3,2.6,0.3c0.9,0,1.9-0.2,2.8-0.7c0.9-0.4,1.6-0.9,2.3-1.6
C-56.2,291-56.2,290.8-56.2,290.6z"/>
<path id="XMLID_40_" class="st0" d="M-24.7,285.6l5.8-19.5c0.1-0.3,0.4-0.5,0.7-0.5h8c0.5,0,0.8,0.5,0.7,0.9l-15.6,45.6
c-0.1,0.3-0.4,0.5-0.7,0.5h-8.6c-0.5,0-0.8-0.5-0.7-0.9l4.2-11.7c0.1-0.1,0.1-0.3,0-0.5l-10.9-33c-0.2-0.5,0.2-0.9,0.7-0.9h8.3
c0.3,0,0.6,0.2,0.7,0.5l6.1,19.5C-25.8,286.2-24.9,286.2-24.7,285.6z"/>
<path id="XMLID_39_" class="st0" d="M23.8,284.8H4c-0.4,0-0.8,0.4-0.7,0.8c0.3,2.3,1.1,4.1,2.5,5.4c1.6,1.4,3.9,2.1,7,2.1
c2,0,3.9-0.4,5.7-1.3c1.8-0.8,3.3-1.7,4.4-2.7h1v8.4c0,0.3-0.2,0.5-0.4,0.7c-1.9,0.9-3.8,1.6-5.5,2c-1.9,0.4-3.9,0.7-6.2,0.7
c-5.8,0-10.3-1.6-13.4-4.7s-4.6-7.5-4.6-13.3c0-5.7,1.5-10.2,4.4-13.5c2.9-3.3,7-5,12.1-5c4.7,0,8.3,1.4,10.6,4.2
c2.4,2.8,3.6,6.9,3.6,12.2v3.2C24.5,284.5,24.2,284.8,23.8,284.8z M14.5,278.3c0.4,0,0.7-0.3,0.7-0.7c-0.1-1.9-0.6-3.4-1.4-4.5
c-0.9-1.2-2.3-1.7-4.3-1.7c-1.8,0-3.3,0.6-4.4,1.7c-1,1-1.7,2.5-1.9,4.5c0,0.4,0.3,0.8,0.7,0.8L14.5,278.3L14.5,278.3z"/>
<path id="XMLID_38_" class="st0" d="M52.1,276.1h-0.8c-0.4-0.2-1-0.3-1.9-0.4s-1.6-0.1-2.2-0.1c-1.3,0-2.5,0.1-3.5,0.3
c-0.9,0.2-1.8,0.5-2.8,0.9c-0.3,0.1-0.5,0.4-0.5,0.7v21.9c0,0.4-0.3,0.7-0.7,0.7h-7.9c-0.4,0-0.7-0.3-0.7-0.7v-33
c0-0.4,0.3-0.7,0.7-0.7h7.9c0.4,0,0.7,0.3,0.7,0.7v2.7c0,0.6,0.7,0.9,1.2,0.5c1.5-1.4,2.9-2.4,4.1-3c1.5-0.7,2.9-1,4.2-1
c0.3,0,0.7,0,1.1,0s0.8,0.1,1.1,0.1L52.1,276.1L52.1,276.1z"/>
</g>
<g id="XMLID_7_">
<g id="XMLID_8_">
<path id="XMLID_9_" class="st1" d="M-220.8,294.3l-4,5.2c-1.7,2.2-4.3,3.5-7,3.5h-40.8l-15.1-35.9c-1.1-2.6-0.7-5.6,1-7.8l3.3-4.4
l16.5,39.4H-220.8z"/>
</g>
<path id="XMLID_1_" class="st1" d="M-220.3,288.4h-42.3l-15-35.8c-1.6-3.8,1.2-8,5.3-8h42.3l15,35.8
C-213.4,284.2-216.2,288.4-220.3,288.4z"/>
<g id="XMLID_10_">
<path id="XMLID_11_" class="st1" d="M-232,308.8l-4,5.2c-1.7,2.2-4.3,3.5-7,3.5h-35.5c-2.6,0-4.9-1.5-5.9-3.9l-13.5-32.4
c-1.2-2.9-0.8-6.3,1.1-8.8l3-3.9l16.9,40.3H-232z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Left_Breast_Front" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 288 288" style="enable-background:new 0 0 288 288;" xml:space="preserve">
<g>
<g>
<g>
<path style="fill:#EFEFEF;" d="M260.018,146.793H27.982c-2.338,0-4.148,2.098-3.863,4.476l7.531,62.774
c0.24,2,1.897,3.502,3.863,3.502h217.592c1.98,0,3.645-1.524,3.867-3.541l6.914-62.774
C264.146,148.864,262.341,146.793,260.018,146.793z"/>
<path style="fill:#EFEFEF;" d="M73.89,137.309h140.582l8.71-40.634c0.13-0.547-0.079-1.119-0.53-1.455l-76.936-57.175
c-0.115-0.085-0.24-0.158-0.375-0.203c-0.372-0.125-0.764-0.19-1.159-0.19c-0.395,0-0.787,0.065-1.159,0.19
c-0.135,0.045-0.26,0.118-0.375,0.203L65.71,95.22c-0.452,0.336-0.66,0.908-0.531,1.455L73.89,137.309z"/>
</g>
<path style="fill:#F15825;" d="M64.921,137.309L54.577,93.607c-0.147-0.621,0.09-1.27,0.602-1.65l87.262-64.848
c0.13-0.097,0.272-0.179,0.425-0.23c0.422-0.142,0.867-0.215,1.315-0.215c0.448,0,0.893,0.073,1.315,0.215
c0.153,0.052,0.295,0.133,0.425,0.23c4.308,3.202,78.509,58.344,87.264,64.851c0.512,0.381,0.746,1.028,0.599,1.649
l-10.344,43.702h16.425l11.896-50.257c0.147-0.621-0.09-1.27-0.602-1.65l-96.835-71.963c-0.059-0.044-0.12-0.084-0.184-0.121
c-3.086-1.759-6.522-2.639-9.958-2.639s-6.872,0.88-9.958,2.639c-0.064,0.036-0.125,0.077-0.184,0.121L37.203,85.402
c-0.512,0.381-0.749,1.029-0.602,1.65l11.896,50.257H64.921z"/>
<path style="fill:#F15825;" d="M202.304,226.602l-2.16,9.124c-0.117,0.496-0.464,0.906-0.934,1.104l-54.409,22.947
c-0.397,0.167-0.845,0.167-1.242,0L89.15,236.83c-0.47-0.198-0.816-0.608-0.934-1.104l-2.16-9.124H69.632l4.899,20.699
c0.117,0.496,0.464,0.906,0.934,1.104l68.094,28.719c0.397,0.167,0.845,0.167,1.242,0l68.094-28.719
c0.47-0.198,0.816-0.608,0.934-1.104l4.899-20.699H202.304z"/>
<path style="fill:#EFEFEF;" d="M195.17,226.602l-1.648,5.682c-0.103,0.437-0.409,0.799-0.823,0.973l-47.971,19.593
c-0.35,0.148-0.745,0.148-1.095,0l-47.971-19.593c-0.414-0.175-0.72-0.536-0.823-0.973l-1.647-5.682H195.17z"/>
<g>
<path style="fill:#F15825;" d="M173.823,195.865l0.371,5.687h-2.763c-3.827,0-5.687-2.126-5.687-6.378v-31.995l4.731-1.222h0.903
v31.463c0,1.701,0.584,2.444,1.701,2.444H173.823z"/>
<path style="fill:#F15825;" d="M188.437,198.575c-1.063,2.232-2.126,2.71-4.73,2.71h-2.764c-3.561,0-5.314-2.073-5.314-6.431
v-3.88c0-3.986,1.754-6.059,5.314-6.059h7.016v-2.711c0-1.701-0.585-2.391-1.754-2.391h-2.764c-1.169,0-1.701,0.691-1.701,2.391
v0.478h-5.261v-2.232c0-4.146,1.754-6.325,5.314-6.325h6.112c3.827,0,5.687,2.126,5.687,6.378v20.781h-4.73L188.437,198.575z
M186.152,195.599c1.222,0,1.807-0.85,1.807-2.817v-2.604h-5.793c-0.797,0-1.329,0.903-1.329,2.445v0.903
c0,1.701,0.531,2.073,1.329,2.073H186.152z"/>
<path style="fill:#F15825;" d="M203.264,199.001v2.285h-5.687v-38.107l4.73-1.222h0.956v14.084
c1.222-1.435,2.71-1.914,4.624-1.914h2.338c3.88,0,5.74,2.286,5.74,6.697v13.34c0,4.73-1.967,7.122-6.165,7.122h-1.914
C205.337,201.286,204.008,200.648,203.264,199.001z M203.264,192.888c0.053,2.02,0.797,2.923,2.126,2.923h2.764
c1.435,0,2.179-0.903,2.179-3.135v-9.832c0-2.339-0.691-3.242-2.179-3.242h-2.764c-1.276,0-2.02,0.85-2.126,2.604V192.888z"/>
<path style="fill:#F15825;" d="M226.01,179.389c-0.85,0-1.276,0.638-1.276,2.02v0.585c0,1.382,0.478,1.701,1.754,2.126
l4.783,1.435c4.252,1.222,5.261,2.126,5.261,6.59v3.136c0,4.624-2.126,6.006-6.59,6.006h-4.252c-5.421,0-6.644-1.701-6.644-6.856
v-1.542h5.261v1.01c0,1.488,0.425,2.126,1.276,2.126h4.412c0.85,0,1.276-0.638,1.276-2.02v-0.584
c0-1.382-0.585-1.754-1.701-2.127l-4.783-1.435c-5.049-1.435-5.315-2.817-5.315-7.175v-2.073c0-4.57,1.116-6.484,6.644-6.484
h3.401c5.527,0,6.59,1.807,6.59,7.122v1.648h-5.261v-1.382c0-1.435-0.425-2.127-1.276-2.127H226.01z"/>
</g>
<g>
<path style="fill:#F15825;" d="M82.845,121.149l66.21-61.362c0.863-0.801,1.569-0.529,1.569,0.602v44.403
c0,1.131-0.706,2.71-1.569,3.511l-13.86,12.845c-0.863,0.8-2.568,1.454-3.789,1.454H83.495
C82.274,122.604,81.982,121.949,82.845,121.149z"/>
</g>
</g>
<path style="fill:#EFEFEF;" d="M260.526,80.746L156.464,3.724l-0.028-0.021l-0.03-0.019l-0.154-0.101l-0.031-0.021l-0.032-0.019
c-3.646-2.105-7.798-3.217-12.008-3.217c-4.169,0-8.287,1.093-11.907,3.16c-0.106,0.061-0.212,0.13-0.312,0.205L27.838,80.745
c-0.908,0.674-1.337,1.821-1.097,2.923l13.004,53.641h5.917L32.796,84.428c-0.02-0.092,0.028-0.22,0.128-0.294L135.158,8.469
c0.02-0.015,0.038-0.027,0.057-0.038c2.731-1.539,5.831-2.352,8.965-2.352s6.234,0.813,8.965,2.352
c0.019,0.011,0.037,0.023,0.037,0.023l102.256,75.68c0.098,0.073,0.146,0.2,0.119,0.322l-12.251,52.851h5.913l12.393-53.612
C261.861,82.567,261.431,81.419,260.526,80.746z"/>
<g>
<path style="fill:#EFEFEF;" d="M222.394,226.602l-5.436,23.208c-0.015,0.068-0.083,0.151-0.174,0.192l-72.464,31.575
c-0.05,0.022-0.094,0.032-0.14,0.032c-0.046,0-0.09-0.009-0.131-0.028l-72.033-31.582c-0.083-0.038-0.151-0.121-0.172-0.219
l-5.396-23.178h-5.926l6.037,25.946c0.199,0.913,0.806,1.663,1.632,2.036l74.813,32.838c0.367,0.166,0.765,0.252,1.176,0.252
s0.81-0.086,1.184-0.255l75.246-32.831c0.833-0.376,1.441-1.127,1.634-2.011l6.079-25.975H222.394z"/>
</g>
<g>
<path style="fill:#35495C;" d="M105.532,163.179v13.127c-0.956-1.648-1.967-2.179-4.252-2.179h-2.339
c-4.145,0-6.112,2.551-6.112,7.547v12.915c0,4.412,1.807,6.697,5.687,6.697h2.339c2.976,0,4.358-1.01,5.049-3.082l0.531,3.082
h4.73v-39.329h-0.903L105.532,163.179z M105.532,193.048c-0.159,1.913-0.903,2.763-2.179,2.763h-2.711
c-1.488,0-2.179-0.903-2.179-3.135v-9.939c0-2.232,0.691-3.135,2.126-3.135h2.764c1.382,0,2.073,0.956,2.179,2.87V193.048z"/>
<path style="fill:#35495C;" d="M60.094,163.551l-9.939,37.735h6.431l1.542-6.697h10.045l1.541,6.697h6.378l-9.885-37.735H60.094z
M59.562,188.477l3.614-15.519l3.561,15.519H59.562z"/>
<path style="fill:#35495C;" d="M90.013,173.543l-4.464,1.594c-1.169,0.426-1.86,1.329-2.392,2.498v-3.189h-0.85l-4.411,1.222
v25.617h5.687v-17.06c0-2.02,0.585-2.87,2.179-3.401l5.049-1.701l-0.425-5.58H90.013z"/>
<path style="fill:#35495C;" d="M126.737,174.127h-6.112c-3.561,0-5.314,2.179-5.314,6.325v2.232h5.261v-0.478
c0-1.701,0.531-2.391,1.701-2.391h2.764c1.169,0,1.754,0.691,1.754,2.391v2.711h-7.016c-3.561,0-5.314,2.072-5.314,6.059v3.88
c0,4.358,1.754,6.431,5.314,6.431h2.764c2.604,0,3.667-0.478,4.73-2.71l0.425,2.71h4.73v-20.781
C132.424,176.253,130.564,174.127,126.737,174.127z M126.79,192.782c0,1.967-0.585,2.817-1.807,2.817h-3.986
c-0.797,0-1.329-0.372-1.329-2.073v-0.903c0-1.542,0.531-2.445,1.329-2.445h5.793V192.782z"/>
</g>
<path style="fill:#35495C;" d="M148.579,174.127h-2.285c-2.392,0-3.72,0.638-4.677,2.498v-2.179h-0.85l-4.412,1.222v25.617h5.687
v-19.292c0.053-1.595,0.85-2.605,2.126-2.605h2.339c1.488,0,2.125,0.904,2.125,3.136v18.761h5.687v-20.515
C154.319,176.359,152.46,174.127,148.579,174.127z"/>
<path style="fill:#35495C;" d="M171.902,121.139c0.868,0.805,2.584,1.464,3.813,1.464h20.578c1.229,0,1.523-0.659,0.655-1.464
l-39.053-36.216c-0.868-0.805-1.579-0.533-1.579,0.607v19.083c0,1.139,0.711,2.729,1.579,3.536L171.902,121.139z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 129 155" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g><clipPath id="_clip1"><path d="M89.967,66.518c0.007,-0.504 -0.232,-0.981 -0.639,-1.278l-57.409,-41.945c-0.536,-0.392 -1.261,-0.401 -1.806,-0.024l-25.777,17.795c-0.421,0.291 -0.673,0.77 -0.673,1.281c0,0.512 0.252,0.991 0.673,1.282l59.083,40.788c0.267,0.184 0.577,0.276 0.886,0.276c0.31,0 0.62,-0.092 0.886,-0.276l24.102,-16.639c0.417,-0.286 0.667,-0.755 0.674,-1.26Z" clip-rule="nonzero"/></clipPath><g clip-path="url(#_clip1)"><rect x="-1.337" y="17.995" width="96.304" height="71.698" style="fill:#fff;"/></g><clipPath id="_clip2"><path d="M127.777,50.16c-0.513,-0.268 -1.134,-0.231 -1.611,0.098l-57.921,39.988c-0.421,0.29 -0.673,0.77 -0.673,1.282l0,61.346c0,0.578 0.321,1.111 0.835,1.379c0.227,0.12 0.476,0.178 0.723,0.178c0.312,0 0.622,-0.093 0.886,-0.276l57.921,-39.987c0.422,-0.29 0.673,-0.77 0.673,-1.281l0,-61.347c0.001,-0.579 -0.32,-1.11 -0.833,-1.38Z" clip-rule="nonzero"/></clipPath><g clip-path="url(#_clip2)"><rect x="62.572" y="44.982" width="71.039" height="114.449" style="fill:#fff;"/></g><clipPath id="_clip3"><path d="M60.367,90.246l-57.922,-39.987c-0.476,-0.329 -1.096,-0.367 -1.61,-0.098c-0.513,0.269 -0.835,0.8 -0.835,1.379l0,61.347c0,0.511 0.252,0.991 0.673,1.281l57.921,39.987c0.266,0.183 0.576,0.276 0.886,0.276c0.248,0 0.497,-0.058 0.725,-0.178c0.512,-0.268 0.834,-0.801 0.834,-1.379l0,-61.346c0.001,-0.512 -0.25,-0.992 -0.672,-1.282Z" clip-rule="nonzero"/></clipPath><g clip-path="url(#_clip3)"><rect x="-5" y="44.983" width="71.039" height="114.448" style="fill:#fff;"/></g><clipPath id="_clip4"><path d="M39.257,19.474l57.41,41.945c0.274,0.2 0.596,0.3 0.919,0.3c0.309,0 0.62,-0.092 0.886,-0.276l25.803,-17.814c0.422,-0.291 0.673,-0.77 0.673,-1.282c0,-0.512 -0.251,-0.991 -0.673,-1.282l-59.084,-40.789c-0.532,-0.368 -1.239,-0.368 -1.771,0l-24.129,16.659c-0.416,0.286 -0.666,0.756 -0.673,1.26c-0.007,0.505 0.232,0.982 0.639,1.279Z" clip-rule="nonzero"/></clipPath><g clip-path="url(#_clip4)"><rect x="33.618" y="-5" width="96.33" height="71.719" style="fill:#fff;"/></g></g></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

View file

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 379 114" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;">
<g transform="matrix(1,0,0,1,-35.5985,-67.948)">
<g transform="matrix(1.16548,0,0,1.10195,-124,-68.27)">
<g id="Light-Logo" serif:id="Light Logo" transform="matrix(0.858013,0,0,0.907485,-3243.42,-1469.17)">
<g id="Logo" transform="matrix(1,0,0,1,21.4759,36.7359)">
<g id="Icon">
<g>
<g transform="matrix(-0.191794,-0.715786,0.715786,-0.191794,4329.14,4673.64)">
<path d="M3901.56,610.734C3893.53,610.261 3886.06,608.1 3879.2,604.877C3872.24,601.608 3866.04,597.093 3860.8,591.633C3858.71,589.457 3856.76,587.149 3854.97,584.709C3853.2,582.281 3851.57,579.733 3850.13,577.066C3845.89,569.224 3843.21,560.381 3842.89,550.868C3842.57,543.321 3843.64,536.055 3845.94,529.307C3848.37,522.203 3852.08,515.696 3856.83,510.049L3855.79,509.095C3850.39,514.54 3846.02,520.981 3842.9,528.125C3839.84,535.125 3838.03,542.781 3837.68,550.868C3837.34,561.391 3839.51,571.425 3843.79,580.306C3845.27,583.38 3847.03,586.304 3849.01,589.049C3851.01,591.806 3853.24,594.39 3855.69,596.742C3861.75,602.568 3869,607.19 3877.03,610.1C3884.66,612.867 3892.96,614.059 3901.56,613.552L3901.56,610.734Z" style="fill:rgb(31,136,192);"/>
</g>
<g transform="matrix(-0.191794,-0.715786,0.715786,-0.191794,4329.14,4673.64)">
<path d="M3875.69,496.573C3879.62,494.538 3883.8,492.897 3888.2,491.786C3892.49,490.704 3896.96,490.124 3901.56,490.032C3903.82,490.13 3906.03,490.332 3908.21,490.688C3917.13,492.147 3925.19,495.814 3932.31,500.683C3936.13,503.294 3939.59,506.335 3942.81,509.619C3947.09,513.98 3950.89,518.816 3953.85,524.232C3958.2,532.197 3960.96,541.186 3961.32,550.868C3961.61,558.748 3960.46,566.345 3957.88,573.322C3956.09,578.169 3953.7,582.753 3950.66,586.838C3947.22,591.461 3942.96,595.427 3938.27,598.769C3933.66,602.055 3928.53,604.619 3923.09,606.478C3922.37,606.721 3921.6,606.805 3920.93,607.167C3920.42,607.448 3920.14,607.854 3919.69,608.224L3920.37,610.389C3920.98,610.432 3921.47,610.573 3922.07,610.474C3922.86,610.344 3923.55,609.883 3924.28,609.566C3931.99,606.216 3938.82,601.355 3944.57,595.428C3947.02,592.903 3949.25,590.174 3951.31,587.319C3953.59,584.168 3955.66,580.853 3957.43,577.348C3961.47,569.34 3964.01,560.422 3964.36,550.868C3964.74,540.511 3962.66,530.628 3958.48,521.868C3955.57,515.775 3951.72,510.163 3946.95,505.478C3943.37,501.962 3939.26,498.99 3934.84,496.562C3926.88,492.192 3917.87,489.76 3908.37,489.229C3906.12,489.104 3903.86,489.054 3901.56,489.154C3896.87,489.06 3892.3,489.519 3887.89,490.397C3883.3,491.309 3878.89,492.683 3874.71,494.525L3875.69,496.573Z" style="fill:rgb(31,136,192);"/>
</g>
</g>
<g>
<g transform="matrix(-3.37109,-0.514565,0.514565,-3.37109,4078.07,1806.88)">
<path d="M22,12C22,10.903 21.097,10 20,10C19.421,10 18.897,10.251 18.53,10.649C18.202,11.006 18,11.481 18,12C18,13.097 18.903,14 20,14C21.097,14 22,13.097 22,12Z" style="fill:none;fill-rule:nonzero;stroke:rgb(31,136,192);stroke-width:1.05px;"/>
</g>
<g transform="matrix(-5.33921,-5.26159,-3.12106,-6.96393,4073.87,1861.55)">
<path d="M10.315,5.333C10.315,5.333 9.748,5.921 9.03,6.673C7.768,7.995 6.054,9.805 6.054,9.805L6.237,9.86C6.237,9.86 8.045,8.077 9.36,6.771C10.107,6.028 10.689,5.444 10.689,5.444L10.315,5.333Z" style="fill:rgb(31,136,192);"/>
</g>
</g>
<g id="Padlock" transform="matrix(3.11426,0,0,3.11426,3938.31,1737.25)">
<g>
<path d="M9.876,21L18.162,21C18.625,21 19,20.625 19,20.162L19,11.838C19,11.375 18.625,11 18.162,11L5.838,11C5.375,11 5,11.375 5,11.838L5,16.758" style="fill:none;stroke:rgb(34,182,56);stroke-width:1.89px;stroke-linecap:butt;stroke-linejoin:miter;"/>
<path d="M8,11L8,7C8,4.806 9.806,3 12,3C14.194,3 16,4.806 16,7L16,11" style="fill:none;fill-rule:nonzero;stroke:rgb(34,182,56);stroke-width:1.89px;"/>
</g>
</g>
<g>
<g transform="matrix(5.30977,0.697415,-0.697415,5.30977,3852.72,1727.97)">
<path d="M22,12C22,11.659 21.913,11.337 21.76,11.055C21.421,10.429 20.756,10 20,10C18.903,10 18,10.903 18,12C18,13.097 18.903,14 20,14C21.097,14 22,13.097 22,12Z" style="fill:none;fill-rule:nonzero;stroke:rgb(31,136,192);stroke-width:0.98px;"/>
</g>
<g transform="matrix(4.93114,2.49604,1.11018,5.44847,3921.41,1726.72)">
<path d="M8.902,6.77C8.902,6.77 7.235,8.253 6.027,9.366C5.343,9.996 4.819,10.502 4.819,10.502L5.52,11.164C5.52,11.164 6.021,10.637 6.646,9.951C7.749,8.739 9.219,7.068 9.219,7.068L8.902,6.77Z" style="fill:rgb(31,136,192);"/>
</g>
</g>
</g>
<g id="Wordmark" transform="matrix(1.54159,0,0,2.8744,2710.6,709.804)">
<g id="y" transform="matrix(0.50291,0,0,0.281607,905.533,304.987)">
<path d="M192.152,286.875L202.629,268.64C187.804,270.106 183.397,265.779 180.143,263.391C176.888,261.004 174.362,257.99 172.563,254.347C170.765,250.705 169.866,246.691 169.866,242.305L169.866,208.107L183.21,208.107L183.21,242.213C183.21,245.188 183.896,247.822 185.268,250.116C186.64,252.41 188.465,254.197 190.743,255.475C193.022,256.754 195.501,257.393 198.182,257.393C200.894,257.393 203.393,256.75 205.68,255.463C207.966,254.177 209.799,252.391 211.178,250.105C212.558,247.818 213.248,245.188 213.248,242.213L213.248,208.107L226.545,208.107L226.545,242.305C226.545,246.707 225.378,258.46 218.079,268.64C215.735,271.909 207.835,286.875 207.835,286.875L192.152,286.875Z" style="fill:rgb(47,47,47);fill-rule:nonzero;"/>
</g>
<g id="add" transform="matrix(0.525075,0,0,0.281607,801.871,304.987)">
<g transform="matrix(116.242,0,0,116.242,161.846,267.39)">
<path d="M0.276,0.012C0.227,0.012 0.186,0 0.15,-0.024C0.115,-0.048 0.088,-0.08 0.069,-0.12C0.05,-0.161 0.04,-0.205 0.04,-0.254C0.04,-0.305 0.051,-0.35 0.072,-0.39C0.094,-0.431 0.125,-0.463 0.165,-0.487C0.205,-0.51 0.254,-0.522 0.31,-0.522C0.366,-0.522 0.413,-0.51 0.452,-0.486C0.491,-0.463 0.521,-0.431 0.542,-0.39C0.562,-0.35 0.573,-0.305 0.573,-0.256L0.573,-0L0.458,-0L0.458,-0.095L0.456,-0.095C0.446,-0.076 0.433,-0.058 0.417,-0.042C0.401,-0.026 0.381,-0.013 0.358,-0.003C0.335,0.007 0.307,0.012 0.276,0.012ZM0.307,-0.086C0.337,-0.086 0.363,-0.093 0.386,-0.108C0.408,-0.123 0.426,-0.144 0.438,-0.17C0.45,-0.195 0.456,-0.224 0.456,-0.256C0.456,-0.288 0.45,-0.317 0.438,-0.342C0.426,-0.367 0.409,-0.387 0.387,-0.402C0.365,-0.417 0.338,-0.424 0.308,-0.424C0.276,-0.424 0.249,-0.417 0.226,-0.402C0.204,-0.387 0.186,-0.366 0.174,-0.341C0.162,-0.315 0.156,-0.287 0.156,-0.255C0.156,-0.224 0.162,-0.195 0.174,-0.169C0.186,-0.144 0.203,-0.123 0.226,-0.108C0.248,-0.093 0.275,-0.086 0.307,-0.086Z" style="fill:rgb(47,47,47);fill-rule:nonzero;"/>
</g>
<g transform="matrix(116.242,0,0,116.242,226.592,267.39)">
<path d="M0.306,0.012C0.265,0.012 0.229,0.006 0.196,-0.008C0.163,-0.021 0.135,-0.039 0.112,-0.064C0.089,-0.088 0.071,-0.117 0.059,-0.151C0.046,-0.185 0.04,-0.222 0.04,-0.263C0.04,-0.315 0.051,-0.36 0.072,-0.399C0.093,-0.437 0.122,-0.468 0.159,-0.489C0.196,-0.511 0.239,-0.522 0.287,-0.522C0.311,-0.522 0.333,-0.518 0.355,-0.511C0.377,-0.504 0.396,-0.493 0.413,-0.48C0.431,-0.466 0.445,-0.451 0.455,-0.433L0.456,-0.433L0.456,-0.73L0.571,-0.73L0.571,-0.261C0.571,-0.205 0.56,-0.156 0.537,-0.115C0.515,-0.074 0.484,-0.043 0.444,-0.021C0.405,0.001 0.358,0.012 0.306,0.012ZM0.306,-0.086C0.335,-0.086 0.361,-0.093 0.384,-0.107C0.406,-0.122 0.423,-0.141 0.436,-0.167C0.448,-0.192 0.455,-0.221 0.455,-0.255C0.455,-0.288 0.448,-0.317 0.436,-0.343C0.423,-0.368 0.406,-0.388 0.383,-0.402C0.361,-0.417 0.335,-0.424 0.305,-0.424C0.276,-0.424 0.251,-0.417 0.228,-0.402C0.206,-0.387 0.188,-0.368 0.175,-0.342C0.163,-0.317 0.156,-0.288 0.156,-0.255C0.156,-0.222 0.163,-0.193 0.175,-0.167C0.188,-0.142 0.206,-0.122 0.229,-0.108C0.251,-0.093 0.277,-0.086 0.306,-0.086Z" style="fill:rgb(47,47,47);fill-rule:nonzero;"/>
</g>
<g transform="matrix(116.242,0,0,116.242,290.293,267.39)">
<path d="M0.306,0.012C0.265,0.012 0.229,0.006 0.196,-0.008C0.163,-0.021 0.135,-0.039 0.112,-0.064C0.089,-0.088 0.071,-0.117 0.059,-0.151C0.046,-0.185 0.04,-0.222 0.04,-0.263C0.04,-0.315 0.051,-0.36 0.072,-0.399C0.093,-0.437 0.122,-0.468 0.159,-0.489C0.196,-0.511 0.239,-0.522 0.287,-0.522C0.311,-0.522 0.333,-0.518 0.355,-0.511C0.377,-0.504 0.396,-0.493 0.413,-0.48C0.431,-0.466 0.445,-0.451 0.455,-0.433L0.456,-0.433L0.456,-0.73L0.571,-0.73L0.571,-0.261C0.571,-0.205 0.56,-0.156 0.537,-0.115C0.515,-0.074 0.484,-0.043 0.444,-0.021C0.405,0.001 0.358,0.012 0.306,0.012ZM0.306,-0.086C0.335,-0.086 0.361,-0.093 0.384,-0.107C0.406,-0.122 0.423,-0.141 0.436,-0.167C0.448,-0.192 0.455,-0.221 0.455,-0.255C0.455,-0.288 0.448,-0.317 0.436,-0.343C0.423,-0.368 0.406,-0.388 0.383,-0.402C0.361,-0.417 0.335,-0.424 0.305,-0.424C0.276,-0.424 0.251,-0.417 0.228,-0.402C0.206,-0.387 0.188,-0.368 0.175,-0.342C0.163,-0.317 0.156,-0.288 0.156,-0.255C0.156,-0.222 0.163,-0.193 0.175,-0.167C0.188,-0.142 0.206,-0.122 0.229,-0.108C0.251,-0.093 0.277,-0.086 0.306,-0.086Z" style="fill:rgb(47,47,47);fill-rule:nonzero;"/>
</g>
</g>
<g id="c" transform="matrix(-0.0716462,0.31304,-0.583685,-0.0384251,1489.76,-444.051)">
<path d="M2668.11,700.4C2666.79,703.699 2666.12,707.216 2666.12,710.766C2666.12,726.268 2678.71,738.854 2694.21,738.854C2709.71,738.854 2722.3,726.268 2722.3,710.766C2722.3,704.111 2719.93,697.672 2715.63,692.597L2707.63,699.378C2710.33,702.559 2711.57,706.602 2711.81,710.766C2712.2,717.38 2706.61,724.52 2697.27,726.637C2683.9,728.581 2676.61,720.482 2676.61,710.766C2676.61,708.541 2677.03,706.336 2677.85,704.269L2668.11,700.4Z" style="fill:rgb(46,46,46);"/>
</g>
</g>
</g>
<g id="R" transform="matrix(0.497016,0,0,0.497016,2390.38,823.152)">
<g transform="matrix(1,0,0,1,-0.10786,0.450801)">
<g transform="matrix(12.1247,0,0,12.1247,3862.61,1929.9)">
<path d="M0.073,-0L0.073,-0.7L0.383,-0.7C0.428,-0.7 0.469,-0.69 0.506,-0.67C0.543,-0.651 0.572,-0.623 0.594,-0.588C0.616,-0.553 0.627,-0.512 0.627,-0.465C0.627,-0.418 0.615,-0.377 0.592,-0.342C0.569,-0.306 0.539,-0.279 0.501,-0.259L0.57,-0.128C0.574,-0.12 0.579,-0.115 0.584,-0.111C0.59,-0.107 0.596,-0.106 0.605,-0.106L0.664,-0.106L0.664,-0L0.587,-0C0.56,-0 0.535,-0.007 0.514,-0.02C0.493,-0.034 0.476,-0.052 0.463,-0.075L0.381,-0.232C0.375,-0.231 0.368,-0.231 0.361,-0.231C0.354,-0.231 0.347,-0.231 0.34,-0.231L0.192,-0.231L0.192,-0L0.073,-0ZM0.192,-0.336L0.368,-0.336C0.394,-0.336 0.417,-0.341 0.438,-0.351C0.459,-0.361 0.476,-0.376 0.489,-0.396C0.501,-0.415 0.507,-0.438 0.507,-0.465C0.507,-0.492 0.501,-0.516 0.488,-0.535C0.475,-0.554 0.459,-0.569 0.438,-0.579C0.417,-0.59 0.394,-0.595 0.369,-0.595L0.192,-0.595L0.192,-0.336Z" style="fill:rgb(46,46,46);fill-rule:nonzero;"/>
</g>
</g>
<g transform="matrix(1,0,0,1,0.278569,0.101881)">
<circle cx="3866.43" cy="1926.14" r="8.923" style="fill:none;stroke:rgb(46,46,46);stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 253 85" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;">
<g transform="matrix(1,0,0,1,-161.947,-83.7363)">
<g transform="matrix(1.16548,0,0,1.10195,-124,-68.27)">
<g id="Wordmark" transform="matrix(1.32271,0,0,2.60848,-899.259,-791.691)">
<g id="y" transform="matrix(0.50291,0,0,0.281607,905.533,304.987)">
<path d="M192.152,286.875L202.629,268.64C187.804,270.106 183.397,265.779 180.143,263.391C176.888,261.004 174.362,257.99 172.563,254.347C170.765,250.705 169.866,246.691 169.866,242.305L169.866,208.107L183.21,208.107L183.21,242.213C183.21,245.188 183.896,247.822 185.268,250.116C186.64,252.41 188.465,254.197 190.743,255.475C193.022,256.754 195.501,257.393 198.182,257.393C200.894,257.393 203.393,256.75 205.68,255.463C207.966,254.177 209.799,252.391 211.178,250.105C212.558,247.818 213.248,245.188 213.248,242.213L213.248,208.107L226.545,208.107L226.545,242.305C226.545,246.707 225.378,258.46 218.079,268.64C215.735,271.909 207.835,286.875 207.835,286.875L192.152,286.875Z" style="fill:rgb(47,47,47);fill-rule:nonzero;"/>
</g>
<g id="add" transform="matrix(0.525075,0,0,0.281607,801.871,304.987)">
<g transform="matrix(116.242,0,0,116.242,161.846,267.39)">
<path d="M0.276,0.012C0.227,0.012 0.186,0 0.15,-0.024C0.115,-0.048 0.088,-0.08 0.069,-0.12C0.05,-0.161 0.04,-0.205 0.04,-0.254C0.04,-0.305 0.051,-0.35 0.072,-0.39C0.094,-0.431 0.125,-0.463 0.165,-0.487C0.205,-0.51 0.254,-0.522 0.31,-0.522C0.366,-0.522 0.413,-0.51 0.452,-0.486C0.491,-0.463 0.521,-0.431 0.542,-0.39C0.562,-0.35 0.573,-0.305 0.573,-0.256L0.573,-0L0.458,-0L0.458,-0.095L0.456,-0.095C0.446,-0.076 0.433,-0.058 0.417,-0.042C0.401,-0.026 0.381,-0.013 0.358,-0.003C0.335,0.007 0.307,0.012 0.276,0.012ZM0.307,-0.086C0.337,-0.086 0.363,-0.093 0.386,-0.108C0.408,-0.123 0.426,-0.144 0.438,-0.17C0.45,-0.195 0.456,-0.224 0.456,-0.256C0.456,-0.288 0.45,-0.317 0.438,-0.342C0.426,-0.367 0.409,-0.387 0.387,-0.402C0.365,-0.417 0.338,-0.424 0.308,-0.424C0.276,-0.424 0.249,-0.417 0.226,-0.402C0.204,-0.387 0.186,-0.366 0.174,-0.341C0.162,-0.315 0.156,-0.287 0.156,-0.255C0.156,-0.224 0.162,-0.195 0.174,-0.169C0.186,-0.144 0.203,-0.123 0.226,-0.108C0.248,-0.093 0.275,-0.086 0.307,-0.086Z" style="fill:rgb(47,47,47);fill-rule:nonzero;"/>
</g>
<g transform="matrix(116.242,0,0,116.242,226.592,267.39)">
<path d="M0.306,0.012C0.265,0.012 0.229,0.006 0.196,-0.008C0.163,-0.021 0.135,-0.039 0.112,-0.064C0.089,-0.088 0.071,-0.117 0.059,-0.151C0.046,-0.185 0.04,-0.222 0.04,-0.263C0.04,-0.315 0.051,-0.36 0.072,-0.399C0.093,-0.437 0.122,-0.468 0.159,-0.489C0.196,-0.511 0.239,-0.522 0.287,-0.522C0.311,-0.522 0.333,-0.518 0.355,-0.511C0.377,-0.504 0.396,-0.493 0.413,-0.48C0.431,-0.466 0.445,-0.451 0.455,-0.433L0.456,-0.433L0.456,-0.73L0.571,-0.73L0.571,-0.261C0.571,-0.205 0.56,-0.156 0.537,-0.115C0.515,-0.074 0.484,-0.043 0.444,-0.021C0.405,0.001 0.358,0.012 0.306,0.012ZM0.306,-0.086C0.335,-0.086 0.361,-0.093 0.384,-0.107C0.406,-0.122 0.423,-0.141 0.436,-0.167C0.448,-0.192 0.455,-0.221 0.455,-0.255C0.455,-0.288 0.448,-0.317 0.436,-0.343C0.423,-0.368 0.406,-0.388 0.383,-0.402C0.361,-0.417 0.335,-0.424 0.305,-0.424C0.276,-0.424 0.251,-0.417 0.228,-0.402C0.206,-0.387 0.188,-0.368 0.175,-0.342C0.163,-0.317 0.156,-0.288 0.156,-0.255C0.156,-0.222 0.163,-0.193 0.175,-0.167C0.188,-0.142 0.206,-0.122 0.229,-0.108C0.251,-0.093 0.277,-0.086 0.306,-0.086Z" style="fill:rgb(47,47,47);fill-rule:nonzero;"/>
</g>
<g transform="matrix(116.242,0,0,116.242,290.293,267.39)">
<path d="M0.306,0.012C0.265,0.012 0.229,0.006 0.196,-0.008C0.163,-0.021 0.135,-0.039 0.112,-0.064C0.089,-0.088 0.071,-0.117 0.059,-0.151C0.046,-0.185 0.04,-0.222 0.04,-0.263C0.04,-0.315 0.051,-0.36 0.072,-0.399C0.093,-0.437 0.122,-0.468 0.159,-0.489C0.196,-0.511 0.239,-0.522 0.287,-0.522C0.311,-0.522 0.333,-0.518 0.355,-0.511C0.377,-0.504 0.396,-0.493 0.413,-0.48C0.431,-0.466 0.445,-0.451 0.455,-0.433L0.456,-0.433L0.456,-0.73L0.571,-0.73L0.571,-0.261C0.571,-0.205 0.56,-0.156 0.537,-0.115C0.515,-0.074 0.484,-0.043 0.444,-0.021C0.405,0.001 0.358,0.012 0.306,0.012ZM0.306,-0.086C0.335,-0.086 0.361,-0.093 0.384,-0.107C0.406,-0.122 0.423,-0.141 0.436,-0.167C0.448,-0.192 0.455,-0.221 0.455,-0.255C0.455,-0.288 0.448,-0.317 0.436,-0.343C0.423,-0.368 0.406,-0.388 0.383,-0.402C0.361,-0.417 0.335,-0.424 0.305,-0.424C0.276,-0.424 0.251,-0.417 0.228,-0.402C0.206,-0.387 0.188,-0.368 0.175,-0.342C0.163,-0.317 0.156,-0.288 0.156,-0.255C0.156,-0.222 0.163,-0.193 0.175,-0.167C0.188,-0.142 0.206,-0.122 0.229,-0.108C0.251,-0.093 0.277,-0.086 0.306,-0.086Z" style="fill:rgb(47,47,47);fill-rule:nonzero;"/>
</g>
</g>
<g id="c" transform="matrix(-0.0716462,0.31304,-0.583685,-0.0384251,1489.76,-444.051)">
<path d="M2668.11,700.4C2666.79,703.699 2666.12,707.216 2666.12,710.766C2666.12,726.268 2678.71,738.854 2694.21,738.854C2709.71,738.854 2722.3,726.268 2722.3,710.766C2722.3,704.111 2719.93,697.672 2715.63,692.597L2707.63,699.378C2710.33,702.559 2711.57,706.602 2711.81,710.766C2712.2,717.38 2706.61,724.52 2697.27,726.637C2683.9,728.581 2676.61,720.482 2676.61,710.766C2676.61,708.541 2677.03,706.336 2677.85,704.269L2668.11,700.4Z" style="fill:rgb(46,46,46);"/>
</g>
</g>
<g id="R" transform="matrix(0.426446,0,0,0.451034,-1192.44,-722.167)">
<g transform="matrix(1,0,0,1,-0.10786,0.450801)">
<g transform="matrix(12.1247,0,0,12.1247,3862.61,1929.9)">
<path d="M0.073,-0L0.073,-0.7L0.383,-0.7C0.428,-0.7 0.469,-0.69 0.506,-0.67C0.543,-0.651 0.572,-0.623 0.594,-0.588C0.616,-0.553 0.627,-0.512 0.627,-0.465C0.627,-0.418 0.615,-0.377 0.592,-0.342C0.569,-0.306 0.539,-0.279 0.501,-0.259L0.57,-0.128C0.574,-0.12 0.579,-0.115 0.584,-0.111C0.59,-0.107 0.596,-0.106 0.605,-0.106L0.664,-0.106L0.664,-0L0.587,-0C0.56,-0 0.535,-0.007 0.514,-0.02C0.493,-0.034 0.476,-0.052 0.463,-0.075L0.381,-0.232C0.375,-0.231 0.368,-0.231 0.361,-0.231C0.354,-0.231 0.347,-0.231 0.34,-0.231L0.192,-0.231L0.192,-0L0.073,-0ZM0.192,-0.336L0.368,-0.336C0.394,-0.336 0.417,-0.341 0.438,-0.351C0.459,-0.361 0.476,-0.376 0.489,-0.396C0.501,-0.415 0.507,-0.438 0.507,-0.465C0.507,-0.492 0.501,-0.516 0.488,-0.535C0.475,-0.554 0.459,-0.569 0.438,-0.579C0.417,-0.59 0.394,-0.595 0.369,-0.595L0.192,-0.595L0.192,-0.336Z" style="fill:rgb(46,46,46);fill-rule:nonzero;"/>
</g>
</g>
<g transform="matrix(1,0,0,1,0.278569,0.101881)">
<circle cx="3866.43" cy="1926.14" r="8.923" style="fill:none;stroke:rgb(46,46,46);stroke-width:2px;"/>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="511.626px" height="511.627px" viewBox="0 0 511.626 511.627" style="enable-background:new 0 0 511.626 511.627;"
xml:space="preserve">
<g>
<path fill="#546c75" d="M392.857,292.354h-18.274c-2.669,0-4.859,0.855-6.563,2.573c-1.718,1.708-2.573,3.897-2.573,6.563v91.361
c0,12.563-4.47,23.315-13.415,32.262c-8.945,8.945-19.701,13.414-32.264,13.414H82.224c-12.562,0-23.317-4.469-32.264-13.414
c-8.945-8.946-13.417-19.698-13.417-32.262V155.31c0-12.562,4.471-23.313,13.417-32.259c8.947-8.947,19.702-13.418,32.264-13.418
h200.994c2.669,0,4.859-0.859,6.57-2.57c1.711-1.713,2.566-3.9,2.566-6.567V82.221c0-2.662-0.855-4.853-2.566-6.563
c-1.711-1.713-3.901-2.568-6.57-2.568H82.224c-22.648,0-42.016,8.042-58.102,24.125C8.042,113.297,0,132.665,0,155.313v237.542
c0,22.647,8.042,42.018,24.123,58.095c16.086,16.084,35.454,24.13,58.102,24.13h237.543c22.647,0,42.017-8.046,58.101-24.13
c16.085-16.077,24.127-35.447,24.127-58.095v-91.358c0-2.669-0.856-4.859-2.574-6.57
C397.709,293.209,395.519,292.354,392.857,292.354z"/>
<path fill="#546c75" d="M506.199,41.971c-3.617-3.617-7.905-5.424-12.85-5.424H347.171c-4.948,0-9.233,1.807-12.847,5.424
c-3.617,3.615-5.428,7.898-5.428,12.847s1.811,9.233,5.428,12.85l50.247,50.248L198.424,304.067
c-1.906,1.903-2.856,4.093-2.856,6.563c0,2.479,0.953,4.668,2.856,6.571l32.548,32.544c1.903,1.903,4.093,2.852,6.567,2.852
s4.665-0.948,6.567-2.852l186.148-186.148l50.251,50.248c3.614,3.617,7.898,5.426,12.847,5.426s9.233-1.809,12.851-5.426
c3.617-3.616,5.424-7.898,5.424-12.847V54.818C511.626,49.866,509.813,45.586,506.199,41.971z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 1603 209" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M0,3.507l162.493,0l0,48.222l-97.905,0l0,34.486l84.169,0l0,46.175l-84.169,0l0,72.187l-64.588,0l0,-201.07Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M180.32,3.507l173.89,0l0,48.222l-109.302,0l0,27.764l93.521,0l0,46.176l-93.521,0l0,30.686l111.348,0l0,48.222l-175.936,0l0,-201.07Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M511.442,204.577l-8.475,-28.349l-70.433,0l-8.475,28.349l-66.049,0l73.355,-201.07l75.109,0l73.355,201.07l-68.387,0Zm-65.464,-73.356l43.545,0l-21.042,-71.601l-1.169,0l-21.334,71.601Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M705.206,54.944l0,149.633l-64.588,0l0,-149.633l-66.049,0l0,-51.437l196.394,0l0,51.437l-65.757,0Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M986.061,123.623c0,27.472 -8.67,48.416 -26.011,62.834c-17.34,14.418 -41.987,21.627 -73.94,21.627c-31.953,0 -56.648,-7.209 -74.086,-21.627c-17.437,-14.418 -26.156,-35.362 -26.156,-62.834l0,-120.116l64.587,0l0,119.239c0,11.301 3.02,20.312 9.06,27.034c6.04,6.721 14.808,10.082 26.303,10.082c11.495,0 20.312,-3.409 26.449,-10.229c6.137,-6.819 9.206,-15.781 9.206,-26.887l0,-119.239l64.588,0l0,120.116Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1205.54,65.172c0,12.275 -3.313,23.381 -9.937,33.317c-6.624,9.937 -16.269,17.243 -28.933,21.919l44.715,84.169l-72.479,0l-35.655,-73.356l-23.965,0l0,73.356l-64.587,0l0,-201.07l123.038,0c14.418,0 26.741,2.776 36.97,8.329c10.229,5.553 17.925,13.054 23.088,22.504c5.163,9.449 7.745,19.727 7.745,30.832Zm-65.757,2.631c0,-5.261 -1.754,-9.645 -5.261,-13.152c-3.507,-3.507 -7.793,-5.26 -12.859,-5.26l-42.377,0l0,37.116l42.377,0c5.066,0 9.352,-1.802 12.859,-5.407c3.507,-3.604 5.261,-8.037 5.261,-13.297Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1227.46,3.507l173.89,0l0,48.222l-109.303,0l0,27.764l93.521,0l0,46.176l-93.521,0l0,30.686l111.349,0l0,48.222l-175.936,0l0,-201.07Z" style="fill:#fff;fill-rule:nonzero;"/><path d="M1508.32,0c25.719,0 46.858,5.212 63.419,15.636c16.561,10.423 25.037,25.864 25.426,46.322l0,3.507l-60.496,0l0,-1.169c0,-5.845 -2.143,-10.716 -6.43,-14.613c-4.286,-3.897 -10.813,-5.845 -19.581,-5.845c-8.572,0 -15.148,1.266 -19.727,3.799c-4.578,2.533 -6.868,5.65 -6.868,9.352c0,5.261 3.118,9.158 9.353,11.69c6.234,2.533 16.268,5.164 30.102,7.891c16.171,3.312 29.468,6.771 39.892,10.375c10.424,3.605 19.532,9.498 27.326,17.681c7.793,8.184 11.787,19.289 11.982,33.317c0,23.77 -8.037,41.403 -24.111,52.898c-16.074,11.495 -37.554,17.243 -64.442,17.243c-31.368,0 -55.771,-5.261 -73.209,-15.782c-17.438,-10.521 -26.156,-29.128 -26.156,-55.82l61.08,0c0,10.131 2.631,16.902 7.891,20.312c5.261,3.409 13.444,5.114 24.549,5.114c8.183,0 14.954,-0.877 20.312,-2.63c5.358,-1.754 8.037,-5.358 8.037,-10.814c0,-4.87 -2.971,-8.524 -8.914,-10.959c-5.942,-2.436 -15.635,-5.017 -29.079,-7.745c-16.366,-3.507 -29.907,-7.16 -40.623,-10.959c-10.716,-3.8 -20.068,-10.083 -28.056,-18.851c-7.989,-8.767 -11.983,-20.652 -11.983,-35.654c0,-22.017 8.524,-38.237 25.572,-48.66c17.049,-10.424 38.627,-15.636 64.734,-15.636Z" style="fill:#fff;fill-rule:nonzero;"/></svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 110 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 105 145" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><clipPath id="_clip1"><path d="M52.299,0c-23.32,0 -42.293,19.001 -42.293,42.358l0,24.191c0,0.275 -0.338,0.738 -0.604,0.827c-2.287,0.764 -4.145,1.426 -5.845,2.082c-2.028,0.783 -3.557,3.033 -3.557,5.235l0,55.585c0,2.187 1.519,4.439 3.534,5.239c15.589,6.187 31.996,9.323 48.764,9.323c16.769,0 33.176,-3.137 48.765,-9.324c2.014,-0.799 3.533,-3.051 3.533,-5.238l0,-55.585c0,-2.202 -1.529,-4.452 -3.558,-5.236c-1.701,-0.656 -3.558,-1.318 -5.843,-2.082c-0.265,-0.089 -0.604,-0.552 -0.604,-0.827l0,-24.191c-0.001,-23.356 -18.973,-42.357 -42.292,-42.357Zm-11.52,91.622c0,-6.376 5.158,-11.536 11.519,-11.536c6.361,0 11.518,5.16 11.518,11.536c0,4.225 -2.379,7.763 -5.759,9.768l0,19.073c0,3.189 -2.576,5.768 -5.759,5.768c-3.184,0 -5.76,-2.579 -5.76,-5.768l0,-19.073c-3.38,-2.005 -5.759,-5.543 -5.759,-9.768Zm39.27,-49.265l0,20.873c-9.101,-1.962 -18.437,-2.955 -27.747,-2.956c-9.305,0 -18.639,0.994 -27.754,2.953l0,-20.87c0,-15.325 12.449,-27.793 27.75,-27.793c15.301,0 27.751,12.468 27.751,27.793Z" clip-rule="nonzero"/></clipPath><g clip-path="url(#_clip1)"><rect x="-5" y="-5" width="114.596" height="154.84" style="fill:#fff;"/></g></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 152 152" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M111.723,0.024c-1.334,0.191 -2.562,0.837 -3.475,1.828l-17.005,17.371c-4.848,-4.269 -9.328,-8.066 -12.982,-10.605c-2.337,-1.624 -4.364,-2.963 -6.4,-3.84c-1.018,-0.438 -2.04,-0.77 -3.474,-0.914c-1.434,-0.145 -3.966,0.125 -5.852,2.011l-28.707,29.256l0.182,0.183c-0.986,1.053 -1.565,2.233 -1.828,3.291l-0.183,0.732c-0.005,0.052 0.003,0.132 0,0.183c-0.004,0.068 0.002,0.116 0,0.183l-6.765,39.313c-0.288,1.15 1.804,4.406 5.485,8.96l-3.84,3.839c-5.12,5.12 -5.668,12.606 -1.828,18.286l-25.051,25.05l16.457,16.457l25.05,-25.234l0.183,0c5.652,3.354 12.801,2.701 17.371,-2.377l3.292,-3.291c5.071,4.196 9.018,6.522 10.239,6.217l39.131,-6.765c0.136,0.013 0.223,-0.009 0.365,0c1.111,0.065 2.737,-0.041 4.389,-1.28l0.365,-0.366l0.183,-0.183l28.708,-28.708c1.582,-1.581 1.804,-3.383 1.829,-4.388c0.024,-1.006 -0.041,-1.645 -0.183,-2.194c-0.284,-1.1 -0.687,-1.882 -1.097,-2.743c-0.821,-1.724 -1.927,-3.451 -3.109,-5.303c-1.182,-1.852 -2.456,-3.725 -3.657,-5.303c-1.201,-1.577 -1.761,-2.783 -3.657,-4.205l-7.131,9.508c0.268,0.305 0.865,1.043 1.463,1.829c0.956,1.256 2.096,2.802 3.108,4.388c0.67,1.049 1.169,1.875 1.646,2.743l-23.588,23.405c-1.973,-1.225 -4.879,-3.377 -8.411,-6.217c-7.238,-5.819 -16.998,-14.362 -27.428,-24.502c-10.379,-10.091 -19.274,-19.807 -25.051,-27.062c-2.888,-3.628 -4.931,-6.66 -6.034,-8.594l24.137,-24.503c0.839,0.466 1.618,0.738 2.925,1.646c2.968,2.062 7.085,5.46 11.52,9.326l-10.423,10.605c-1.377,1.11 -2.18,2.787 -2.18,4.556c0,3.211 2.642,5.852 5.852,5.852c1.769,0 3.446,-0.802 4.557,-2.18l35.656,-36.387c1.042,-1.089 1.624,-2.539 1.624,-4.046c0,-3.21 -2.642,-5.852 -5.852,-5.852c-0.176,0 -0.351,0.008 -0.526,0.024Zm-7.497,30.902l-8.229,8.411l8.229,8.045l0,0.183l0.183,0c4.539,4.127 8.445,8.223 12.068,12.251l-11.154,10.971c-1.378,1.111 -2.18,2.788 -2.18,4.557c0,3.21 2.641,5.852 5.852,5.852c1.769,0 3.446,-0.803 4.556,-2.18l36.205,-35.656c1.168,-1.105 1.83,-2.644 1.83,-4.251c0,-3.211 -2.641,-5.852 -5.852,-5.852c-0.245,0 -0.489,0.015 -0.732,0.046c-1.269,0.23 -2.426,0.873 -3.292,1.828l-16.822,16.457c-3.653,-3.991 -7.716,-8.128 -12.434,-12.434l-0.183,-0.183l-8.045,-8.045Z" style="fill:#fff;fill-rule:nonzero;"/></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 147 129" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><clipPath id="_clip1"><path d="M147,36.836l-73.5,-36.836l-73.5,36.836l73.5,36.835l73.5,-36.835Zm-73.5,-24.613l49.11,24.613l-49.11,24.597l-49.11,-24.597l49.11,-24.613Zm58.785,44.85l14.715,7.382l-73.5,36.836l-73.5,-36.836l14.715,-7.382l58.785,29.468l58.785,-29.468Zm0,27.634l14.715,7.382l-73.5,36.836l-73.5,-36.836l14.715,-7.382l58.785,29.453l58.785,-29.453Z" clip-rule="nonzero"/></clipPath><g clip-path="url(#_clip1)"><rect x="-5" y="-5" width="157" height="138.925" style="fill:#fff;"/></g></svg>

After

Width:  |  Height:  |  Size: 939 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 373 94.9" style="enable-background:new 0 0 373 94.9;" xml:space="preserve">
<style type="text/css">
.st0{enable-background:new ;}
.st1{fill:#4D70D5;}
</style>
<g class="st0">
<path d="M148.9,69.1H114v-6.9l21.2-27.6h-20.6v-9h33.8v8.2l-19.7,26.3h20.2V69.1z"/>
<path d="M185.4,55.4h-23.1c0.8,3.9,3.4,6.3,6.8,6.3c2.3,0,5-0.6,6.7-3.8l8.9,1.9C182,66.7,176.3,70,169.1,70
c-9.1,0-16.6-6.9-16.6-17.3c0-10.3,7.5-17.3,16.7-17.3c8.9,0,16.1,6.6,16.3,17.3V55.4z M162.5,49.1h13c-0.9-3.5-3.5-5.1-6.3-5.1
C166.3,44,163.4,45.8,162.5,49.1z"/>
<path d="M213.8,36.3l-0.4,10.4h-1.8c-7,0-10.9,3.8-10.9,12.2v10.2h-10V36.5h10v6.2c2.3-3.9,5.7-6.7,10.9-6.7
C212.4,36,213.1,36.1,213.8,36.3z"/>
<path d="M250.6,52.8c0,10.3-7.9,17.2-17.3,17.2c-9.5,0-17.5-6.9-17.5-17.2c0-10.3,7.9-17.1,17.5-17.1
C242.7,35.7,250.6,42.5,250.6,52.8z M240.9,52.8c0-5.1-3.7-8.4-7.6-8.4c-4.1,0-7.8,3.4-7.8,8.4c0,5.1,3.7,8.4,7.8,8.4
C237.2,61.2,240.9,57.9,240.9,52.8z"/>
<path d="M289.7,37.2l-10.2,2.1c-0.8-4.1-4-6.1-7.3-6.1c-3.5,0-5.7,1.9-5.7,4.4c0,1.8,0.8,3.1,3.4,3.6l8.7,2
c7.3,1.7,11.6,5.8,11.6,12.7c0,9.3-8,14.1-17.3,14.1c-9.5,0-17.3-4.7-18.4-13.2l10.7-2.1c1.1,4.5,4.1,6.4,8.3,6.4
c3.9,0,6.2-1.8,6.2-4.5c0-1.9-0.9-3.2-3.9-3.8l-8.8-1.9c-6-1.4-11.3-4.7-11.3-12.6c0-8.4,6.8-13.7,16.6-13.7
C281.5,24.6,288.1,29.3,289.7,37.2z"/>
<path d="M329.3,37.2l-10.2,2.1c-0.8-4.1-4-6.1-7.3-6.1c-3.5,0-5.7,1.9-5.7,4.4c0,1.8,0.8,3.1,3.4,3.6l8.7,2
c7.3,1.7,11.6,5.8,11.6,12.7c0,9.3-8,14.1-17.3,14.1c-9.5,0-17.3-4.7-18.4-13.2l10.7-2.1c1.1,4.5,4.1,6.4,8.3,6.4
c3.9,0,6.2-1.8,6.2-4.5c0-1.9-0.9-3.2-3.9-3.8l-8.8-1.9c-6-1.4-11.3-4.7-11.3-12.6c0-8.4,6.8-13.7,16.6-13.7
C321,24.6,327.7,29.3,329.3,37.2z"/>
<path d="M367,69.1h-31.1V25.6h10.4v34.1H367V69.1z"/>
</g>
<g>
<rect x="7.1" y="67.7" class="st1" width="20.3" height="20.3"/>
<polygon class="st1" points="67.8,47.4 67.8,27.2 47.6,27.2 47.6,7 27.4,7 27.4,27.2 7.1,27.2 7.1,47.4 27.4,47.4 27.4,67.7
47.6,67.7 47.6,87.9 67.8,87.9 67.8,67.7 88.1,67.7 88.1,47.4 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -0,0 +1,63 @@
if (!loggedIn()
&& window.location.pathname != '/account/login'
&& window.location.pathname != '/account/create'
&& window.location.pathname != '/account/verify'
&& window.location.pathname != '/account/reset-password') {
window.location = '/account/login?redir='+encodeURIComponent(window.location);
}
$(function() {
// highlight current page in left nav
var $currentPageLink = $('.container > nav a[href="'+window.location.pathname+'"]');
$currentPageLink.addClass('current');
// shortcut any logout links to make the POST directly
$('a[href="/account/logout"]').click(function() {
logout();
return false;
});
});
function loggedIn() {
return document.cookie.indexOf('user=') > -1;
}
function logout() {
$.post('/api/logout').done(function() {
window.location = '/';
}).fail(function(jqxhr, status, error) {
document.cookie = 'user=; Path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
swal({
icon: "error",
title: error,
content: errorContent(jqxhr)
}).then(function() {
window.location = '/account/'
});
});
}
function errorContent(jqxhr) {
var div = document.createElement('div');
var p1 = document.createElement('p');
p1.appendChild(document.createTextNode("Sorry, something went wrong:"));
div.appendChild(p1);
var p2 = document.createElement('p');
var p2b = document.createElement('b');
p2b.appendChild(document.createTextNode(jqxhr.responseJSON ? jqxhr.responseJSON.error.message : jqxhr.status + " " + jqxhr.statusText));
p2.appendChild(p2b)
div.appendChild(p2);
if (jqxhr.responseJSON) {
var p3 = document.createElement('p');
p3.appendChild(document.createTextNode("Please include this error ID if reporting:"));
p3.appendChild(document.createElement('br'));
p3.appendChild(document.createTextNode(jqxhr.responseJSON.error.id));
div.appendChild(p3);
}
return div;
}

View file

@ -0,0 +1,28 @@
if (loggedIn()) window.location = '/account/';
$(function() {
$('form input').first().focus();
$('form').submit(function(event) {
$('#submit').prop('disabled', true);
$.post($(this).prop("action"), $(this).serialize()).done(function() {
swal({
icon: "success",
title: "Check your email",
text: "We've sent you an email with a link that expires in 48 hours. Please verify your account before you can use it."
}).then(function() {
window.location = '/account/verify';
});
}).fail(function(jqxhr, status, error) {
swal({
icon: "error",
titleText: "Error",
content: errorContent(jqxhr)
});
$('#submit').prop('disabled', false);
});
return false;
});
});

View file

@ -0,0 +1,128 @@
// download package list as soon as possible
$.get("/api/user-packages").done(function(json) {
var packageList = json.result;
// wait until the DOM has finished loading before rendering the results
$(function() {
// trying out this fancy new syntax:
// https://twitter.com/joshmanders/status/1282395540970496001
packageList.forEach(pkg => {
var $tdPath = $('<td><input type="text" name="path" maxlength="255"></td>');
var $tdListed = $('<td class="text-center"><input type="checkbox" name="listed"></td>');
var $tdAvail = $('<td class="text-center"><input type="checkbox" name="available"></td>');
var $tdDownloads = $('<td>0</td>');
var $tdLinks = $('<td><a href="javascript:" class="rescan-package">Rescan</a> &nbsp; <a href="javascript:" class="delete-package">Delete</a></td>');
if (pkg.listed) {
$('input', $tdListed).prop('checked', true);
}
if (pkg.available) {
$('input', $tdAvail).prop('checked', true);
}
if (pkg.downloads) {
$tdDownloads.text(pkg.downloads);
}
var $pathInput = $('input', $tdPath);
$pathInput.val(pkg.path).attr('size', pkg.path.length);
var $tr = $('<tr data-package-id="'+pkg.id+'"></tr>');
$tr.append($tdPath)
.append($tdListed)
.append($tdAvail)
.append($tdDownloads)
.append($tdLinks);
$('#user-packages').append($tr);
// scroll package paths to the left so if they get
// cut off, the leaf package name is still visible
$pathInput.scrollLeft($pathInput.width());
});
});
});
$(function() {
// update packages when fields change
$('#user-packages').on('change', 'input', function() {
$tr = $(this).closest('tr');
$('input', $tr).prop('disabled', true);
$.post('/api/update-package', {
id: $tr.data('package-id'),
listed: $('[name=listed]', $tr).prop('checked') ? 1 : 0,
available: $('[name=available]', $tr).prop('checked') ? 1 : 0,
path: $('[name=path]', $tr).val()
}).fail(function(jqxhr, status, error) {
swal({
icon: "error",
title: "Could not save changes",
content: errorContent(jqxhr)
});
}).always(function() {
$('input', $tr).prop('disabled', false);
});
});
// rescan package
$('#user-packages').on('click', '.rescan-package', function() {
if ($(this).hasClass('disabled')) return;
$tr = $(this).closest('tr');
$('a', $tr).addClass('disabled');
$.post('/api/rescan-package', {
package_id: $tr.data('package-id')
}).done(function(jqxhr, status, error) {
swal({
icon: "success",
title: "Rescan Complete",
text: "Package has been re-scanned and its documentation has been updated."
});
}).fail(function(jqxhr, status, error) {
swal({
icon: "error",
title: "Rescan failed",
content: errorContent(jqxhr)
});
}).always(function() {
$('a', $tr).removeClass('disabled');
});
});
// delete package
$('#user-packages').on('click', '.delete-package', function() {
if ($(this).hasClass('disabled')) return;
swal({
title: "Delete package?",
text: "Deleting the package will remove it from our website.",
icon: "warning",
buttons: true,
dangerMode: true,
}).then((willDelete) => {
// abort if user cancelled
if (!willDelete) return;
$tr = $(this).closest('tr');
$('input', $tr).prop('disabled', true);
$.post('/api/delete-package', {
id: $tr.data('package-id')
}).done(function(jqxhr, status, error) {
$tr.remove();
swal({
icon: "success",
title: "Package deleted"
});
}).fail(function(jqxhr, status, error) {
swal({
icon: "error",
title: "Delete failed",
content: errorContent(jqxhr)
});
}).always(function() {
$('input', $tr).prop('disabled', false);
});
});
});
});

View file

@ -0,0 +1,24 @@
if (loggedIn()) window.location = '/account/';
$(function() {
$('form input').first().focus();
$('form').submit(function(event) {
$('#submit').prop('disabled', true);
$.post($(this).prop("action"), $(this).serialize()).done(function() {
var qsParams = new URLSearchParams(window.location.search);
var destination = qsParams.get('redir');
window.location = destination ? destination : '/account/';
}).fail(function(jqxhr, msg, error) {
swal({
icon: "error",
title: "Bad credentials",
content: errorContent(jqxhr)
});
$('#submit').prop('disabled', false);
});
return false;
});
});

View file

@ -0,0 +1 @@
logout();

View file

@ -0,0 +1,27 @@
$(function() {
$('form input').first().focus();
$('form').submit(function(event) {
$('#submit').prop('disabled', true);
$.post($(this).prop("action"), $(this).serialize()).done(function() {
swal({
icon: "success",
title: "It's yours",
text: "Package claimed. Its documentation is now available on our website and you are responsible for maintaining it. Thank you!"
}).then(function() {
// TODO: ...
// window.location = "/account/login";
});
}).fail(function(jqxhr, status, error) {
swal({
icon: "error",
title: error,
content: errorContent(jqxhr)
});
$('#submit').prop('disabled', false);
});
return false;
});
});

View file

@ -0,0 +1,80 @@
if (loggedIn()) window.location = '/account/';
$(function() {
var qsParams = new URLSearchParams(window.location.search);
var email = qsParams.get("email");
var token = qsParams.get("token");
$('input[name=email]').val(email);
$('input[name=token]').val(token);
if (email && token) showStep2();
$('form input:visible').first().focus();
$('#reset-password-step1').submit(function(event) {
$('button').prop('disabled', false);
$.post($(this).prop("action"), $(this).serialize()).done(function() {
swal({
icon: "info",
title: "Check your email",
text: "If we have an account with that email address, we just sent you some instructions."
}).then(function() {
window.location = '/';
});
}).fail(function(jqxhr, status, error) {
swal({
icon: "error",
title: error,
content: errorContent(jqxhr)
});
$('button').prop('disabled', false);
});
return false;
});
$('#reset-password-step2').submit(function(event) {
$('button').prop('disabled', false);
$.post($(this).prop("action"), $(this).serialize()).done(function() {
swal({
icon: "success",
title: "Reset completed",
text: "You may now log in with your new password."
}).then(function() {
window.location = '/account/login';
});
}).fail(function(jqxhr, status, error) {
swal({
icon: "error",
title: "Error",
content: errorContent(jqxhr)
});
$('button').prop('disabled', false);
});
return false;
});
$('#goto-step1').click(function(event) {
$('#reset-password-step2').hide('fast');
$('#reset-password-step1').show('fast', function() {
$('input:visible').first().focus();
});
return false;
});
$('#goto-step2').click(function(event) {
showStep2();
return false;
});
});
function showStep2() {
$('#reset-password-step1').hide('fast');
$('#reset-password-step2').show('fast', function() {
if ($('input[name=token]').val() != "")
$('input[name=password]').focus();
else
$('input:visible').first().focus();
});
}

View file

@ -0,0 +1,36 @@
if (loggedIn()) window.location = '/account/';
$(function() {
$('form input').first().focus();
$('form').submit(function(event) {
$('#submit').prop('disabled', true);
$.post($(this).prop("action"), $(this).serialize()).done(function() {
swal({
icon: "success",
title: "Account confirmed",
text: "Thank you. You may now log in and use your account!"
}).then(function() {
window.location = "/account/login";
});
}).fail(function(jqxhr, status, error) {
swal({
icon: "error",
title: error,
content: errorContent(jqxhr)
});
$('#submit').prop('disabled', false);
});
return false;
});
// if info is in the query string, fill use and submit it
var qsParams = new URLSearchParams(window.location.search);
var email = qsParams.get("email");
var acct = qsParams.get("code");
$('input[name=email]').val(email);
$('input[name=account_id]').val(acct);
if (email && acct) $('form').submit();
});

View file

@ -0,0 +1,81 @@
document.addEventListener('DOMContentLoaded', function() {
// Algolia search
docsearch({
appId: "BH4D9OD16A",
apiKey: '14275a785f6ebd31d162f9d2d8fc0125',
indexName: 'caddyserver',
container: '#search',
});
});
const caddyImportPath = 'github.com/caddyserver/caddy/v2';
function isStandard(packagePath) {
return packagePath.startsWith(caddyImportPath);
}
function truncate(str, maxLen) {
if (!str) return "";
str = str.trim();
let firstPeriod = str.match(/\.(\s|$)/); // first dot not in the middle of a word, or at end of string
let terminate = firstPeriod ? firstPeriod.index+1 : str.length;
str = str.substring(0, terminate);
if (str.length <= maxLen) {
return str;
}
return str+"...";
}
function moduleDocsPreview(mod, maxLen) {
if (!mod || !mod.docs) return "";
let short = truncate(mod.docs, maxLen);
if (short.indexOf(mod.name) === 0) {
short = short.substr(mod.name.length).trim();
}
return short;
}
function detectPlatform() {
// assume 32-bit linux, then change OS and architecture if justified
var os = "linux", arch = "amd64";
// change os
if (/Macintosh/i.test(navigator.userAgent)) {
os = "darwin";
} else if (/Windows/i.test(navigator.userAgent)) {
os = "windows";
} else if (/FreeBSD/i.test(navigator.userAgent)) {
os = "freebsd";
} else if (/OpenBSD/i.test(navigator.userAgent)) {
os = "openbsd";
}
// change architecture
if (os == "darwin" || /amd64|x64|x86_64|Win64|WOW64|i686|64-bit/i.test(navigator.userAgent)) {
arch = "amd64";
} else if (/arm64/.test(navigator.userAgent)) {
arch = "arm64";
} else if (/ ARM| armv/.test(navigator.userAgent)) {
arch = "arm";
}
// change arm version
if (arch == "arm") {
var arm = "7"; // assume version 7 by default
if (/armv6/.test(navigator.userAgent)) {
arm = "6";
} else if (/armv5/.test(navigator.userAgent)) {
arm = "5";
}
arch += arm;
}
return [os, arch];
}
// Detect the platform OS, but with an allow-list of values
// and if the value is not allowed, return the default.
function defaultOS(allowed, def) {
var [os] = detectPlatform();
return allowed.includes(os) ? os : def;
}

View file

@ -0,0 +1,393 @@
// TODO: sanitize all HTML renderings, especially markdown: https://github.com/cure53/DOMPurify
var pageDocs = {};
var pageData = {};
var $hovercard;
const nonStandardFlag = '<span class="nonstandard-flag" title="This module does not come with official Caddy distributions by default; it needs to be added to custom Caddy builds.">Non-standard</span>';
const standardFlag = '<span class="standard-flag" title="This module comes with official Caddy distributions by default.">Standard</span>';
$(function() {
$hovercard = $('#hovercard');
var hoverTimeout;
$hovercard.hover(function() {
clearTimeout(hoverTimeout);
}, function() {
clearTimeout(hoverTimeout);
$hovercard.removeClass('popup');
});
// toggle an object as expanded or collapsed
$('body').on('click', '.renderbox .toggle-obj', function() {
if ($(this).hasClass('expanded')) {
// collapse
$(this).html('&#9656;');
} else {
// expand
$(this).html('&#9662;');
}
$(this).nextUntil('.end-obj').toggleClass('collapsed');
$(this).toggleClass('expanded');
});
$('body').on({
mouseenter: function() {
// don't allow hoverbox to close anymore, we're re-opening it
clearTimeout(hoverTimeout);
var pos = $(this).offset();
var moduleID = $(this).closest('.module-repo-container').data('module-id') || '';
var moduleData = pageData[moduleID];
// there is a gap between the hoverbox and the link that originated it;
// there may be a different link in this gap; if the hover box is visible,
// then we should ignore the hover on this link to allow cursor to visit
// the hoverbox if that is where it is going; this makes it possible to
// visit the hoverbox while it is over a list of links that are tightly
// stacked vertically; if user wants to visit hoverbox for link in this
// gap, they can just move the cursor slow enough to fire the timeout
if ($hovercard.is(':visible') && $hovercard.offset().top - 10 < pos.top) {
return;
}
// fill out hovercard
var elemPath = $(this).data('path');
var modNamespace = $(this).data('namespace');
$('.hovercard-elem').hide();
if ($(this).hasClass('module')) {
// module
var $list =$('<div/>');
if (moduleData.namespaces && moduleData.namespaces[modNamespace]) {
for (var i = 0; i < moduleData.namespaces[modNamespace].length; i++) {
var modInfo = moduleData.namespaces[modNamespace][i];
var href = canTraverse(moduleData) ? '.'+elemPath+'/'+modInfo.name+'/' : './'+modNamespace+'.'+modInfo.name;
var content = '<a href="'+href+'" class="module-link"> '+modInfo.name;
if (!isStandard(modInfo.package)) {
content += nonStandardFlag;
}
content += '<span class="module-link-description">'+truncate(modInfo.docs, 115)+'</span></a>';
$list.append(content);
}
}
$('#hovercard-module-list').html($list);
$('#hovercard-namespace').text(modNamespace)
$('#hovercard-module').show();
} else if ($(this).hasClass('module-inline-key')) {
// inline key
$('#hovercard-inline-key').show();
} else if ($(this).hasClass('breadcrumb')) {
// breadcrumb siblings
var siblingPath = $(this).data('sibling-path');
var bcVal = moduleData.breadcrumb[siblingPath];
var bcSiblings = [];
// drill down to the true underlying type
while (bcVal.elems) {
bcVal = bcVal.elems;
}
switch (bcVal.type) {
case "struct":
for (var j = 0; j < bcVal.struct_fields.length; j++) {
var sf = bcVal.struct_fields[j];
bcSiblings.push({name: sf.key, path: siblingPath, isStandard: isStandard(bcVal.type_name)})
}
break;
case "module":
case "module_map":
for (var j = 0; j < moduleData.namespaces[bcVal.module_namespace].length; j++) {
var mod = moduleData.namespaces[bcVal.module_namespace][j];
bcSiblings.push({name: mod.name, path: siblingPath, isStandard: isStandard(mod.package)})
}
}
var $siblings = $('<div class="breadcrumb-siblings"/>').append('<div class="breadcrumb-siblings-title">Siblings:</div>');
for (var j = 0; j < bcSiblings.length; j++) {
var sib = bcSiblings[j];
var sibPath = sib.path;
if (sibPath) {
sibPath += "/";
}
sibPath += sib.name+"/";
var aTag = '<a href="'+jsonDocsPathPrefix+sibPath+'"';
if (!sib.isStandard) {
aTag += ' class="nonstandard" title="Non-standard module"';
}
aTag += '>'+sib.name+'</a>';
$siblings.append(aTag);
}
$('#hovercard-breadcrumb-siblings').html($siblings).show();
} else if ($(this).hasClass('documented')) {
// docs
var elemDocs = truncate(pageDocs[elemPath], 500);
if (!elemDocs) {
elemDocs = '<p class="explain">There are no docs for this property.</p>';
return;
}
$('#hovercard-docs').html(markdown(elemDocs)).show();
$('#hovercard-inline-link').html('<a href="#'+elemPath.substr(1)+'">View docs below &#8595;</a>').show();
}
// show hoverbox for this link
var height = $(this).height();
var linkWidth = $(this).width();
var boxWidth = $hovercard.width();
$hovercard.css({
'top': pos.top + height*1.5 + 10, // '+10' counters 'translateY(-10px)'
'left': pos.left + (linkWidth/2) - (boxWidth/2)
}).addClass('popup');
},
mouseleave: function() {
// don't hide the hoverbox right away; user might need a
// few milliseconds to get the cursor over the hovercard
hoverTimeout = setTimeout(function() {
$hovercard.removeClass('popup');
}, 200);
}
}, '.has-popup');
});
function beginRenderingInto($tpl, moduleID, module) {
console.log("RENDERING:", moduleID, module);
$tpl.data('module-id', moduleID);
pageData[moduleID] = module;
// show notice if module is non-standard
if (module.repo) {
if (!isStandard(module.structure.type_name)) {
let { pkg, _ } = splitTypeName(module.structure.type_name);
$('.nonstandard-project-link', $tpl).attr('href', module.repo).text(module.repo);
$('.nonstandard-package-path', $tpl).text(pkg);
$('.nonstandard-notice', $tpl).css('display', 'block').prepend(nonStandardFlag); // for some reason show() dosen't work
}
var $repoName = $('<span/>').text(stripScheme(module.repo));
$('.module-repo-selector', $tpl).html('<span class="module-repo-selector-arrow">&#9656;</span>').append($repoName);
}
// for most types, just render their docs; but for maps or arrays, fall through to underlying type for docs
let rawDocs = module.structure.doc ?? module.structure.elems;
$('.top-doc', $tpl).html(markdown(replaceGoTypeNameWithCaddyModuleName(rawDocs, module, moduleID)));
$('.top-doc', $tpl).append(makeSubmoduleList(module, "", module.structure));
let $group = newGroup();
renderData($tpl, module, module.structure, 0, "", $group);
$('.renderbox', $tpl).append($group);
if ($('.field-list-contents', $tpl).text().trim()) {
$('.field-list-header', $tpl).show();
}
// TODO: see about fixing this for module and JSON docs pages
// // if the browser tried to navigate directly to an element
// // on the page when it loaded, it would have failed since
// // we hadn't rendered it yet; but now we can scroll to it
// // directly since rendering has finished
// if (window.location.hash.length > 1) {
// document.getElementById(window.location.hash.substr(1)).scrollIntoView();
// }
}
function renderData($tpl, module, data, nesting, path, $group) {
switch (data.type) {
case "struct":
$group.append('{<a href="javascript:" class="toggle-obj expanded" title="Collapse/expand">&#9662;</a>');
nesting++;
var $fieldGroup = newGroup();
renderModuleInlineKey($tpl, module, data, nesting, $fieldGroup);
$group.append($fieldGroup);
if (data.struct_fields) {
// TODO: Not sure if sorting the struct fields is a good idea...
// data.struct_fields.sort(function(a, b) {
// if (a.key > b.key) return 1;
// if (b.key > a.key) return -1;
// return 0;
// });
for (var i = 0; i < data.struct_fields.length; i++) {
var field = data.struct_fields[i];
var fieldPath = path+"/"+field.key;
var cleanFieldPath = fieldPath.slice(1); // trim leading slash
// store the docs for this path
let linkClass = "documented";
if (field.doc) {
pageDocs[fieldPath] = field.doc;
linkClass += " has-popup";
}
// render the docs to the page
var fieldDoc = markdown(field.doc) || '<p class="explain">There are no docs for this property.</p>';
fieldDoc += makeSubmoduleList(module, fieldPath, field.value);
appendToFieldDocs($tpl, module, cleanFieldPath, fieldDoc);
// render the field to the JSON box
var $fieldGroup = newGroup();
indent(nesting, $fieldGroup);
var keyATag = '<a ';
if (canTraverse(module)) {
keyATag += 'href=".'+fieldPath+'/" ';
}
keyATag += 'data-path="'+fieldPath+'" class="'+linkClass+'">'+field.key+'</a>';
$fieldGroup.append('<span class="qu">"</span><span class="key">'+keyATag+'</span><span class="qu">"</span>: ');
renderData($tpl, module, field.value, nesting, fieldPath, $fieldGroup);
if (i < data.struct_fields.length-1) {
$fieldGroup.append(',');
}
$group.append($fieldGroup);
}
}
nesting--;
indent(nesting, $group);
$group.append('<span class="end-obj">}</span>');
break;
case "bool":
$group.append('<span class="bool">false</span>'); // TODO: default value?
break;
case "int":
case "uint":
case "float":
case "complex":
$group.append('<span class="num">0</span>'); // TODO: default value?
break;
case "string":
$group.append('<span class="qu">"</span><span class="str"></span><span class="qu">"</span>'); // TODO: default value?
break;
case "array":
$group.append('[');
if (data.elems.type == "module_map") {
$group.append('{<a href=".'+path+'/" class="module has-popup" data-namespace="'+(data.elems.module_namespace || '')+'" data-path="'+path+'">&bull;&bull;&bull;</a>}');
} else {
renderData($tpl, module, data.elems, nesting, path, $group);
}
$group.append(']');
break;
case "map":
$group.append('{\n')
nesting++;
renderModuleInlineKey($tpl, module, data, nesting, $group);
indent(nesting, $group);
renderData($tpl, module, data.map_keys, nesting, path, $group);
$group.append(': ');
renderData($tpl, module, data.elems, nesting, path, $group);
$group.append('\n');
nesting--;
indent(nesting, $group);
$group.append('}');
break;
case "module":
case "module_map":
var aTag = '<a';
if (canTraverse(module)) {
aTag += ' href=".'+path+'/"';
}
aTag += ' class="module has-popup" data-namespace="'+(data.module_namespace || '')+'" data-path="'+path+'">&bull;&bull;&bull;</a>';
$group.append('{'+aTag+'}');
break;
}
}
function renderModuleInlineKey($tpl, module, data, nesting, $group) {
if (!data.module_inline_key) {
return
}
var moduleName = pathComponents[pathComponents.length-2];
indent(nesting, $group);
$group.append('<span class="qu">"</span><span class="key module-inline-key has-popup">'+data.module_inline_key+'</span><span class="qu">"</span>: <span class="qu">"</span><span class="str"><b>'+moduleName+'</b></span><span class="qu">"</span>');
if (data.struct_fields && data.struct_fields.length > 0) {
$group.append(',');
}
$group.append('\n');
appendToFieldDocs($tpl, module, data.module_inline_key, $('#hovercard-inline-key').html());
}
function appendToFieldDocs($tpl, module, cleanFieldPath, fieldDoc) {
var dt = cleanFieldPath;
if (canTraverse(module)) {
dt = '<a href="./'+cleanFieldPath+'/">'+dt+'</a>';
}
$('.field-list-contents', $tpl).append('<dt class="field-name" id="'+cleanFieldPath+'"><a href="#'+cleanFieldPath+'" class="inline-link">&#128279;</a>'+dt+'</dt> <dd>'+fieldDoc+'</dd>');
}
function indent(nesting, $group) {
var $span = $('<span class="indent"></span>');
$span.append('\t'.repeat(nesting));
$group.append($span);
}
function makeSubmoduleList(module, path, value) {
while (value.elems) {
value = value.elems;
}
if (value.type != "module" && value.type != "module_map") {
return '';
}
var submodList = '<ul>';
if (module.namespaces && module.namespaces[value.module_namespace]) {
for (var j = 0; j < module.namespaces[value.module_namespace].length; j++) {
var submod = module.namespaces[value.module_namespace][j];
var href = canTraverse(module) ? '.'+path+'/'+submod.name+'/' : './'+value.module_namespace+'.'+submod.name;
var submodLink = '<a href="'+href+'">'+submod.name+'</a>';
if (!isStandard(submod.package)) {
submodLink += ' '+nonStandardFlag;
}
submodList += '<li>'+submodLink+'</li>';
}
}
submodList += '</ul>';
return '<div><p>Fulfilled by modules in namespace: <b>'+value.module_namespace+'</b></p>'+submodList+'</div>';
}
// canTraverse returns true if the page data
// includes breadcrumbs; i.e. we are on a page
// that can traverse the JSON structure, not
// only render part of it in isolation.
function canTraverse(data) {
return data.breadcrumb != null;
}
function newGroup() {
return $('<div class="group"/>');
}
function replaceGoTypeNameWithCaddyModuleName(docs, module, moduleID) {
if (!docs || !moduleID) return docs;
// fully qualified type name
let fqtn = module.structure.type_name;
// extract just the local type name
let {_, typeName} = splitTypeName(fqtn);
// replace the type name with the Caddy module ID if it starts the docs.
if (docs.indexOf(typeName) === 0) {
docs = moduleID + docs.substr(typeName.length);
}
return docs;
}
function markdown(input) {
if (!input) {
return "";
}
return marked(input);
}

View file

@ -0,0 +1,87 @@
$(function() {
function hasPrefix(str, prefix) {
if (!prefix) return true;
if (!str) return false;
return str.indexOf(prefix) === 0;
}
// highlight current page in left nav
var $currentPageLink = $('main nav a[href="'+window.location.pathname+'"]');
if (hasPrefix(window.location.pathname, "/docs/json/")) {
// as a special case, highlight the JSON structure link anywhere within it
$currentPageLink = $('main nav a[href="/docs/json/"]');
}
if (hasPrefix(window.location.pathname, "/docs/modules/")) {
// as another special case, highlight the modules link anywhere within it
$currentPageLink = $('main nav a[href="/docs/modules/"]');
}
$currentPageLink.addClass('current');
// add anchor links, inspired by https://github.com/bryanbraun/anchorjs
$('article > h1[id], article > h2[id], article > h3[id], article > h4[id], article > h5[id], article > h6[id]').each(function() {
var $anchor = $('<a href="#'+this.id+'" class="anchor-link" title="Direct link">🔗</a>');
$(this).append($anchor);
});
// the server-side markdown renderer annoyingly renders
// colored code blocks differently from plain ones, in that
// colorized ones do not have the additional <code> inside
// the <pre>; this line finds those and adds a .chroma class
// to the outer pre element, and our CSS file has a style to
// ensure the inner code block does not produce extra padding
$('article > pre:not(.chroma) > code:not(.cmd)').parent().addClass('chroma');
// Add links to Caddyfile directive tokens in code blocks.
// See include/docs-head.html for the whitelist bootstrapping logic
$('pre.chroma .k')
.filter((k, item) =>
window.CaddyfileDirectives.includes(item.innerText)
|| item.innerText === '<directives...>'
)
.map(function(k, item) {
let text = item.innerText;
let url = text === '<directives...>'
? '/docs/caddyfile/directives'
: '/docs/caddyfile/directives/' + text;
text = text.replace(/</g,'&lt;').replace(/>/g,'&gt;');
$(item).html('<a href="' + url + '" style="color: inherit;" title="Directive">' + text + '</a>');
});
// Add links to [<matcher>] or named matcher tokens in code blocks.
// The matcher text includes <> characters which are parsed as HTML,
// so we must use text() to change the link text.
$('pre.chroma .nd')
.map(function(k, item) {
let text = item.innerText.replace(/</g,'&lt;').replace(/>/g,'&gt;');
$(item).html('<a href="/docs/caddyfile/matchers#syntax" style="color: inherit;" title="Matcher token">' + text + '</a>');
});
});
// addLinkaddLinksToSubdirectivessToAnchors finds all the ID anchors
// in the article, and turns any directive or subdirective span into
// links that have an ID on the page. This is opt-in for each page,
// because it's not necessary to run everywhere.
function addLinksToSubdirectives() {
let anchors = $('article *[id]').map((i, el) => el.id).toArray();
$('pre.chroma .k')
.filter((k, item) => anchors.includes(item.innerText))
.map(function(k, item) {
let text = item.innerText.replace(/</g,'&lt;').replace(/>/g,'&gt;');
let url = '#' + item.innerText;
$(item).html('<a href="' + url + '" style="color: inherit;" title="' + text + '">' + text + '</a>');
});
}
function stripScheme(url) {
return url.substring(url.indexOf("://")+3);
}
// splitTypeName splits a fully qualified type name into
// its package path and type name components, for example:
// "github.com/foo/bar.Type" => "github.com/foo/bar" and "Type".
function splitTypeName(fqtn) {
let lastDotPos = fqtn.lastIndexOf('.');
let pkg = fqtn.substr(0, lastDotPos);
let typeName = fqtn.substr(lastDotPos+1);
return {pkg: pkg, typeName: typeName};
}

View file

@ -0,0 +1,278 @@
// download package list as soon as possible
$.get("/api/packages").done(function(json) {
// sort package list by most popular, seems to make sense for convenience
var packageList = json.result;
packageList.sort((a, b) => {
return b.downloads > a.downloads ? 1 : -1;
});
const preselectedPackage = new URL(window.location.href).searchParams.getAll("package");
// wait until the DOM has finished loading before rendering the results
$(function() {
const packageTemplate =
'<div class="package">\n'+
' <div class="package-icon">&#128230;</div>\n'+
' <div class="package-data">\n'+
' <div class="package-meta">\n'+
' <b>downloads:</b> <span class="package-downloads"></span>\n'+
' <b>version:</b> <input type="text" class="package-version-input" name="version" placeholder="latest" title="Any version string recognized by `go get` can be used">\n'+
' </div>\n'+
' <a target="_blank" title="View package repo" class="package-link"></a>\n'+
' <div class="package-modules"></div>\n'+
' </div>\n'+
'</div>\n'
const moduleTemplate =
'<div class="module">\n'+
' &#128268; <a target="_blank" title="View module docs" class="module-link"></a>\n'+
' <span class="module-desc"></span>\n'+
'</div>\n';
for (var i = 0; i < packageList.length; i++) {
var pkg = packageList[i];
var $pkg = $(packageTemplate);
let { provider, path } = splitVCSProvider(pkg.path);
if (provider) {
var $pkgHost = $('<span class="package-host"/>').text(provider);
$('.package-link', $pkg).html($pkgHost).append('<br/>');
}
$pkgName = $('<span class="package-name"/>').text(path);
$('.package-link', $pkg).append($pkgName);
$('.package-link', $pkg).prop('href', pkg.repo);
$('.package-downloads', $pkg).text(pkg.downloads);
if (preselectedPackage.includes(pkg.path)) {
$($pkg).addClass("selected");
}
if (pkg.modules && pkg.modules.length > 0) {
for (var j = 0; j < pkg.modules.length; j++) {
var mod = pkg.modules[j];
var $mod = $(moduleTemplate);
// TODO: if this module name collides with that from another package, add a #hash to the URL to expand the right module's docs automatically
$('.module-link', $mod).attr('href', '/docs/modules/'+mod.name).text(mod.name).attr('title', "View module details");
$('.module-desc', $mod).text(moduleDocsPreview(mod, 120));
$('.package-modules', $pkg).append($mod);
}
} else {
$('.package-modules', $pkg)
.addClass("package-no-modules")
.text('This package does not add any modules to the JSON config structure. Either it is another kind of plugin (such as a config adapter) or this listing is in error.');
}
$('#optional-packages').append($pkg);
}
updatePage();
});
}).fail(function(jqxhr, status, error) {
swal({
icon: "error",
title: "Unavailable",
content: $('<div>Sorry, the build server is down for maintenance right now. You can try again later or <a href="https://github.com/caddyserver/caddy/releases/latest">download pre-built Caddy binaries from GitHub</a> any time.</div>')[0]
});
$(function() {
disableFields(false);
});
});
$(function() {
autoPlatform();
downloadButtonHtml = $('#download').html();
$('#filter').on('search keyup', function(event) {
var count = 0;
var q = $(this).val().trim().toLowerCase();
$('.package').each(function() {
if (!q) {
// filter is cleared; show all
this.style.display = '';
return;
}
var corpus = $(this).find('.package-link, .module-link, .module-desc').text().trim().toLowerCase();
if (corpus.indexOf(q) === -1) {
this.style.display = 'none';
return;
}
this.style.display = '';
count++;
});
// update color of search input based on results
if (q) {
if (count > 0) {
$('#filter').addClass('found').removeClass('not-found');
} else {
$('#filter').addClass('not-found').removeClass('found');
}
} else {
$('#filter').removeClass('found not-found');
}
});
$('#platform').change(function() {
updatePage();
});
$('#optional-packages').on('click', '.package', function() {
$(this).toggleClass('selected');
updatePage();
let newUrl = new URL(window.location.href);
let currentSelected = newUrl.searchParams.getAll("package") ;
newUrl.searchParams.delete("package");
const pkgPath = $('.package-link', $(this)).text().trim();
if ($(this).hasClass('selected')) {
if (!currentSelected.includes(pkgPath)) {
currentSelected = [...currentSelected, pkgPath];
}
} else {
const position = currentSelected.indexOf(pkgPath);
if (position >= 0) {
currentSelected.splice(position, 1);
}
}
currentSelected.forEach( (selected) => newUrl.searchParams.append("package", selected));
history.replaceState({}, document.title, newUrl.toString());
});
// when a link within a package listing is clicked, only operate the link (don't select the package)
$('#optional-packages').on('click', '.package-link, .module-link, .package-version-input', function(event) {
event.stopPropagation();
});
$('#download').click(function() {
if ($(this).hasClass('disabled')) {
return false;
}
disableFields(true);
if (typeof fathom !== 'undefined') {
fathom.trackGoal('U9K2UTFV', 0);
}
$.ajax($(this).attr('href'), { method: "HEAD" }).done(function(data, status, jqxhr) {
window.onbeforeunload = null; // disable exit confirmation before "redirecting" to download
window.location = jqxhr.getResponseHeader("Location");
}).fail(function(jqxhr, status, error) {
handleBuildError(jqxhr, status, error);
}).always(function() {
enableFields();
});
return false;
});
})
// autoPlatform chooses the platform in the list that best
// matches the user's browser, if it's available.
function autoPlatform() {
var [os, arch] = detectPlatform();
$('#platform').val(os+"-"+arch);
updatePage();
}
function getDownloadLink() {
// make sure we at least have a default,
// in the case that autoPlatform() failed
var platformString = $('#platform').val();
if (!platformString) {
platformString = "linux-amd64"
}
// get platform components
var [os, arch, arm = ""] = platformString.split("-");
var qs = new URLSearchParams();
if (os) qs.set("os", os);
if (arch) qs.set("arch", arch);
if (arm) qs.set("arm", arm);
// get plugins and their versions
$('#optional-packages .selected').each(function() {
// get package path
var p = $('.package-link', this).text().trim();
// get package version, if user specified one
var ver = $('input[name=version]', this).val().trim();
if (ver) {
p += "@"+ver;
}
qs.append("p", p);
});
$("#darwin-warning").toggle(os === "darwin");
var idempotencyKey = Math.floor(Math.random() * 99999999999999);
qs.append("idempotency", idempotencyKey);
return "/api/download?"+qs.toString();
}
function handleBuildError(jqxhr, status, error) {
var $content = $('<div class="swal-custom-content">');
if (jqxhr.status == 502) {
swal({
icon: "error",
title: "Unavailable",
content: $content.html('Sorry, the build server is down for maintenance right now. You can try again later or <a href="https://github.com/caddyserver/caddy/releases/latest">download pre-built Caddy binaries from GitHub</a>.')[0]
});
} else {
swal({
icon: "error",
title: "Build failed",
content: $content.html('The two most common reasons are:<ol><li><b>A plugin is not compiling.</b> The developer must release a new version that compiles.</li><li><b>The build configuration is invalid.</b> If you specified any versions, make sure they are correct and <a href="https://golang.org/cmd/go/#hdr-Module_compatibility_and_semantic_versioning" target="_blank">within the same major version</a> as the path of the associated package.</li></ol>In the meantime, you can <a href="https://github.com/caddyserver/caddy/releases/latest">download Caddy from GitHub</a> without any plugins.')[0]
});
}
}
function updatePage() {
$('#package-count').text($('.package.selected').length);
$('#download').attr('href', getDownloadLink());
}
function disableFields(building) {
$('#download, #optional-packages').addClass('disabled');
$('.download-bar select, #optional-packages input').prop('disabled', true);
if (building) {
$('#download').html('<div class="loader"></div> Building');
// prevent accidentally leaving the page during a build
window.onbeforeunload = function() {
return "Your custom build is in progress.";
};
} else {
$('#download').html('Builds Unavailable');
}
}
function enableFields() {
$('#download, #optional-packages').removeClass('disabled');
$('.download-bar select, #optional-packages input').prop('disabled', false);
$('#download').html(downloadButtonHtml);
// allow user to leave page easily
window.onbeforeunload = null;
}
function splitVCSProvider(pkgPath) {
var providers = ["github.com/", "bitbucket.org/"];
for (var i = 0; i < providers.length; i++) {
if (pkgPath.toLowerCase().indexOf(providers[i]) == 0) {
return {
provider: providers[i],
path: pkgPath.slice(providers[i].length)
};
}
}
return {provider: "", path: pkgPath};
}
var downloadButtonHtml; // to restore button to its original contents

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,52 @@
const jsonDocsPathPrefix = "/docs/json/";
var configPath = window.location.pathname.substr(jsonDocsPathPrefix.length-1); // keep trailing slash
var pathComponents = configPath.split('/');
setPageTitle();
// load the docs for this path
$.get("/api/docs/config"+configPath, function(json) {
// wait until the DOM has finished loading before rendering the results
$(function() {
beginRenderingInto($('#json-docs-container'), '', json.result);
// establish the breadcrumb
var $bc = $('.breadcrumbs');
$('<a href="'+jsonDocsPathPrefix+'" id="top-breadcrumb">JSON Config Structure</a> &rsaquo;').appendTo($bc);
for (var i = 1; i < pathComponents.length-1; i++) {
var bcPath = pathComponents.slice(0, i+1).join('/');
var bcSiblingPath = pathComponents.slice(1, i).join('/');
// enclosing with span is a hack so jQuery treats this as a HTML DOM object
$('<span> &rsaquo; <a href="'+jsonDocsPathPrefix+bcPath.substr(1)+'/" class="breadcrumb has-popup" data-sibling-path="'+bcSiblingPath+'">'+pathComponents[i]+'</a></span>').appendTo($bc);
}
// re-trigger the URL fragment if any, to scroll to the archor
var fragment = window.location.hash;
if (fragment) {
window.location.hash = '';
window.location.hash = fragment;
}
});
});
function setPageTitle() {
// set the page title with something useful
var parts = configPath.split("/");
if (parts.length > 1) {
if (!parts[0]) {
parts.shift();
}
if (!parts[parts.length-1]) {
parts.pop();
}
var titlePrefix = parts.slice(-2).join("/");
if (parts.length > 4) {
titlePrefix = parts.slice(0, 2).join("/")+"/.../"+titlePrefix;
}
if (titlePrefix) {
document.title = titlePrefix + " - " + document.title;
}
}
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,92 @@
const moduleDocsPathPrefix = "/docs/modules/";
var moduleID = window.location.pathname.substr(moduleDocsPathPrefix.length);
if (moduleID) {
// update page title and load the docs for these modules (possibly more than 1 with this ID)
document.title = "Module " + moduleID + " - Caddy Documentation";
$.get("/api/docs/module/"+moduleID, function(json) {
var modules = json.result;
// wait until the DOM has finished loading before rendering the results
$(function() {
$('#module-docs-container').show();
$('.module-name').text("Module "+moduleID);
modules.forEach((module) => {
$tpl = $('#module-template').clone().attr('id', stripScheme(module.repo));
if (modules.length > 1) {
$('article', $tpl).hide();
}
beginRenderingInto($tpl, moduleID, module);
$('#module-docs-container').append($tpl);
});
if (modules.length > 1) {
$('#module-multiple-repos .module-name').text(moduleID);
$('#module-multiple-repos').show();
} else {
$('.module-repo-selector').hide();
}
// if a specific repo's module is wanted, expand and scroll to it
if (window.location.hash.length > 1) {
// TODO: weird bug in jQuery(??) that it can't select IDs with slashes in them, so we use vanilla JS
var container = document.getElementById(window.location.hash.substr(1));
$('.module-repo-selector', container).click();
container.scrollIntoView();
}
});
});
$(function() {
$('body').on('click', '.module-repo-selector', function() {
if ($(this).hasClass('expanded')) {
// collapse
$('.module-repo-selector-arrow', this).html('&#9656;');
} else {
// expand
$('.module-repo-selector-arrow', this).html('&#9662;');
}
$(this).toggleClass('expanded');
$(this).next('article').toggle();
});
});
} else {
// populate the module list
$.get("/api/modules", function(json) {
var moduleList = json.result;
console.log("MODULE LIST:", moduleList);
// wait until the DOM has finished loading before rendering the results
$(function() {
$('#module-list-container').show();
$table = $('#module-list');
for (modID in moduleList) {
var infos = moduleList[modID];
infos.forEach((info) => {
// refine a short preview of the module's docs
let shortDoc = truncate(info.docs, 200);
if (shortDoc && shortDoc.indexOf(modID) === 0) {
shortDoc = shortDoc.substr(modID.length).trim();
}
let modLink = "./"+modID;
if (infos.length > 1) {
modLink += "#"+stripScheme(info.repo);
}
var standard = isStandard(info.package);
var $tr = $('<tr/>');
$tr.append('<td>'+(standard ? standardFlag : nonStandardFlag)+'</td>');
var $tdLink = $('<td><a href="'+modLink+'" class="module-link">'+modID+'</a></td>');
if (infos.length > 1) {
$tdLink.append($('<div class="module-repo-differentiator">').text('('+stripScheme(info.repo)+')'));
}
$tr.append($tdLink);
$tr.append($('<td/>').text(shortDoc));
$table.append($tr);
});
}
});
});
}

File diff suppressed because one or more lines are too long