diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb index a6214dc3fc1b62ebb62b7018514308f969892a69..ce32082099e3844141efa9214f2a9309ce85d9f3 100644 --- a/app/controllers/admin/settings_controller.rb +++ b/app/controllers/admin/settings_controller.rb @@ -16,6 +16,7 @@ module Admin show_staff_badge bootstrap_timeline_accounts thumbnail + hero min_invite_role activity_api_enabled peers_api_enabled @@ -34,6 +35,7 @@ module Admin UPLOAD_SETTINGS = %w( thumbnail + hero ).freeze def edit diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss index 0806171be1304aa9a8054aaab8cdaed192428889..a95b759840eb74c069828a6f2b3053d1096170e6 100644 --- a/app/javascript/styles/mastodon/about.scss +++ b/app/javascript/styles/mastodon/about.scss @@ -1,3 +1,130 @@ +$maximum-width: 1235px; +$fluid-breakpoint: $maximum-width + 20px; +$column-breakpoint: 700px; +$small-breakpoint: 960px; + +.container { + box-sizing: border-box; + max-width: $maximum-width; + margin: 0 auto; + position: relative; + + @media screen and (max-width: $fluid-breakpoint) { + width: 100%; + padding: 0 10px; + } +} + +.show-xs, +.show-sm { + display: none; +} + +.show-m { + display: block; +} + +@media screen and (max-width: $small-breakpoint) { + .hide-sm { + display: none !important; + } + + .show-sm { + display: block !important; + } +} + +@media screen and (max-width: $column-breakpoint) { + .hide-xs { + display: none !important; + } + + .show-xs { + display: block !important; + } +} + +.row { + display: flex; + flex-wrap: wrap; + margin: 0 -5px; + + @for $i from 1 through 15 { + .column-#{$i} { + box-sizing: border-box; + min-height: 1px; + flex: 0 0 percentage($i / 15); + max-width: percentage($i / 15); + padding: 0 5px; + + @media screen and (max-width: $small-breakpoint) { + &-sm { + box-sizing: border-box; + min-height: 1px; + flex: 0 0 percentage($i / 15); + max-width: percentage($i / 15); + padding: 0 5px; + + @media screen and (max-width: $column-breakpoint) { + max-width: 100%; + flex: 0 0 100%; + margin-bottom: 10px; + + &:last-child { + margin-bottom: 0; + } + } + } + } + + @media screen and (max-width: $column-breakpoint) { + max-width: 100%; + flex: 0 0 100%; + margin-bottom: 10px; + + &:last-child { + margin-bottom: 0; + } + } + } + } +} + +.column-flex { + display: flex; + flex-direction: column; +} + +.separator-or { + position: relative; + margin: 40px 0; + text-align: center; + + &::before { + content: ""; + display: block; + width: 100%; + height: 0; + border-bottom: 1px solid rgba($ui-base-lighter-color, .6); + position: absolute; + top: 50%; + left: 0; + } + + span { + display: inline-block; + background: $ui-base-color; + font-size: 12px; + font-weight: 500; + color: $ui-primary-color; + text-transform: uppercase; + position: relative; + z-index: 1; + padding: 0 8px; + cursor: default; + } +} + .landing-page { p, li { @@ -116,10 +243,14 @@ } hr { - border-color: rgba($ui-base-lighter-color, .6); + width: 100%; + height: 0; + border: 0; + border-bottom: 1px solid rgba($ui-base-lighter-color, .6); + margin: 20px 0; } - .container { + .container-alt { width: 100%; box-sizing: border-box; max-width: 800px; @@ -152,24 +283,20 @@ } } } + } - .mascot-container { - max-width: 800px; - margin: 0 auto; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 100%; + .brand { + a { + padding-left: 0; + padding-right: 0; + color: $white; } - .mascot { - position: absolute; - bottom: -14px; - width: auto; - height: auto; - left: 60px; - z-index: 3; + img { + height: 32px; + position: relative; + top: 4px; + left: -10px; } } @@ -177,7 +304,7 @@ line-height: 30px; overflow: hidden; - .container { + .container-alt { display: flex; justify-content: space-between; } @@ -203,21 +330,6 @@ } } - .brand { - a { - padding-left: 0; - padding-right: 0; - color: $white; - } - - img { - height: 32px; - position: relative; - top: 4px; - left: -10px; - } - } - ul { list-style: none; margin: 0; @@ -243,53 +355,6 @@ align-items: center; position: relative; - .floats { - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - - div { - position: absolute; - transition: all 0.1s linear; - animation-name: floating; - animation-iteration-count: infinite; - animation-direction: alternate; - animation-timing-function: ease-in-out; - z-index: 2; - } - - .float-1 { - width: 324px; - height: 170px; - right: -120px; - bottom: 0; - animation-duration: 3s; - background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447.1875 234.375" height="170" width="324"><path fill="#{hex-color($ui-base-lighter-color)}" d="M21.69 233.366c-6.45-1.268-13.347-5.63-16.704-10.564-10.705-15.734-1.513-37.724 18.632-44.57l4.8-1.632.173-17.753c.146-14.77.515-19.063 2.2-25.55 6.736-25.944 24.46-46.032 47.766-54.137 11.913-4.143 19.558-5.366 34.178-5.47l13.828-.096V71.12c0-4.755 2.853-17.457 5.238-23.327 8.588-21.137 26.735-35.957 52.153-42.593 23.248-6.07 50.153-6.415 71.863-.923 11.14 2.82 25.686 9.957 33.857 16.615 19.335 15.756 31.82 41.05 35.183 71.275.59 5.305.672 5.435 3.11 4.926 11.833-2.474 30.4-3.132 40.065-1.42 24.388 4.32 40.568 19.076 47.214 43.058 2.16 7.8 3.953 23.894 3.59 32.237l-.24 5.498 5.156 1.317c6.392 1.633 14.55 7.098 18.003 12.062 1.435 2.062 3.305 6.597 4.156 10.078 1.428 5.84 1.43 6.8.04 12.44-1.807 7.318-5.672 13.252-10.872 16.694-8.508 5.63 3.756 5.33-211.916 5.216-108.56-.056-199.22-.464-201.47-.906z"/></svg>'); - } - - .float-2 { - width: 241px; - height: 100px; - right: 210px; - bottom: 0; - animation-duration: 3.5s; - animation-delay: 0.2s; - background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 536.25 222.1875" height="100" width="241"><path fill="#{hex-color($ui-base-lighter-color)}" d="M42.626 221.23c-14.104-1.174-26.442-5.133-32.825-10.534-4.194-3.548-7.684-10.66-8.868-18.075-1.934-12.102.633-22.265 7.528-29.81 7.61-8.328 19.998-12.76 39.855-14.257l8.47-.638-2.08-6.223c-4.826-14.422-6.357-24.813-6.37-43.255-.012-14.923.28-18.513 2.1-25.724 2.283-9.048 8.483-23.034 13.345-30.1 14.76-21.45 43.505-38.425 70.535-41.65 30.628-3.655 64.47 12.073 89.668 41.673l5.955 6.995 2.765-4.174c1.52-2.296 5.74-6.93 9.376-10.295 18.382-17.02 43.436-20.676 73.352-10.705 12.158 4.052 21.315 9.53 29.64 17.733 12.752 12.562 18.16 25.718 18.19 44.26l.02 10.98 2.312-3.01c15.64-20.365 42.29-20.485 62.438-.28 3.644 3.653 7.558 8.593 8.697 10.976 4.895 10.24 5.932 25.688 2.486 37.046-.76 2.507-1.388 4.816-1.393 5.13-.006.316 6.845.87 15.224 1.234 53.06 2.297 76.356 12.98 81.817 37.526 3.554 15.973-3.71 28.604-19.566 34.02-4.554 1.555-17.922 1.655-234.517 1.757-126.327.06-233.497-.21-238.154-.597z"/></svg>'); - } - - .float-3 { - width: 267px; - height: 140px; - right: 110px; - top: -30px; - animation-duration: 4s; - animation-delay: 0.5s; - background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 388.125 202.5" height="140" width="267"><path fill="#{hex-color($ui-base-lighter-color)}" d="M181.37 201.458c-17.184-1.81-36.762-8.944-49.523-18.05l-5.774-4.12-8.074 2.63c-11.468 3.738-21.382 4.962-35.815 4.422-14.79-.554-24.577-2.845-36.716-8.594-15.483-7.332-28.498-19.98-35.985-34.968C2.44 128.675-.94 108.435.9 91.356c3.362-31.234 18.197-53.698 43.63-66.074 12.803-6.23 22.384-8.55 37.655-9.122 14.433-.54 24.347.684 35.814 4.42l8.073 2.633 5.635-4.01c24.81-17.656 60.007-23.332 92.914-14.985 10.11 2.565 25.498 9.62 33.102 15.178l5.068 3.704 7.632-2.564c10.89-3.66 21.086-4.916 35.516-4.376 45.816 1.716 76.422 30.03 81.285 75.196 1.84 17.08-1.54 37.32-8.585 51.422-7.487 14.99-20.502 27.636-35.984 34.968-12.14 5.75-21.926 8.04-36.716 8.593-14.43.54-24.626-.716-35.516-4.376l-7.632-2.564-5.068 3.704c-12.844 9.387-32.714 16.488-51.545 18.42-10.607 1.09-13.916 1.08-24.81-.066z"/></svg>'); - } - } - .heading { position: relative; z-index: 4; @@ -346,18 +411,18 @@ background: darken($ui-base-color, 4%); padding: 20px 0; - .container { + .container-alt { position: relative; padding-right: 280px + 15px; } - .information-board-sections { + &__sections { display: flex; justify-content: space-between; flex-wrap: wrap; } - .section { + &__section { flex: 1 0 0; font-family: 'mastodon-font-sans-serif', sans-serif; font-size: 16px; @@ -382,6 +447,10 @@ font-size: 32px; line-height: 48px; } + + @media screen and (max-width: $column-breakpoint) { + text-align: center; + } } .panel { @@ -460,111 +529,282 @@ } } - .features { - padding: 50px 0; + &.alternative { + padding: 10px 0; - .container { - display: flex; - } + .brand { + text-align: center; + padding: 30px 0; + margin-bottom: 10px; - #mastodon-timeline { - display: flex; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; - font-family: 'mastodon-font-sans-serif', sans-serif; - font-size: 13px; - line-height: 18px; - font-weight: 400; - color: $primary-text-color; - width: 330px; - margin-right: 30px; - flex: 0 0 auto; - background: $ui-base-color; - overflow: hidden; - border-radius: 4px; - box-shadow: 0 0 6px rgba($black, 0.1); + img { + position: static; + } - .column-header { - color: inherit; - font-family: inherit; - font-size: 16px; - line-height: inherit; - font-weight: inherit; - margin: 0; - padding: 0; + @media screen and (max-width: $small-breakpoint) { + padding: 15px 0; } - .column { + @media screen and (max-width: $column-breakpoint) { padding: 0; - border-radius: 4px; - overflow: hidden; + margin-bottom: -10px; } + } + } - .scrollable { - height: 400px; - } + &__information, + &__forms { + padding: 20px; + } + + &__call-to-action { + margin-bottom: 10px; + background: darken($ui-base-color, 4%); + border-radius: 4px; + padding: 25px 40px; + overflow: hidden; + + .row { + align-items: center; + } + + .information-board__section { + padding: 0; + } + } + + &__logo { + margin-right: 20px; + + img { + height: 50px; + width: auto; + mix-blend-mode: lighten; + } + } + + &__information { + padding: 45px 40px; + margin-bottom: 10px; - p { - font-size: inherit; - line-height: inherit; - font-weight: inherit; - color: $primary-text-color; + &:last-child { + margin-bottom: 0; + } + + @media screen and (max-width: $column-breakpoint) { + padding: 25px 20px; + } + } + + &__information, + &__forms, + #mastodon-timeline { + box-sizing: border-box; + background: $ui-base-color; + border-radius: 4px; + box-shadow: 0 0 6px rgba($black, 0.1); + } + + &__mascot { + height: 104px; + position: relative; + left: -40px; + bottom: 25px; + + img { + height: 190px; + width: auto; + } + } + + &__short-description { + .row { + align-items: center; + margin-bottom: 40px; + } + + @media screen and (max-width: $column-breakpoint) { + .row { margin-bottom: 20px; + } + } - &:last-child { - margin-bottom: 0; - } + p a { + color: $ui-secondary-color; + } - a { + h1 { + font-weight: 500; + color: $primary-text-color; + margin-bottom: 0; + + small { + color: $ui-primary-color; + + span { color: $ui-secondary-color; - text-decoration: none; } } } - .about-mastodon { - max-width: 675px; + p:last-child { + margin-bottom: 0; + } + } - p { - margin-bottom: 20px; + &__hero { + margin-bottom: 10px; + + img { + display: block; + margin: 0; + max-width: 100%; + height: auto; + border-radius: 4px; + } + } + + &__forms { + height: 100%; + + @media screen and (max-width: $small-breakpoint) { + margin-bottom: 10px; + height: auto; + } + + @media screen and (max-width: $column-breakpoint) { + background: transparent; + box-shadow: none; + padding: 0 20px; + margin-top: 30px; + margin-bottom: 40px; + + .separator-or { + span { + background: darken($ui-base-color, 8%); + } } + } - .features-list { - margin-top: 20px; + hr { + margin: 40px 0; + } - .features-list__row { - display: flex; - padding: 10px 0; - justify-content: space-between; + .button { + display: block; + } - &:first-child { - padding-top: 0; - } + .subtle-hint a { + text-decoration: none; - .visual { - flex: 0 0 auto; - display: flex; - align-items: center; - margin-left: 15px; - - .fa { - display: block; - color: $ui-primary-color; - font-size: 48px; - } - } + &:hover, + &:focus, + &:active { + text-decoration: underline; + } + } + } - .text { - font-size: 16px; - line-height: 30px; - color: $ui-primary-color; + #mastodon-timeline { + display: flex; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + font-family: 'mastodon-font-sans-serif', sans-serif; + font-size: 13px; + line-height: 18px; + font-weight: 400; + color: $primary-text-color; + width: 100%; + flex: 1 1 auto; + overflow: hidden; - h6 { - font-size: inherit; - line-height: inherit; - margin-bottom: 0; - } - } + .column-header { + color: inherit; + font-family: inherit; + font-size: 16px; + line-height: inherit; + font-weight: inherit; + margin: 0; + padding: 0; + } + + .column { + padding: 0; + border-radius: 4px; + overflow: hidden; + width: 100%; + } + + .scrollable { + height: 400px; + } + + p { + font-size: inherit; + line-height: inherit; + font-weight: inherit; + color: $primary-text-color; + margin-bottom: 20px; + + &:last-child { + margin-bottom: 0; + } + + a { + color: $ui-secondary-color; + text-decoration: none; + } + } + + @media screen and (max-width: $column-breakpoint) { + height: 90vh; + } + } + + &__features { + .features-list { + margin: 40px 0 !important; + } + + &__action { + text-align: center; + } + } + + .features-list { + margin-top: 20px; + + .features-list__row { + display: flex; + padding: 10px 0; + justify-content: space-between; + + &:first-child { + padding-top: 0; + } + + .visual { + flex: 0 0 auto; + display: flex; + align-items: center; + margin-left: 15px; + + .fa { + display: block; + color: $ui-primary-color; + font-size: 48px; + } + } + + .text { + font-size: 16px; + line-height: 30px; + color: $ui-primary-color; + + h6 { + font-size: inherit; + line-height: inherit; + margin-bottom: 0; } } } @@ -600,21 +840,31 @@ } } + &__footer { + margin-top: 10px; + text-align: center; + color: $ui-base-lighter-color; + + p { + font-size: 14px; + + a { + color: inherit; + text-decoration: underline; + } + } + } + @media screen and (max-width: 840px) { - .container { + .container-alt { padding: 0 20px; } .information-board { - - .container { + .container-alt { padding-right: 20px; } - .section { - text-align: center; - } - .panel { position: static; margin-top: 20px; @@ -626,16 +876,6 @@ } } } - - .header-wrapper .mascot { - left: 20px; - } - } - - @media screen and (max-width: 689px) { - .header-wrapper .mascot { - display: none; - } } @media screen and (max-width: 675px) { @@ -651,13 +891,12 @@ } } - .header .container, - .features .container { + .header .container-alt, + .features .container-alt { display: block; } .header { - .links { padding-top: 15px; background: darken($ui-base-color, 4%); @@ -682,10 +921,6 @@ margin-top: 30px; padding: 0; - .floats { - display: none; - } - .heading { padding: 30px 20px; text-align: center; @@ -700,16 +935,6 @@ } } } - - .features #mastodon-timeline { - height: 70vh; - width: 100%; - margin-bottom: 50px; - - .column { - width: 100%; - } - } } .cta { @@ -720,7 +945,7 @@ .features { padding: 30px 0; - .container { + .container-alt { max-width: 820px; #mastodon-timeline { @@ -772,7 +997,7 @@ .features { padding: 10px 0; - .container { + .container-alt { display: flex; flex-direction: column; @@ -808,17 +1033,3 @@ } } } - -@keyframes floating { - from { - transform: translate(0, 0); - } - - 65% { - transform: translate(0, 4px); - } - - to { - transform: translate(0, -0); - } -} diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index cff7078aab87387280f33a3c42dbf0fd739a0573..0224009ee1447ee31f93b5209129721370f37f27 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -40,14 +40,20 @@ cursor: default; } - &.button-alternative { + &.button-primary, + &.button-alternative, + &.button-secondary, + &.button-alternative-2 { font-size: 16px; line-height: 36px; height: auto; - color: $ui-base-color; - background: $ui-primary-color; text-transform: none; padding: 4px 16px; + } + + &.button-alternative { + color: $ui-base-color; + background: $ui-primary-color; &:active, &:focus, @@ -56,15 +62,20 @@ } } + &.button-alternative-2 { + background: $ui-base-lighter-color; + + &:active, + &:focus, + &:hover { + background-color: lighten($ui-base-lighter-color, 4%); + } + } + &.button-secondary { - font-size: 16px; - line-height: 36px; - height: auto; color: $ui-primary-color; - text-transform: none; background: transparent; padding: 3px 15px; - border-radius: 4px; border: 1px solid $ui-primary-color; &:active, diff --git a/app/javascript/styles/mastodon/containers.scss b/app/javascript/styles/mastodon/containers.scss index af2589e23c32076e7ea955130318105148d232aa..6fa1fa38f51a7067651a2ff920cccc4efb92fe4c 100644 --- a/app/javascript/styles/mastodon/containers.scss +++ b/app/javascript/styles/mastodon/containers.scss @@ -1,4 +1,4 @@ -.container { +.container-alt { width: 700px; margin: 0 auto; margin-top: 40px; diff --git a/app/presenters/instance_presenter.rb b/app/presenters/instance_presenter.rb index 4c1124d599950fa368ef2954b343b03029e2f540..e4972c9623c71eabee9185f0d62f28645e805cbf 100644 --- a/app/presenters/instance_presenter.rb +++ b/app/presenters/instance_presenter.rb @@ -39,4 +39,8 @@ class InstancePresenter def thumbnail @thumbnail ||= Rails.cache.fetch('site_uploads/thumbnail') { SiteUpload.find_by(var: 'thumbnail') } end + + def hero + @hero ||= Rails.cache.fetch('site_uploads/hero') { SiteUpload.find_by(var: 'hero') } + end end diff --git a/app/views/about/_forms.html.haml b/app/views/about/_forms.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..9916b6bf4cd72754c102c200735464e02931f62c --- /dev/null +++ b/app/views/about/_forms.html.haml @@ -0,0 +1,14 @@ +- if @instance_presenter.open_registrations + = render 'registration' +- else + - if @instance_presenter.closed_registrations_message.blank? + %p= t('about.closed_registrations') + - else + = @instance_presenter.closed_registrations_message.html_safe + + = link_to t('auth.register'), 'https://joinmastodon.org', class: 'button button-primary' + +.separator-or + %span= t('auth.or') + += link_to t('auth.login'), new_user_session_path, class: 'button button-alternative-2 webapp-btn' diff --git a/app/views/about/_links.html.haml b/app/views/about/_links.html.haml index ccf4f08b9507d6c3dd8865628406814b6a81ff2e..f79c37e658b5c1ff7a8b438e778ceb0cbd0bfd3c 100644 --- a/app/views/about/_links.html.haml +++ b/app/views/about/_links.html.haml @@ -1,4 +1,4 @@ -.container.links +.container-alt.links .brand = link_to root_url do = image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon' diff --git a/app/views/about/_registration.html.haml b/app/views/about/_registration.html.haml index 7a28f9738814a1938e781625abf23d9fd38c3013..6ca1d71290b9e702c77091a9a022fda0373fec34 100644 --- a/app/views/about/_registration.html.haml +++ b/app/views/about/_registration.html.haml @@ -10,6 +10,6 @@ = f.input :password_confirmation, placeholder: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password'), :autocomplete => 'off' } .actions - = f.button :button, t('auth.register'), type: :submit, class: 'button button-alternative' + = f.button :button, t('auth.register'), type: :submit, class: 'button button-primary' %p.hint.subtle-hint=t('auth.agreement_html', rules_path: about_more_path, terms_path: terms_path) diff --git a/app/views/about/more.html.haml b/app/views/about/more.html.haml index 9c9580eac2436c76a4e6af45fd2b9681f877e2cc..df072b8aec425ed234b2a4d0d3db1ec87d12265d 100644 --- a/app/views/about/more.html.haml +++ b/app/views/about/more.html.haml @@ -10,34 +10,34 @@ .header = render 'links' - .container.hero + .container-alt.hero .heading %h3= t('about.description_headline', domain: site_hostname) %p= @instance_presenter.site_description.html_safe.presence || t('about.generic_description', domain: site_hostname) .information-board - .container - .information-board-sections - .section + .container-alt + .information-board__sections + .information-board__section %span= t 'about.user_count_before' %strong= number_with_delimiter @instance_presenter.user_count %span= t 'about.user_count_after' - .section + .information-board__section %span= t 'about.status_count_before' %strong= number_with_delimiter @instance_presenter.status_count %span= t 'about.status_count_after' - .section + .information-board__section %span= t 'about.domain_count_before' %strong= number_with_delimiter @instance_presenter.domain_count %span= t 'about.domain_count_after' = render 'contact', contact: @instance_presenter .extended-description - .container + .container-alt = @instance_presenter.site_extended_description.html_safe.presence || t('about.extended_description_html') .footer-links - .container + .container-alt %p = link_to t('about.source_code'), @instance_presenter.source_url = " (#{@instance_presenter.version_number})" diff --git a/app/views/about/show.html.haml b/app/views/about/show.html.haml index b7c08479da01efbf52b646e1d0c3e5f9e5fa19e9..fd1cda8b39b6d576bb8041261fe71e67c61f52c3 100644 --- a/app/views/about/show.html.haml +++ b/app/views/about/show.html.haml @@ -6,51 +6,74 @@ = javascript_pack_tag 'about', integrity: true, crossorigin: 'anonymous' = render partial: 'shared/og' -.landing-page - .header-wrapper - .mascot-container - = image_tag asset_pack_path('elephant-fren.png'), alt: '', role: 'presentation', class: 'mascot' - - .header - = render 'links' - - .container.hero - .floats - %div{ role: 'presentation', class: 'float-1' } - %div{ role: 'presentation', class: 'float-2' } - %div{ role: 'presentation', class: 'float-3' } - .heading - %h1 - = @instance_presenter.site_title - %small= t 'about.hosted_on', domain: site_hostname - - if @instance_presenter.open_registrations - = render 'registration' - - else - .closed-registrations-message - %div - - if @instance_presenter.closed_registrations_message.blank? - %p= t('about.closed_registrations') - - else - = @instance_presenter.closed_registrations_message.html_safe - = link_to t('about.find_another_instance'), 'https://joinmastodon.org/', class: 'button button-alternative button--block' - - .about-short - .container - %h3= t('about.description_headline', domain: site_hostname) - %p= @instance_presenter.site_description.html_safe.presence || t('about.generic_description', domain: site_hostname) - - .features - .container - - if Setting.timeline_preview - #mastodon-timeline{ data: { props: Oj.dump(default_props) } } - - .about-mastodon - %h3= t 'about.what_is_mastodon' - %p= t 'about.about_mastodon_html' - = link_to t('about.learn_more'), 'https://joinmastodon.org/', class: 'button button-secondary' - = render 'features' - .footer-links - .container - %p - = link_to t('about.source_code'), @instance_presenter.source_url - = " (#{@instance_presenter.version_number})" +.landing-page.alternative + .container + .row + .column-4.hide-sm.show-xs.show-m + .landing-page__forms + .brand + = link_to root_url do + = image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon' + + .hide-xs + = render 'forms' + + .column-7.column-9-sm + .landing-page__hero + = image_tag @instance_presenter.hero&.file&.url || @instance_presenter.thumbnail&.file&.url || asset_pack_path('preview.jpg'), alt: @instance_presenter.site_title + + .landing-page__information + .landing-page__short-description + .row + .landing-page__logo.hide-xs + = image_tag asset_pack_path('logo_transparent.svg'), alt: 'Mastodon' + + %h1 + = @instance_presenter.site_title + %small!= t 'about.hosted_on', domain: content_tag(:span, site_hostname) + + %p= @instance_presenter.site_description.html_safe.presence || t('about.generic_description', domain: site_hostname) + + .show-xs + .landing-page__forms + = render 'forms' + .landing-page__call-to-action.hide-xs + .row + .column-5 + .landing-page__mascot + = image_tag asset_pack_path('elephant_ui_plane.svg') + .column-5 + .information-board__section + %span= t 'about.user_count_before' + %strong= number_with_delimiter @instance_presenter.user_count + %span= t 'about.user_count_after' + .column-5 + .information-board__section + %span= t 'about.status_count_before' + %strong= number_with_delimiter @instance_presenter.status_count + %span= t 'about.status_count_after' + .landing-page__information + .landing-page__features + %h3= t 'about.what_is_mastodon' + %p= t 'about.about_mastodon_html' + + = render 'features' + + .landing-page__features__action + = link_to t('about.learn_more'), 'https://joinmastodon.org/', class: 'button button-alternative' + + .landing-page__footer + %p + = link_to t('about.source_code'), @instance_presenter.source_url + = " (#{@instance_presenter.version_number})" + + .column-4.column-6-sm.column-flex + .show-sm.hide-xs + .landing-page__forms + .brand + = link_to root_url do + = image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon' + + = render 'forms' + - if Setting.timeline_preview + #mastodon-timeline{ data: { props: Oj.dump(default_props) } } diff --git a/app/views/about/terms.html.haml b/app/views/about/terms.html.haml index ba780759ce756eab5ce65e4cc046f7326f14a175..c7d36ed47a875b5ecb2088067d638aebd778aa09 100644 --- a/app/views/about/terms.html.haml +++ b/app/views/about/terms.html.haml @@ -7,5 +7,5 @@ = render 'links' .extended-description - .container + .container-alt = @instance_presenter.site_terms.html_safe.presence || t('terms.body_html') diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml index 73fd5642ee279a5136472ed98255d3d5852d1bb2..08d05d7385ef40d5da9b64ac010a6dfba1e4caa1 100644 --- a/app/views/admin/settings/edit.html.haml +++ b/app/views/admin/settings/edit.html.haml @@ -12,6 +12,7 @@ .fields-group = f.input :thumbnail, as: :file, wrapper: :with_block_label, label: t('admin.settings.thumbnail.title'), hint: t('admin.settings.thumbnail.desc_html') + = f.input :hero, as: :file, wrapper: :with_block_label, label: t('admin.settings.hero.title'), hint: t('admin.settings.hero.desc_html') %hr/ diff --git a/config/locales/ar.yml b/config/locales/ar.yml index eadeaef3eaec300b01aede8a96ee380c077f1592..88b4d88bb240271e92a977f18bd5a6248f6adfa8 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -14,7 +14,6 @@ ar: humane_approach_title: أسلوب يعيد الإعتبار للإنسان not_a_product_title: إنك إنسان Ùˆ لست سلعة real_conversation_title: مبني لتØقيق تواصل Øقيقي - find_another_instance: إبØØ« عن مثيل خادوم آخر generic_description: "%{domain} هو سيرÙر من بين سيرÙرات الشبكة" hosted_on: ماستدون Ù…Ùستضا٠على %{domain} learn_more: تعلم المزيد diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 126e488d92b088d78c2d2e81edd2f62a1de1f205..a685950a2d8361547cbd850f61aa1c50968dd864 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -23,7 +23,6 @@ ca: real_conversation_title: Construït per a converses reals within_reach_body: Diverses aplicacions per a iOS, Android i altres plataformes grà cies a un ecosistema API amable amb el desenvolupador, et permet mantenir-te al dia amb els amics en qualsevol lloc.. within_reach_title: Sempre a l'abast - find_another_instance: Troba altres instà ncies generic_description: "%{domain} és un servidor a la xarxa" hosted_on: Mastodon allotjat a %{domain} learn_more: Més informació diff --git a/config/locales/de.yml b/config/locales/de.yml index f03e393f5235609e6b58f6e994c2ffe37f546284..8f17413e102e4ee262f19b98d9b464baf14bbea4 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -23,7 +23,6 @@ de: real_conversation_title: Für das echte Gespräch gemacht within_reach_body: Verschiedene Apps für iOS, Android und andere Plattformen erlauben dir dank unserem blühenden API-Ökosystem, dich von überall auf dem Laufenden zu halten. within_reach_title: Immer für dich da - find_another_instance: Eine andere Instanz finden generic_description: "%{domain} ist ein Server im Netzwerk" hosted_on: Mastodon, beherbergt auf %{domain} learn_more: Mehr erfahren diff --git a/config/locales/en.yml b/config/locales/en.yml index b9dd5bd51fb64217faa6fe3eb45e0cdce7792d12..071c412909b677d40d7b025ea72025782b5df4cd 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -23,7 +23,6 @@ en: real_conversation_title: Built for real conversation within_reach_body: Multiple apps for iOS, Android, and other platforms thanks to a developer-friendly API ecosystem allow you to keep up with your friends anywhere. within_reach_title: Always within reach - find_another_instance: Find another instance generic_description: "%{domain} is one server in the network" hosted_on: Mastodon hosted on %{domain} learn_more: Learn more @@ -274,6 +273,9 @@ en: contact_information: email: Business e-mail username: Contact username + hero: + desc_html: Displayed on the frontpage. At least 600x100px recommended. When not set, falls back to instance thumbnail + title: Hero image peers_api_enabled: desc_html: Domain names this instance has encountered in the fediverse title: Publish list of discovered instances diff --git a/config/locales/es.yml b/config/locales/es.yml index 1ad8539de29e326be036b662a22537fdf2b55915..9eb61aaac53b56fb639900e70d82e8f1e3880ca8 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -23,7 +23,6 @@ es: real_conversation_title: Hecho para verdaderas conversaciones within_reach_body: Aplicaciones múltiples para iOS, Android, y otras plataformas gracias a un ecosistema de APIs amigable al desarrollador para permitirte estar con tus amigos donde sea. within_reach_title: Siempre al alcance - find_another_instance: Busca otra instancia generic_description: "%{domain} es un servidor en la red" hosted_on: Mastodon hosteado en %{domain} learn_more: Aprende más diff --git a/config/locales/fa.yml b/config/locales/fa.yml index c498c592c0583b3d69a451eef302a99c4af77336..395d226bd2630f4222f77ce4f133e77315a15c12 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -23,7 +23,6 @@ fa: real_conversation_title: برای Ú¯Ùتگوهای واقعی within_reach_body: اپ‌های متنوع برای iOSØŒ اندروید، Ùˆ سیستم‌های دیگر به خاطر وجود یک اکوسیستم API دوستانه برای برنامه‌نویسان. از همه جا با دوستان خود ارتباط داشته باشید. within_reach_title: همیشه در دسترس - find_another_instance: یاÙتن سرورهای دیگر generic_description: "%{domain} یک سرور روی شبکه است" hosted_on: ماستدون، میزبانی‌شده روی %{domain} learn_more: بیشتر بدانید diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 1067496c90acf0c969890ae8d9f8a2b00db40a75..e9c7273ce69f99ed302e893edc57cfb4a16a6f4e 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -21,7 +21,6 @@ fi: real_conversation_title: Rakennettu oikealle keskustelulle within_reach_body: Kehittäjäystävällisen rajapintaekosysteemin ansiosta useita appeja Androidille, iOS:lle ja muille alustoille, jotka mahdollistavat yhteydenpidon ystäviesi kanssa missä vain. within_reach_title: Aina lähellä - find_another_instance: Löydä toinen instanssi learn_more: Lisätietoja other_instances: Muut palvelimet source_code: Lähdekoodi diff --git a/config/locales/fr.yml b/config/locales/fr.yml index f0fc07f7a130b4e60573c525330c3a4cc50a7298..02d6f131c3acb02acc2bfee3e4873ca43b9d0566 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -23,7 +23,6 @@ fr: real_conversation_title: Construit pour de vraies conversations within_reach_body: Grâce à l’existence d’un environnement API accueillant pour les développeur·se·s, de multiples applications pour iOS, Android et d’autres plateformes vous permettent de rester en contact avec vos ami·e·s où que vous soyez. within_reach_title: Toujours à portée de main - find_another_instance: Trouver une autre instance generic_description: "%{domain} est seulement un serveur du réseau" hosted_on: Instance Mastodon hébergée par %{domain} learn_more: En savoir plus diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 40d72cbe4e25baa31f24c79188a215b3d01088c9..5de6031fcaa42627ebf5e4505d457c788a277c1e 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -23,7 +23,6 @@ gl: real_conversation_title: ConstruÃdo para conversacións reais within_reach_body: Existen múltiples aplicativos para iOS, Android e outras plataformas grazas a un entorno API amigable para o desenvolvedor que lle permite estar ao tanto cos seus amigos en calquer lugar. within_reach_title: Sempre en contacto - find_another_instance: Atope outra instancia generic_description: "%{domain} é un servidor na rede" hosted_on: Mastodon aloxado en %{domain} learn_more: Coñeza máis diff --git a/config/locales/he.yml b/config/locales/he.yml index 1f27dda7a5ccb83cf7115ad04899c769f6eddef3..c83f4ba10eab5a338c5d6dfba97d6fef22716d6d 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -23,7 +23,6 @@ he: real_conversation_title: ×‘× ×•×™ לשיחות ×מתיות within_reach_body: שלל ×פליקציות עבור iOS, ×× ×“×¨×•×יד ופלטפורמות ×חרות שי×פשרו לך לשמור על קשר ×¢× ×—×‘×¨×™× ×‘×›×œ מקו×, תודות למערכת ×ž× ×©×§×™ ×ª×•×›× ×” ×™×“×™×“×•×ª×™×™× ×œ×ž×¤×ª×—×™×. within_reach_title: תמיד במרחק × ×’×™×¢×” - find_another_instance: ל×יתור שרת ×חר generic_description: "%{domain} ×”×•× ×©×¨×ª ×חד בתוך הרשת" hosted_on: מסטודון שיושב בכתובת %{domain} learn_more: מידע × ×•×¡×£ diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 6e39f980039fbf52e3fa7c694ad741baf8834521..918e85d1f5555a8a211bb147ad7c185dfdb01677 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -23,7 +23,6 @@ hu: real_conversation_title: Valódi beszélgetésekre tervezve within_reach_body: A fejlesztÅ‘barát API-nak köszönhetÅ‘en számos iOS, Android és egyéb platformra Ãrt alkalmazás teszi lehetÅ‘vé, hogy bármikor, bárhonnan részt vehess a társalgásban. within_reach_title: Mindig elérhetÅ‘nek lenni - find_another_instance: További instanciák keresése generic_description: "%{domain} csak egy a számtalan szerver közül a föderációban" hosted_on: "%{domain} Mastodon instancia" learn_more: Tudj meg többet diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 14a42fd76df436ffcf72ac3e6a895a2d02d487e3..b1c22d5f920c86c6f3e05cd4a67c5ceafa04c208 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -23,7 +23,6 @@ ja: real_conversation_title: 本当ã®ã‚³ãƒŸãƒ¥ãƒ‹ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®ãŸã‚ã« within_reach_body: デベãƒãƒƒãƒ‘ーフレンドリー㪠API ã«ã‚ˆã‚Šå®Ÿç¾ã•ã‚ŒãŸã€iOS ã‚„ Androidã€ãã®ä»–様々ãªãƒ—ラットフォームã®ãŸã‚ã®ã‚¢ãƒ—リã§ã©ã“ã§ã‚‚å‹äººã¨ã‚„ã‚Šã¨ã‚Šã§ãã¾ã™ã€‚ within_reach_title: ã„ã¤ã§ã‚‚身近㫠- find_another_instance: ä»–ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’探㙠generic_description: "%{domain} ã¯ã€Mastodon インスタンスã®ä¸€ã¤ã§ã™" hosted_on: Mastodon hosted on %{domain} learn_more: ã‚‚ã£ã¨è©³ã—ã diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 6f137153117d3733b0dd5b55fd49b5187329ac3e..8bc318d7bc3319dd8d184b275342827f75fd1653 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -23,7 +23,6 @@ ko: real_conversation_title: ì§„ì •í•œ 커뮤니케ì´ì…˜ì„ 위하여 within_reach_body: ê°œë°œìž ì¹œí™”ì ì¸ APIì— ì˜í•´ì„œ ì‹¤í˜„ëœ iOS나 Android, ê·¸ ì™¸ì˜ ì—¬ëŸ¬ Platform들 ë•ë¶„ì— ì–´ë””ì„œë“ ì¹œêµ¬ë“¤ê³¼ ìžìœ ë¡ê²Œ 메세지를 ì£¼ê³ ë°›ì„ ìˆ˜ 있습니다. within_reach_title: ì–¸ì œë‚˜ ìœ ì €ì˜ ê³ì—ì„œ - find_another_instance: 다른 ì¸ìŠ¤í„´ìŠ¤ 찾기 generic_description: "%{domain} ì€ Mastodonì˜ ì¸ìŠ¤í„´ìŠ¤ 입니다." hosted_on: "%{domain}ì—ì„œ 호스팅 ë˜ëŠ” ë§ˆìŠ¤í† ëˆ" learn_more: ìžì„¸ížˆ diff --git a/config/locales/nl.yml b/config/locales/nl.yml index f1af8ac0ea92dbf2d154e65fbc4da250299f587f..9f2825e7fac98a9b094db0c96225df8c671048a5 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -23,7 +23,6 @@ nl: real_conversation_title: Voor echte gesprekken gemaakt within_reach_body: Meerdere apps voor iOS, Android en andere platformen, met dank aan het ontwikkelaarsvriendelijke API-systeem, zorgen ervoor dat je overal op de hoogte blijft. within_reach_title: Altijd binnen bereik - find_another_instance: Vind een andere server generic_description: "%{domain} is een server in het Mastodonnetwerk" hosted_on: Mastodon op %{domain} learn_more: Meer leren diff --git a/config/locales/no.yml b/config/locales/no.yml index 1e9597a536be95697a90d863b2ebf2ecd9521578..d198177cd1122bb8800424c52e429c5bda2b8f05 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -23,7 +23,6 @@ real_conversation_title: Laget for ekte samtaler within_reach_body: Takket være et utviklingsvennlig API-økosystem vil flere apper for iOS, Android og andre plattformer la deg holde kontakten med dine venner hvor som helst. within_reach_title: Alltid innen rekkevidde - find_another_instance: Finn en annen instans generic_description: "%{domain} er en tjener i nettverket" hosted_on: Mastodon driftet pÃ¥ %{domain} learn_more: Lær mer diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 56554610d62c5ad218383143c43369d40d5e7f7f..80b10376308559f7f633033170708e015662311f 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -23,7 +23,6 @@ oc: real_conversation_title: Fach per de conversacions vertadièras within_reach_body: Multiplas aplicacion per iOS, Android, e autras plataformas mercés a un entorn API de bon utilizar, vos permet de gardar lo contacte pertot. within_reach_title: Totjorn al costat - find_another_instance: Trobar mai instà ncias generic_description: "%{domain} es un dels servidors del malhum" hosted_on: Mastodon albergat sus %{domain} learn_more: Ne saber mai diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 010b03ed290086285976bc51f56fbd769b284155..950a70d066ece8c582e9ccda36f071e5d7c0fa35 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -23,7 +23,6 @@ pl: real_conversation_title: Zaprojektowany do prawdziwych rozmów within_reach_body: Wiele aplikacji dla Androida, iOS i innych platform dziÄ™ki przyjaznemu programistom API sprawia, że możesz utrzymywać kontakt ze znajomymi praktycznie wszÄ™dzie. within_reach_title: Zawsze w Twoim zasiÄ™gu - find_another_instance: Znajdź innÄ… instancjÄ™ generic_description: "%{domain} jest jednym z serwerów sieci" hosted_on: Mastodon uruchomiony na %{domain} learn_more: Dowiedz siÄ™ wiÄ™cej diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 31481ced46492b45df982e9f4db69262f0d25abb..0da8d957a63dc80a181239c271114e4898e4de4a 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -23,7 +23,6 @@ pt-BR: real_conversation_title: Feito para conversas reais within_reach_body: Vários apps para iOS, Android e outras plataformas graças a um ecossistema de API amigável para desenvolvedores permitem que você possa se manter atualizado sobre seus amigos de qualquer lugar. within_reach_title: Sempre ao seu alcance - find_another_instance: Encontre outra instância generic_description: "%{domain} é um servidor na rede" hosted_on: Mastodon hospedado em %{domain} learn_more: Saiba mais diff --git a/config/locales/pt.yml b/config/locales/pt.yml index 93eaf84d6dd552dfc5b6e540d246ffd6818c050d..c77368e3f8de07e93c3cb42da07b434d736a0f05 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -23,7 +23,6 @@ pt: real_conversation_title: Feito para conversas reais within_reach_body: Várias aplicações para iOS, Android e outras plataformas graças a um ecossistema de API amigável para desenvolvedores, permitem-te que te mantenhas em contacto com os teus amigos em qualquer lugar. within_reach_title: Sempre ao teu alcance - find_another_instance: Encontra outra instância generic_description: "%{domain} é um servidor na rede" hosted_on: Mastodon em %{domain} learn_more: Saber mais diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 842fd7d5440e85e02c626cc14d4ad1402601cdfc..467f24ca8dba8a0b8b85717f2d6b9bdcff0fad04 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -23,7 +23,6 @@ ru: real_conversation_title: Создан Ð´Ð»Ñ Ð½Ð°ÑтоÑщего Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ within_reach_body: Различные Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ iOS, Android и других платформ, напиÑанные Ð±Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ñ Ð´Ñ€ÑƒÐ¶ÐµÑтвенной к разработчикам ÑкоÑиÑтеме API, позволÑÑ‚ Вам держать ÑвÑзь Ñ Ð’Ð°ÑˆÐ¸Ð¼Ð¸ друзьÑми где угодно. within_reach_title: Ð’Ñегда под рукой - find_another_instance: Ðайти другой узел generic_description: "%{domain} - один из Ñерверов Ñети" hosted_on: Mastodon размещен на %{domain} learn_more: Узнать больше diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 84433a209e5caff0b9c2d7ee6fec8b89d4ec9902..85398854624b404ac1260cc1c6cdc067e7816564 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -23,7 +23,6 @@ sk: real_conversation_title: Vytvorený pre reálnu konverzáciu within_reach_body: Viacero aplikácià pre iOS, Android a iné platformy, ktoré vÄaka jednoduchému API ekosystému vám dovoľujú byÅ¥ online so svojimi priateľmi kdekoľvek. within_reach_title: Stále v dosahu - find_another_instance: Nájdi inú inÅ¡tanciu generic_description: "%{domain} je jeden server v sieti" hosted_on: Mastodon hostovaný na %{domain} learn_more: DozvedieÅ¥ sa viac diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index ac80e81ec7a109aafa69e0c92bdb6114cc739ab7..4eed44345b24c357641c0ede359bfca159d9c3cd 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -23,7 +23,6 @@ sr-Latn: real_conversation_title: Pravljen za pravi razgovor within_reach_body: ViÅ¡e aplikacija za iOS, Android, kao i druge platforme zahvaljujući ekosistemu dobrih API-ja će Vam omogućiti da ostanete u kontaktu sa prijateljima svuda. within_reach_title: Uvek u kontaktu - find_another_instance: NaÄ‘ite drugu instancu generic_description: "%{domain} je server na mreži" hosted_on: Mastodont hostovan na %{domain} learn_more: Saznajte viÅ¡e diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 755396828894e2a378191d591beffa9271558677..c5649876569bce76e2612c386d288bf69889d60c 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -23,7 +23,6 @@ sr: real_conversation_title: Прављен за прави разговор within_reach_body: Више апликација за iOS, Ðндроид, као и друге платформе захваљујући екоÑиÑтему добрих API-ја ће Вам омогућити да оÑтанете у контакту Ñа пријатељима Ñвуда. within_reach_title: Увек у контакту - find_another_instance: Ðађите другу инÑтанцу generic_description: "%{domain} је Ñервер на мрежи" hosted_on: МаÑтодонт хоÑтован на %{domain} learn_more: Сазнајте више diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 79ffa93878af87791455fd3fd3353773a0d38873..d20e8ba9fdeaa50a0b8d7fd80fe8c7b4b6552434 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -23,7 +23,6 @@ sv: real_conversation_title: Byggd för riktiga konversationer within_reach_body: Flera appar för iOS, Android och andra plattformar tack vare ett utvecklingsvänligt API-ekosystem gör att du kan hÃ¥lla kontakten med dina vänner var som helst. within_reach_title: Alltid inom räckhÃ¥ll - find_another_instance: Hitta en annan instans generic_description: "%{domain} är en server i nätverket" hosted_on: Mastodon värd pÃ¥ %{domain} learn_more: Lär dig mer diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 7deb241a15a075598d2ff04cb7fc1068e1abbbeb..1bd2e5039a50916bd55ed1326c6804f90b637832 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -23,7 +23,6 @@ zh-CN: real_conversation_title: 为真æ£çš„交æµè€Œç”Ÿ within_reach_body: 通过一个é¢å‘å¼€å‘者å‹å¥½çš„ API 生æ€ç³»ç»Ÿï¼ŒMastodon è®©ä½ å¯ä»¥éšæ—¶éšåœ°é€šè¿‡ä¼—多 iOSã€Android 以åŠå…¶ä»–å¹³å°çš„应用与朋å‹ä»¬ä¿æŒè”系。 within_reach_title: 始终触手å¯åŠ - find_another_instance: 寻找å¦ä¸€ä¸ªå®žä¾‹ generic_description: "%{domain} 是这个庞大网络ä¸çš„一å°æœåŠ¡å™¨" hosted_on: 一个在 %{domain} 上è¿è¡Œçš„ Mastodon 实例 learn_more: 详细了解 diff --git a/spec/views/about/show.html.haml_spec.rb b/spec/views/about/show.html.haml_spec.rb index 724643cbcd2618861f1ec2ff46fee4e941434fa8..03d6fb7ab401d4eef050268793127d921c2629d8 100644 --- a/spec/views/about/show.html.haml_spec.rb +++ b/spec/views/about/show.html.haml_spec.rb @@ -16,6 +16,9 @@ describe 'about/show.html.haml', without_verify_partial_doubles: true do source_url: 'https://github.com/tootsuite/mastodon', open_registrations: false, thumbnail: nil, + hero: nil, + user_count: 0, + status_count: 0, closed_registrations_message: 'yes') assign(:instance_presenter, instance_presenter) render