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

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

Issue 244313007: Move to using HTML templates when filling out the workspace history. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 8 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
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.
8 *
9 * This just adds in the content attribute, it doesn't stop scripts
10 * from running nor does it stop other side-effects.
11 */
12 (function polyfillTemplates() {
13 if('content' in document.createElement('template')) {
14 return false;
15 }
16
17 var templates = document.getElementsByTagName('template');
18 for (var i=0; i<templates.length; i++) {
19 var content = document.createDocumentFragment();
20 while (templates[i].firstChild) {
mtklein 2014/04/21 16:19:01 This may be me being rusty on the DOM, but is this
jcgregorio 2014/04/21 16:26:24 A node can only be owned by one parent, when the n
mtklein 2014/04/21 16:31:14 Ah, duh, clearly rusty.
21 content.appendChild(templates[i].firstChild);
22 }
23 templates[i].content = content;
24 }
25 })();
26
27 /**
7 * All the functionality is wrapped up in this anonymous closure, but we need 28 * All the functionality is wrapped up in this anonymous closure, but we need
8 * to be told if we are on the workspace page or a normal try page, so the 29 * to be told if we are on the workspace page or a normal try page, so the
9 * workspaceName is passed into the closure, it must be set in the global 30 * workspaceName is passed into the closure, it must be set in the global
10 * namespace. If workspaceName is the empty string then we know we aren't 31 * namespace. If workspaceName is the empty string then we know we aren't
11 * running on a workspace page. 32 * running on a workspace page.
33 *
34 * If we are on a workspace page we also look for a 'history'
35 * variable in the global namespace which contains the list of tries
36 * that are included in this workspace. That variable is used to
37 * populate the history list.
12 */ 38 */
13 (function(workspaceName) { 39 (function(workspaceName) {
14 var run = document.getElementById('run'); 40 var run = document.getElementById('run');
15 var permalink = document.getElementById('permalink'); 41 var permalink = document.getElementById('permalink');
16 var embed = document.getElementById('embed'); 42 var embed = document.getElementById('embed');
17 var embedButton = document.getElementById('embedButton'); 43 var embedButton = document.getElementById('embedButton');
18 var code = document.getElementById('code'); 44 var code = document.getElementById('code');
19 var output = document.getElementById('output'); 45 var output = document.getElementById('output');
20 var img = document.getElementById('img'); 46 var img = document.getElementById('img');
21 var tryHistory = document.getElementById('tryHistory'); 47 var tryHistory = document.getElementById('tryHistory');
22 var parser = new DOMParser(); 48 var parser = new DOMParser();
49 var tryTemplate = document.getElementById('tryTemplate');
50
51
52 function addToHistory(hash, imgUrl) {
53 var clone = tryTemplate.content.cloneNode(true);
54 clone.querySelector('a').href = '/c/' + hash;
55 clone.querySelector('img').src = imgUrl;
56 tryHistory.insertBefore(clone, tryHistory.firstChild);
57 }
23 58
24 59
25 function beginWait() { 60 function beginWait() {
26 document.body.classList.add('waiting'); 61 document.body.classList.add('waiting');
27 run.disabled = true; 62 run.disabled = true;
28 } 63 }
29 64
30 65
31 function endWait() { 66 function endWait() {
32 document.body.classList.remove('waiting'); 67 document.body.classList.remove('waiting');
(...skipping 18 matching lines...) Expand all
51 console.log(e.target.response); 86 console.log(e.target.response);
52 body = JSON.parse(e.target.response); 87 body = JSON.parse(e.target.response);
53 output.innerText = body.message; 88 output.innerText = body.message;
54 if (body.hasOwnProperty('img')) { 89 if (body.hasOwnProperty('img')) {
55 img.src = 'data:image/png;base64,' + body.img; 90 img.src = 'data:image/png;base64,' + body.img;
56 } else { 91 } else {
57 img.src = ''; 92 img.src = '';
58 } 93 }
59 // Add the image to the history if we are on a workspace page. 94 // Add the image to the history if we are on a workspace page.
60 if (tryHistory) { 95 if (tryHistory) {
61 var newHistoryStr = '<div class=tries>' + 96 addToHistory(body.hash, 'data:image/png;base64,' + body.img);
62 '<a href="/c/' + body.hash + '">' +
63 ' <img width=64 height=64 src="' + img.src + '">' +
64 '</a></div>';
65
66 var newHistory = parser.parseFromString(newHistoryStr, "text/html");
67 tryHistory.insertBefore(newHistory.body.firstChild, tryHistory.firstChil d);
68 } else { 97 } else {
69 window.history.pushState(null, null, "./" + body.hash); 98 window.history.pushState(null, null, "./" + body.hash);
70 } 99 }
71 if (permalink) { 100 if (permalink) {
72 permalink.href = "/c/" + body.hash; 101 permalink.href = "/c/" + body.hash;
73 } 102 }
74 if (embed) { 103 if (embed) {
75 var url = document.URL; 104 var url = document.URL;
76 url = url.replace('/c/', '/iframe/'); 105 url = url.replace('/c/', '/iframe/');
77 embed.value = '<iframe src="' + url + '" width="740" height="550" style= "border: solid #00a 5px; border-radius: 5px;"/>' 106 embed.value = '<iframe src="' + url + '" width="740" height="550" style= "border: solid #00a 5px; border-radius: 5px;"/>'
(...skipping 28 matching lines...) Expand all
106 135
107 136
108 function onEmbedClick() { 137 function onEmbedClick() {
109 embed.style.display='inline'; 138 embed.style.display='inline';
110 } 139 }
111 140
112 if (embedButton) { 141 if (embedButton) {
113 embedButton.addEventListener('click', onEmbedClick); 142 embedButton.addEventListener('click', onEmbedClick);
114 } 143 }
115 144
145
146 // Add the images to the history if we are on a workspace page.
147 if (tryHistory && history) {
148 for (var i=0; i<history.length; i++) {
149 addToHistory(history[i].hash, '/i/'+history[i].hash+'.png');
150 }
151 }
152
116 })(workspaceName); 153 })(workspaceName);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698