about summary refs log tree commit diff
path: root/bskyweb
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2023-03-14 17:30:15 -0500
committerGitHub <noreply@github.com>2023-03-14 17:30:15 -0500
commit8d2e649b4dae4523d9c0ac36d5dfd31409447be4 (patch)
tree151f1dcd76c52a8bb3f45061a023fe6a8b2637b2 /bskyweb
parent8629e167cd668cd1d41bf6a37acf9d94502e5c2b (diff)
downloadvoidsky-8d2e649b4dae4523d9c0ac36d5dfd31409447be4.tar.zst
Create build step for the web server (#289)
* Create build step for the web server

* Update bskyweb routes and 404 behavior
Diffstat (limited to 'bskyweb')
-rw-r--r--bskyweb/README.md3
-rw-r--r--bskyweb/cmd/bskyweb/server.go9
-rw-r--r--bskyweb/templates/base.html120
-rw-r--r--bskyweb/templates/error.html24
-rw-r--r--bskyweb/templates/scripts.html2
5 files changed, 136 insertions, 22 deletions
diff --git a/bskyweb/README.md b/bskyweb/README.md
index 86bc16864..2c381495f 100644
--- a/bskyweb/README.md
+++ b/bskyweb/README.md
@@ -20,8 +20,7 @@ like:
 Then build and copy over the big 'ol `bundle.web.js` file:
 
     # in the top level of this repo
-    yarn webpack build --config ./web/webpack.config.js -d inline-source-map --color
-    cp dist/bundle.web.js bskyweb/static/
+    yarn build-web
 
 ### Golang Daemon
 
diff --git a/bskyweb/cmd/bskyweb/server.go b/bskyweb/cmd/bskyweb/server.go
index 6a8a88884..7ae0fb54f 100644
--- a/bskyweb/cmd/bskyweb/server.go
+++ b/bskyweb/cmd/bskyweb/server.go
@@ -94,20 +94,23 @@ func serve(cctx *cli.Context) error {
 	// configure routes
 	e.File("/robots.txt", "static/robots.txt")
 	e.Static("/static", "static")
+	e.Static("/static/js", "../web-build/static/js")
 
 	e.GET("/", server.WebHome)
 
 	// generic routes
-	e.GET("/contacts", server.WebGeneric)
 	e.GET("/search", server.WebGeneric)
 	e.GET("/notifications", server.WebGeneric)
 	e.GET("/settings", server.WebGeneric)
-	e.GET("/settings", server.WebGeneric)
+	e.GET("/sys/debug", server.WebGeneric)
+	e.GET("/sys/log", server.WebGeneric)
+	e.GET("/support", server.WebGeneric)
+	e.GET("/support/privacy", server.WebGeneric)
 
 	// profile endpoints; only first populates info
 	e.GET("/profile/:handle", server.WebProfile)
 	e.GET("/profile/:handle/follows", server.WebGeneric)
-	e.GET("/profile/:handle/following", server.WebGeneric)
+	e.GET("/profile/:handle/followers", server.WebGeneric)
 
 	// post endpoints; only first populates info
 	e.GET("/profile/:handle/post/:rkey", server.WebPost)
diff --git a/bskyweb/templates/base.html b/bskyweb/templates/base.html
index 024e48d6d..05c9becce 100644
--- a/bskyweb/templates/base.html
+++ b/bskyweb/templates/base.html
@@ -2,21 +2,120 @@
 <html lang="en">
 <head>   
   <meta charset="UTF-8" />
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <meta httpEquiv="X-UA-Compatible" content="IE=edge" />
+  <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1.00001, viewport-fit=cover">
   <meta name="referrer" content="origin-when-cross-origin">
   <title>{%- block head_title -%}Bluesky{%- endblock -%}</title>
+
   <!-- Hello Humans! API docs at https://atproto.com -->
+  
   <style>
-    /* These styles make the body full-height */
-    html, body { height: 100%; }
-    /* These styles disable body scrolling if you are using <ScrollView> */
-    body { overflow: hidden; }
-    /* These styles make the root element full-height */
-    #app-root { display:flex; height:100%; }
+    /**
+     * Extend the react-native-web reset:
+     * https://github.com/necolas/react-native-web/blob/master/packages/react-native-web/src/exports/StyleSheet/initialRules.js
+     */
+    html,
+    body,
+    #root {
+      width: 100%;
+      /* To smooth any scrolling behavior */
+      -webkit-overflow-scrolling: touch;
+      margin: 0px;
+      padding: 0px;
+      /* Allows content to fill the viewport and go beyond the bottom */
+      min-height: 100%;
+    }
+    #root {
+      flex-shrink: 0;
+      flex-basis: auto;
+      flex-grow: 1;
+      display: flex;
+      flex: 1;
+    }
+
+    html {
+      scroll-behavior: smooth;
+      /* Prevent text size change on orientation change https://gist.github.com/tfausak/2222823#file-ios-8-web-app-html-L138 */
+      -webkit-text-size-adjust: 100%;
+      height: calc(100% + env(safe-area-inset-top));
+    }
+
+    body {
+      display: flex;
+      /* Allows you to scroll below the viewport; default value is visible */
+      overflow-y: auto;
+      overscroll-behavior-y: none;
+      text-rendering: optimizeLegibility;
+      -webkit-font-smoothing: antialiased;
+      -moz-osx-font-smoothing: grayscale;
+      -ms-overflow-style: scrollbar;
+    }
+    /* Enable for apps that support dark-theme */
+    /*@media (prefers-color-scheme: dark) {
+      body {
+        background-color: black;
+      }
+    }*/
+
     /* Remove focus state on inputs */
