mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-13 09:46:22 +00:00
Add dark theme and UI theme selector
This commit is contained in:
@@ -9,11 +9,24 @@ import FinderDetail from './FinderDetail'
|
||||
import actions, { selectArticle, searchArticle } from './actions'
|
||||
import _ from 'lodash'
|
||||
import dataStore from 'browser/lib/dataStore'
|
||||
|
||||
import fetchConfig from '../lib/fetchConfig'
|
||||
const electron = require('electron')
|
||||
const { clipboard, ipcRenderer, remote } = electron
|
||||
const path = require('path')
|
||||
|
||||
let config = fetchConfig()
|
||||
applyConfig(config)
|
||||
|
||||
ipcRenderer.on('config-apply', function (e, newConfig) {
|
||||
config = newConfig
|
||||
applyConfig(config)
|
||||
})
|
||||
|
||||
function applyConfig(){
|
||||
let body = document.body
|
||||
body.setAttribute('data-theme', config['theme-ui'])
|
||||
}
|
||||
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
window.addEventListener('keydown', function (e) {
|
||||
if (e.keyCode === 73 && e.metaKey && e.altKey) {
|
||||
|
||||
@@ -14,6 +14,7 @@ const defaultConfig = {
|
||||
'preview-font-family': 'Lato',
|
||||
'switch-preview': 'blur',
|
||||
'disable-direct-write': false,
|
||||
'theme-ui': 'light',
|
||||
'theme-syntax': 'xcode'
|
||||
}
|
||||
|
||||
|
||||
@@ -7,11 +7,25 @@ require('../styles/main/index.styl')
|
||||
import { openModal } from 'browser/lib/modal'
|
||||
import OSSAnnounceModal from './modal/OSSAnnounceModal'
|
||||
import activityRecord from 'browser/lib/activityRecord'
|
||||
import fetchConfig from '../lib/fetchConfig'
|
||||
const electron = require('electron')
|
||||
const ipc = electron.ipcRenderer
|
||||
const path = require('path')
|
||||
const remote = electron.remote
|
||||
|
||||
let config = fetchConfig()
|
||||
applyConfig(config)
|
||||
|
||||
ipc.on('config-apply', function (e, newConfig) {
|
||||
config = newConfig
|
||||
applyConfig(config)
|
||||
})
|
||||
|
||||
function applyConfig(config) {
|
||||
let body = document.body
|
||||
body.setAttribute('data-theme', config['theme-ui'])
|
||||
}
|
||||
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
window.addEventListener('keydown', function (e) {
|
||||
if (e.keyCode === 73 && e.metaKey && e.altKey) {
|
||||
|
||||
@@ -182,6 +182,13 @@ export default class AppSettingTab extends React.Component {
|
||||
: null
|
||||
}
|
||||
<div className='sectionTitle'>Theme</div>
|
||||
<div className='sectionSelect'>
|
||||
<label>UI Theme</label>
|
||||
<select valueLink={this.linkState('config.theme-ui')}>
|
||||
<option value='light'>Light</option>
|
||||
<option value='dark'>Dark</option>
|
||||
</select>
|
||||
</div>
|
||||
<div className='sectionSelect'>
|
||||
<label>Syntax Theme</label>
|
||||
<select valueLink={this.linkState('config.theme-syntax')}>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
@import '../mixins/*'
|
||||
global-reset()
|
||||
@import '../shared/*'
|
||||
@import './theme/*'
|
||||
|
||||
iptBgColor = #E6E6E6
|
||||
iptFocusBorderColor = #369DCD
|
||||
|
||||
@@ -8,6 +8,7 @@ global-reset()
|
||||
@import './ArticleList'
|
||||
@import './ArticleDetail'
|
||||
@import './modal/*'
|
||||
@import './theme/*'
|
||||
|
||||
DEFAULT_FONTS = 'Lato', helvetica, arial, sans-serif
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ iptFocusBorderColor = #369DCD
|
||||
.confirmBtn
|
||||
display block
|
||||
position absolute
|
||||
left 180px
|
||||
left 205px
|
||||
bottom 44px
|
||||
width 240px
|
||||
font-size 24px
|
||||
|
||||
396
browser/styles/theme/dark.styl
Normal file
396
browser/styles/theme/dark.styl
Normal file
@@ -0,0 +1,396 @@
|
||||
@import '../vars'
|
||||
|
||||
themeDarkBackground = lighten(#212327, 5%)
|
||||
themeDarkModal = lighten(themeDarkBackground, 0%)
|
||||
themeDarkList = darken(themeDarkBackground, 25%)
|
||||
themeDarkPreview = #181818
|
||||
themeDarkSidebar = darken(themeDarkBackground, 45%)
|
||||
themeDarkText = #DDDDDD
|
||||
themeDarkBorder = lighten(themeDarkBackground, 20%)
|
||||
themeDarkTopicColor = #369dcd
|
||||
themeDarkTooltip = rgba(0, 0, 0, 0.7)
|
||||
themeDarkFocusText = #FFFFFF
|
||||
themeDarkFocusButton = lighten(themeDarkTopicColor, 30%)
|
||||
themeDarkBoxShadow = alpha(lighten(themeDarkTopicColor, 10%), 0.4);
|
||||
|
||||
body[data-theme="dark"]
|
||||
.Main
|
||||
.ArticleNavigator .userInfo .settingBtn .tooltip,
|
||||
.ArticleNavigator .ArticleNavigator-folders .ArticleNavigator-folders-header .addBtn .tooltip,
|
||||
.ArticleTopBar>.ArticleTopBar-left>.ArticleTopBar-left-search .tooltip,
|
||||
.ArticleTopBar>.ArticleTopBar-left .ArticleTopBar-left-control button.ArticleTopBar-left-control-new-post-button .tooltip
|
||||
.ArticleTopBar>.ArticleTopBar-right>button .tooltip,
|
||||
.ArticleTopBar>.ArticleTopBar-right>.ArticleTopBar-right-links-button-dropdown,
|
||||
.ArticleDetail .ArticleDetail-info .ArticleDetail-info-control>button .tooltip,
|
||||
.ArticleDetail .ArticleDetail-info .ArticleDetail-info-control .ShareButton-open-button .tooltip {
|
||||
background-color themeDarkTooltip
|
||||
}
|
||||
|
||||
.ArticleNavigator
|
||||
border-color lighten(themeDarkBorder, 10%)
|
||||
background-color themeDarkSidebar
|
||||
|
||||
.userInfo
|
||||
border-color themeDarkBorder
|
||||
|
||||
.userName
|
||||
color themeDarkText
|
||||
|
||||
.ArticleNavigator-folders
|
||||
border-color lighten(themeDarkBorder, 10%)
|
||||
background-color themeDarkSidebar
|
||||
|
||||
.ArticleNavigator-folders-header
|
||||
border-color themeDarkBorder
|
||||
|
||||
.title
|
||||
color themeDarkText
|
||||
|
||||
.folderList,
|
||||
.folderList>button
|
||||
color themeDarkText
|
||||
|
||||
.folderList>button
|
||||
transition 0.1s
|
||||
|
||||
&:hover
|
||||
background-color lighten(themeDarkSidebar, 10%)
|
||||
|
||||
&.active,
|
||||
$:active
|
||||
background-color darken(brandColor, 15%)
|
||||
|
||||
.userInfo .settingBtn,
|
||||
.ArticleNavigator-folders .ArticleNavigator-folders-header .addBtn
|
||||
transition 0.1s
|
||||
color themeDarkText
|
||||
border none
|
||||
background-color lighten(themeDarkBackground, 10%)
|
||||
|
||||
.userInfo .settingBtn:hover,
|
||||
.ArticleNavigator-folders .ArticleNavigator-folders-header .addBtn:hover
|
||||
background-color themeDarkTopicColor
|
||||
|
||||
.userInfo .settingBtn:focus,
|
||||
.ArticleNavigator-folders .ArticleNavigator-folders-header .addBtn:focus
|
||||
background-color darken(themeDarkTopicColor, 20%)
|
||||
|
||||
.ArticleTopBar
|
||||
color themeDarkText
|
||||
background-color themeDarkBackground
|
||||
|
||||
.ArticleTopBar-left
|
||||
.ArticleTopBar-left-search input
|
||||
color themeDarkText
|
||||
background-color lighten(themeDarkBackground, 10%)
|
||||
|
||||
.ArticleTopBar-left-control button.ArticleTopBar-left-control-new-post-button
|
||||
color themeDarkText
|
||||
background-color lighten(themeDarkBackground, 10%)
|
||||
|
||||
&:hover
|
||||
color themeDarkText
|
||||
background-color themeDarkTopicColor
|
||||
|
||||
&:focus
|
||||
color themeDarkText
|
||||
background-color darken(themeDarkTopicColor, 20%)
|
||||
|
||||
.ArticleTopBar-right
|
||||
&>button
|
||||
color themeDarkText
|
||||
border none
|
||||
background-color lighten(themeDarkBackground, 10%)
|
||||
|
||||
&:hover
|
||||
color themeDarkText
|
||||
background-color themeDarkTopicColor
|
||||
|
||||
&:focus
|
||||
color themeDarkText
|
||||
background-color darken(themeDarkTopicColor, 20%)
|
||||
|
||||
.ArticleList
|
||||
color themeDarkText
|
||||
border-color themeDarkBorder
|
||||
background-color themeDarkList
|
||||
|
||||
.ArticleList-item
|
||||
color themeDarkText
|
||||
background-color themeDarkList
|
||||
|
||||
&:hover
|
||||
background-color lighten(themeDarkList, 5%)
|
||||
|
||||
.divider
|
||||
border-color themeDarkBorder
|
||||
|
||||
.ArticleDetail
|
||||
color themeDarkText
|
||||
border-color themeDarkBorder
|
||||
background-color themeDarkBackground
|
||||
|
||||
.ArticleDetail-info
|
||||
.ArticleDetail-info-folder
|
||||
color themeDarkText
|
||||
background-color lighten(themeDarkBackground, 10%)
|
||||
|
||||
.ArticleDetail-info-row2 .TagSelect .TagSelect-tags
|
||||
border-color themeDarkBorder
|
||||
background-color themeDarkBackground
|
||||
|
||||
input
|
||||
color themeDarkText
|
||||
|
||||
.ArticleDetail-info-control
|
||||
&>button,
|
||||
& .ShareButton-open-button
|
||||
transition 0.1s
|
||||
color themeDarkText
|
||||
border none
|
||||
background-color lighten(themeDarkBackground, 10%)
|
||||
|
||||
&>button:hover,
|
||||
& .ShareButton-open-button:hover
|
||||
background-color themeDarkTopicColor
|
||||
|
||||
&>button:focus,
|
||||
& .ShareButton-open-button:focus
|
||||
background-color darken(themeDarkTopicColor, 20%)
|
||||
|
||||
& .ShareButton-dropdown
|
||||
color themeDarkText
|
||||
box-shadow 0px 0px 10px 1px themeDarkBoxShadow;
|
||||
border 1px solid themeDarkBorder;
|
||||
background-color themeDarkBackground
|
||||
|
||||
& .ShareButton-dropdown>button
|
||||
color themeDarkText
|
||||
|
||||
&:hover
|
||||
background-color darken(themeDarkTopicColor, 20%)
|
||||
|
||||
.ArticleDetail-panel
|
||||
border-color themeDarkBackground
|
||||
|
||||
.ArticleDetail-panel-header,
|
||||
.ArticleDetail-panel-header .ArticleDetail-panel-header-title input
|
||||
color themeDarkText
|
||||
border-color themeDarkBorder
|
||||
background-color themeDarkPreview
|
||||
|
||||
.ArticleEditor
|
||||
.CodeEditor
|
||||
border-color themeDarkBorder
|
||||
|
||||
&>.ArticleDetail-panel-header .ArticleDetail-panel-header-mode
|
||||
transition 0.1s
|
||||
color themeDarkText
|
||||
background-color lighten(themeDarkBackground, 10%)
|
||||
|
||||
input
|
||||
color themeDarkText
|
||||
|
||||
&.idle
|
||||
border-color themeDarkBorder
|
||||
background-color themeDarkPreview
|
||||
|
||||
&.idle:hover
|
||||
background-color themeDarkTopicColor
|
||||
|
||||
&.edit .ModeSelect-options
|
||||
color themeDarkText
|
||||
border-color themeDarkBackground
|
||||
background-color themeDarkBackground
|
||||
|
||||
.ModeSelect-options-item
|
||||
&:hover
|
||||
color lighten(themeDarkText, 100%)
|
||||
background-color darken(themeDarkTopicColor, 20%)
|
||||
|
||||
.ModalBase
|
||||
.modal
|
||||
color themeDarkText
|
||||
background-color themeDarkModal
|
||||
box-shadow 0px 0px 10px 1px themeDarkBoxShadow;
|
||||
|
||||
input
|
||||
color themeDarkText
|
||||
border-color lighten(themeDarkBackground, 10%)
|
||||
background-color lighten(themeDarkBackground, 10%)
|
||||
|
||||
&:hover
|
||||
border-color themeDarkBorder
|
||||
|
||||
&:focus
|
||||
border-color themeDarkTopicColor
|
||||
|
||||
button
|
||||
&:hover
|
||||
background-color lighten(themeDarkBackground, 10%)
|
||||
|
||||
.CreateNewFolder.modal
|
||||
.closeBtn
|
||||
transition 0.1s
|
||||
border-radius 24px
|
||||
color themeDarkText
|
||||
|
||||
&:hover
|
||||
background-color darken(#BF360C, 10%)
|
||||
|
||||
.confirmBtn
|
||||
background-color darken(brandColor, 10%)
|
||||
|
||||
&:hover
|
||||
background-color brandColor
|
||||
|
||||
.Preferences.modal
|
||||
.sectionInput input,
|
||||
.sectionSelect select
|
||||
.sectionMultiSelect .sectionMultiSelect-input select
|
||||
color themeDarkText
|
||||
border-color lighten(themeDarkBackground, 10%)
|
||||
background-color lighten(themeDarkBackground, 10%)
|
||||
|
||||
&:hover
|
||||
border-color themeDarkBorder
|
||||
|
||||
&:focus
|
||||
border-color themeDarkTopicColor
|
||||
|
||||
.header
|
||||
border-color themeDarkBorder
|
||||
background-color darken(themeDarkModal, 40%)
|
||||
|
||||
.nav
|
||||
border-color themeDarkBorder
|
||||
background-color darken(themeDarkModal, 20%)
|
||||
|
||||
&>button
|
||||
&:hover
|
||||
color themeDarkFocusText
|
||||
background-color lighten(themeDarkModal, 10%)
|
||||
|
||||
&.active,
|
||||
&:active
|
||||
background-color darken(brandColor, 15%)
|
||||
|
||||
.section
|
||||
border-color themeDarkBorder
|
||||
|
||||
&>.content
|
||||
&.AppSettingTab
|
||||
.description
|
||||
code
|
||||
color themeDarkText
|
||||
border-color darken(themeDarkBorder, 10%)
|
||||
background-color lighten(themeDarkPreview, 5%)
|
||||
|
||||
&.FolderSettingTab
|
||||
.folderTable
|
||||
&>div
|
||||
border-color themeDarkBorder
|
||||
|
||||
&:last-child
|
||||
border-color transparent
|
||||
|
||||
&>div.FolderRow
|
||||
.sortBtns button
|
||||
transition 0.1s
|
||||
color themeDarkText
|
||||
|
||||
&:hover
|
||||
color themeDarkFocusButton
|
||||
|
||||
.folderColor
|
||||
&>button,
|
||||
.options
|
||||
color themeDarkText
|
||||
border-color themeDarkBorder
|
||||
|
||||
&>button
|
||||
border-color lighten(themeDarkBackground, 10%)
|
||||
background-color lighten(themeDarkBackground, 10%)
|
||||
|
||||
&:hover
|
||||
border-color themeDarkBorder
|
||||
|
||||
&:focus
|
||||
border-color themeDarkTopicColor
|
||||
|
||||
.options
|
||||
background-color themeDarkBackground
|
||||
|
||||
&>div.FolderRow .folderName input,
|
||||
&>div.newFolder .folderName input
|
||||
color themeDarkText
|
||||
border-color lighten(themeDarkBackground, 10%)
|
||||
background-color lighten(themeDarkBackground, 10%)
|
||||
|
||||
&:hover
|
||||
border-color themeDarkBorder
|
||||
|
||||
&:focus
|
||||
border-color themeDarkTopicColor
|
||||
|
||||
.folderControl
|
||||
button
|
||||
transition 0.1s
|
||||
color themeDarkText
|
||||
|
||||
&:hover
|
||||
color themeDarkFocusButton
|
||||
|
||||
.Finder
|
||||
.FinderInput
|
||||
color themeDarkText
|
||||
border-color themeDarkBorder
|
||||
background-color themeDarkBackground
|
||||
|
||||
input
|
||||
color themeDarkText
|
||||
border-color lighten(themeDarkBackground, 10%)
|
||||
background-color lighten(themeDarkBackground, 10%)
|
||||
|
||||
&:focus
|
||||
border-color themeDarkTopicColor
|
||||
|
||||
.FinderList
|
||||
color themeDarkText
|
||||
border-color themeDarkBorder
|
||||
background-color themeDarkList
|
||||
|
||||
.divider
|
||||
border-color themeDarkBorder
|
||||
|
||||
.FinderDetail
|
||||
color themeDarkText
|
||||
border-color themeDarkBorder
|
||||
background-color themeDarkPreview
|
||||
box-shadow 0px 0px 10px 0 darken(themeDarkBorder, 20%);
|
||||
|
||||
.header
|
||||
border-color themeDarkBorder
|
||||
|
||||
.right
|
||||
.clipboardBtn
|
||||
transition 0.1s
|
||||
|
||||
&:hover
|
||||
color themeDarkFocusButton
|
||||
|
||||
.tooltip
|
||||
background-color themeDarkTooltip
|
||||
|
||||
// Markdown Preview
|
||||
.Finder .FinderDetail .content,
|
||||
.ArticleDetail .ArticleDetail-panel .ArticleEditor
|
||||
.MarkdownPreview
|
||||
color themeDarkText
|
||||
border-color themeDarkBorder
|
||||
background-color themeDarkPreview
|
||||
|
||||
pre,
|
||||
code
|
||||
color themeDarkText
|
||||
background-color themeDarkPreview
|
||||
@@ -13,6 +13,7 @@ const defaultConfig = {
|
||||
'preview-font-family': 'Lato',
|
||||
'switch-preview': 'blur',
|
||||
'disable-direct-write': false,
|
||||
'theme-ui': 'light',
|
||||
'theme-syntax': 'xcode'
|
||||
}
|
||||
const configFile = 'config.json'
|
||||
|
||||
Reference in New Issue
Block a user