Document OCR review UI and docs
OCR clear ready queue button
Line 2,820: Line 2,820:
);
);
$filters.append($filterMine, ' ', $filterReady, ' ', $filterProc);
$filters.append($filterMine, ' ', $filterReady, ' ', $filterProc);
var $clearRow = $('<div>', { 'class': 'ocr-queue-clear' });
var $clearStatus = $('<span>', { 'class': 'ocr-fact-meta' });
var $clearReady = $('<button>', {
type: 'button',
text: 'Clear ready queue',
title: 'Discard all ready jobs without opening them'
});
if (!cfg.canApply) {
$clearReady.prop('disabled', true);
$clearStatus.text('Clear queue requires ocr-reviewer or admin.');
}
$clearRow.append($clearReady, ' ', $clearStatus);
var $ul = $('<ul>', { 'class': 'ocr-queue-list' });
var $ul = $('<ul>', { 'class': 'ocr-queue-list' });
$queue.append($filters, $ul);
$queue.append($filters, $clearRow, $ul);
$slot.append($queue);
$slot.append($queue);


Line 2,849: Line 2,861:
});
});
}
}
var readyCount = (bags.ready || []).filter(function (j) {
return !showMine || (j.uploader || '') === me;
}).length;
$clearReady.text(
showMine
? ('Clear my ready (' + readyCount + ')')
: ('Clear ready queue (' + readyCount + ')')
);
$clearReady.data('readyCount', readyCount);
$clearReady.data('mineOnly', showMine);
if (!jobs.length) {
if (!jobs.length) {
$ul.append($('<li>').text('No jobs match these filters.'));
$ul.append($('<li>').text('No jobs match these filters.'));
Line 2,910: Line 2,932:
}
}
$filters.find('input').on('change', loadQueue);
$filters.find('input').on('change', loadQueue);
$clearReady.on('click', function () {
if (!cfg.canApply) {
return;
}
var n = Number($clearReady.data('readyCount') || 0);
var mineOnly = !!$clearReady.data('mineOnly');
if (!n) {
$clearStatus.text('No ready jobs to clear.');
return;
}
var msg = mineOnly
? ('Discard your ' + n + ' ready OCR job(s)? This cannot be undone.')
: ('Discard all ' + n + ' ready OCR job(s)? This cannot be undone.');
if (!window.confirm(msg)) {
return;
}
$clearReady.prop('disabled', true);
$clearStatus.text('Clearing…');
ocrPost({
op: 'clearqueue',
payload: JSON.stringify({
statuses: 'ready',
mine_only: mineOnly,
limit: 500
})
}).then(function (resp) {
var cleared = (resp && resp.cleared && resp.cleared.discarded) || 0;
$clearStatus.text('Discarded ' + cleared + ' job(s).');
$host2.empty();
loadQueue();
}).catch(function (err) {
$clearStatus.text(String(err && err.error && err.error.info || err));
}).always(function () {
$clearReady.prop('disabled', false);
});
});
loadQueue();
loadQueue();
}
}