mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-13 17:56:25 +00:00
Add syntax theme selector
This commit is contained in:
@@ -96,7 +96,8 @@ export default class CodeEditor extends React.Component {
|
|||||||
fontSize: config['editor-font-size'],
|
fontSize: config['editor-font-size'],
|
||||||
fontFamily: config['editor-font-family'],
|
fontFamily: config['editor-font-family'],
|
||||||
indentType: config['editor-indent-type'],
|
indentType: config['editor-indent-type'],
|
||||||
indentSize: config['editor-indent-size']
|
indentSize: config['editor-indent-size'],
|
||||||
|
themeSyntax: config['theme-syntax']
|
||||||
}
|
}
|
||||||
|
|
||||||
this.silentChange = false
|
this.silentChange = false
|
||||||
@@ -114,7 +115,7 @@ export default class CodeEditor extends React.Component {
|
|||||||
var editor = this.editor = ace.edit(el)
|
var editor = this.editor = ace.edit(el)
|
||||||
editor.$blockScrolling = Infinity
|
editor.$blockScrolling = Infinity
|
||||||
editor.renderer.setShowGutter(true)
|
editor.renderer.setShowGutter(true)
|
||||||
editor.setTheme('ace/theme/xcode')
|
editor.setTheme('ace/theme/' + this.state.themeSyntax)
|
||||||
editor.moveCursorTo(0, 0)
|
editor.moveCursorTo(0, 0)
|
||||||
editor.setReadOnly(!!this.props.readOnly)
|
editor.setReadOnly(!!this.props.readOnly)
|
||||||
editor.setFontSize(this.state.fontSize)
|
editor.setFontSize(this.state.fontSize)
|
||||||
@@ -202,9 +203,13 @@ export default class CodeEditor extends React.Component {
|
|||||||
fontSize: config['editor-font-size'],
|
fontSize: config['editor-font-size'],
|
||||||
fontFamily: config['editor-font-family'],
|
fontFamily: config['editor-font-family'],
|
||||||
indentType: config['editor-indent-type'],
|
indentType: config['editor-indent-type'],
|
||||||
indentSize: config['editor-indent-size']
|
indentSize: config['editor-indent-size'],
|
||||||
|
themeSyntax: config['theme-syntax']
|
||||||
}, function () {
|
}, function () {
|
||||||
var session = this.editor.getSession()
|
var editor = this.editor
|
||||||
|
editor.setTheme('ace/theme/' + this.state.themeSyntax)
|
||||||
|
|
||||||
|
var session = editor.getSession()
|
||||||
session.setUseSoftTabs(this.state.indentType === 'space')
|
session.setUseSoftTabs(this.state.indentType === 'space')
|
||||||
session.setTabSize(!isNaN(this.state.indentSize) ? parseInt(this.state.indentSize, 10) : 4)
|
session.setTabSize(!isNaN(this.state.indentSize) ? parseInt(this.state.indentSize, 10) : 4)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ const defaultConfig = {
|
|||||||
'preview-font-size': '14',
|
'preview-font-size': '14',
|
||||||
'preview-font-family': 'Lato',
|
'preview-font-family': 'Lato',
|
||||||
'switch-preview': 'blur',
|
'switch-preview': 'blur',
|
||||||
'disable-direct-write': false
|
'disable-direct-write': false,
|
||||||
|
'theme-syntax': 'xcode'
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function fetchConfig () {
|
export default function fetchConfig () {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import fetchConfig from 'browser/lib/fetchConfig'
|
|||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
const ipc = electron.ipcRenderer
|
const ipc = electron.ipcRenderer
|
||||||
const remote = electron.remote
|
const remote = electron.remote
|
||||||
|
const ace = window.ace
|
||||||
|
|
||||||
const OSX = global.process.platform === 'darwin'
|
const OSX = global.process.platform === 'darwin'
|
||||||
|
|
||||||
@@ -114,6 +115,7 @@ export default class AppSettingTab extends React.Component {
|
|||||||
{userAlert.message}
|
{userAlert.message}
|
||||||
</p>
|
</p>
|
||||||
) : null
|
) : null
|
||||||
|
let aceThemeList = ace.require("ace/ext/themelist")
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='AppSettingTab content'>
|
<div className='AppSettingTab content'>
|
||||||
@@ -129,7 +131,7 @@ export default class AppSettingTab extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className='section'>
|
<div className='section'>
|
||||||
<div className='sectionTitle'>Text</div>
|
<div className='sectionTitle'>Editor</div>
|
||||||
<div className='sectionInput'>
|
<div className='sectionInput'>
|
||||||
<label>Editor Font Size</label>
|
<label>Editor Font Size</label>
|
||||||
<input valueLink={this.linkState('config.editor-font-size')} onKeyDown={e => this.handleConfigKeyDown(e)} type='text'/>
|
<input valueLink={this.linkState('config.editor-font-size')} onKeyDown={e => this.handleConfigKeyDown(e)} type='text'/>
|
||||||
@@ -154,6 +156,7 @@ export default class AppSettingTab extends React.Component {
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div className='sectionTitle'>Preview</div>
|
||||||
<div className='sectionInput'>
|
<div className='sectionInput'>
|
||||||
<label>Preview Font Size</label>
|
<label>Preview Font Size</label>
|
||||||
<input valueLink={this.linkState('config.preview-font-size')} onKeyDown={e => this.handleConfigKeyDown(e)} type='text'/>
|
<input valueLink={this.linkState('config.preview-font-size')} onKeyDown={e => this.handleConfigKeyDown(e)} type='text'/>
|
||||||
@@ -178,7 +181,17 @@ export default class AppSettingTab extends React.Component {
|
|||||||
)
|
)
|
||||||
: null
|
: null
|
||||||
}
|
}
|
||||||
|
<div className='sectionTitle'>Theme</div>
|
||||||
|
<div className='sectionSelect'>
|
||||||
|
<label>Syntax Theme</label>
|
||||||
|
<select valueLink={this.linkState('config.theme-syntax')}>
|
||||||
|
{
|
||||||
|
aceThemeList.themes.map(function(v, i){
|
||||||
|
return (<option value={v.name} key={v.name}>{v.caption}</option>)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
<div className='sectionConfirm'>
|
<div className='sectionConfirm'>
|
||||||
<button onClick={e => this.handleConfigSaveButtonClick(e)}>Save</button>
|
<button onClick={e => this.handleConfigSaveButtonClick(e)}>Save</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ iptFocusBorderColor = #369DCD
|
|||||||
border-radius 5px
|
border-radius 5px
|
||||||
overflow hidden
|
overflow hidden
|
||||||
width 720px
|
width 720px
|
||||||
height 450px
|
height 600px
|
||||||
&>.header
|
&>.header
|
||||||
absolute top left right
|
absolute top left right
|
||||||
height 50px
|
height 50px
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ const defaultConfig = {
|
|||||||
'preview-font-size': '14',
|
'preview-font-size': '14',
|
||||||
'preview-font-family': 'Lato',
|
'preview-font-family': 'Lato',
|
||||||
'switch-preview': 'blur',
|
'switch-preview': 'blur',
|
||||||
'disable-direct-write': false
|
'disable-direct-write': false,
|
||||||
|
'theme-syntax': 'xcode'
|
||||||
}
|
}
|
||||||
const configFile = 'config.json'
|
const configFile = 'config.json'
|
||||||
|
|
||||||
@@ -76,4 +77,3 @@ app.on('ready', function () {
|
|||||||
applyConfig()
|
applyConfig()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
<div id="content"></div>
|
<div id="content"></div>
|
||||||
|
|
||||||
<script src="../submodules/ace/src-min/ace.js"></script>
|
<script src="../submodules/ace/src-min/ace.js"></script>
|
||||||
|
<script src="../submodules/ace/src-min/ext-themelist.js"></script>
|
||||||
<script src="../resources/katex.min.js"></script>
|
<script src="../resources/katex.min.js"></script>
|
||||||
<script type='text/javascript'>
|
<script type='text/javascript'>
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
|
|||||||
Reference in New Issue
Block a user