mirror of
https://git.sr.ht/~cadence/bibliogram
synced 2024-11-22 16:17:29 +00:00
Redesign custom theme selection, again
This commit is contained in:
parent
9712a80d5a
commit
e52fa5aa31
10
package-lock.json
generated
10
package-lock.json
generated
@ -2738,8 +2738,8 @@
|
|||||||
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg=="
|
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg=="
|
||||||
},
|
},
|
||||||
"pinski": {
|
"pinski": {
|
||||||
"version": "github:cloudrac3r/pinski#059bfb3c07f36b7e175bce52e4715646b6acfebd",
|
"version": "github:cloudrac3r/pinski#6273f81facd1e753e021910f7aa6e4384cf60631",
|
||||||
"from": "github:cloudrac3r/pinski#059bfb3c07f36b7e175bce52e4715646b6acfebd",
|
"from": "github:cloudrac3r/pinski#6273f81facd1e753e021910f7aa6e4384cf60631",
|
||||||
"requires": {
|
"requires": {
|
||||||
"mime": "^2.4.4",
|
"mime": "^2.4.4",
|
||||||
"pug": "^2.0.3",
|
"pug": "^2.0.3",
|
||||||
@ -4909,9 +4909,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ws": {
|
"ws": {
|
||||||
"version": "7.2.5",
|
"version": "7.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz",
|
||||||
"integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA=="
|
"integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w=="
|
||||||
},
|
},
|
||||||
"xml-js": {
|
"xml-js": {
|
||||||
"version": "1.6.11",
|
"version": "1.6.11",
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
"mixin-deep": "^2.0.1",
|
"mixin-deep": "^2.0.1",
|
||||||
"node-dir": "^0.1.17",
|
"node-dir": "^0.1.17",
|
||||||
"node-fetch": "^2.6.0",
|
"node-fetch": "^2.6.0",
|
||||||
"pinski": "github:cloudrac3r/pinski#059bfb3c07f36b7e175bce52e4715646b6acfebd",
|
"pinski": "github:cloudrac3r/pinski#6273f81facd1e753e021910f7aa6e4384cf60631",
|
||||||
"pug": "^2.0.4",
|
"pug": "^2.0.4",
|
||||||
"semver": "^7.2.1",
|
"semver": "^7.2.1",
|
||||||
"sharp": "^0.25.2",
|
"sharp": "^0.25.2",
|
||||||
|
@ -68,20 +68,39 @@ let constants = {
|
|||||||
feed_disabled_max_age: 2*24*60*60 // 2 days
|
feed_disabled_max_age: 2*24*60*60 // 2 days
|
||||||
},
|
},
|
||||||
|
|
||||||
// Enabled themes. `file` is the filename without extension. `name` is the display name on the settings page.
|
// Themes. `file` is the filename without extension. `name` is the display name on the settings page.
|
||||||
// If you make your own theme, I encourage you to submit a pull request for it!
|
// If you make your own theme, I encourage you to submit a pull request for it!
|
||||||
themes: [
|
themes: {
|
||||||
{file: "classic", name: "Classic"},
|
// If you want to disable some official themes, then create an entry that replaces this array in config.js.
|
||||||
{file: "blue", name: "Classic blue"}
|
// Format: `{file: string, name: string}[]`
|
||||||
],
|
official: [
|
||||||
|
{file: "classic", name: "Classic"},
|
||||||
|
{file: "blue", name: "Classic blue"}
|
||||||
|
],
|
||||||
|
// To add your own theme, create an entry that replaces this array in config.js, then add your theme to it.
|
||||||
|
// Format: `{file: string, name: string}[]`
|
||||||
|
custom: [
|
||||||
|
],
|
||||||
|
// If you want your custom theme to be the default for your instance, don't forget to set it here!
|
||||||
|
// For good UI, you probably also want the default entry to be the first thing in the selection box.
|
||||||
|
default: "classic",
|
||||||
|
// This sets which order the themes appear in in the list on the settings page.
|
||||||
|
sort: {
|
||||||
|
// This sets whether the order is custom + official, or official + custom
|
||||||
|
order: "custom_first", // "custom_first", "official_first"
|
||||||
|
// To selectively override that order, add things to this array.
|
||||||
|
// If you set it to `["blue", "midnight"]` then the theme with file name `blue` will be hoisted to the top,
|
||||||
|
// the theme with file name `midnight` will be below it, and all other themes will appear below those.
|
||||||
|
// Format: `string[]`
|
||||||
|
manual: []
|
||||||
|
},
|
||||||
|
// These arrays should be empty, do not edit them!
|
||||||
|
collated: [],
|
||||||
|
collatedFiles: []
|
||||||
|
},
|
||||||
|
|
||||||
user_settings: [
|
user_settings: [
|
||||||
{
|
{
|
||||||
name: "theme",
|
|
||||||
default: "classic",
|
|
||||||
boolean: false,
|
|
||||||
replaceEmptyWithDefault: true
|
|
||||||
},{
|
|
||||||
name: "language",
|
name: "language",
|
||||||
default: "en",
|
default: "en",
|
||||||
boolean: false,
|
boolean: false,
|
||||||
@ -245,4 +264,28 @@ if (process.env.BIBLIOGRAM_CONFIG) { // presence of environment variable BIBLIOG
|
|||||||
const config = require("../../config")
|
const config = require("../../config")
|
||||||
constants = md(constants, config)
|
constants = md(constants, config)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set theme settings
|
||||||
|
constants.user_settings.push({
|
||||||
|
name: "theme",
|
||||||
|
default: constants.themes.default,
|
||||||
|
boolean: false,
|
||||||
|
replaceEmptyWithDefault: true
|
||||||
|
})
|
||||||
|
let pool
|
||||||
|
if (constants.themes.sort.order === "custom_first") {
|
||||||
|
pool = [].concat(constants.themes.custom, constants.themes.official)
|
||||||
|
} else if (constants.themes.sort.order === "official_first") {
|
||||||
|
pool = [].concat(constants.themes.official, constants.themes.custom)
|
||||||
|
}
|
||||||
|
for (const file of constants.themes.sort.manual) {
|
||||||
|
const index = pool.findIndex(row => row.file === file)
|
||||||
|
if (index !== -1) {
|
||||||
|
const removed = pool.splice(index, 1)[0]
|
||||||
|
constants.themes.collated.push(removed)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
constants.themes.collated = constants.themes.collated.concat(pool)
|
||||||
|
constants.themes.collatedFiles = constants.themes.collatedFiles.concat(pool.map(row => row.file))
|
||||||
|
|
||||||
module.exports = constants
|
module.exports = constants
|
||||||
|
@ -1,8 +1,4 @@
|
|||||||
meta(charset="utf-8")
|
meta(charset="utf-8")
|
||||||
|
|
||||||
- let theme = settings ? settings.theme : "classic"
|
|
||||||
link(rel="stylesheet" type="text/css" href=getStaticURL("sass", `${theme}.sass`))
|
|
||||||
|
|
||||||
meta(name="viewport" content="width=device-width, initial-scale=1")
|
meta(name="viewport" content="width=device-width, initial-scale=1")
|
||||||
link(rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png")
|
link(rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png")
|
||||||
link(rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png")
|
link(rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png")
|
||||||
@ -11,3 +7,25 @@ link(rel="manifest" href="/site.webmanifest")
|
|||||||
link(rel="mask-icon" href="/safari-pinned-tab.svg" color="#303030")
|
link(rel="mask-icon" href="/safari-pinned-tab.svg" color="#303030")
|
||||||
meta(name="msapplication-TileColor" content="#00aba9")
|
meta(name="msapplication-TileColor" content="#00aba9")
|
||||||
meta(name="theme-color" content="#ffffff")
|
meta(name="theme-color" content="#ffffff")
|
||||||
|
|
||||||
|
-
|
||||||
|
let themeURL
|
||||||
|
let theme =
|
||||||
|
settings
|
||||||
|
? settings.theme
|
||||||
|
: constants
|
||||||
|
? constants.themes.default
|
||||||
|
: "classic"
|
||||||
|
try {
|
||||||
|
themeURL = getStaticURL("sass", `${theme}.sass`)
|
||||||
|
} catch (e) {}
|
||||||
|
|
||||||
|
if themeURL
|
||||||
|
link(rel="stylesheet" type="text/css" href=themeURL)
|
||||||
|
else
|
||||||
|
div(style="font-size: 22px; padding: 40px 20px; white-space: pre-line; border-bottom: 3px solid black").
|
||||||
|
Your theme value "#{theme}" wasn't understood.
|
||||||
|
There is no loaded theme with that name.
|
||||||
|
Please #[a(href="/settings") go to the settings page] and select a different theme.
|
||||||
|
If that doesn't help, #[a(href="https://github.com/cloudrac3r/bibliogram/issues/new") report a bug.]
|
||||||
|
In your bug report, tell us which website address you saw this on, and what your theme value is.
|
||||||
|
@ -65,7 +65,7 @@ html
|
|||||||
+checkbox("spa", "Fast navigation", "Enabled", false)
|
+checkbox("spa", "Fast navigation", "Enabled", false)
|
||||||
|
|
||||||
+fieldset("Appearance")
|
+fieldset("Appearance")
|
||||||
+select("theme", "Theme", false, constants.themes.map(entry => ({value: entry.file, text: entry.name})))
|
+select("theme", "Theme", false, constants.themes.collated.map(entry => ({value: entry.file, text: entry.name})))
|
||||||
|
|
||||||
+checkbox("display_top_nav", "Display top bar", "Always", false)
|
+checkbox("display_top_nav", "Display top bar", "Always", false)
|
||||||
|
|
||||||
|
@ -21,8 +21,9 @@ subdirs("pug", async (err, dirs) => {
|
|||||||
await require("../lib/utils/upgradedb")()
|
await require("../lib/utils/upgradedb")()
|
||||||
|
|
||||||
pinski.setNotFoundTarget("/404")
|
pinski.setNotFoundTarget("/404")
|
||||||
for (const theme of constants.themes) {
|
Object.assign(pinski.pugDefaultLocals, {constants})
|
||||||
pinski.addRoute(`/static/css/${theme.file}.css`, `sass/${theme.file}.sass`, "sass")
|
for (const file of constants.themes.collatedFiles) {
|
||||||
|
pinski.addRoute(`/static/css/${file}.css`, `sass/${file}.sass`, "sass")
|
||||||
}
|
}
|
||||||
pinski.addRoute("/settings", "pug/settings.pug", "pug")
|
pinski.addRoute("/settings", "pug/settings.pug", "pug")
|
||||||
pinski.addPugDir("pug", dirs)
|
pinski.addPugDir("pug", dirs)
|
||||||
|
Loading…
Reference in New Issue
Block a user