From cfdf3e0b4a6f853bc984c77bfbdf664592bd5e42 Mon Sep 17 00:00:00 2001 From: Samuel Elliott Date: Wed, 28 Feb 2018 18:14:29 +0000 Subject: [PATCH] Add relative file path resolution for themes --- client/src/modules/contentmanager.js | 21 ++++++------- client/src/modules/theme.js | 12 ++++++-- client/src/modules/thememanager.js | 5 ++-- .../partials/generic/forms/colourpicker.scss | 13 -------- .../styles/partials/generic/forms/main.scss | 1 + client/src/ui/components/bd/setting/File.vue | 3 +- tests/themes/Example/background.jpg | Bin 0 -> 41607 bytes tests/themes/Example/config.json | 28 ++++++++++++++++++ tests/themes/Example/index.scss | 7 +++++ 9 files changed, 59 insertions(+), 31 deletions(-) create mode 100644 tests/themes/Example/background.jpg diff --git a/client/src/modules/contentmanager.js b/client/src/modules/contentmanager.js index 5ffbd30f..3a3d8d4a 100644 --- a/client/src/modules/contentmanager.js +++ b/client/src/modules/contentmanager.js @@ -178,23 +178,20 @@ export default class { try { const readUserConfig = await this.readUserConfig(contentPath); userConfig.enabled = readUserConfig.enabled || false; - userConfig.config = readConfig.defaultConfig.map(category => { - let newCategory = readUserConfig.config.find(c => c.category === category.category); - // return userSet || config; - if (!newCategory) newCategory = {settings: []}; + for (let category of userConfig.config) { + const newCategory = readUserConfig.config.find(c => c.category === category.category); - category.settings = category.settings.map(setting => { - if (setting.type === 'array' || setting.type === 'custom') setting.path = contentPath; + for (let setting of category.settings) { + setting.path = contentPath; + + if (!newCategory) continue; const newSetting = newCategory.settings.find(s => s.id === setting.id); - if (!newSetting) return setting; + if (!newSetting) continue; setting.value = newSetting.value; - return setting; - }); - return category; - }); + } + } userConfig.css = readUserConfig.css || null; - // userConfig.config = readUserConfig.config; } catch (err) { /*We don't care if this fails it either means that user config doesn't exist or there's something wrong with it so we revert to default config*/ } diff --git a/client/src/modules/theme.js b/client/src/modules/theme.js index 3755b63f..1f2d8021 100644 --- a/client/src/modules/theme.js +++ b/client/src/modules/theme.js @@ -12,7 +12,7 @@ import ThemeManager from './thememanager'; import { EventEmitter } from 'events'; import { SettingUpdatedEvent, SettingsUpdatedEvent } from 'structs'; import { DOM, Modals } from 'ui'; -import { Utils, FileUtils, ClientIPC } from 'common'; +import { Utils, FileUtils, ClientIPC, ClientLogger as Logger } from 'common'; import ContentConfig from './contentconfig'; class ThemeEvents { @@ -136,11 +136,17 @@ export default class Theme { let css = ''; if (this.info.type === 'sass') { + const config = await ThemeManager.getConfigAsSCSS(this.config); + css = await ClientIPC.send('bd-compileSass', { - data: await ThemeManager.getConfigAsSCSS(this.config), + data: config, path: this.paths.mainPath.replace(/\\/g, '/') }); - console.log(css); + + Logger.log(this.name, ['Finished compiling theme', new class Info { + get SCSS_variables() { console.log(config); } + get Compiled_SCSS() { console.log(css); } + }]); } else { css = await FileUtils.readFile(this.paths.mainPath); } diff --git a/client/src/modules/thememanager.js b/client/src/modules/thememanager.js index 815d5744..599ba83b 100644 --- a/client/src/modules/thememanager.js +++ b/client/src/modules/thememanager.js @@ -11,6 +11,7 @@ import ContentManager from './contentmanager'; import Theme from './theme'; import { FileUtils } from 'common'; +import path from 'path'; export default class ThemeManager extends ContentManager { @@ -134,11 +135,11 @@ export default class ThemeManager extends ContentManager { } if (type === 'file' && Array.isArray(value)) { - if (!value || !value.length) return [name, '(),']; + if (!value || !value.length) return [name, '()']; const files = []; for (let filepath of value) { - const buffer = await FileUtils.readFileBuffer(filepath); + const buffer = await FileUtils.readFileBuffer(path.resolve(setting.path, filepath)); const type = await FileUtils.getFileType(buffer); files.push(`(data: ${this.toSCSSString(buffer.toString('base64'))}, type: ${this.toSCSSString(type.mime)}, url: ${this.toSCSSString(await FileUtils.toDataURI(buffer, type.mime))})`); } diff --git a/client/src/styles/partials/generic/forms/colourpicker.scss b/client/src/styles/partials/generic/forms/colourpicker.scss index b872c774..968b6461 100644 --- a/client/src/styles/partials/generic/forms/colourpicker.scss +++ b/client/src/styles/partials/generic/forms/colourpicker.scss @@ -1,16 +1,3 @@ -.bd-form-colourpicker .bd-title { - display: flex; -} - -.bd-form-colourpicker .bd-title h3 { - font-weight: 500; - color: #f6f6f7; - flex: 1; - line-height: 24px; - margin-bottom: 0; - margin-top: 0; -} - .bd-colourpicker-swatch { width: 50px; height: 30px; diff --git a/client/src/styles/partials/generic/forms/main.scss b/client/src/styles/partials/generic/forms/main.scss index b4a2627c..3f153e30 100644 --- a/client/src/styles/partials/generic/forms/main.scss +++ b/client/src/styles/partials/generic/forms/main.scss @@ -5,6 +5,7 @@ .bd-form-radio, .bd-form-numberinput, .bd-form-slider, +.bd-form-colourpicker, .bd-setting-switch, .bd-form-settingsarray { .bd-title { diff --git a/client/src/ui/components/bd/setting/File.vue b/client/src/ui/components/bd/setting/File.vue index f7f26e46..31e8b9d4 100644 --- a/client/src/ui/components/bd/setting/File.vue +++ b/client/src/ui/components/bd/setting/File.vue @@ -31,6 +31,7 @@ import { shell } from 'electron'; import { ClientIPC } from 'common'; import { MiOpenInNew, MiMinus } from '../../common'; + import path from 'path'; export default { props: ['setting', 'change'], @@ -46,7 +47,7 @@ this.change(filenames); }, openItem(file_path) { - shell.openItem(file_path); + shell.openItem(path.resolve(this.setting.path, file_path)); }, removeItem(file_path) { this.change(this.setting.value.filter(f => f !== file_path)); diff --git a/tests/themes/Example/background.jpg b/tests/themes/Example/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..314329e02974660b0e94d763718cc1755ef0df96 GIT binary patch literal 41607 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 ZoAvx&eiaAg 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%0A0RIsF9GSWa)| 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