From f6dd78734f86f8daed7c5d472e7a199301095ff8 Mon Sep 17 00:00:00 2001
From: Jonas Kohl
Date: Tue, 17 Sep 2024 13:39:12 +0200
Subject: More theme and i18n stuff
---
src/.htaccess | 5 +
src/application/i18n.php | 6 +
src/application/messages/de.msg | 10 +
src/application/views/template_end.php | 41 ++-
src/application/views/view_logintoreply.php | 7 +
src/index.php | 82 ++++-
src/themes/.htaccess | 1 +
src/themes/yeti/theme.json | 1 +
src/ui/fonts/opensans.css | 83 +++++
src/ui/fonts/opensans/open-sans-v40-latin-300.eot | Bin 0 -> 19829 bytes
src/ui/fonts/opensans/open-sans-v40-latin-300.svg | 348 +++++++++++++++++++
src/ui/fonts/opensans/open-sans-v40-latin-300.ttf | Bin 0 -> 35356 bytes
src/ui/fonts/opensans/open-sans-v40-latin-300.woff | Bin 0 -> 22940 bytes
.../fonts/opensans/open-sans-v40-latin-300.woff2 | Bin 0 -> 18704 bytes
.../opensans/open-sans-v40-latin-300italic.eot | Bin 0 -> 20588 bytes
.../opensans/open-sans-v40-latin-300italic.svg | 377 ++++++++++++++++++++
.../opensans/open-sans-v40-latin-300italic.ttf | Bin 0 -> 36564 bytes
.../opensans/open-sans-v40-latin-300italic.woff | Bin 0 -> 23620 bytes
.../opensans/open-sans-v40-latin-300italic.woff2 | Bin 0 -> 19332 bytes
src/ui/fonts/opensans/open-sans-v40-latin-700.eot | Bin 0 -> 19337 bytes
src/ui/fonts/opensans/open-sans-v40-latin-700.svg | 349 +++++++++++++++++++
src/ui/fonts/opensans/open-sans-v40-latin-700.ttf | Bin 0 -> 35300 bytes
src/ui/fonts/opensans/open-sans-v40-latin-700.woff | Bin 0 -> 22332 bytes
.../fonts/opensans/open-sans-v40-latin-700.woff2 | Bin 0 -> 18260 bytes
.../opensans/open-sans-v40-latin-700italic.eot | Bin 0 -> 20089 bytes
.../opensans/open-sans-v40-latin-700italic.svg | 379 +++++++++++++++++++++
.../opensans/open-sans-v40-latin-700italic.ttf | Bin 0 -> 36376 bytes
.../opensans/open-sans-v40-latin-700italic.woff | Bin 0 -> 22952 bytes
.../opensans/open-sans-v40-latin-700italic.woff2 | Bin 0 -> 18860 bytes
.../fonts/opensans/open-sans-v40-latin-italic.eot | Bin 0 -> 20563 bytes
.../fonts/opensans/open-sans-v40-latin-italic.svg | 379 +++++++++++++++++++++
.../fonts/opensans/open-sans-v40-latin-italic.ttf | Bin 0 -> 36384 bytes
.../fonts/opensans/open-sans-v40-latin-italic.woff | Bin 0 -> 23564 bytes
.../opensans/open-sans-v40-latin-italic.woff2 | Bin 0 -> 19280 bytes
.../fonts/opensans/open-sans-v40-latin-regular.eot | Bin 0 -> 19820 bytes
.../fonts/opensans/open-sans-v40-latin-regular.svg | 349 +++++++++++++++++++
.../fonts/opensans/open-sans-v40-latin-regular.ttf | Bin 0 -> 35324 bytes
.../opensans/open-sans-v40-latin-regular.woff | Bin 0 -> 22908 bytes
.../opensans/open-sans-v40-latin-regular.woff2 | Bin 0 -> 18668 bytes
39 files changed, 2398 insertions(+), 19 deletions(-)
create mode 100644 src/application/views/view_logintoreply.php
create mode 100644 src/themes/.htaccess
create mode 100644 src/ui/fonts/opensans.css
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-300.eot
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-300.svg
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-300.ttf
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-300.woff
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-300.woff2
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-300italic.eot
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-300italic.svg
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-300italic.ttf
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-300italic.woff
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-300italic.woff2
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-700.eot
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-700.svg
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-700.ttf
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-700.woff
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-700.woff2
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-700italic.eot
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-700italic.svg
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-700italic.ttf
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-700italic.woff
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-700italic.woff2
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-italic.eot
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-italic.svg
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-italic.ttf
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-italic.woff
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-italic.woff2
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-regular.eot
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-regular.svg
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-regular.ttf
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-regular.woff
create mode 100644 src/ui/fonts/opensans/open-sans-v40-latin-regular.woff2
diff --git a/src/.htaccess b/src/.htaccess
index f4a5e0d..d167d15 100644
--- a/src/.htaccess
+++ b/src/.htaccess
@@ -1,3 +1,8 @@
+DirectorySlash Off
+
RewriteEngine On
RewriteRule ^/?@([a-z0-9]([._](?![._])|[a-z0-9]){2,30}[a-z0-9])$ /index.php?_action=lookupuser&handle=$1 [L]
+
+RewriteRule ^/?vendor/ - [F,L]
+RewriteRule ^/?composer\. - [F,L]
diff --git a/src/application/i18n.php b/src/application/i18n.php
index cdc61e1..a1f2f24 100644
--- a/src/application/i18n.php
+++ b/src/application/i18n.php
@@ -183,6 +183,12 @@ function i18n_get(string $msgid, array $params = [], ?string $context = null): s
);
}
+function i18n_metadata(string $lang): array {
+ global $__i18n_msg_metadata;
+
+ return $__i18n_msg_metadata[$lang] ?? [];
+}
+
function i18n_get_plural(string $msgid_singular, string $msgid_plural, int $count, array $params = [], ?string $context = null): string {
global $__i18n_current_locale, $__i18n_msg_metadata, $__i18n_msg_store_plural;
diff --git a/src/application/messages/de.msg b/src/application/messages/de.msg
index c77a569..ed8178e 100644
--- a/src/application/messages/de.msg
+++ b/src/application/messages/de.msg
@@ -1,4 +1,5 @@
metadata({
+ "langName": "Deutsch",
"plural": {
"indexMapping": "ifelse(n = 0, 2, ifelse(n = 1, 0, 1))"
}
@@ -308,3 +309,12 @@ metadata({
: "Keep post"
= "Beitrag beibehalten"
+
+: "Log in to reply to this topic"
+= "Melden Sie sich an, um auf dieses Thema zu antworten"
+
+: "Theme:"
+= "Aussehen:"
+
+: "Language:"
+= "Sprache:"
diff --git a/src/application/views/template_end.php b/src/application/views/template_end.php
index d12e2ff..f322b36 100644
--- a/src/application/views/template_end.php
+++ b/src/application/views/template_end.php
@@ -3,8 +3,41 @@
- © = date("Y") ?> = htmlentities(env("MYSTIC_FORUM_COPYRIGHT") ?? env("MYSTIC_FORUM_TITLE") ?? "Forum") ?>.
- Powered by
Mystic Forum
+
+
+
+
+ © = date("Y") ?> = htmlentities(env("MYSTIC_FORUM_COPYRIGHT") ?? env("MYSTIC_FORUM_TITLE") ?? "Forum") ?>.
+ Powered by mysticBB.
+ |
+
+
+
+
+ |
+
+
+
@@ -24,6 +57,10 @@ $(function() {
],
]) ?>
+ $(".auto-submit").on("change", function() {
+ $(this)[0].form.submit();
+ });
+
$("._time").each(function(i, e) {
var date = new Date($(e).text());
$(e).text(date.toLocaleString());
diff --git a/src/application/views/view_logintoreply.php b/src/application/views/view_logintoreply.php
new file mode 100644
index 0000000..11e0e1e
--- /dev/null
+++ b/src/application/views/view_logintoreply.php
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/src/index.php b/src/index.php
index 1807608..1b13e97 100644
--- a/src/index.php
+++ b/src/index.php
@@ -49,7 +49,7 @@ function msg_error(string $err, bool $skipLoginCheck = false): void {
_view("template_navigation", ["user" => RequestUtils::getAuthorizedUser($GLOBALS["db"])]);
_view("template_navigation_end");
_view("alert_error", ["message" => $err]);
- _view("template_end");
+ _view("template_end", [...getThemeAndLangInfo()]);
}
function msg_info(string $msg, bool $skipLoginCheck = false): void {
@@ -59,7 +59,7 @@ function msg_info(string $msg, bool $skipLoginCheck = false): void {
_view("template_navigation", ["user" => RequestUtils::getAuthorizedUser($GLOBALS["db"])]);
_view("template_navigation_end");
_view("alert_info", ["message" => $msg]);
- _view("template_end");
+ _view("template_end", [...getThemeAndLangInfo()]);
}
function generateCaptchaText(): string {
@@ -69,13 +69,47 @@ function generateCaptchaText(): string {
return $phrase;
}
-function _view(string $name, array $params = []): void {
- $___NAME = $name;
- $___PARAMS = &$params;
- extract($params);
- echo "\n";
- include __DIR__ . "/application/views/" . $___NAME . ".php";
- echo "\n";
+function getThemeAndLangInfo(): array {
+ $availableThemes = [];
+ $currentTheme = $_GET["theme"] ?? $_COOKIE["theme"] ?? env("MYSTIC_FORUM_THEME") ?? "default";
+ foreach (scandir($dir = __DIR__ . '/themes/') as $ent) {
+ if ($ent[0] === "." || !is_dir($dir . "/" . $ent) || !is_file($theme_file = $dir . "/" . $ent . "/theme.json"))
+ continue;
+ $theme_info = json_decode(file_get_contents($theme_file));
+ $availableThemes[$ent] = $theme_info;
+ }
+
+ $availableLangs = [
+ "en" => "English",
+ ];
+ foreach (i18n_get_available_locales() as $loc) {
+ if (isset($availableLangs[$loc]))
+ continue;
+ $metadata = i18n_metadata($loc);
+ $availableLangs[$loc] = $metadata["langName"] ?? $loc;
+ }
+
+ return [
+ "availableThemes" => $availableThemes,
+ "currentTheme" => $currentTheme,
+
+ "availableLangs" => $availableLangs,
+ "currentLang" => i18n_get_current_locale(),
+ ];
+}
+
+function _view(string $___NAME, array $___PARAMS = []): void {
+ $___PATH = __DIR__ . "/application/views/" . $___NAME . ".php";
+ if (!is_file($___PATH)) {
+ echo "\n";
+ echo "
Failed to include " . htmlentities($___NAME) . "
\n";
+ echo "\n";
+ } else {
+ extract($___PARAMS);
+ echo "\n";
+ include $___PATH;
+ echo "\n";
+ }
}
function isTrue(string $str): bool {
@@ -242,7 +276,7 @@ if ($_action === "auth") {
_view("template_navigation", ["user" => RequestUtils::getAuthorizedUser($db)]);
_view("template_navigation_end");
_view("form_login");
- _view("template_end");
+ _view("template_end", [...getThemeAndLangInfo()]);
}
} elseif ($_action === "register") {
if ($currentUser) {
@@ -350,7 +384,7 @@ if ($_action === "auth") {
_view("template_navigation", ["user" => RequestUtils::getAuthorizedUser($db)]);
_view("template_navigation_end");
_view("form_register");
- _view("template_end");
+ _view("template_end", [...getThemeAndLangInfo()]);
}
} elseif ($_action === "verifyemail") {
RequestUtils::ensureRequestMethod("GET");
@@ -503,9 +537,11 @@ if ($_action === "auth") {
if ($currentUser) {
_view("form_addpost");
+ } else {
+ _view("view_logintoreply");
}
- _view("template_end");
+ _view("template_end", [...getThemeAndLangInfo()]);
}
} elseif ($_action === "newtopic") {
@@ -581,7 +617,7 @@ if ($_action === "auth") {
_view("template_navigation", ["user" => RequestUtils::getAuthorizedUser($db)]);
_view("template_navigation_end");
_view("form_newtopic");
- _view("template_end");
+ _view("template_end", [...getThemeAndLangInfo()]);
}
} elseif ($_action === "lookupuser") {
RequestUtils::ensureRequestMethod("GET");
@@ -700,7 +736,7 @@ if ($_action === "auth") {
"attachments" => $attachments,
"lastNameChangeTooRecent" => $lastNameChangeTooRecent,
]);
- _view("template_end");
+ _view("template_end", [...getThemeAndLangInfo()]);
}
} elseif ($_action === "attachment") {
if (!$currentUser) {
@@ -946,7 +982,7 @@ if ($_action === "auth") {
"topicAuthor" => null,
"attachments" => $attachments,
]);
- _view("template_end");
+ _view("template_end", [...getThemeAndLangInfo()]);
}
} elseif ($_action === "updatepost") {
RequestUtils::ensureRequestMethod("POST");
@@ -1056,7 +1092,7 @@ if ($_action === "auth") {
"topic" => $topic,
"topicAuthor" => $topicAuthor,
]);
- _view("template_end");
+ _view("template_end", [...getThemeAndLangInfo()]);
}
} elseif ($_action === "updatetopic") {
RequestUtils::ensureRequestMethod("POST");
@@ -1123,6 +1159,18 @@ if ($_action === "auth") {
$theme_info = json_decode(file_get_contents($theme_file));
echo $ent . "\t" . $theme_info->name . "\n";
}
+} elseif ($_action === "settheme") {
+ RequestUtils::ensureRequestMethod("POST");
+ $theme = $_POST["theme"] ?? exit(msg_error("Missing required field 'theme'") ?? 1);
+ $next = $_POST["next"] ?? ".";
+ setcookie("theme", $theme, time()+60*60*24*30);
+ header("Location: $next");
+} elseif ($_action === "setlang") {
+ RequestUtils::ensureRequestMethod("POST");
+ $lang = $_POST["lang"] ?? exit(msg_error("Missing required field 'lang'") ?? 1);
+ $next = $_POST["next"] ?? ".";
+ setcookie("lang", $lang, time()+60*60*24*30);
+ header("Location: $next");
} elseif ($_action === "ctheme") {
// options
$enableLogging = true;
@@ -1204,7 +1252,7 @@ if ($_action === "auth") {
_view("template_navigation", ["user" => RequestUtils::getAuthorizedUser($db)]);
_view("template_navigation_end");
_view("view_topics", ["topics" => $db->fetchCustom(Topic::class, "ORDER BY creation_date DESC")]);
- _view("template_end");
+ _view("template_end", [...getThemeAndLangInfo()]);
} else {
http_response_code(404);
msg_error(__("Invalid or unknown action $_action"));
diff --git a/src/themes/.htaccess b/src/themes/.htaccess
new file mode 100644
index 0000000..b66e808
--- /dev/null
+++ b/src/themes/.htaccess
@@ -0,0 +1 @@
+Require all denied
diff --git a/src/themes/yeti/theme.json b/src/themes/yeti/theme.json
index 2652e19..37786c7 100644
--- a/src/themes/yeti/theme.json
+++ b/src/themes/yeti/theme.json
@@ -7,6 +7,7 @@
"files": [
"../../ui/yeti.min.css",
"../../ui/site.css",
+ "../../ui/fonts/opensans.css",
[
".image-attachment-image {",
"box-shadow: 0 0 0 1px #ccc;",
diff --git a/src/ui/fonts/opensans.css b/src/ui/fonts/opensans.css
new file mode 100644
index 0000000..09fd403
--- /dev/null
+++ b/src/ui/fonts/opensans.css
@@ -0,0 +1,83 @@
+/* open-sans-300 - latin */
+@font-face {
+ font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 300;
+ src: url('/ui/fonts/opensans/open-sans-v40-latin-300.eot'); /* IE9 Compat Modes */
+ src: url('/ui/fonts/opensans/open-sans-v40-latin-300.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('/ui/fonts/opensans/open-sans-v40-latin-300.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-300.woff') format('woff'), /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+, iOS 5+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-300.ttf') format('truetype'), /* Chrome 4+, Firefox 3.5+, IE 9+, Safari 3.1+, iOS 4.2+, Android Browser 2.2+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-300.svg#OpenSans') format('svg'); /* Legacy iOS */
+}
+
+/* open-sans-300italic - latin */
+@font-face {
+ font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 300;
+ src: url('/ui/fonts/opensans/open-sans-v40-latin-300italic.eot'); /* IE9 Compat Modes */
+ src: url('/ui/fonts/opensans/open-sans-v40-latin-300italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('/ui/fonts/opensans/open-sans-v40-latin-300italic.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-300italic.woff') format('woff'), /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+, iOS 5+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-300italic.ttf') format('truetype'), /* Chrome 4+, Firefox 3.5+, IE 9+, Safari 3.1+, iOS 4.2+, Android Browser 2.2+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-300italic.svg#OpenSans') format('svg'); /* Legacy iOS */
+}
+
+/* open-sans-regular - latin */
+@font-face {
+ font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 400;
+ src: url('/ui/fonts/opensans/open-sans-v40-latin-regular.eot'); /* IE9 Compat Modes */
+ src: url('/ui/fonts/opensans/open-sans-v40-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('/ui/fonts/opensans/open-sans-v40-latin-regular.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-regular.woff') format('woff'), /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+, iOS 5+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-regular.ttf') format('truetype'), /* Chrome 4+, Firefox 3.5+, IE 9+, Safari 3.1+, iOS 4.2+, Android Browser 2.2+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-regular.svg#OpenSans') format('svg'); /* Legacy iOS */
+}
+
+/* open-sans-italic - latin */
+@font-face {
+ font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 400;
+ src: url('/ui/fonts/opensans/open-sans-v40-latin-italic.eot'); /* IE9 Compat Modes */
+ src: url('/ui/fonts/opensans/open-sans-v40-latin-italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('/ui/fonts/opensans/open-sans-v40-latin-italic.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-italic.woff') format('woff'), /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+, iOS 5+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-italic.ttf') format('truetype'), /* Chrome 4+, Firefox 3.5+, IE 9+, Safari 3.1+, iOS 4.2+, Android Browser 2.2+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-italic.svg#OpenSans') format('svg'); /* Legacy iOS */
+}
+
+/* open-sans-700 - latin */
+@font-face {
+ font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 700;
+ src: url('/ui/fonts/opensans/open-sans-v40-latin-700.eot'); /* IE9 Compat Modes */
+ src: url('/ui/fonts/opensans/open-sans-v40-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('/ui/fonts/opensans/open-sans-v40-latin-700.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-700.woff') format('woff'), /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+, iOS 5+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-700.ttf') format('truetype'), /* Chrome 4+, Firefox 3.5+, IE 9+, Safari 3.1+, iOS 4.2+, Android Browser 2.2+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-700.svg#OpenSans') format('svg'); /* Legacy iOS */
+}
+
+/* open-sans-700italic - latin */
+@font-face {
+ font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 700;
+ src: url('/ui/fonts/opensans/open-sans-v40-latin-700italic.eot'); /* IE9 Compat Modes */
+ src: url('/ui/fonts/opensans/open-sans-v40-latin-700italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('/ui/fonts/opensans/open-sans-v40-latin-700italic.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-700italic.woff') format('woff'), /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+, iOS 5+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-700italic.ttf') format('truetype'), /* Chrome 4+, Firefox 3.5+, IE 9+, Safari 3.1+, iOS 4.2+, Android Browser 2.2+ */
+ url('/ui/fonts/opensans/open-sans-v40-latin-700italic.svg#OpenSans') format('svg'); /* Legacy iOS */
+}
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-300.eot b/src/ui/fonts/opensans/open-sans-v40-latin-300.eot
new file mode 100644
index 0000000..e21595c
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-300.eot differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-300.svg b/src/ui/fonts/opensans/open-sans-v40-latin-300.svg
new file mode 100644
index 0000000..acb0bbb
--- /dev/null
+++ b/src/ui/fonts/opensans/open-sans-v40-latin-300.svg
@@ -0,0 +1,348 @@
+
+
+
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-300.ttf b/src/ui/fonts/opensans/open-sans-v40-latin-300.ttf
new file mode 100644
index 0000000..65a9714
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-300.ttf differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-300.woff b/src/ui/fonts/opensans/open-sans-v40-latin-300.woff
new file mode 100644
index 0000000..4d55675
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-300.woff differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-300.woff2 b/src/ui/fonts/opensans/open-sans-v40-latin-300.woff2
new file mode 100644
index 0000000..e000fcb
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-300.woff2 differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-300italic.eot b/src/ui/fonts/opensans/open-sans-v40-latin-300italic.eot
new file mode 100644
index 0000000..8dc8349
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-300italic.eot differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-300italic.svg b/src/ui/fonts/opensans/open-sans-v40-latin-300italic.svg
new file mode 100644
index 0000000..d2034b9
--- /dev/null
+++ b/src/ui/fonts/opensans/open-sans-v40-latin-300italic.svg
@@ -0,0 +1,377 @@
+
+
+
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-300italic.ttf b/src/ui/fonts/opensans/open-sans-v40-latin-300italic.ttf
new file mode 100644
index 0000000..ea96075
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-300italic.ttf differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-300italic.woff b/src/ui/fonts/opensans/open-sans-v40-latin-300italic.woff
new file mode 100644
index 0000000..d94b1b9
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-300italic.woff differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-300italic.woff2 b/src/ui/fonts/opensans/open-sans-v40-latin-300italic.woff2
new file mode 100644
index 0000000..5167821
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-300italic.woff2 differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-700.eot b/src/ui/fonts/opensans/open-sans-v40-latin-700.eot
new file mode 100644
index 0000000..25f63b7
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-700.eot differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-700.svg b/src/ui/fonts/opensans/open-sans-v40-latin-700.svg
new file mode 100644
index 0000000..8e12729
--- /dev/null
+++ b/src/ui/fonts/opensans/open-sans-v40-latin-700.svg
@@ -0,0 +1,349 @@
+
+
+
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-700.ttf b/src/ui/fonts/opensans/open-sans-v40-latin-700.ttf
new file mode 100644
index 0000000..4c14c29
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-700.ttf differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-700.woff b/src/ui/fonts/opensans/open-sans-v40-latin-700.woff
new file mode 100644
index 0000000..cefbac0
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-700.woff differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-700.woff2 b/src/ui/fonts/opensans/open-sans-v40-latin-700.woff2
new file mode 100644
index 0000000..7e3b8b0
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-700.woff2 differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-700italic.eot b/src/ui/fonts/opensans/open-sans-v40-latin-700italic.eot
new file mode 100644
index 0000000..7cc26a4
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-700italic.eot differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-700italic.svg b/src/ui/fonts/opensans/open-sans-v40-latin-700italic.svg
new file mode 100644
index 0000000..ea675ea
--- /dev/null
+++ b/src/ui/fonts/opensans/open-sans-v40-latin-700italic.svg
@@ -0,0 +1,379 @@
+
+
+
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-700italic.ttf b/src/ui/fonts/opensans/open-sans-v40-latin-700italic.ttf
new file mode 100644
index 0000000..629d074
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-700italic.ttf differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-700italic.woff b/src/ui/fonts/opensans/open-sans-v40-latin-700italic.woff
new file mode 100644
index 0000000..74310ca
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-700italic.woff differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-700italic.woff2 b/src/ui/fonts/opensans/open-sans-v40-latin-700italic.woff2
new file mode 100644
index 0000000..2c96334
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-700italic.woff2 differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-italic.eot b/src/ui/fonts/opensans/open-sans-v40-latin-italic.eot
new file mode 100644
index 0000000..abf1d65
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-italic.eot differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-italic.svg b/src/ui/fonts/opensans/open-sans-v40-latin-italic.svg
new file mode 100644
index 0000000..9bcd7c2
--- /dev/null
+++ b/src/ui/fonts/opensans/open-sans-v40-latin-italic.svg
@@ -0,0 +1,379 @@
+
+
+
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-italic.ttf b/src/ui/fonts/opensans/open-sans-v40-latin-italic.ttf
new file mode 100644
index 0000000..2475663
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-italic.ttf differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-italic.woff b/src/ui/fonts/opensans/open-sans-v40-latin-italic.woff
new file mode 100644
index 0000000..dc3013a
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-italic.woff differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-italic.woff2 b/src/ui/fonts/opensans/open-sans-v40-latin-italic.woff2
new file mode 100644
index 0000000..84ee197
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-italic.woff2 differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-regular.eot b/src/ui/fonts/opensans/open-sans-v40-latin-regular.eot
new file mode 100644
index 0000000..2e2c567
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-regular.eot differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-regular.svg b/src/ui/fonts/opensans/open-sans-v40-latin-regular.svg
new file mode 100644
index 0000000..12bc366
--- /dev/null
+++ b/src/ui/fonts/opensans/open-sans-v40-latin-regular.svg
@@ -0,0 +1,349 @@
+
+
+
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-regular.ttf b/src/ui/fonts/opensans/open-sans-v40-latin-regular.ttf
new file mode 100644
index 0000000..ddd69dc
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-regular.ttf differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-regular.woff b/src/ui/fonts/opensans/open-sans-v40-latin-regular.woff
new file mode 100644
index 0000000..9df0918
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-regular.woff differ
diff --git a/src/ui/fonts/opensans/open-sans-v40-latin-regular.woff2 b/src/ui/fonts/opensans/open-sans-v40-latin-regular.woff2
new file mode 100644
index 0000000..eaae942
Binary files /dev/null and b/src/ui/fonts/opensans/open-sans-v40-latin-regular.woff2 differ
--
cgit v1.2.3