Implement SPA setting (closes #35)

This commit is contained in:
Cadence Ember 2020-05-06 02:14:11 +12:00
parent 850ea94ae8
commit d83a5de095
No known key found for this signature in database
GPG Key ID: 128B99B1B74A6412
5 changed files with 22 additions and 10 deletions

View File

@ -88,7 +88,7 @@ let constants = {
name: "spa",
default: "on",
boolean: true,
replaceEmptyWithDefault: true
replaceEmptyWithDefault: false
},{
name: "theme",
default: "classic",

View File

@ -3,6 +3,7 @@ const switcher = require("../../lib/utils/torswitcher")
const {fetchUser, getOrFetchShortcode, userRequestCache, history} = require("../../lib/collectors")
const {render, redirect, getStaticURL} = require("pinski/plugins")
const {pugCache} = require("../passthrough")
const {getSettings} = require("./utils/getsettings")
/** @param {import("../../lib/structures/TimelineEntry")} post */
function getPageTitle(post) {
@ -57,7 +58,7 @@ module.exports = [
}
},
{
route: `/u/(${constants.external.username_regex})`, methods: ["GET"], code: ({url, fill}) => {
route: `/u/(${constants.external.username_regex})`, methods: ["GET"], code: ({req, url, fill}) => {
if (fill[0] !== fill[0].toLowerCase()) { // some capital letters
return Promise.resolve(redirect(`/u/${fill[0].toLowerCase()}`, 301))
}
@ -69,7 +70,10 @@ module.exports = [
await user.timeline.fetchUpToPage(page - 1)
}
const followerCountsAvailable = !(user.constructor.name === "ReelUser" && user.following === 0 && user.followedBy === 0)
return render(200, "pug/user.pug", {url, user, followerCountsAvailable, constants})
const settings = getSettings(req)
return render(200, "pug/user.pug", {url, user, followerCountsAvailable, constants, settings})
}).catch(error => {
if (error === constants.symbols.NOT_FOUND || error === constants.symbols.ENDPOINT_OVERRIDDEN) {
return render(404, "pug/friendlyerror.pug", {
@ -173,15 +177,19 @@ module.exports = [
}
},
{
route: `/p/(${constants.external.shortcode_regex})`, methods: ["GET"], code: ({fill}) => {
route: `/p/(${constants.external.shortcode_regex})`, methods: ["GET"], code: ({req, fill}) => {
return getOrFetchShortcode(fill[0]).then(async post => {
await post.fetchChildren()
await post.fetchExtendedOwnerP() // serial await is okay since intermediate fetch result is cached
if (post.isVideo()) await post.fetchVideoURL()
const settings = getSettings(req)
return render(200, "pug/post.pug", {
title: getPageTitle(post),
post,
website_origin: constants.website_origin
website_origin: constants.website_origin,
settings
})
}).catch(error => {
if (error === constants.symbols.NOT_FOUND) {

View File

@ -1,4 +1,4 @@
//- Needs website_origin, title, post
//- Needs website_origin, title, post, settings
include includes/post
@ -7,7 +7,8 @@ html
head
title= title
include includes/head
script(type="module" src=getStaticURL("html", "/static/js/post_overlay.js"))
if settings.spa
script(type="module" src=getStaticURL("html", "/static/js/post_overlay.js"))
meta(property="og:url" content=`${website_origin}/p/${post.data.shortcode}`)
meta(property="og:type" content="article")
- let firstEntry = post.children[0]

View File

@ -49,7 +49,7 @@ html
+checkbox("link_hashtags", "Clickable hashtags", "Clickable", true)
+checkbox("spa", "Fast navigation", "Enabled", true)
+checkbox("spa", "Fast navigation", "Enabled", false)
+fieldset("Appearance")
+select("theme", "Theme", true, [

View File

@ -1,4 +1,4 @@
//- Needs user, followerCountsAvailable, url, constants
//- Needs user, followerCountsAvailable, url, constants, settings
include includes/timeline_page.pug
include includes/next_page_button.pug
@ -15,7 +15,10 @@ html
else
title= `@${user.data.username} | Bibliogram`
include includes/head
script(src=getStaticURL("html", "/static/js/post_overlay.js") type="module")
if settings.spa
script(src=getStaticURL("html", "/static/js/post_overlay.js") type="module")
else
script(src=getStaticURL("html", "/static/js/pagination.js") type="module")
meta(property="og:url" content=`${constants.website_origin}/u/${user.data.username}`)
meta(property="og:type" content="profile")
meta(property="og:title" content=(user.data.full_name || user.data.username))