-    *:focus { outline: 0; }
+    *:focus {
+      outline: 0;
+    }
+    /* Remove default link styling */
+    a {
+      color: inherit;
+    }
+    a[role="link"]:hover {
+      text-decoration: underline;
+    }
+
+    /* ProseMirror */
+    .ProseMirror {
+      font: 18px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
+      min-height: 140px;
+    }
+    .ProseMirror p {
+      margin: 0;
+    }
+    .ProseMirror p.is-editor-empty:first-child::before {
+      color: #8d8e96;
+      content: attr(data-placeholder);
+      float: left;
+      height: 0;
+      pointer-events: none;
+    }
+    .ProseMirror .mention {
+      color: #0085ff;
+    }
+    .ProseMirror a {
+      color: #0085ff;
+      cursor: pointer;
+    }
+    .tippy-content .items {
+      border-radius: 6px;
+      background: #F3F3F8;
+      border: 1px solid #e0d9d9;
+      padding: 3px 3px;
+    }
+    .tippy-content .items .item {
+      display: block;
+      background: transparent;
+      color: #8a8c9a;
+      border: 0;
+      font: 17px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
+      padding: 7px 10px 8px;
+      width: 100%;
+      text-align: left;
+      box-sizing: border-box;
+      letter-spacing: 0.2px;
+    }
+    .tippy-content .items .item.is-selected {
+      background: #fff;
+      border-radius: 4px;
+      color: #333;
+    }
   </style>
-  {% block head_bundle -%}<script defer src="/static/bundle.web.js"></script>{%- endblock %}
+  {% include "scripts.html" %}
   <link rel="apple-touch-icon" sizes="180x180" href="/static/apple-touch-icon.png"/>
   <link rel="icon" type="image/png" sizes="32x32" href="/static/favicon-32x32.png"/>
   <link rel="icon" type="image/png" sizes="16x16" href="/static/favicon-16x16.png"/>
@@ -38,14 +137,13 @@
 </head>
 <body>
 {%- block body_all %}
-	<div id="app-root">
+	<div id="root"></div>
     <noscript>
 			{%- block noscript_extra %}{% endblock -%}
       <h1>Javascript Required</h1>
       <p>This is a heavily interactive web application, and Javascript is required. Simple HTML interfaces are possible, but that is not what this is.
       <p>Learn more about Bluesky at <a href="https://blueskyweb.xyz">blueskyweb.xyz</a> and <a href="https://atproto.com">atproto.com</a>.
     </noscript>
-	</div>
 {% endblock -%}
 </body>
 </html>
diff --git a/bskyweb/templates/error.html b/bskyweb/templates/error.html
index e40d8c4ab..f8fdd290c 100644
--- a/bskyweb/templates/error.html
+++ b/bskyweb/templates/error.html
@@ -2,14 +2,26 @@
 
 {% block head_title %}Error {{ statusCode }} - Bluesky{% endblock %}
 
-{# don't include the bundle on error pages #}
-{% block head_bundle %}{% endblock %}
+{% block noscript_extra %}
+  {%- if statusCode == 404 %}
+    <h1>404: Not Found</h1>
+  {% endif %}
+{% endblock %}
+
 
-{% block body_all %}
+{# don't include the bundle on non-404 error pages #}
+{% block head_bundle %}
   {% if statusCode == 404 %}
-	  <h1>404: Not Found</h1>
+    {{ super() }}
   {% else %}
-	  <h1>{{ statusCode }}: Server Error</h1>
-    <p>Sorry about that! Our <a href="https://bluesky.statuspage.io/">Status Page</a> might have more context.
   {% endif %}
 {% endblock %}
+
+{%- block body_all %}
+  {% if statusCode == 404 %}
+    {{ super() }}
+  {% else %}
+    <h1>{{ statusCode }}: Server Error</h1>
+    <p>Sorry about that! Our <a href="https://bluesky.statuspage.io/">Status Page</a> might have more context.
+  {% endif %}
+{% endblock -%}
\ No newline at end of file
diff --git a/bskyweb/templates/scripts.html b/bskyweb/templates/scripts.html
new file mode 100644
index 000000000..30826bfb9
--- /dev/null
+++ b/bskyweb/templates/scripts.html
@@ -0,0 +1,2 @@
+<script defer="defer" src="/static/js/412.e47ad7b9.js"></script>
+<script defer="defer" src="/static/js/main.f526ceaa.js"></script>
\ No newline at end of file