Skip to content
This repository was archived by the owner on Jan 14, 2022. It is now read-only.

Commit ffeca5b

Browse files
committed
added php require open tag
1 parent 6963a71 commit ffeca5b

File tree

6 files changed

+101
-4
lines changed

6 files changed

+101
-4
lines changed

browser/lib/config-manager.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ const DEFAULT_CONFIG = {
4444
TogglePreviousSnippet: OSX ? 'command + pageup' : 'Ctrl + pageup',
4545
ToggleNextSnippet: OSX ? 'command + pagedown' : 'Ctrl + pagedown'
4646
},
47+
language: {
48+
php: {
49+
requireOpenTag: true
50+
}
51+
},
4752
allowAnalytics: true,
4853
storage: ''
4954
}

browser/render/components/code-editor/index.jsx

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export default class CodeEditor extends React.Component {
6060
indentUsingTab,
6161
highlightCurrentLine
6262
} = config.editor
63+
const langConf = config.language
6364
const file = snippet.files[selectedFile]
6465
const fileExtension = getExtension(file.name)
6566
const resultMode = CodeMirror.findModeByExtension(fileExtension)
@@ -71,6 +72,13 @@ export default class CodeEditor extends React.Component {
7172
}
7273
}
7374

75+
if (snippetMode === 'php') {
76+
snippetMode = {
77+
name: 'php',
78+
startOpen: !langConf.php.requireOpenTag
79+
}
80+
}
81+
7482
const gutters = showLineNumber
7583
? ['CodeMirror-linenumbers', 'CodeMirror-foldgutter']
7684
: []
@@ -115,17 +123,26 @@ export default class CodeEditor extends React.Component {
115123
}
116124

117125
onUpdateSingleFileSnippet (props) {
118-
const { snippet } = props
119-
const snippetMode = CodeMirror.findModeByName(snippet.lang).mode
126+
const { snippet, config } = props
127+
const langConf = config.language
128+
let snippetMode = CodeMirror.findModeByName(snippet.lang).mode
120129
if (snippetMode && snippetMode !== 'null') {
121130
require(`codemirror/mode/${snippetMode}/${snippetMode}`)
122131
}
123132
this.editor.setValue(snippet.value)
133+
if (snippetMode === 'php') {
134+
snippetMode = {
135+
name: 'php',
136+
startOpen: !langConf.php.requireOpenTag
137+
}
138+
}
124139
this.editor.setOption('mode', snippetMode)
125140
}
126141

127142
onUpdateMultiFileSnippet () {
128143
const { snippet, selectedFile, isEditing } = this.props
144+
const { config } = this.props
145+
const langConf = config.language
129146

130147
if (!isEditing) {
131148
const file = snippet.files[selectedFile]
@@ -139,7 +156,12 @@ export default class CodeEditor extends React.Component {
139156
require(`codemirror/mode/${snippetMode}/${snippetMode}`)
140157
}
141158
}
142-
159+
if (snippetMode === 'php') {
160+
snippetMode = {
161+
name: 'php',
162+
startOpen: !langConf.php.requireOpenTag
163+
}
164+
}
143165
this.editor.setOption('mode', snippetMode)
144166
this.editor.setValue(file.value)
145167
}

browser/render/modals/create-multi-files-snippet/index.jsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export default class CreateMultiFilesSnippetModal extends React.Component {
3939
this.reset()
4040
}
4141
})
42-
trackEvent('user interaction', 'create snippet', 'single-file')
42+
trackEvent('user interaction', 'create snippet', 'multi-file')
4343
eventEmitter.on('snippets:saveAll', this.createSnippet.bind(this))
4444
}
4545

@@ -224,6 +224,8 @@ export default class CreateMultiFilesSnippetModal extends React.Component {
224224
}
225225

