Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(97)

Side by Side Diff: experimental/webtry/res/js/webtry.js

Issue 261693003: Use CodeMirror for WebTry snippets. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: design.md notes Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « experimental/webtry/res/js/cm/codemirror.js ('k') | experimental/webtry/templates/content.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /** 1 /**
2 * Common JS that talks XHR back to the server and runs the code and receives 2 * Common JS that talks XHR back to the server and runs the code and receives
3 * the results. 3 * the results.
4 */ 4 */
5 5
6 /** 6 /**
7 * A polyfill for HTML Templates. 7 * A polyfill for HTML Templates.
8 * 8 *
9 * This just adds in the content attribute, it doesn't stop scripts 9 * This just adds in the content attribute, it doesn't stop scripts
10 * from running nor does it stop other side-effects. 10 * from running nor does it stop other side-effects.
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 var embed = document.getElementById('embed'); 121 var embed = document.getElementById('embed');
122 var embedButton = document.getElementById('embedButton'); 122 var embedButton = document.getElementById('embedButton');
123 var code = document.getElementById('code'); 123 var code = document.getElementById('code');
124 var output = document.getElementById('output'); 124 var output = document.getElementById('output');
125 var stdout = document.getElementById('stdout'); 125 var stdout = document.getElementById('stdout');
126 var img = document.getElementById('img'); 126 var img = document.getElementById('img');
127 var tryHistory = document.getElementById('tryHistory'); 127 var tryHistory = document.getElementById('tryHistory');
128 var parser = new DOMParser(); 128 var parser = new DOMParser();
129 var tryTemplate = document.getElementById('tryTemplate'); 129 var tryTemplate = document.getElementById('tryTemplate');
130 130
131 var editor = CodeMirror.fromTextArea(code, {
132 theme: "ambiance",
133 lineNumbers: true,
134 matchBrackets: true,
135 mode: "text/x-c++src",
136 indentUnit: 4,
137 });
138
139 // Match the initial textarea size.
140 editor.setSize(editor.defaultCharWidth() * code.cols,
141 editor.defaultTextHeight() * code.rows);
142
143 // Suppress changes to the first/last line (draw wrapper method)
144 editor.on('beforeChange', function(cm, change) {
145 if (change.from.line < 1 || change.from.line == cm.lineCount() - 1)
146 change.cancel();
147 });
131 148
132 function beginWait() { 149 function beginWait() {
133 document.body.classList.add('waiting'); 150 document.body.classList.add('waiting');
134 run.disabled = true; 151 run.disabled = true;
135 } 152 }
136 153
137 154
138 function endWait() { 155 function endWait() {
139 document.body.classList.remove('waiting'); 156 document.body.classList.remove('waiting');
140 run.disabled = false; 157 run.disabled = false;
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 268
252 function onSubmitCode() { 269 function onSubmitCode() {
253 beginWait(); 270 beginWait();
254 clearOutput(); 271 clearOutput();
255 var req = new XMLHttpRequest(); 272 var req = new XMLHttpRequest();
256 req.addEventListener('load', codeComplete); 273 req.addEventListener('load', codeComplete);
257 req.addEventListener('error', xhrError); 274 req.addEventListener('error', xhrError);
258 req.overrideMimeType('application/json'); 275 req.overrideMimeType('application/json');
259 req.open('POST', '/', true); 276 req.open('POST', '/', true);
260 req.setRequestHeader('content-type', 'application/json'); 277 req.setRequestHeader('content-type', 'application/json');
261 req.send(JSON.stringify({'code': code.value, 'name': workspaceName})); 278 req.send(JSON.stringify({'code': editor.getValue(), 'name': workspaceName} ));
262 } 279 }
263 run.addEventListener('click', onSubmitCode); 280 run.addEventListener('click', onSubmitCode);
264 281
265 282
266 function onEmbedClick() { 283 function onEmbedClick() {
267 embed.style.display='inline'; 284 embed.style.display='inline';
268 } 285 }
269 286
270 if (embedButton) { 287 if (embedButton) {
271 embedButton.addEventListener('click', onEmbedClick); 288 embedButton.addEventListener('click', onEmbedClick);
272 } 289 }
273 290
274 291
275 // Add the images to the history if we are on a workspace page. 292 // Add the images to the history if we are on a workspace page.
276 if (tryHistory && history) { 293 if (tryHistory && history) {
277 for (var i=0; i<history.length; i++) { 294 for (var i=0; i<history.length; i++) {
278 addToHistory(history[i].hash, '/i/'+history[i].hash+'.png'); 295 addToHistory(history[i].hash, '/i/'+history[i].hash+'.png');
279 } 296 }
280 } 297 }
281 298
282 })(workspaceName); 299 })(workspaceName);
OLDNEW
« no previous file with comments | « experimental/webtry/res/js/cm/codemirror.js ('k') | experimental/webtry/templates/content.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698