mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-13 17:56:25 +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 actions, { selectArticle, searchArticle } from './actions'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
import dataStore from 'browser/lib/dataStore'
|
import dataStore from 'browser/lib/dataStore'
|
||||||
|
import fetchConfig from '../lib/fetchConfig'
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
const { clipboard, ipcRenderer, remote } = electron
|
const { clipboard, ipcRenderer, remote } = electron
|
||||||
const path = require('path')
|
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') {
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
window.addEventListener('keydown', function (e) {
|
window.addEventListener('keydown', function (e) {
|
||||||
if (e.keyCode === 73 && e.metaKey && e.altKey) {
|
if (e.keyCode === 73 && e.metaKey && e.altKey) {
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ const defaultConfig = {
|
|||||||
'preview-font-family': 'Lato',
|
'preview-font-family': 'Lato',
|
||||||
'switch-preview': 'blur',
|
'switch-preview': 'blur',
|
||||||
'disable-direct-write': false,
|
'disable-direct-write': false,
|
||||||
|
'theme-ui': 'light',
|
||||||
'theme-syntax': 'xcode'
|
'theme-syntax': 'xcode'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,11 +7,25 @@ require('../styles/main/index.styl')
|
|||||||
import { openModal } from 'browser/lib/modal'
|
import { openModal } from 'browser/lib/modal'
|
||||||
import OSSAnnounceModal from './modal/OSSAnnounceModal'
|
import OSSAnnounceModal from './modal/OSSAnnounceModal'
|
||||||
import activityRecord from 'browser/lib/activityRecord'
|
import activityRecord from 'browser/lib/activityRecord'
|
||||||
|
import fetchConfig from '../lib/fetchConfig'
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
const ipc = electron.ipcRenderer
|
const ipc = electron.ipcRenderer
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const remote = electron.remote
|
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') {
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
window.addEventListener('keydown', function (e) {
|
window.addEventListener('keydown', function (e) {
|
||||||
if (e.keyCode === 73 && e.metaKey && e.altKey) {
|
if (e.keyCode === 73 && e.metaKey && e.altKey) {
|
||||||
|
|||||||
@@ -182,6 +182,13 @@ export default class AppSettingTab extends React.Component {
|
|||||||
: null
|
: null
|
||||||
}
|
}
|
||||||
<div className='sectionTitle'>Theme</div>
|
<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'>
|
<div className='sectionSelect'>
|
||||||
<label>Syntax Theme</label>
|
<label>Syntax Theme</label>
|
||||||
<select valueLink={this.linkState('config.theme-syntax')}>
|
<select valueLink={this.linkState('config.theme-syntax')}>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
@import '../mixins/*'
|
@import '../mixins/*'
|
||||||
global-reset()
|
global-reset()
|
||||||
@import '../shared/*'
|
@import '../shared/*'
|
||||||
|
@import './theme/*'
|
||||||
|
|
||||||
iptBgColor = #E6E6E6
|
iptBgColor = #E6E6E6
|
||||||
iptFocusBorderColor = #369DCD
|
iptFocusBorderColor = #369DCD
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ global-reset()
|
|||||||
@import './ArticleList'
|
@import './ArticleList'
|
||||||
@import './ArticleDetail'
|
@import './ArticleDetail'
|
||||||
@import './modal/*'
|
@import './modal/*'
|
||||||
|
@import './theme/*'
|
||||||
|
|
||||||
DEFAULT_FONTS = 'Lato', helvetica, arial, sans-serif
|
DEFAULT_FONTS = 'Lato', helvetica, arial, sans-serif
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ iptFocusBorderColor = #369DCD
|
|||||||
.confirmBtn
|
.confirmBtn
|
||||||
display block
|
display block
|
||||||
position absolute
|
position absolute
|
||||||
left 180px
|
left 205px
|
||||||
bottom 44px
|
bottom 44px
|
||||||
width 240px
|
width 240px
|
||||||
font-size 24px
|
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',
|
'preview-font-family': 'Lato',
|
||||||
'switch-preview': 'blur',
|
'switch-preview': 'blur',
|
||||||
'disable-direct-write': false,
|
'disable-direct-write': false,
|
||||||
|
'theme-ui': 'light',
|
||||||
'theme-syntax': 'xcode'
|
'theme-syntax': 'xcode'
|
||||||
}
|
}
|
||||||
const configFile = 'config.json'
|
const configFile = 'config.json'
|
||||||
|
|||||||
Reference in New Issue
Block a user