Skip to content

Commit 43403f8

Browse files
committed
改善:Aceで利用可能なすべてのLanguage Modeに対応
1 parent 0ac7839 commit 43403f8

5 files changed

Lines changed: 44 additions & 8 deletions

File tree

browser/main/Components/CodeEditor.jsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ var CodeEditor = React.createClass({
1717
editor.clearSelection()
1818

1919
var session = editor.getSession()
20-
session.setMode('ace/mode/' + this.props.mode)
20+
if (this.props.mode != null && this.props.mode.length > 0) {
21+
session.setMode('ace/mode/' + this.props.mode)
22+
}
2123
session.setUseSoftTabs(true)
2224
session.setOption('useWorker', false)
2325
session.setUseWrapMode(true)

browser/main/Components/CodeViewer.jsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ var CodeViewer = React.createClass({
1818
editor.clearSelection()
1919

2020
var session = editor.getSession()
21-
session.setMode('ace/mode/' + this.props.mode)
21+
if (this.props.mode != null && this.props.mode.length > 0) {
22+
session.setMode('ace/mode/' + this.props.mode)
23+
}
2224
session.setUseSoftTabs(true)
2325
session.setOption('useWorker', false)
2426
session.setUseWrapMode(true)

browser/main/Components/SnippetForm.jsx

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ var PlanetActions = require('../Actions/PlanetActions')
88

99
var apiUrl = require('../../../config').apiUrl
1010

11+
var aceModes = require('../../../modules/ace-modes')
12+
1113
var getOptions = function (input, callback) {
1214
request
1315
.get(apiUrl + 'tags/search')
@@ -39,7 +41,7 @@ var SnippetForm = React.createClass({
3941
getInitialState: function () {
4042
var snippet = Object.assign({
4143
description: '',
42-
mode: 'javascript',
44+
mode: '',
4345
content: '',
4446
callSign: '',
4547
Tags: []
@@ -57,6 +59,12 @@ var SnippetForm = React.createClass({
5759
componentDidMount: function () {
5860
React.findDOMNode(this.refs.description).focus()
5961
},
62+
handleModeChange: function (selected) {
63+
var snippet = this.state.snippet
64+
snippet.mode = selected
65+
console.log(selected, 'selected')
66+
this.setState({snippet: snippet})
67+
},
6068
handleTagsChange: function (selected, all) {
6169
var snippet = this.state.snippet
6270
snippet.Tags = all
@@ -92,6 +100,12 @@ var SnippetForm = React.createClass({
92100
}
93101
},
94102
render: function () {
103+
var modeOptions = aceModes.map(function (mode) {
104+
return {
105+
label: mode,
106+
value: mode
107+
}
108+
})
95109
return (
96110
<div onKeyDown={this.handleKeyDown} className='SnippetForm'>
97111
<div className='modal-body'>
@@ -100,11 +114,13 @@ var SnippetForm = React.createClass({
100114
</div>
101115
<div className='form-group'>
102116
<input className='inline-input' valueLink={this.linkState('snippet.callSign')} type='text' placeholder='Callsign'/>
103-
<select className='inline-input' valueLink={this.linkState('snippet.mode')}>
104-
<option value='javascript'>Javascript</option>
105-
<option value='html'>HTML</option>
106-
<option value='css'>CSS</option>
107-
</select>
117+
<Select
118+
name='mode'
119+
className='modeSelect'
120+
value={this.state.snippet.mode}
121+
placeholder='Select Language'
122+
options={modeOptions}
123+
onChange={this.handleModeChange}/>
108124
</div>
109125
<div className='form-group'>
110126
<CodeEditor onChange={this.handleContentChange} code={this.state.snippet.content} mode={this.state.snippet.mode}/>

browser/styles/shared/modal.styl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@
6464
border-radius 5px
6565
border solid 1px borderColor
6666
.SnippetForm
67+
.modeSelect.Select
68+
display inline-block
69+
width 200px
70+
margin-top -15px
71+
top 14px
72+
height 37px
6773
.ace_editor
6874
height 258px
6975
.BlueprintForm

modules/ace-modes.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
var fs = require('fs')
2+
3+
module.exports = fs.readdirSync(__dirname + '/../browser/ace/src-min')
4+
.filter(function (file) {
5+
return file.match(/^mode-/)
6+
})
7+
.map(function (file) {
8+
var match = file.match(/^mode-([a-z0-9\_]+).js$/)
9+
return match[1]
10+
})

0 commit comments

Comments
 (0)