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

Side by Side Diff: heuristics/distillable/index.js

Issue 1620043002: Add scripts for distillability modelling (Closed) Base URL: git@github.com:chromium/dom-distiller.git@master
Patch Set: set upstream patchset, identical to patch set 2 Created 4 years, 10 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
« no previous file with comments | « heuristics/distillable/index.html ('k') | heuristics/distillable/server.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 data = null; 1 data = null;
2 idx = 0; 2 idx = 0;
3 3
4 nextUpdateId = 0; 4 nextUpdateId = 0;
5 5
6 urlHolder = document.querySelector('#url-holder'); 6 urlHolder = document.querySelector('#url-holder');
7 dataTable = document.querySelector('#data-table'); 7 dataTable = document.querySelector('#data-table');
8 $dataRows = null; 8 $dataRows = null;
9 9
10 baseImage = document.querySelector('#base-img'); 10 baseImage = document.querySelector('#base-img');
11 distilledImage = document.querySelector('#distilled-img'); 11 distilledImage = document.querySelector('#distilled-img');
12 baseImageNext = document.querySelector('#base-img-next');
13 distilledImageNext = document.querySelector('#distilled-img-next');
14 baseImageNext2 = document.querySelector('#base-img-next2');
15 distilledImageNext2 = document.querySelector('#distilled-img-next2');
12 imageHolder = document.querySelector('#image-holder'); 16 imageHolder = document.querySelector('#image-holder');
13 17
14 goodButton = document.querySelector('#good'); 18 goodButton = document.querySelector('#good');
15 badButton = document.querySelector('#bad'); 19 badButton = document.querySelector('#bad');
16 resetButton = document.querySelector('#reset'); 20 resetButton = document.querySelector('#reset');
17 poorButton = document.querySelector('#poor'); 21 poorButton = document.querySelector('#poor');
18 errorButton = document.querySelector('#error'); 22 errorButton = document.querySelector('#error');
19 23
24 jumpCheck = document.getElementById('auto-advance');
25
26 goodCount = document.querySelector('#good-count');
27 badCount = document.querySelector('#bad-count');
28 poorCount = document.querySelector('#poor-count');
29 errorCount = document.querySelector('#error-count');
30
20 function changeIndex(newIndex) { 31 function changeIndex(newIndex) {
21 var oldIndex = idx; 32 var oldIndex = idx;
22 idx = Math.max(0, Math.min(data.length - 1, newIndex)); 33 idx = Math.max(0, Math.min(data.length - 1, newIndex));
23 showImage(idx); 34 showImage(idx);
24 $dataRows.eq(oldIndex).removeClass('active'); 35 $dataRows.eq(oldIndex).removeClass('active');
25 var $currentRow = $dataRows.eq(idx); 36 var $currentRow = $dataRows.eq(idx);
26 $currentRow.addClass('active'); 37 $currentRow.addClass('active');
27 $currentRow[0].scrollIntoViewIfNeeded(); 38 $currentRow[0].scrollIntoViewIfNeeded();
39 urlHolder.scrollIntoViewIfNeeded();
28 $('.current-position').text(idx + 1); 40 $('.current-position').text(idx + 1);
41 window.location.hash = data[idx]['index'];
42 }
43
44 function updateCount() {
45 goodCount.innerText = document.querySelectorAll('tr[class*="good"]').length
46 badCount.innerText = document.querySelectorAll('tr[class*="bad"]').length
47 poorCount.innerText = document.querySelectorAll('tr[class*="poor"]').length
48 errorCount.innerText = document.querySelectorAll('tr[class*="error"]').length
29 } 49 }
30 50
31 function recordValue(v) { 51 function recordValue(v) {
32 var e = data[idx]; 52 var e = data[idx];
33 e['good'] = v; 53 e['good'] = v;
34 updateTableRow(idx); 54 updateTableRow(idx);
35 sendUpdate(e, function() { 55 sendUpdate(e, function() {
36 changeIndex(idx + 1); 56 changeIndex(nextIndex(idx));
37 }); 57 });
58 updateCount();
38 } 59 }
39 60
40 function recordGood() { 61 function recordGood() {
41 recordValue(1); 62 recordValue(1);
42 } 63 }
43 64
44 function recordBad() { 65 function recordBad() {
45 recordValue(0); 66 recordValue(0);
46 } 67 }
47 68
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 goodButton.onclick = recordGood 118 goodButton.onclick = recordGood
98 badButton.onclick = recordBad 119 badButton.onclick = recordBad
99 resetButton.onclick = resetEntry 120 resetButton.onclick = resetEntry
100 errorButton.onclick = recordError 121 errorButton.onclick = recordError
101 $('.right-caret').click(skip); 122 $('.right-caret').click(skip);
102 $('.left-caret').click(back); 123 $('.left-caret').click(back);
103 124
104 function showImage(i) { 125 function showImage(i) {
105 goodButton.disabled = false; 126 goodButton.disabled = false;
106 badButton.disabled = false; 127 badButton.disabled = false;
107 var e = data[i] 128 var e = data[i];
108 baseImage.src = '/images/' + e['screenshot'].replace(/.*\//, '') 129 baseImage.src = '/images/' + e['screenshot'].replace(/.*\//, '');
109 distilledImage.src = '/images/' + e['distilled'].replace(/.*\//, '') 130 distilledImage.src = '/images/' + e['distilled'].replace(/.*\//, '');
110 urlHolder.innerText = e['url'] 131 urlHolder.innerText = decodeURI(e['url']);
111 urlHolder.href = e['url'] 132 urlHolder.href = e['url'];
112 imageHolder.classList.remove('bad'); 133 imageHolder.classList.remove('bad');
113 imageHolder.classList.remove('good'); 134 imageHolder.classList.remove('good');
114 imageHolder.classList.remove('error'); 135 imageHolder.classList.remove('error');
115 imageHolder.classList.remove('poor'); 136 imageHolder.classList.remove('poor');
116 if (typeof e['good'] != 'undefined') { 137 if (typeof e['good'] != 'undefined') {
117 imageHolder.classList.add( 138 imageHolder.classList.add(
118 e['good'] == 1 139 e['good'] == 1
119 ? 'good' 140 ? 'good'
120 : e['good'] == -1 141 : e['good'] == -1
121 ? 'error' 142 ? 'error'
122 : e['good'] == 2 143 : e['good'] == 2
123 ? 'poor' 144 ? 'poor'
124 : 'bad'); 145 : 'bad');
125 } 146 }
147 var n = data[i + 1];
148 if (n) {
149 baseImageNext.src = '/images/' + n['screenshot'].replace(/.*\//, '');
150 distilledImageNext.src = '/images/' + n['distilled'].replace(/.*\//, '');
151 }
152 n = data[nextUnrated(i)];
153 if (n) {
154 baseImageNext2.src = '/images/' + n['screenshot'].replace(/.*\//, '');
155 distilledImageNext2.src = '/images/' + n['distilled'].replace(/.*\//, '');
156 }
126 } 157 }
127 158
159 function nextIndex(i) {
160 return jumpCheck.checked ? nextUnrated(i) : (i + 1);
161 }
162
163 function nextUnrated(i) {
164 i += 1;
165 while (i < data.length) {
166 var e = data[i];
167 if (typeof e['good'] == 'undefined') {
168 return i;
169 }
170 i += 1;
171 }
172 return -1;
173 }
174
175
128 function updateTableRow(i) { 176 function updateTableRow(i) {
129 var row = dataTable.querySelectorAll('tr')[i]; 177 var row = dataTable.querySelectorAll('tr')[i];
130 row.classList.remove('good'); 178 row.classList.remove('good');
131 row.classList.remove('bad'); 179 row.classList.remove('bad');
132 row.classList.remove('error'); 180 row.classList.remove('error');
133 row.classList.remove('poor'); 181 row.classList.remove('poor');
134 var e = data[i]; 182 var e = data[i];
135 if (typeof e['good'] != 'undefined') { 183 if (typeof e['good'] != 'undefined') {
136 row.classList.add( 184 row.classList.add(
137 e['good'] == 1 185 e['good'] == 1
138 ? 'good' 186 ? 'good'
139 : e['good'] == -1 187 : e['good'] == -1
140 ? 'error' 188 ? 'error'
141 : e['good'] == 2 189 : e['good'] == 2
142 ? 'poor' 190 ? 'poor'
143 : 'bad'); 191 : 'bad');
144 } 192 }
145 if (i == idx) { 193 if (i == idx) {
146 // forces ui update 194 // forces ui update
147 changeIndex(idx); 195 changeIndex(idx);
148 } 196 }
149 } 197 }
150 198
151 function createTable() { 199 function createTable() {
152 var dataRows = []; 200 var dataRows = [];
153 for (var i = 0; i < data.length; i++) { 201 for (var i = 0; i < data.length; i++) {
154 row = document.createElement('tr'); 202 row = document.createElement('tr');
155 cell = document.createElement('td'); 203 cell = document.createElement('td');
156 row.appendChild(cell); 204 row.appendChild(cell);
157 cell.appendChild(document.createTextNode(data[i]['url'])); 205 cell.appendChild(document.createTextNode(decodeURI(data[i]['url'])));
158 dataTable.appendChild(row); 206 dataTable.appendChild(row);
159 dataRows.push(row); 207 dataRows.push(row);
160 } 208 }
161 209
162 $dataRows = $(dataRows); 210 $dataRows = $(dataRows);
163 211
164 $dataRows.each(function(i, r) { 212 $dataRows.each(function(i, r) {
165 $(r).click(function() { 213 $(r).click(function() {
166 console.log(i); 214 console.log(i);
167 // forces ui update 215 // forces ui update
168 changeIndex(i); 216 changeIndex(i);
169 }); 217 });
170 }) 218 })
171 } 219 }
172 220
173 function setData(d, i) { 221 function setData(d) {
174 var needsTable = data == null; 222 var needsTable = data == null;
175 data = d; //.slice(0, 100); 223 data = d; //.slice(0, 100);
176 $('.total-entries').text(data.length); 224 $('.total-entries').text(data.length);
177 if (needsTable) { 225 if (needsTable) {
178 createTable(); 226 createTable();
179 } 227 }
228 idx = getHashIndex();
229 if (idx == -1) {
230 idx = Math.floor(Math.random() * data.length);
231 }
180 for (var i = 0; i < data.length; i++) { 232 for (var i = 0; i < data.length; i++) {
181 updateTableRow(i); 233 updateTableRow(i);
182 } 234 }
235 updateCount();
183 } 236 }
184 237
185 function handleVisibilityChange() { 238 function handleVisibilityChange() {
186 if (!document.hidden) sendGetUpdates(1000); 239 if (!document.hidden) sendGetUpdates(1000);
187 } 240 }
188 241
189 function getData() { 242 function getData() {
190 sendMessage( 243 sendMessage(
191 'POST', 244 'POST',
192 { 245 {
193 'action': 'getData' 246 'action': 'getData'
194 }, 247 },
195 function(rsp) { 248 function(rsp) {
196 document.addEventListener('visibilitychange', handleVisibilityChange, fa lse); 249 document.addEventListener('visibilitychange', handleVisibilityChange, fa lse);
197 var data = rsp['response']['data']; 250 var data = rsp['response']['data'];
198 nextUpdateId = rsp['response']['nextId']; 251 nextUpdateId = rsp['response']['nextId'];
199 setData(data); 252 setData(data);
200 var startIndex = parseInt(window.location.hash.substr(1)) - 1;
201 if (isNaN(startIndex)) {
202 startIndex = 0;
203 }
204 changeIndex(startIndex);
205 sendGetUpdates(1000); 253 sendGetUpdates(1000);
206 } 254 }
207 ); 255 );
208 } 256 }
209 257
210 258
211 getUpdatesSent = false; 259 getUpdatesSent = false;
212 function sendGetUpdates(delay) { 260 function sendGetUpdates(delay) {
213 if (document.hidden) return; 261 if (document.hidden) return;
214 if (getUpdatesSent) return; 262 if (getUpdatesSent) return;
(...skipping 22 matching lines...) Expand all
237 var u = updates[i]; 285 var u = updates[i];
238 var idx = u['index']; 286 var idx = u['index'];
239 var entry = u['entry']; 287 var entry = u['entry'];
240 var curr = data[idx]; 288 var curr = data[idx];
241 if (curr['url'] != entry['url']) { 289 if (curr['url'] != entry['url']) {
242 console.error(curr, entry); 290 console.error(curr, entry);
243 } 291 }
244 data[idx] = entry; 292 data[idx] = entry;
245 updateTableRow(idx); 293 updateTableRow(idx);
246 } 294 }
295 updateCount();
247 nextUpdateId = nextUpdateId; 296 nextUpdateId = nextUpdateId;
248 delay = 1000; 297 delay = 1000;
249 } else { 298 } else {
250 delay = Math.min(30 * 1000, 1.5 * delay); 299 delay = Math.min(30 * 1000, 1.5 * delay);
251 } 300 }
252 console.log('xx: response: ', response, delay); 301 console.log('xx: response: ', response, delay);
253 sendGetUpdates(delay); 302 sendGetUpdates(delay);
254 }, 303 },
255 'dataType': 'json', 304 'dataType': 'json',
256 }); 305 });
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 switch (e.which) { 341 switch (e.which) {
293 case 37: // <-- 342 case 37: // <--
294 back(); 343 back();
295 break; 344 break;
296 case 39: // >-- 345 case 39: // >--
297 skip(); 346 skip();
298 break; 347 break;
299 } 348 }
300 }); 349 });
301 }); 350 });
351
352 function getHashIndex() {
353 if (!window.location.hash) {
354 return -1;
355 }
356 index = parseInt(window.location.hash.substr(1));
357 if (isNaN(index)) {
358 return -1;
359 }
360 if (data && parseInt(data[idx]['index']) == index) {
361 return idx;
362 }
363 for (var i = 0; i < data.length; i++) {
364 if (parseInt(data[i]['index']) == index) {
365 return i;
366 }
367 }
368 return -1;
369 }
370
371 $(window).on('hashchange', function () {
372 hashIdx = getHashIndex();
373 if (hashIdx != idx) {
374 changeIndex(hashIdx);
375 }
376 });
OLDNEW
« no previous file with comments | « heuristics/distillable/index.html ('k') | heuristics/distillable/server.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698