diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index e5115fad..755bba14 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -150,6 +150,20 @@ export class BrowserWindow { res.render("main", this.EnvironmentVariables); }); + app.get("/themes/:theme", (req, res) => { + const theme = req.params.theme.toLowerCase(); + const themePath = path.join(utils.getPath('srcPath'), "./renderer/themes/", theme); + const userThemePath = path.join(utils.getPath('themes'), theme); + if (fs.existsSync(userThemePath)) { + res.sendFile(userThemePath); + } else if (fs.existsSync(themePath)) { + res.sendFile(themePath); + } else { + res.send(`// Theme not found - ${userThemePath}`); + } + + }); + app.get("/audio.webm", (req, res) => { try { req.socket.setTimeout(Number.MAX_SAFE_INTEGER); @@ -276,6 +290,14 @@ export class BrowserWindow { event.returnValue = process.platform; }); + ipcMain.on("get-themes", (event, key) => { + if (fs.existsSync(utils.getPath("themes"))) { + event.returnValue = fs.readdirSync(utils.getPath("themes")); + } else { + event.returnValue = []; + } + }); + ipcMain.on("get-i18n", (event, key) => { event.returnValue = utils.getLocale(key); }); diff --git a/src/renderer/index.js b/src/renderer/index.js index 0154a5c1..1e90530c 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -586,6 +586,7 @@ const app = new Vue({ }, async init() { let self = this + this.setTheme() this.setLz(this.cfg.general.language) this.setLzManual() clearTimeout(this.hangtimer) @@ -840,6 +841,18 @@ const app = new Vue({ this.$forceUpdate() }, 500) }, + setTheme(theme = "") { + if(this.cfg.visual.theme == "") { + this.cfg.visual.theme = "default.less" + } + if(theme == ""){ + theme = this.cfg.visual.theme + }else{ + this.cfg.visual.theme = theme + } + document.querySelector("#userTheme").href = `themes/${this.cfg.visual.theme}` + document.querySelectorAll(`[id*='less']`).forEach(el => { el.remove() });less.refresh() + }, unauthorize() { this.mk.unauthorize() document.location.reload() diff --git a/src/renderer/themes/WIP.md b/src/renderer/themes/WIP.md new file mode 100644 index 00000000..9bac366d --- /dev/null +++ b/src/renderer/themes/WIP.md @@ -0,0 +1,14 @@ +# Themes (WIP) + +## Making a theme +* If one does not already exist, create a new theme directory in the user data folder. + * **Windows:** `%appdata%/Cider/themes` + * **Mac:** `~/Library/Application Support/Cider/themes` + * **Linux:** `~/.config/Cider/themes` +* Create a `theme.less` file with the name of the theme. +* In Cider, select the theme in the settings. +* To enable hot reloading for the theme, open the DevTools and enter `less.watch()` in the console. + +## Resources +* The default styles.less can be found in: [src/renderer/style.less](https://github.com/ciderapp/Cider/tree/main/src/renderer/style.less) +* [Less.js documentation](https://lesscss.org/) \ No newline at end of file diff --git a/src/renderer/themes/default.less b/src/renderer/themes/default.less new file mode 100644 index 00000000..29f60626 --- /dev/null +++ b/src/renderer/themes/default.less @@ -0,0 +1 @@ +// Default theme \ No newline at end of file diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs index 7517b412..4973ed00 100644 --- a/src/renderer/views/main.ejs +++ b/src/renderer/views/main.ejs @@ -16,6 +16,7 @@ Cider + diff --git a/src/renderer/views/pages/settings.ejs b/src/renderer/views/pages/settings.ejs index 4b99d3c3..ea9f61fb 100644 --- a/src/renderer/views/pages/settings.ejs +++ b/src/renderer/views/pages/settings.ejs @@ -97,6 +97,17 @@ {{$root.getLz('settings.header.visual')}}
+
+
+ Theme +
+
+ +
+
{{$root.getLz('settings.option.visual.windowBackgroundStyle')}} @@ -623,16 +634,7 @@ {{$root.getLz('settings.header.unfinished')}}
-
-
- Theme -
-
- -
-
+
Theme Options @@ -694,7 +696,8 @@ props: [], data: function () { return { - app: this.$root + app: this.$root, + themes: ipcRenderer.sendSync("get-themes") } }, mounted: function () {