fix update sample issue

This commit is contained in:
ido 2014-12-30 11:35:24 +02:00
parent 6bdd57cec2
commit e258d88a2b
4 changed files with 27 additions and 46 deletions

View File

@ -1,12 +1,5 @@
define(['react', 'lodash', 'jquery', './libs/codemirror-4.8/lib/codemirror'], function (React, _, $, CodeMirror) { define(['react', 'lodash', 'jquery', './libs/codemirror-4.8/lib/codemirror'], function (React, _, $, CodeMirror) {
'use strict'; 'use strict';
//var editor = CodeMirror.fromTextArea(document.getElementById('code'), {
// lineNumbers: true,
// viewportMargin: Infinity,
// gutters: ['CodeMirror-linenumbers', 'GUTTER_ID']
//});
//
//editor.markText({line: 1, ch: 1}, {line: 1, ch: 10}, {className: 'editor-error'});
function annotationTooltip(ann) { function annotationTooltip(ann) {
var severity = ann.severity; var severity = ann.severity;

View File

@ -1,26 +1,22 @@
<!--suppress CheckEmptyScriptTag --> <!--suppress CheckEmptyScriptTag -->
<rt-require dependency="./CodeMirrorEditor" as="CodeEditor"/> <rt-require dependency="./CodeMirrorEditor" as="CodeEditor"/>
<!--suppress ALL -->
<div class="playground"> <div class="playground">
<div class="fiddle-row"> <div class="fiddle-row">
<div class="code-area" id="area-rt"> <div class="code-area" id="area-rt">
<!--style="border: {this.validHTML ? '' : '2px solid red'};"-->
<CodeEditor ref="editorRT" id="editor-rt" class="large-text-area" <CodeEditor ref="editorRT" id="editor-rt" class="large-text-area"
value="{this.state.templateHTML}" value="{this.state.templateHTML}"
mode="html" mode="html"
onChange="(evt) => this.setState({'templateHTML':evt.target.value})" /> onChange="(e)=>this.setState({templateHTML:e.target.value})" />
</div> </div>
<div class="code-area" id="area-code"> <div class="code-area" id="area-code">
<!--style="border: {this.validProps ? '' : '2px solid red'};"-->
<CodeEditor ref="editorCode" id="editor-code" class="large-text-area" <CodeEditor ref="editorCode" id="editor-code" class="large-text-area"
value="{this.state.templateProps}" value="{this.state.templateProps}"
mode="javascript" mode="javascript"
onChange="(evt) => this.setState({'templateProps':evt.target.value})" /> onChange="(e)=>this.setState({templateProps:e.target.value})" />
</div> </div>
</div> </div>
<div class="fiddle-row"> <div class="fiddle-row">
<div class="code-area" id="area-generated"> <div class="code-area" id="area-generated">
<!--style="border:0px none black;"-->
<CodeEditor id="editor-generated" class="large-text-area" <CodeEditor id="editor-generated" class="large-text-area"
ref="editorGenerated" ref="editorGenerated"
value="{this.templateSource}" value="{this.templateSource}"
@ -30,8 +26,7 @@
<div class="code-area" id="area-result"> <div class="code-area" id="area-result">
<!--<div id="result-container" class="result-area">--> <!--<div id="result-container" class="result-area">-->
<div id="result-area" key="result-area" class="sample-view"> <div id="result-area" key="result-area" class="sample-view">
<!--<h2>Preview:</h2>--> <form class="result-area-form" ref="mount" onSubmit="(e)=>e.preventDefault();">
<form class="result-area-form" ref="mount" onSubmit="(e) => e.preventDefault();">
<!--<this.sample key="sample">--> <!--<this.sample key="sample">-->
<!--</this.sample>--> <!--</this.sample>-->
</form> </form>

View File

@ -4,11 +4,11 @@ define([
'./CodeMirrorEditor' './CodeMirrorEditor'
], function (React, _, CodeEditor) { ], function (React, _, CodeEditor) {
'use strict'; 'use strict';
function onChange1(evt) { function onChange1(e) {
this.setState({ 'templateHTML': evt.target.value }); this.setState({ templateHTML: e.target.value });
} }
function onChange2(evt) { function onChange2(e) {
this.setState({ 'templateProps': evt.target.value }); this.setState({ templateProps: e.target.value });
} }
function onSubmit3(e) { function onSubmit3(e) {
e.preventDefault(); e.preventDefault();
@ -17,7 +17,7 @@ define([
return React.createElement('div', { 'className': 'playground' }, React.createElement('div', { 'className': 'fiddle-row' }, React.createElement('div', { return React.createElement('div', { 'className': 'playground' }, React.createElement('div', { 'className': 'fiddle-row' }, React.createElement('div', {
'className': 'code-area', 'className': 'code-area',
'id': 'area-rt' 'id': 'area-rt'
} /* style="border: {this.validHTML ? '' : '2px solid red'};" */, React.createElement(CodeEditor, { }, React.createElement(CodeEditor, {
'ref': 'editorRT', 'ref': 'editorRT',
'id': 'editor-rt', 'id': 'editor-rt',
'className': 'large-text-area', 'className': 'large-text-area',
@ -27,7 +27,7 @@ define([
})), React.createElement('div', { })), React.createElement('div', {
'className': 'code-area', 'className': 'code-area',
'id': 'area-code' 'id': 'area-code'
} /* style="border: {this.validProps ? '' : '2px solid red'};" */, React.createElement(CodeEditor, { }, React.createElement(CodeEditor, {
'ref': 'editorCode', 'ref': 'editorCode',
'id': 'editor-code', 'id': 'editor-code',
'className': 'large-text-area', 'className': 'large-text-area',
@ -37,7 +37,7 @@ define([
}))), React.createElement('div', { 'className': 'fiddle-row' }, React.createElement('div', { }))), React.createElement('div', { 'className': 'fiddle-row' }, React.createElement('div', {
'className': 'code-area', 'className': 'code-area',
'id': 'area-generated' 'id': 'area-generated'
} /* style="border:0px none black;" */, React.createElement(CodeEditor, { }, React.createElement(CodeEditor, {
'id': 'editor-generated', 'id': 'editor-generated',
'className': 'large-text-area', 'className': 'large-text-area',
'ref': 'editorGenerated', 'ref': 'editorGenerated',
@ -51,7 +51,7 @@ define([
'id': 'result-area', 'id': 'result-area',
'key': 'result-area', 'key': 'result-area',
'className': 'sample-view' 'className': 'sample-view'
} /* <h2>Preview:</h2> */, React.createElement('form', { }, React.createElement('form', {
'className': 'result-area-form', 'className': 'result-area-form',
'ref': 'mount', 'ref': 'mount',
'onSubmit': onSubmit3.bind(this) 'onSubmit': onSubmit3.bind(this)

View File

@ -17,13 +17,10 @@ define(['react', 'jquery', 'lodash', './playground-fiddle.rt', './playground.rt'
code = window.reactTemplates.convertTemplateToReact(html.trim().replace(/\r/g, ''), {modules: 'none', name: name}); code = window.reactTemplates.convertTemplateToReact(html.trim().replace(/\r/g, ''), {modules: 'none', name: name});
clearMessage(editor); clearMessage(editor);
} catch (e) { } catch (e) {
var msg;
if (e.name === 'RTCodeError') { if (e.name === 'RTCodeError') {
//index: -1 line: -1 message: "Document should have a root element" name: "RTCodeError" //index: -1 line: -1 message: "Document should have a root element" name: "RTCodeError"
msg = e.message + ', line: ' + e.line;
editor.annotate({line: e.line, message: e.message, index: e.index}); editor.annotate({line: e.line, message: e.message, index: e.index});
} else { } else {
msg = e.message;
editor.annotate({line: 1, message: e.message}); editor.annotate({line: 1, message: e.message});
} }
//showMessage(editor, msg); //showMessage(editor, msg);
@ -34,23 +31,13 @@ define(['react', 'jquery', 'lodash', './playground-fiddle.rt', './playground.rt'
function showMessage(editor, msg) { function showMessage(editor, msg) {
if (editor && editor.showMessage) { if (editor && editor.showMessage) {
//editor.showMessage(msg);
editor.annotate({line: 1, message: msg}); editor.annotate({line: 1, message: msg});
//calcSize();
}
}
function calcSize() {
if (window.calcSize) {
window.calcSize();
} }
} }
function clearMessage(editor) { function clearMessage(editor) {
if (editor && editor.clearMessage) { if (editor && editor.clearMessage) {
//editor.clearMessage();
editor.clearAnnotations(); editor.clearAnnotations();
//calcSize();
} }
} }
@ -165,13 +152,12 @@ define(['react', 'jquery', 'lodash', './playground-fiddle.rt', './playground.rt'
} }
}, },
updateSample: function (state) { updateSample: function (state) {
var mountNode = this.refs.mount.getDOMNode();
//try { //try {
// React.unmountComponentAtNode(mountNode); // React.unmountComponentAtNode(mountNode);
//} catch (e) { } //} catch (e) { }
this.generateCode(); this.generateCode(state);
//this.sampleFunc = generateTemplateFunction(this.templateSource); //this.sampleFunc = generateTemplateFunction(this.templateSource);
//this.validHTML = this.sampleFunc !== emptyFunc; //this.validHTML = this.sampleFunc !== emptyFunc;
this.validHTML = true; this.validHTML = true;
@ -185,14 +171,12 @@ define(['react', 'jquery', 'lodash', './playground-fiddle.rt', './playground.rt'
// throw 'failed to eval'; // throw 'failed to eval';
//} //}
this.sample = eval('(function () {' + this.templateSource + '\n' + state.templateProps + '\n return React.createElement(' + state.name + ');})()'); this.sample = eval('(function () {' + this.templateSource + '\n' + state.templateProps + '\n return React.createElement(' + state.name + ');})()');
if (this.sample) {
React.render(this.sample, mountNode);
}
clearMessage(this.refs.editorCode); clearMessage(this.refs.editorCode);
} catch (e) { } catch (e) {
//classBase = {}; //classBase = {};
this.rtMessage = e.toString();
this.validProps = false; this.validProps = false;
this.sample = null;
var editor = this.refs.editorCode; var editor = this.refs.editorCode;
this.setTimeout(function() { this.setTimeout(function() {
showMessage(editor, e.message); showMessage(editor, e.message);
@ -231,8 +215,17 @@ define(['react', 'jquery', 'lodash', './playground-fiddle.rt', './playground.rt'
this.calcSize(); this.calcSize();
} }
this.updateSample(this.state); this.updateSample(this.state);
this.renderSample();
},
renderSample: function () {
var mountNode = this.refs.mount.getDOMNode();
if (this.sample) {
React.render(this.sample, mountNode);
}
},
componentDidUpdate: function () {
this.renderSample();
}, },
componentWillUnmount: function(){ componentWillUnmount: function(){
window.removeEventListener('resize', this.calcSize); window.removeEventListener('resize', this.calcSize);
}, },
@ -255,12 +248,12 @@ define(['react', 'jquery', 'lodash', './playground-fiddle.rt', './playground.rt'
} }
}, },
render: function () { render: function () {
this.generateCode(); this.generateCode(this.state);
var template = this.props.fiddle ? pgFiddleTemplate : playgroundTemplate; var template = this.props.fiddle ? pgFiddleTemplate : playgroundTemplate;
return template.apply(this); return template.apply(this);
}, },
generateCode: function () { generateCode: function (state) {
this.templateSource = generateTemplateSource(this.state.templateHTML, this.refs.editorRT, window.reactTemplates.normalizeName(this.state.name) + 'RT'); this.templateSource = generateTemplateSource(state.templateHTML, this.refs.editorRT, window.reactTemplates.normalizeName(state.name) + 'RT');
} }
}); });