mirror of
https://github.com/bobwen-dev/react-templates
synced 2025-04-12 00:56:39 +02:00
added codemirror and playground
This commit is contained in:
parent
9b9a12b48d
commit
b9825aea40
File diff suppressed because one or more lines are too long
@ -19,9 +19,17 @@ function emptyFunc() {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateTemplateFunction(html) {
|
function generateTemplateSource(html) {
|
||||||
|
var code = null;
|
||||||
|
try {
|
||||||
|
code = reactTemplates.convertTemplateToReact(html.trim().replace(/\r/g, ""));
|
||||||
|
} catch (e) {
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateTemplateFunction(code) {
|
||||||
try {
|
try {
|
||||||
var code = reactTemplates.convertTemplateToReact(html.trim().replace(/\r/g,""));
|
|
||||||
var defineMap = {"react":React,"lodash":_};
|
var defineMap = {"react":React,"lodash":_};
|
||||||
var define = function (requirementsNames,content) {
|
var define = function (requirementsNames,content) {
|
||||||
var requirements = _.map(requirementsNames,function (reqName) {
|
var requirements = _.map(requirementsNames,function (reqName) {
|
||||||
@ -60,8 +68,8 @@ var Playground = React.createClass({
|
|||||||
mixins: [React.addons.LinkedStateMixin],
|
mixins: [React.addons.LinkedStateMixin],
|
||||||
|
|
||||||
updateSample: function (state) {
|
updateSample: function (state) {
|
||||||
|
this.templateSource = generateTemplateSource(state.templateHTML);
|
||||||
this.sampleFunc = generateTemplateFunction(state.templateHTML);
|
this.sampleFunc = generateTemplateFunction(this.templateSource);
|
||||||
this.validHTML = this.sampleFunc !== emptyFunc;
|
this.validHTML = this.sampleFunc !== emptyFunc;
|
||||||
this.sampleRender = generateRenderFunc(this.sampleFunc);
|
this.sampleRender = generateRenderFunc(this.sampleFunc);
|
||||||
var classBase = {};
|
var classBase = {};
|
||||||
|
@ -3,18 +3,22 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.large-text-area {
|
.large-text-area {
|
||||||
width:600px;
|
|
||||||
height:300px;
|
height:300px;
|
||||||
|
margin: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.code-area {
|
.code-area {
|
||||||
width:620px;
|
width: 50%;
|
||||||
height:620px;
|
height:620px;
|
||||||
float:left;
|
float:left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.result-area {
|
.result-area {
|
||||||
width: 400px;
|
width: 50%;
|
||||||
height: 600px;
|
height: 620px;
|
||||||
float:left;
|
float:left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sample-view {
|
||||||
|
margin:10px;
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE rt CodeEditor="react-code-mirror">
|
<!DOCTYPE rt CodeEditor="react-code-mirror">
|
||||||
<div>
|
<div>
|
||||||
<div class="code-area">
|
<div class="code-area">
|
||||||
<form>
|
<h2>Template:</h2>
|
||||||
<CodeEditor class="large-text-area" style="border: {this.validHTML? '1px solid black':'2px solid red'};"
|
<CodeEditor class="large-text-area" style="border: {this.validHTML? '1px solid black':'2px solid red'};"
|
||||||
|
|
||||||
value="{this.state.templateHTML}"
|
value="{this.state.templateHTML}"
|
||||||
@ -11,6 +11,7 @@
|
|||||||
onChange="(evt) => this.setState({'templateHTML':evt.target.value})"
|
onChange="(evt) => this.setState({'templateHTML':evt.target.value})"
|
||||||
/>
|
/>
|
||||||
<br/>
|
<br/>
|
||||||
|
<h2>Class:</h2>
|
||||||
<CodeEditor class="large-text-area" style="border: {this.validProps? '1px solid black':'2px solid red'};"
|
<CodeEditor class="large-text-area" style="border: {this.validProps? '1px solid black':'2px solid red'};"
|
||||||
value="{this.state.templateProps}"
|
value="{this.state.templateProps}"
|
||||||
mode="javascript"
|
mode="javascript"
|
||||||
@ -19,12 +20,24 @@
|
|||||||
lineNumbers="{true}"
|
lineNumbers="{true}"
|
||||||
onChange="(evt) => this.setState({'templateProps':evt.target.value})"
|
onChange="(evt) => this.setState({'templateProps':evt.target.value})"
|
||||||
/>
|
/>
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="result-area">
|
<div key="result-area" class="result-area">
|
||||||
<this.sample>
|
<h2>Generated code:</h2>
|
||||||
|
<CodeEditor class="large-text-area" style="border:1px solid black;"
|
||||||
|
value="{this.templateSource}"
|
||||||
|
mode="javascript"
|
||||||
|
theme="solarized"
|
||||||
|
smartIndent="{true}"
|
||||||
|
lineNumbers="{true}"
|
||||||
|
readOnly="{true}"
|
||||||
|
/>
|
||||||
|
<br/>
|
||||||
|
<h2>Preview:</h2>
|
||||||
|
<div class="sample-view">
|
||||||
|
<this.sample key="sample">
|
||||||
|
</this.sample>
|
||||||
|
</div>
|
||||||
|
|
||||||
</this.sample>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -9,7 +9,7 @@ function onChange2(evt) {
|
|||||||
this.setState({ 'templateProps': evt.target.value });
|
this.setState({ 'templateProps': evt.target.value });
|
||||||
}
|
}
|
||||||
module.exports = function () {
|
module.exports = function () {
|
||||||
return React.DOM.div({}, React.DOM.div({ 'className': 'code-area' }, React.DOM.form({}, CodeEditor({
|
return React.DOM.div({}, React.DOM.div({ 'className': 'code-area' }, React.DOM.h2({}, 'Template:'), CodeEditor({
|
||||||
'className': 'large-text-area',
|
'className': 'large-text-area',
|
||||||
'style': { border: this.validHTML ? '1px solid black' : '2px solid red' },
|
'style': { border: this.validHTML ? '1px solid black' : '2px solid red' },
|
||||||
'value': this.state.templateHTML,
|
'value': this.state.templateHTML,
|
||||||
@ -17,7 +17,7 @@ module.exports = function () {
|
|||||||
'smartIndent': true,
|
'smartIndent': true,
|
||||||
'lineNumbers': true,
|
'lineNumbers': true,
|
||||||
'onChange': onChange1.bind(this)
|
'onChange': onChange1.bind(this)
|
||||||
}), React.DOM.br({}), CodeEditor({
|
}), React.DOM.br({}), React.DOM.h2({}, 'Class:'), CodeEditor({
|
||||||
'className': 'large-text-area',
|
'className': 'large-text-area',
|
||||||
'style': { border: this.validProps ? '1px solid black' : '2px solid red' },
|
'style': { border: this.validProps ? '1px solid black' : '2px solid red' },
|
||||||
'value': this.state.templateProps,
|
'value': this.state.templateProps,
|
||||||
@ -26,5 +26,17 @@ module.exports = function () {
|
|||||||
'smartIndent': true,
|
'smartIndent': true,
|
||||||
'lineNumbers': true,
|
'lineNumbers': true,
|
||||||
'onChange': onChange2.bind(this)
|
'onChange': onChange2.bind(this)
|
||||||
}))), React.DOM.div({ 'className': 'result-area' }, this.sample({})));
|
})), React.DOM.div({
|
||||||
|
'key': 'result-area',
|
||||||
|
'className': 'result-area'
|
||||||
|
}, React.DOM.h2({}, 'Generated code:'), CodeEditor({
|
||||||
|
'className': 'large-text-area',
|
||||||
|
'style': { border: '1px solid black' },
|
||||||
|
'value': this.templateSource,
|
||||||
|
'mode': 'javascript',
|
||||||
|
'theme': 'solarized',
|
||||||
|
'smartIndent': true,
|
||||||
|
'lineNumbers': true,
|
||||||
|
'readOnly': true
|
||||||
|
}), React.DOM.br({}), React.DOM.h2({}, 'Preview:'), React.DOM.div({ 'className': 'sample-view' }, this.sample({ 'key': 'sample' }))));
|
||||||
};
|
};
|
Loading…
x
Reference in New Issue
Block a user