1{{--
2 Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0.
3 See the LICENCE file in the repository root for full licence text.
4--}}
5@php
6 $appUrl = $GLOBALS['cfg']['app']['url'];
7 $currentLocale = App::getLocale();
8 $fallbackLocale = $GLOBALS['cfg']['app']['fallback_locale'];
9 $opengraph = Request::instance()->attributes->get('opengraph');
10
11 $opengraph['description'] ??= $pageDescription ?? null;
12@endphp
13<link rel="apple-touch-icon" sizes="180x180" href="{{ $appUrl }}/images/favicon/apple-touch-icon.png">
14<link rel="icon" sizes="32x32" href="{{ $appUrl }}/images/favicon/favicon-32x32.png">
15<link rel="icon" sizes="16x16" href="{{ $appUrl }}/images/favicon/favicon-16x16.png">
16<link rel="manifest" href="{{ $appUrl }}/site.webmanifest">
17<link rel="mask-icon" href="{{ $appUrl }}/images/favicon/safari-pinned-tab.svg" color="#e2609a">
18<meta name="msapplication-TileColor" content="#603cba">
19<meta name="theme-color" content="{{ hsl_to_hex($currentHue, 0.1, 0.4) }}"> {{-- @osu-colour-b1 --}}
20
21<meta charset="utf-8">
22<meta name="description" content="{{ $opengraph['description'] ?? osu_trans('layout.defaults.page_description') }}">
23<meta name="keywords" content="osu, peppy, ouendan, elite, beat, agents, ds, windows, game, taiko, tatsujin, simulator, sim, xna, ddr, beatmania, osu!, osume">
24<meta name="viewport" content="width=device-width, initial-scale=1.0">
25
26<meta name="turbo-cache-control" content="no-preview">
27<meta name="turbo-prefetch" content="false">
28
29<link rel="search" type="application/opensearchdescription+xml" title="osu! search" href="{{ $appUrl }}/opensearch.xml">
30
31<meta property="og:site_name" content="osu!">
32<meta property="og:type" content="website">
33
34@if (isset($canonicalUrl))
35 <meta property="og:url" content="{{ $canonicalUrl }}">
36@endif
37
38@foreach ($opengraph as $key => $value)
39 @if (present($value))
40 @if ($key === 'title')
41 <meta property="og:{{ $key }}" content="{{ $value }} · {{ page_title() }}">
42 @else
43 <meta property="og:{{ $key }}" content="{{ $value }}">
44 @endif
45 @endif
46@endforeach
47
48@if ($noindex ?? false)
49 <meta name="robots" content="noindex">
50@endif
51
52<meta name="csrf-param" content="_token">
53<meta name="csrf-token" content="{{ $currentUser === null ? '' : csrf_token() }}">
54
55@switch($currentLocale)
56 @case('vi')
57 <link href="https://fonts.googleapis.com/css?family=Quicksand:300,400,500,600,700&display=swap&subset=vietnamese" rel="stylesheet">
58 <style>
59 :root {
60 --font-default-override: var(--font-default-vi);
61 }
62 </style>
63 @break
64 @case('zh')
65 <style>
66 :root {
67 --font-default-override: var(--font-default-zh);
68 }
69 </style>
70 @break
71 @case('zh-tw')
72 <style>
73 :root {
74 --font-default-override: var(--font-default-zh-tw);
75 }
76 </style>
77 @break
78 @case('th')
79 <link href="https://fonts.googleapis.com/css2?family=Prompt:wght@300;400;500;600&display=swap&subset=thai" rel="stylesheet">
80 <style>
81 :root {
82 --font-default-override: var(--font-default-th);
83 }
84 </style>
85 @break
86@endswitch
87
88<link rel="stylesheet" media="all" href="{{ unmix('css/app.css') }}" data-turbo-track="reload">
89
90<script>
91 var currentLocale = {!! json_encode($currentLocale) !!};
92 var fallbackLocale = {!! json_encode($fallbackLocale) !!};
93 var experimentalHost = {!! json_encode(osu_url('experimental_host')) !!}
94</script>
95
96<script src="{{ unmix('js/runtime.js') }}" data-turbo-eval="false"></script>
97<script src="{{ unmix('js/vendor.js') }}" data-turbo-eval="false"></script>
98
99<script src="{{ unmix("js/locales/{$currentLocale}.js") }}" data-turbo-track="reload"></script>
100@if ($fallbackLocale !== $currentLocale)
101 <script src="{{ unmix("js/locales/{$fallbackLocale}.js") }}" data-turbo-track="reload"></script>
102@endif
103
104<script src="{{ unmix('js/commons.js') }}" data-turbo-eval="false"></script>
105<script src="{{ unmix('js/app.js') }}" data-turbo-eval="false"></script>
106
107<script
108 src="{{ unmix("js/moment-locales/{$currentLocaleMeta->moment()}.js") }}"
109 data-turbo-eval="false"
110></script>
111
112@if (isset($atom))
113 <link rel="alternate" type="application/atom+xml" title="{{ $atom['title'] }}" href="{{ $atom['url'] }}">
114@endif
115
116@if (isset($canonicalUrl))
117 <link rel="canonical" href="{{ $canonicalUrl }}">
118@endif
119
120@if (isset($translatedPages))
121 @foreach ($translatedPages as $l => $url)
122 <link rel="alternate" hreflang="{{ $l }}" href="{{ $url }}" />
123 @endforeach
124@endif