diff --git a/app/lib/express.js b/app/lib/express.js index 5a446eb..06d69a7 100644 --- a/app/lib/express.js +++ b/app/lib/express.js @@ -12,6 +12,7 @@ const { uploadPicture, identityFilename, ssbFolder, + isPhone, } = require("./utils"); const queries = require("./queries"); const serveBlobs = require("./serve-blobs"); @@ -161,7 +162,7 @@ router.get( { public: true, mobileVersion: "/mobile" }, async (req, res) => { if (!req.context.profile) { - return res.render("index"); + return res.render("shared/index"); } const [posts, friends, secretMessages, communities] = await Promise.all([ @@ -170,7 +171,7 @@ router.get( queries.getSecretMessages(req.context.profile), queries.getProfileCommunities(req.context.profile.id), ]); - res.render("home", { + res.render("desktop/home", { posts, friends, secretMessages, @@ -181,7 +182,7 @@ router.get( ); router.get("/login", { public: true }, (_req, res) => { - res.render("login", { mode }); + res.render("shared/login", { mode }); }); router.post("/login", { public: true }, async (req, res) => { @@ -207,7 +208,7 @@ router.post("/login", { public: true }, async (req, res) => { }); router.get("/download", { public: true }, (_req, res) => { - res.render("download"); + res.render("shared/download"); }); router.get("/logout", async (_req, res) => { @@ -220,7 +221,7 @@ router.get("/signup", { public: true }, (req, res) => { return res.redirect("/"); } - res.render("signup", { mode }); + res.render("shared/signup", { mode }); }); router.post("/signup", { public: true }, async (req, res) => { @@ -259,7 +260,7 @@ router.post("/signup", { public: true }, async (req, res) => { }); router.get("/keys", (req, res) => { - res.render("keys", { + res.render("shared/keys", { useEmail: process.env.SENDGRID_API_KEY, key: req.signedCookies["ssb_key"], }); @@ -269,7 +270,7 @@ router.post("/keys/email", async (req, res) => { const email = req.body.email; const origin = req.body.origin; - let html = await ejs.renderFile("views/email_sign_in.ejs", { + let html = await ejs.renderFile("views/shared/email_sign_in.ejs", { origin, ssb_key: req.signedCookies["ssb_key"], }); @@ -287,7 +288,7 @@ router.post("/keys/email", async (req, res) => { }); router.get("/keys/copy", (req, res) => { - res.render("keys_copy", { key: req.signedCookies["ssb_key"] }); + res.render("shared/keys_copy", { key: req.signedCookies["ssb_key"] }); }); router.get("/keys/download", async (req, res) => { @@ -324,7 +325,7 @@ router.get( queries.getProfileCommunities(id), ]); - res.render("profile", { + res.render("desktop/profile", { profile, posts, friends, @@ -456,7 +457,7 @@ router.get("/pubs", async (_req, res) => { const invite = await ssb.client().invite.create({ uses: 10 }); const peers = await ssb.client().gossip.peers(); - res.render("pubs", { invite, peers }); + res.render("desktop/pubs", { invite, peers }); }); router.post("/pubs/add", async (req, res) => { @@ -468,7 +469,7 @@ router.post("/pubs/add", async (req, res) => { }); router.get("/about", { mobileVersion: "/mobile/about" }, (_req, res) => { - res.render("about"); + res.render("desktop/about"); }); router.post("/about", async (req, res) => { @@ -513,7 +514,7 @@ router.get( queries.getProfileCommunities(req.context.profile.id), ]); - res.render("communities/list", { communities, participating }); + res.render("desktop/communities/list", { communities, participating }); } ); @@ -540,10 +541,10 @@ router.get( queries.getCommunityPosts(name), ]); - res.render("communities/community", { + res.render("desktop/communities/community", { community, posts, - layout: "communities/_layout", + layout: "desktop/communities/_layout", }); } ); @@ -554,9 +555,9 @@ router.get( async (req, res) => { const community = await communityData(req); - res.render("communities/new_topic", { + res.render("desktop/communities/new_topic", { community, - layout: "communities/_layout", + layout: "desktop/communities/_layout", }); } ); @@ -643,10 +644,10 @@ router.get( queries.getPostWithReplies(name, key), ]); - res.render("communities/topic", { + res.render("desktop/communities/topic", { posts, community, - layout: "communities/_layout", + layout: "desktop/communities/_layout", }); } ); @@ -664,7 +665,7 @@ router.get("/search", { mobileVersion: "/mobile/search" }, async (req, res) => { metrics.searchResultsCommunities.observe(results.communities.length); } - res.render("search", { ...results, query }); + res.render("desktop/search", { ...results, query }); }); router.get("/blob/*", { public: true }, (req, res) => { @@ -680,7 +681,7 @@ router.get("/debug", async (req, res) => { const entries = await queries.getAllEntries(query); - res.render("debug", { entries, query }); + res.render("desktop/debug", { entries, query }); }); router.get("/debug-error", (_req, res) => { @@ -700,9 +701,13 @@ if (SENTRY_DSN && process.env.NODE_ENV == "production") { app.use(Sentry.Handlers.errorHandler()); } -app.use((error, _req, res, _next) => { +app.use((error, req, res, _next) => { res.statusCode = 500; - res.render("error", { error }); + if (isPhone(req)) { + res.render("mobile/error", { error, layout: "mobile/_layout" }); + } else { + res.render("desktop/error", { error }); + } }); const expressServer = app.listen(port, () => diff --git a/app/lib/mobile-routes.js b/app/lib/mobile-routes.js index 447d8a1..4e5388a 100644 --- a/app/lib/mobile-routes.js +++ b/app/lib/mobile-routes.js @@ -7,7 +7,7 @@ module.exports.setupRoutes = (router) => { { public: true, desktopVersion: "/" }, async (req, res) => { if (!req.context.profile) { - return res.render("index"); + return res.render("shared/index"); } const posts = await queries.getPosts(req.context.profile); diff --git a/app/lib/utils.js b/app/lib/utils.js index c8f945b..0fac4ea 100644 --- a/app/lib/utils.js +++ b/app/lib/utils.js @@ -6,6 +6,7 @@ const metrics = require("./metrics"); const isMobile = require("ismobilejs").default; const isPhone = (req) => isMobile(req.headers["user-agent"]).phone; +module.exports.isPhone = isPhone; module.exports.asyncRouter = (app) => { const debug = require("debug")("router"); diff --git a/app/views/_footer.ejs b/app/views/desktop/_footer.ejs similarity index 100% rename from app/views/_footer.ejs rename to app/views/desktop/_footer.ejs diff --git a/app/views/_friends.ejs b/app/views/desktop/_friends.ejs similarity index 100% rename from app/views/_friends.ejs rename to app/views/desktop/_friends.ejs diff --git a/app/views/_header.ejs b/app/views/desktop/_header.ejs similarity index 100% rename from app/views/_header.ejs rename to app/views/desktop/_header.ejs diff --git a/app/views/about.ejs b/app/views/desktop/about.ejs similarity index 100% rename from app/views/about.ejs rename to app/views/desktop/about.ejs diff --git a/app/views/communities/_layout.ejs b/app/views/desktop/communities/_layout.ejs similarity index 92% rename from app/views/communities/_layout.ejs rename to app/views/desktop/communities/_layout.ejs index 572d21b..440654a 100644 --- a/app/views/communities/_layout.ejs +++ b/app/views/desktop/communities/_layout.ejs @@ -22,7 +22,7 @@

Members

- <%- include('../shared/_join_button') %> + <%- include('../../shared/_join_button') %>
<%- include('../_friends', { friends: community.members }) %> diff --git a/app/views/communities/community.ejs b/app/views/desktop/communities/community.ejs similarity index 100% rename from app/views/communities/community.ejs rename to app/views/desktop/communities/community.ejs diff --git a/app/views/communities/list.ejs b/app/views/desktop/communities/list.ejs similarity index 100% rename from app/views/communities/list.ejs rename to app/views/desktop/communities/list.ejs diff --git a/app/views/communities/new_topic.ejs b/app/views/desktop/communities/new_topic.ejs similarity index 100% rename from app/views/communities/new_topic.ejs rename to app/views/desktop/communities/new_topic.ejs diff --git a/app/views/communities/topic.ejs b/app/views/desktop/communities/topic.ejs similarity index 84% rename from app/views/communities/topic.ejs rename to app/views/desktop/communities/topic.ejs index 756c366..95544ce 100644 --- a/app/views/communities/topic.ejs +++ b/app/views/desktop/communities/topic.ejs @@ -1,6 +1,6 @@ <% if (posts.length > 0) { %>

<%- topicTitle(posts[0].value) %>

- <%- include("../_posts", { posts: posts.map(x => x.value), dont_cut: true }) %> + <%- include("../../shared/_posts", { posts: posts.map(x => x.value), dont_cut: true }) %>
/publish" method="POST" style="padding-top: 20px; border-top: 1px solid #ddd;">