MediaWiki:Common.js: Difference between revisions
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(); | ||
} | } | ||