1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-13 09:46:22 +00:00

改善:Aceで利用可能なすべてのLanguage Modeに対応

This commit is contained in:
Rokt33r
2015-07-29 03:28:48 +09:00
parent 0ac7839f11
commit 43403f8bb1
5 changed files with 44 additions and 8 deletions

View File

@@ -17,7 +17,9 @@ var CodeEditor = React.createClass({
editor.clearSelection() editor.clearSelection()
var session = editor.getSession() var session = editor.getSession()
session.setMode('ace/mode/' + this.props.mode) if (this.props.mode != null && this.props.mode.length > 0) {
session.setMode('ace/mode/' + this.props.mode)
}
session.setUseSoftTabs(true) session.setUseSoftTabs(true)
session.setOption('useWorker', false) session.setOption('useWorker', false)
session.setUseWrapMode(true) session.setUseWrapMode(true)

View File

@@ -18,7 +18,9 @@ var CodeViewer = React.createClass({
editor.clearSelection() editor.clearSelection()
var session = editor.getSession() var session = editor.getSession()
session.setMode('ace/mode/' + this.props.mode) if (this.props.mode != null && this.props.mode.length > 0) {
session.setMode('ace/mode/' + this.props.mode)
}
session.setUseSoftTabs(true) session.setUseSoftTabs(true)
session.setOption('useWorker', false) session.setOption('useWorker', false)
session.setUseWrapMode(true) session.setUseWrapMode(true)

View File

@@ -8,6 +8,8 @@ var PlanetActions = require('../Actions/PlanetActions')
var apiUrl = require('../../../config').apiUrl var apiUrl = require('../../../config').apiUrl
var aceModes = require('../../../modules/ace-modes')
var getOptions = function (input, callback) { var getOptions = function (input, callback) {
request request
.get(apiUrl + 'tags/search') .get(apiUrl + 'tags/search')
@@ -39,7 +41,7 @@ var SnippetForm = React.createClass({
getInitialState: function () { getInitialState: function () {
var snippet = Object.assign({ var snippet = Object.assign({
description: '', description: '',
mode: 'javascript', mode: '',
content: '', content: '',
callSign: '', callSign: '',
Tags: [] Tags: []
@@ -57,6 +59,12 @@ var SnippetForm = React.createClass({
componentDidMount: function () { componentDidMount: function () {
React.findDOMNode(this.refs.description).focus() React.findDOMNode(this.refs.description).focus()
}, },
handleModeChange: function (selected) {
var snippet = this.state.snippet
snippet.mode = selected
console.log(selected, 'selected')
this.setState({snippet: snippet})
},
handleTagsChange: function (selected, all) { handleTagsChange: function (selected, all) {
var snippet = this.state.snippet var snippet = this.state.snippet
snippet.Tags = all snippet.Tags = all
@@ -92,6 +100,12 @@ var SnippetForm = React.createClass({
} }
}, },
render: function () { render: function () {
var modeOptions = aceModes.map(function (mode) {
return {
label: mode,
value: mode
}
})
return ( return (
<div onKeyDown={this.handleKeyDown} className='SnippetForm'> <div onKeyDown={this.handleKeyDown} className='SnippetForm'>
<div className='modal-body'> <div className='modal-body'>
@@ -100,11 +114,13 @@ var SnippetForm = React.createClass({
</div> </div>
<div className='form-group'> <div className='form-group'>
<input className='inline-input' valueLink={this.linkState('snippet.callSign')} type='text' placeholder='Callsign'/> <input className='inline-input' valueLink={this.linkState('snippet.callSign')} type='text' placeholder='Callsign'/>
<select className='inline-input' valueLink={this.linkState('snippet.mode')}> <Select
<option value='javascript'>Javascript</option> name='mode'
<option value='html'>HTML</option> className='modeSelect'
<option value='css'>CSS</option> value={this.state.snippet.mode}
</select> placeholder='Select Language'
options={modeOptions}
onChange={this.handleModeChange}/>
</div> </div>
<div className='form-group'> <div className='form-group'>
<CodeEditor onChange={this.handleContentChange} code={this.state.snippet.content} mode={this.state.snippet.mode}/> <CodeEditor onChange={this.handleContentChange} code={this.state.snippet.content} mode={this.state.snippet.mode}/>

View File

@@ -64,6 +64,12 @@
border-radius 5px border-radius 5px
border solid 1px borderColor border solid 1px borderColor
.SnippetForm .SnippetForm
.modeSelect.Select
display inline-block
width 200px
margin-top -15px
top 14px
height 37px
.ace_editor .ace_editor
height 258px height 258px
.BlueprintForm .BlueprintForm

10
modules/ace-modes.js Normal file
View File

@@ -0,0 +1,10 @@
var fs = require('fs')
module.exports = fs.readdirSync(__dirname + '/../browser/ace/src-min')
.filter(function (file) {
return file.match(/^mode-/)
})
.map(function (file) {
var match = file.match(/^mode-([a-z0-9\_]+).js$/)
return match[1]
})