From 5ea14d906e57a5949498cc74328755783d91e360 Mon Sep 17 00:00:00 2001 From: Rogerio Chaves Date: Sun, 26 Apr 2020 19:37:41 +0200 Subject: [PATCH] Refactor to move desktop views to desktop/ folder to put it as same level with mobile, because desktop shouldn't sound like a first-class citzen, it should be equal, also, having a shared/ folder will make it more obvious which parts are reused for both --- app/lib/express.js | 49 ++++++++++--------- app/lib/mobile-routes.js | 2 +- app/lib/utils.js | 1 + app/views/{ => desktop}/_footer.ejs | 0 app/views/{ => desktop}/_friends.ejs | 0 app/views/{ => desktop}/_header.ejs | 0 app/views/{ => desktop}/about.ejs | 0 .../{ => desktop}/communities/_layout.ejs | 2 +- .../{ => desktop}/communities/community.ejs | 0 app/views/{ => desktop}/communities/list.ejs | 0 .../{ => desktop}/communities/new_topic.ejs | 0 app/views/{ => desktop}/communities/topic.ejs | 2 +- app/views/{ => desktop}/debug.ejs | 0 app/views/{ => desktop}/error.ejs | 0 app/views/{ => desktop}/home.ejs | 2 +- app/views/{ => desktop}/profile.ejs | 4 +- app/views/{ => desktop}/pubs.ejs | 0 app/views/{ => desktop}/search.ejs | 0 .../secrets/_compose_multiple.ejs | 0 .../{ => desktop}/secrets/_compose_single.ejs | 0 app/views/{ => desktop}/secrets/_messages.ejs | 0 app/views/mobile/communities/topic.ejs | 2 +- app/views/mobile/error.ejs | 5 ++ app/views/mobile/friends.ejs | 2 +- app/views/mobile/home.ejs | 2 +- app/views/mobile/profile.ejs | 4 +- app/views/{ => shared}/_friendship_button.ejs | 0 app/views/{ => shared}/_posts.ejs | 0 app/views/{ => shared}/download.ejs | 5 +- app/views/{ => shared}/email_sign_in.ejs | 0 app/views/{ => shared}/index.ejs | 4 +- app/views/{ => shared}/keys.ejs | 4 +- app/views/{ => shared}/keys_copy.ejs | 4 +- app/views/{ => shared}/login.ejs | 4 +- app/views/{ => shared}/signup.ejs | 4 +- 35 files changed, 56 insertions(+), 46 deletions(-) rename app/views/{ => desktop}/_footer.ejs (100%) rename app/views/{ => desktop}/_friends.ejs (100%) rename app/views/{ => desktop}/_header.ejs (100%) rename app/views/{ => desktop}/about.ejs (100%) rename app/views/{ => desktop}/communities/_layout.ejs (92%) rename app/views/{ => desktop}/communities/community.ejs (100%) rename app/views/{ => desktop}/communities/list.ejs (100%) rename app/views/{ => desktop}/communities/new_topic.ejs (100%) rename app/views/{ => desktop}/communities/topic.ejs (84%) rename app/views/{ => desktop}/debug.ejs (100%) rename app/views/{ => desktop}/error.ejs (100%) rename app/views/{ => desktop}/home.ejs (96%) rename app/views/{ => desktop}/profile.ejs (94%) rename app/views/{ => desktop}/pubs.ejs (100%) rename app/views/{ => desktop}/search.ejs (100%) rename app/views/{ => desktop}/secrets/_compose_multiple.ejs (100%) rename app/views/{ => desktop}/secrets/_compose_single.ejs (100%) rename app/views/{ => desktop}/secrets/_messages.ejs (100%) create mode 100644 app/views/mobile/error.ejs rename app/views/{ => shared}/_friendship_button.ejs (100%) rename app/views/{ => shared}/_posts.ejs (100%) rename app/views/{ => shared}/download.ejs (85%) rename app/views/{ => shared}/email_sign_in.ejs (100%) rename app/views/{ => shared}/index.ejs (94%) rename app/views/{ => shared}/keys.ejs (93%) rename app/views/{ => shared}/keys_copy.ejs (79%) rename app/views/{ => shared}/login.ejs (92%) rename app/views/{ => shared}/signup.ejs (92%) 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;">