Index: heuristics/distillable/index.js |
diff --git a/foo/test.js b/heuristics/distillable/index.js |
similarity index 72% |
rename from foo/test.js |
rename to heuristics/distillable/index.js |
index bd27485040923622564df212a44414a55a6b1700..5f60fb9b04ea95a24fce7d4a1836ea5789306ed8 100644 |
--- a/foo/test.js |
+++ b/heuristics/distillable/index.js |
@@ -9,6 +9,10 @@ $dataRows = null; |
baseImage = document.querySelector('#base-img'); |
distilledImage = document.querySelector('#distilled-img'); |
+baseImageNext = document.querySelector('#base-img-next'); |
+distilledImageNext = document.querySelector('#distilled-img-next'); |
+baseImageNext2 = document.querySelector('#base-img-next2'); |
+distilledImageNext2 = document.querySelector('#distilled-img-next2'); |
imageHolder = document.querySelector('#image-holder'); |
goodButton = document.querySelector('#good'); |
@@ -17,6 +21,13 @@ resetButton = document.querySelector('#reset'); |
poorButton = document.querySelector('#poor'); |
errorButton = document.querySelector('#error'); |
+jumpCheck = document.getElementById('auto-advance'); |
+ |
+goodCount = document.querySelector('#good-count'); |
+badCount = document.querySelector('#bad-count'); |
+poorCount = document.querySelector('#poor-count'); |
+errorCount = document.querySelector('#error-count'); |
+ |
function changeIndex(newIndex) { |
var oldIndex = idx; |
idx = Math.max(0, Math.min(data.length - 1, newIndex)); |
@@ -25,7 +36,16 @@ function changeIndex(newIndex) { |
var $currentRow = $dataRows.eq(idx); |
$currentRow.addClass('active'); |
$currentRow[0].scrollIntoViewIfNeeded(); |
+ urlHolder.scrollIntoViewIfNeeded(); |
$('.current-position').text(idx + 1); |
+ window.location.hash = data[idx]['index']; |
+} |
+ |
+function updateCount() { |
+ goodCount.innerText = document.querySelectorAll('tr[class*="good"]').length |
+ badCount.innerText = document.querySelectorAll('tr[class*="bad"]').length |
+ poorCount.innerText = document.querySelectorAll('tr[class*="poor"]').length |
+ errorCount.innerText = document.querySelectorAll('tr[class*="error"]').length |
} |
function recordValue(v) { |
@@ -33,8 +53,9 @@ function recordValue(v) { |
e['good'] = v; |
updateTableRow(idx); |
sendUpdate(e, function() { |
- changeIndex(idx + 1); |
+ changeIndex(nextIndex(idx)); |
}); |
+ updateCount(); |
} |
function recordGood() { |
@@ -104,11 +125,11 @@ $('.left-caret').click(back); |
function showImage(i) { |
goodButton.disabled = false; |
badButton.disabled = false; |
- var e = data[i] |
- baseImage.src = '/images/' + e['screenshot'].replace(/.*\//, '') |
- distilledImage.src = '/images/' + e['distilled'].replace(/.*\//, '') |
- urlHolder.innerText = e['url'] |
- urlHolder.href = e['url'] |
+ var e = data[i]; |
+ baseImage.src = '/images/' + e['screenshot'].replace(/.*\//, ''); |
+ distilledImage.src = '/images/' + e['distilled'].replace(/.*\//, ''); |
+ urlHolder.innerText = decodeURI(e['url']); |
+ urlHolder.href = e['url']; |
imageHolder.classList.remove('bad'); |
imageHolder.classList.remove('good'); |
imageHolder.classList.remove('error'); |
@@ -123,8 +144,35 @@ function showImage(i) { |
? 'poor' |
: 'bad'); |
} |
+ var n = data[i + 1]; |
+ if (n) { |
+ baseImageNext.src = '/images/' + n['screenshot'].replace(/.*\//, ''); |
+ distilledImageNext.src = '/images/' + n['distilled'].replace(/.*\//, ''); |
+ } |
+ n = data[nextUnrated(i)]; |
+ if (n) { |
+ baseImageNext2.src = '/images/' + n['screenshot'].replace(/.*\//, ''); |
+ distilledImageNext2.src = '/images/' + n['distilled'].replace(/.*\//, ''); |
+ } |
+} |
+ |
+function nextIndex(i) { |
+ return jumpCheck.checked ? nextUnrated(i) : (i + 1); |
+} |
+ |
+function nextUnrated(i) { |
+ i += 1; |
+ while (i < data.length) { |
+ var e = data[i]; |
+ if (typeof e['good'] == 'undefined') { |
+ return i; |
+ } |
+ i += 1; |
+ } |
+ return -1; |
} |
+ |
function updateTableRow(i) { |
var row = dataTable.querySelectorAll('tr')[i]; |
row.classList.remove('good'); |
@@ -154,7 +202,7 @@ function createTable() { |
row = document.createElement('tr'); |
cell = document.createElement('td'); |
row.appendChild(cell); |
- cell.appendChild(document.createTextNode(data[i]['url'])); |
+ cell.appendChild(document.createTextNode(decodeURI(data[i]['url']))); |
dataTable.appendChild(row); |
dataRows.push(row); |
} |
@@ -170,16 +218,21 @@ function createTable() { |
}) |
} |
-function setData(d, i) { |
+function setData(d) { |
var needsTable = data == null; |
data = d; //.slice(0, 100); |
$('.total-entries').text(data.length); |
if (needsTable) { |
createTable(); |
} |
+ idx = getHashIndex(); |
+ if (idx == -1) { |
+ idx = Math.floor(Math.random() * data.length); |
+ } |
for (var i = 0; i < data.length; i++) { |
updateTableRow(i); |
} |
+ updateCount(); |
} |
function handleVisibilityChange() { |
@@ -197,11 +250,6 @@ function getData() { |
var data = rsp['response']['data']; |
nextUpdateId = rsp['response']['nextId']; |
setData(data); |
- var startIndex = parseInt(window.location.hash.substr(1)) - 1; |
- if (isNaN(startIndex)) { |
- startIndex = 0; |
- } |
- changeIndex(startIndex); |
sendGetUpdates(1000); |
} |
); |
@@ -244,6 +292,7 @@ function getUpdates(delay) { |
data[idx] = entry; |
updateTableRow(idx); |
} |
+ updateCount(); |
nextUpdateId = nextUpdateId; |
delay = 1000; |
} else { |
@@ -299,3 +348,29 @@ $(document).ready(function(){ |
} |
}); |
}); |
+ |
+function getHashIndex() { |
+ if (!window.location.hash) { |
+ return -1; |
+ } |
+ index = parseInt(window.location.hash.substr(1)); |
+ if (isNaN(index)) { |
+ return -1; |
+ } |
+ if (data && parseInt(data[idx]['index']) == index) { |
+ return idx; |
+ } |
+ for (var i = 0; i < data.length; i++) { |
+ if (parseInt(data[i]['index']) == index) { |
+ return i; |
+ } |
+ } |
+ return -1; |
+} |
+ |
+$(window).on('hashchange', function () { |
+ hashIdx = getHashIndex(); |
+ if (hashIdx != idx) { |
+ changeIndex(hashIdx); |
+ } |
+}); |