1
0
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:
dojineko
2016-04-16 17:29:41 +09:00
parent 0b8ae93727
commit 06734ec886
6 changed files with 30 additions and 10 deletions

View File

@@ -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)
}) })

View File

@@ -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 () {

View File

@@ -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>

View File

@@ -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

View File

@@ -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()
}) })
}) })

View File

@@ -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')