From 40d411e516efee5531404725b45ab89d97172ce8 Mon Sep 17 00:00:00 2001
From: Vitaly Takmazov
Date: Fri, 28 Oct 2022 00:14:01 +0300
Subject: Initial SSR
---
vnext/src/App.js | 49 ++--
vnext/src/assets/av-96.png | Bin 0 -> 2018 bytes
vnext/src/assets/logo.png | Bin 0 -> 2447 bytes
vnext/src/assets/logo@2x.png | Bin 0 -> 4822 bytes
vnext/src/assets/matrix.jpg | Bin 0 -> 236176 bytes
vnext/src/index.css | 568 +++++++++++++++++++++++++++++++++++-----
vnext/src/index.html | 30 +--
vnext/src/index.js | 11 +-
vnext/src/ui/Input.css | 2 +-
vnext/src/ui/Login.css | 4 +-
vnext/src/ui/UserInfo.js | 2 +-
vnext/src/ui/assets/av-96.png | Bin 2018 -> 0 bytes
vnext/src/ui/assets/logo.png | Bin 2447 -> 0 bytes
vnext/src/ui/assets/logo@2x.png | Bin 4822 -> 0 bytes
vnext/src/ui/assets/matrix.jpg | Bin 236176 -> 0 bytes
15 files changed, 539 insertions(+), 127 deletions(-)
create mode 100644 vnext/src/assets/av-96.png
create mode 100644 vnext/src/assets/logo.png
create mode 100644 vnext/src/assets/logo@2x.png
create mode 100644 vnext/src/assets/matrix.jpg
delete mode 100644 vnext/src/ui/assets/av-96.png
delete mode 100644 vnext/src/ui/assets/logo.png
delete mode 100644 vnext/src/ui/assets/logo@2x.png
delete mode 100644 vnext/src/ui/assets/matrix.jpg
(limited to 'vnext/src')
diff --git a/vnext/src/App.js b/vnext/src/App.js
index c3d4e5aa..b56e0300 100644
--- a/vnext/src/App.js
+++ b/vnext/src/App.js
@@ -24,7 +24,7 @@ const elClassHidden = 'header--hidden';
const elClassTop = 'content--top';
-export default function App() {
+export default function App({ footer }) {
let contentRef = useRef(null);
const [cookie, setCookie] = useCookies(['hash']);
@@ -37,7 +37,7 @@ export default function App() {
let retpath = params.retpath || `${window.location.protocol}//${window.location.host}${window.location.pathname}`;
window.history.replaceState({}, document.title, retpath);
}
- }, []);
+ }, [setCookie, footer]);
/**
* @type {import('./api').SecureUser}
@@ -150,26 +150,35 @@ export default function App() {
<>
- {
- visitor.uid > 0 &&
+ {
}
diff --git a/vnext/src/assets/av-96.png b/vnext/src/assets/av-96.png
new file mode 100644
index 00000000..911c0522
Binary files /dev/null and b/vnext/src/assets/av-96.png differ
diff --git a/vnext/src/assets/logo.png b/vnext/src/assets/logo.png
new file mode 100644
index 00000000..4e0f6d56
Binary files /dev/null and b/vnext/src/assets/logo.png differ
diff --git a/vnext/src/assets/logo@2x.png b/vnext/src/assets/logo@2x.png
new file mode 100644
index 00000000..6febeaf9
Binary files /dev/null and b/vnext/src/assets/logo@2x.png differ
diff --git a/vnext/src/assets/matrix.jpg b/vnext/src/assets/matrix.jpg
new file mode 100644
index 00000000..745f1564
Binary files /dev/null and b/vnext/src/assets/matrix.jpg differ
diff --git a/vnext/src/index.css b/vnext/src/index.css
index 5a829f03..f3b337e6 100644
--- a/vnext/src/index.css
+++ b/vnext/src/index.css
@@ -11,6 +11,7 @@
--link-color: #3c77aa;
--dimmed-link-color: #88958d;
}
+
@media (prefers-color-scheme: dark) {
:root {
--main-background-color: #222;
@@ -62,7 +63,19 @@ html,
input,
textarea,
button {
- font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ font-family:
+ system-ui,
+ -apple-system,
+ BlinkMacSystemFont,
+ "Segoe UI",
+ Roboto,
+ Oxygen,
+ Ubuntu,
+ Cantarell,
+ "Fira Sans",
+ "Droid Sans",
+ "Helvetica Neue",
+ sans-serif;
-webkit-font-smoothing: subpixel-antialiased;
}
@@ -110,25 +123,15 @@ hr {
border: none;
}
-#app {
- height: 100%;
- width: 100%;
-}
-
#header {
background: var(--text-background-color);
border-bottom: 1px solid var(--border-color);
- transition: transform 0.2s;
z-index: 10;
position: fixed;
width: 100%;
top: 0;
}
-.header--hidden {
- transform: translateY(-100%);
-}
-
#header_wrapper,
.footer_container {
display: flex;
@@ -144,6 +147,7 @@ hr {
width: 100%;
z-index: 10;
}
+
#sidebar_wrapper {
display: flex;
flex-direction: row;
@@ -155,22 +159,8 @@ hr {
}
#content {
- margin-top: 0;
- transition: margin-top 0.4s;
- padding-bottom: 64px;
-}
-
-.content--top {
margin-top: 64px !important;
-}
-
-#footer {
- display: none;
- background: var(--background-color);
- border-top: 1px solid #ccc;
- color: var(--text-color);
- padding: 10px;
- transition: margin-left 0.4s;
+ padding-bottom: 64px;
}
.desktop {
@@ -187,7 +177,7 @@ hr {
}
#logo a {
- background: url("./ui/assets/logo@2x.png") no-repeat;
+ background: url("./assets/logo@2x.png") no-repeat;
background-size: cover;
border: 0;
display: block;
@@ -200,13 +190,15 @@ hr {
#ctitle {
display: flex;
+ flex: 1;
+ white-space: nowrap;
+ overflow: hidden;
}
-#ctitle:first-child {
- margin-right: 5px;
- vertical-align: middle;
- max-width: 48px;
- max-height: 48px;
+#ctitle a {
+ border-bottom: 2px solid transparent;
+ text-overflow: ellipsis;
+ overflow: hidden;
}
#global {
@@ -215,8 +207,7 @@ hr {
.l {
display: flex;
- flex-direction: row;
- flex-wrap: wrap;
+ flex-flow: row wrap;
}
#global a,
@@ -245,8 +236,17 @@ hr {
cursor: pointer;
}
-#ctitle a {
- padding: 2px 20px;
+#sidebar .tags {
+ line-height: 140%;
+ padding: 12px;
+ text-align: justify;
+}
+
+#sidebar .tags h4 {
+ color: #88958d;
+ display: block;
+ text-align: center;
+ font-weight: 400;
}
#global a,
@@ -274,62 +274,480 @@ hr {
border: 1px solid var(--border-color);
outline: none !important;
padding: 4px;
- -webkit-appearance: none;
+ appearance: none;
border-radius: 0;
}
-.lds-ripple {
+.page {
+ background: var(--main-background-color);
+ border: 1px solid var(--border-color);
+ margin-bottom: 12px;
+ padding: 6px;
+ text-align: center;
+}
+
+.page a {
+ color: var(--dimmed-link-color);
+}
+
+.msg-cont .ir {
+ padding: 12px;
+}
+
+.msg-cont .ir img {
+ max-width: 100%;
+ height: auto;
+}
+
+.msg-cont > .h,
+.msg-cont .msg-header {
+ padding: 12px;
+}
+
+.msg-cont > .l {
+ border-top: 1px solid var(--border-color);
+ display: flex;
+ align-items: center;
+ justify-content: space-around;
+ background: var(--main-background-color);
+}
+
+.msg-cont > .l a {
+ color: var(--dimmed-link-color);
+ margin-right: 15px;
+ font-size: small;
+}
+
+.msg-tags {
+ color: var(--dimmed-link-color);
+ padding: 6px;
+}
+
+.badge,
+.msg-tags > a {
+ color: var(--dimmed-link-color);
+ display: inline-block;
+}
+
+article .tags > a::before,
+.msg-tags > a::before {
+ content: "#";
+}
+
+.msgthread {
+ margin-bottom: 0;
+}
+
+.msg-cont {
+ background: var(--text-background-color);
+ border: 1px solid var(--border-color);
+ line-height: 140%;
+ margin-bottom: 12px;
+}
+
+.reply-new .msg-cont {
+ border-right: 5px solid #0c0;
+}
+
+.msg-ts {
+ font-size: small;
+ vertical-align: top;
+ word-wrap: break-word;
+ overflow-wrap: break-word;
+ word-break: break-word;
+}
+
+.msg-ts,
+.msg-ts > a {
+ color: var(--dimmed-link-color);
+}
+
+.msg-txt {
+ margin: 0 0 12px;
+ padding: 12px;
+ word-wrap: break-word;
+ overflow-wrap: break-word;
+}
+
+q::before,
+q::after {
+ content: "";
+}
+
+q,
+blockquote {
+ border-left: 3px solid #ccc;
+ color: #666;
+ display: block;
+ margin: 10px 0 10px 10px;
+ padding-left: 10px;
+ word-break: break-word;
+}
+
+.msg-media {
+ text-align: center;
+}
+
+.msg-media img {
+ max-width: 100%;
+ height: auto;
+}
+
+.msg-links {
+ color: var(--dimmed-link-color);
+ font-size: small;
+ margin: 5px 0 0 0;
+ padding: 12px;
+}
+
+.msg-comments {
+ color: var(--dimmed-link-color);
+ font-size: small;
+ margin-top: 10px;
+ overflow: hidden;
+ text-indent: 10px;
+}
+
+.ta-wrapper {
+ border: 1px solid #ddd;
+ display: flex;
+ flex-grow: 1;
+}
+
+.msg-comment {
+ display: flex;
+ margin-top: 10px;
+}
+
+.msg-comment-hidden {
+ display: none;
+}
+
+.msg-comment textarea {
+ border: 0;
+ flex-grow: 1;
+ outline: none !important;
+ padding: 4px;
+ resize: vertical;
+ vertical-align: top;
+}
+
+.attach-photo {
+ cursor: pointer;
+}
+
+.attach-photo-active {
+ color: green;
+}
+
+.msg-comment input {
+ align-self: flex-start;
+ background: var(--background-color);
+ border: 1px solid var(--border-color);
+ color: #999;
+ margin: 0 0 0 6px;
+ position: sticky;
+ top: 70px;
+ vertical-align: top;
+ width: 50px;
+}
+
+.msg-recomms {
+ color: var(--dimmed-link-color);
+ background: var(--main-background-color);
+ font-size: small;
+ margin-bottom: 10px;
+ padding: 6px;
+ border-bottom: 1px solid var(--border-color);
+ overflow: hidden;
+ text-indent: 10px;
+}
+
+.msg-summary,
+.msg-summary a {
+ color: var(--dimmed-link-color);
+ font-size: small;
+ padding: 12px;
+ text-align: right;
+}
+
+.msg-bubble {
+ padding: 12px;
display: inline-block;
+ background: var(--border-color);
+ color: #222;
+}
+
+#replies .msg-txt,
+#private-messages .msg-txt {
+ margin: 0;
+}
+
+.title2 {
+ background: #fff;
+ margin: 20px 0;
+ padding: 10px 20px;
+}
+
+.title2-right {
+ float: right;
+ line-height: 24px;
+}
+
+#content .title2 h2 {
+ font-size: x-large;
+ margin: 0;
+}
+
+.embedContainer {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: center;
+ padding: 12px;
position: relative;
- width: 64px;
- height: 64px;
}
-.lds-ripple div {
- position: absolute;
- border: 4px solid #ff339a;
+.embedContainer > * {
+ box-sizing: border-box;
+ flex-grow: 1;
+ margin: 3px;
+ min-width: 49%;
+}
+
+.embedContainer > .compact {
+ flex-grow: 0;
+}
+
+.embedContainer .picture img {
+ display: block;
+}
+
+.embedContainer img,
+.embedContainer video {
+ max-width: 100%;
+ max-height: 80vh;
+}
+
+.embedContainer > .audio,
+.embedContainer > .youtube {
+ min-width: 90%;
+}
+
+.embedContainer audio {
+ width: 100%;
+}
+
+.embedContainer iframe {
+ overflow: hidden;
+ resize: vertical;
+ display: block;
+}
+
+.msg-cont .nsfw .embedContainer img,
+.msg-cont .nsfw .embedContainer video,
+.msg-cont .nsfw .embedContainer iframe,
+.msg-cont .nsfw .ir img {
+ opacity: 0.1;
+}
+
+.msg-cont .nsfw .embedContainer img:hover,
+.msg-cont .nsfw .embedContainer video:hover,
+.msg-cont .nsfw .embedContainer iframe:hover,
+.msg-cont .nsfw .ir img:hover {
opacity: 1;
- border-radius: 50%;
- animation: lds-ripple 1s cubic-bezier(0, 0.2, 0.8, 1) infinite;
}
-.lds-ripple div:nth-child(2) {
- animation-delay: -0.5s;
+.Button {
+ background: #fff;
+ border: 1px solid var(--border-color);
+ color: #888;
+ cursor: pointer;
+ display: inline-block;
+ margin: 5px;
+ padding: 4px 10px;
}
-@keyframes lds-ripple {
- 0% {
- top: 28px;
- left: 28px;
- width: 0;
- height: 0;
- opacity: 1;
- }
- 100% {
- top: -1px;
- left: -1px;
- width: 58px;
- height: 58px;
- opacity: 0;
+.Button:hover {
+ background: #f8f8f8;
+ border-bottom: 1px solid #ff339a;
+}
+
+.Avatar {
+ display: flex;
+}
+
+.msg-avatar {
+ max-height: 48px;
+ margin-right: 10px;
+ max-width: 48px;
+}
+
+.msg-avatar img {
+ max-height: 48px;
+ vertical-align: top;
+ max-width: 48px;
+}
+
+.info-avatar {
+ white-space: nowrap;
+}
+
+.info-avatar img {
+ max-height: 36px;
+ max-width: 36px;
+ padding: 6px;
+ vertical-align: middle;
+}
+
+.Chat_messages {
+ box-sizing: border-box;
+ padding: 0 20px;
+ overflow-y: auto;
+ height: 100%;
+ display: flex;
+ flex-direction: column-reverse;
+ width: 100%;
+}
+
+#dialogt {
+ height: 100%;
+ left: 0;
+ position: fixed;
+ top: 0;
+ width: 100%;
+ z-index: 10;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: rgba(0, 0, 0, 30%);
+}
+
+#dialogw {
+ z-index: 11;
+ max-width: 96%;
+ max-height: calc(100% - 100px);
+ background-color: #fff;
+}
+
+#dialogw a {
+ display: block;
+}
+
+#dialogw img {
+ max-height: 100%;
+ max-height: 90vh;
+ max-width: 100%;
+}
+
+#dialog_header {
+ width: 100%;
+ height: 44px;
+ display: flex;
+ flex-direction: row-reverse;
+ align-items: center;
+}
+
+.header_image {
+ background: rgba(0, 0, 0, 28%);
+}
+
+#dialogc {
+ cursor: pointer;
+ color: #ccc;
+ padding-right: 6px;
+}
+
+.dialoglogin {
+ background: #fff;
+ padding: 25px;
+ margin: 0 auto;
+}
+
+@media (--viewport-desktop) {
+ .dialoglogin {
+ width: 300px;
}
}
-.page {
+.dialog-opened {
+ overflow: hidden;
+}
+
+#signemail,
+#signfb,
+#signvk {
+ display: block;
+ line-height: 32px;
+ margin: 10px 0;
+ text-decoration: none;
+ width: 100%;
+}
+
+#signvk {
+ margin-bottom: 30px;
+}
+
+.dialoglogin form {
+ margin-top: 7px;
+}
+
+.signinput,
+.signsubmit {
+ border: 1px solid #ccc;
+ margin: 3px 0;
+ padding: 3px;
+}
+
+.signsubmit {
+ width: 70px;
+}
+
+.dialogshare {
+ background: #fff;
+ min-width: 300px;
+ overflow: auto;
+ padding: 20px;
+}
+
+.dialogl {
+ background: #fff;
+ border: 1px solid #ddd;
+ margin: 3px 0 20px;
+ padding: 5px;
+}
+
+.dialogshare li {
+ float: left;
+ margin: 5px 10px 0 0;
+}
+
+.dialogshare a {
+ display: block;
+}
+
+.dialogtxt {
+ background: #fff;
+ padding: 20px;
+}
+
+#replies {
background: var(--main-background-color);
border: 1px solid var(--border-color);
- margin-bottom: 12px;
- padding: 6px;
- text-align: center;
+ padding: 12px;
}
-.page a {
- color: var(--dimmed-link-color);
+.userinfo {
+ padding: 40px;
+ background-color: #fdfdfe;
+ margin: 12px;
}
@media (--viewport-mobile) {
#content {
margin-bottom: 12px;
}
+
#sidebar {
background: var(--text-background-color);
}
@@ -339,14 +757,17 @@ hr {
.desktop {
display: block;
}
+
.mobile {
display: none;
}
+
#content {
width: 100%;
margin-bottom: 12px;
padding-bottom: 12px;
}
+
#sidebar {
position: sticky;
padding: 12px;
@@ -355,31 +776,44 @@ hr {
z-index: auto;
overflow-y: auto;
}
+
article,
.page,
.msg-cont {
width: 640px;
}
+
#sidebar_wrapper {
width: 300px;
overflow-y: auto;
height: 100%;
+ position: fixed;
flex-direction: column;
+ justify-content: start;
}
+
#sidebar_wrapper a,
.l a {
border-right: 2px solid transparent;
}
+
#sidebar_wrapper > a:hover {
border-top: initial;
border-right: 2px solid #ff339a;
}
+
#header_wrapper,
#content_wrapper {
width: 1000px;
margin: 0 auto;
}
+
#content_wrapper {
display: flex;
}
+ #footer {
+ color: var(--dimmed-link-color);
+ padding: 10px;
+ font-size: 10pt;
+ }
}
diff --git a/vnext/src/index.html b/vnext/src/index.html
index e69e1429..fa4b62a3 100644
--- a/vnext/src/index.html
+++ b/vnext/src/index.html
@@ -29,35 +29,7 @@
-
-
-
-
-
-
-
+