226226
applyEditorLanguage (filename) {
227+
const { config } = this.props
228+
const langConf = config.language
227229
const fileExtension = getExtension(filename)
228230
const resultMode = CodeMirror.findModeByExtension(fileExtension)
229231
if (resultMode) {
@@ -238,6 +240,12 @@ export default class CreateMultiFilesSnippetModal extends React.Component {
238240
} else if (snippetMode === 'sql') {
239241
require(`codemirror/mode/${snippetMode}/${snippetMode}`)
240242
this.editor.setOption('mode', 'text/x-sql')
243+
} else if (snippetMode === 'php') {
244+
require(`codemirror/mode/${snippetMode}/${snippetMode}`)
245+
this.editor.setOption('mode', {
246+
name: 'php',
247+
startOpen: !langConf.php.requireOpenTag
248+
})
241249
} else {
242250
require(`codemirror/mode/${snippetMode}/${snippetMode}`)
243251
this.editor.setOption('mode', snippetMode)

browser/render/modals/create-snippet/index.jsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ export default class CreateSnippetModal extends React.Component {
8282
}
8383

8484
changeLang () {
85+
const { config } = this.props
86+
const langConf = config.language
8587
const snippetLang = this.refs.lang.value
8688
const snippetMode = CodeMirror.findModeByName(snippetLang).mode
8789
if (snippetMode === 'null') {
@@ -94,6 +96,12 @@ export default class CreateSnippetModal extends React.Component {
9496
} else if (snippetMode === 'sql') {
9597
require(`codemirror/mode/${snippetMode}/${snippetMode}`)
9698
this.editor.setOption('mode', 'text/x-sql')
99+
} else if (snippetMode === 'php') {
100+
require(`codemirror/mode/${snippetMode}/${snippetMode}`)
101+
this.editor.setOption('mode', {
102+
name: 'php',
103+
startOpen: !langConf.php.requireOpenTag
104+
})
97105
} else {
98106
require(`codemirror/mode/${snippetMode}/${snippetMode}`)
99107
this.editor.setOption('mode', snippetMode)

browser/render/modals/setting/index.jsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import EditorTab from './tabs/editor'
88
import HotKeysTab from './tabs/hotkeys'
99
import About from './tabs/about'
1010
import StorageTab from './tabs/storage'
11+
import LanguageTab from './tabs/language'
1112

1213
export default class SettingModal extends React.Component {
1314
constructor (props) {
@@ -31,6 +32,8 @@ export default class SettingModal extends React.Component {
3132
return <About config={config} />
3233
case 'storage':
3334
return <StorageTab config={config} />
35+
case 'language':
36+
return <LanguageTab config={config} />
3437
}
3538
}
3639

@@ -72,6 +75,12 @@ export default class SettingModal extends React.Component {
7275
>
7376
<div className="tab">{i18n.__('Storage')}</div>
7477
</li>
78+
<li
79+
onClick={() => this.switchTab('language')}
80+
className={tab === 'language' ? 'active' : ''}
81+
>
82+
<div className="tab">{i18n.__('Language')}</div>
83+
</li>
7584
</ul>
7685
)
7786
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import React from 'react'
2+
import i18n from 'render/lib/i18n'
3+
import ConfigManager from 'lib/config-manager'
4+
import { pageView, trackEvent } from 'lib/analytics'
5+
6+
export default class LanguageTab extends React.Component {
7+
componentDidMount () {
8+
pageView('/setting/language')
9+
}
10+
saveSetting () {
11+
const newSetting = {
12+
language: {
13+
php: {
14+
requireOpenTag: this.refs.phpRequireOpenTag.checked
15+
}
16+
}
17+
}
18+
ConfigManager.set(newSetting)
19+
trackEvent('user interaction', 'save setting', 'language')
20+
}
21+
22+
render () {
23+
const { config } = this.props
24+
const langConf = config.language
25+
return (
26+
<div className="editor-tab">
27+
<h1 className="tab-title">{i18n.__('Programming Language')}</h1>
28+
<div className="middle-content">
29+
<h2 style={{ marginBottom: '10px' }}>PHP</h2>
30+
<div className="group-checkbox">
31+
<label>
32+
<input
33+
type="checkbox"
34+
defaultChecked={langConf.php.requireOpenTag}
35+
onChange={this.saveSetting.bind(this)}
36+
ref="phpRequireOpenTag"
37+
/>
38+
{i18n.__('Require open tag')}
39+
</label>
40+
</div>
41+
</div>
42+
</div>
43+
)
44+
}
45+
}

0 commit comments

Comments
 (0)