OCR: team_transfer doc type + group summary
OCR multi-person: Select all matched + one match picker per person
Line 1,382: Line 1,382:
var $meta = $('<span>', { 'class': 'ocr-fact-meta' }).text(metaBits.join(' · '));
var $meta = $('<span>', { 'class': 'ocr-fact-meta' }).text(metaBits.join(' · '));
$row.append($check, $label, $val, $tgt, $meta);
$row.append($check, $label, $val, $tgt, $meta);
if (fact.match_candidates && fact.match_candidates.length && !fact.target_title) {
if (!opts.hideMatchPick && fact.match_candidates && fact.match_candidates.length && !fact.target_title) {
var $pick = $('<select>', { 'class': 'ocr-match-pick' });
var $pick = $('<select>', { 'class': 'ocr-match-pick' });
$pick.append($('<option>', { value: '', text: 'Pick match…' }));
$pick.append($('<option>', { value: '', text: 'Pick match…' }));
Line 1,437: Line 1,437:
});
});
$g.append($('<label>').text('Wiki page ').append($tgtShared));
$g.append($('<label>').text('Wiki page ').append($tgtShared));
/* One match picker per person (not per fact row) */
var candidates = first.match_candidates || [];
items.forEach(function (f) {
if ((!candidates || !candidates.length) && f.match_candidates && f.match_candidates.length) {
candidates = f.match_candidates;
}
});
if (candidates && candidates.length && !sharedTitle) {
var $pick = $('<select>', { 'class': 'ocr-match-pick' });
$pick.append($('<option>', { value: '', text: 'Pick match…' }));
candidates.forEach(function (t) {
$pick.append($('<option>', { value: t, text: t }));
});
$pick.on('change', function () {
var v = $pick.val();
if (v) {
$tgtShared.val(v).trigger('change');
$g.removeClass('ocr-person-unresolved').addClass('ocr-person-matched');
}
});
$g.append($pick);
}
$tgtShared.on('input change', function () {
$tgtShared.on('input change', function () {
var v = $.trim($tgtShared.val() || '');
var v = $.trim($tgtShared.val() || '');
$g.find('.ocr-fact-target').val(v);
$g.find('.ocr-fact-target').val(v);
if (v) {
$g.removeClass('ocr-person-unresolved').addClass('ocr-person-matched');
} else {
$g.removeClass('ocr-person-matched').addClass('ocr-person-unresolved');
}
});
});
items.forEach(function (fact) {
items.forEach(function (fact) {
var $row = renderFactRow(fact, job, { hideTarget: true });
var $row = renderFactRow(fact, job, { hideTarget: true, hideMatchPick: true });
$row.find('.ocr-fact-target').val(sharedTitle || fact.target_title || '');
$row.find('.ocr-fact-target').val(sharedTitle || fact.target_title || '');
$g.append($row);
$g.append($row);
Line 1,546: Line 1,573:
$facts.append($('<p>').append($('<strong>').text('People on this document')));
$facts.append($('<p>').append($('<strong>').text('People on this document')));
var $toolbar = $('<div>', { 'class': 'ocr-multi-toolbar' });
var $toolbar = $('<div>', { 'class': 'ocr-multi-toolbar' });
var $selMatched = $('<button>', { type: 'button', text: 'Select matched team rows' });
var $selMatched = $('<button>', { type: 'button', text: 'Select all matched' });
var $deselUnres = $('<button>', { type: 'button', text: 'Deselect unresolved' });
var $deselUnres = $('<button>', { type: 'button', text: 'Deselect unresolved' });
$toolbar.append($selMatched, $deselUnres);
$toolbar.append($selMatched, $deselUnres);
Line 1,555: Line 1,582:
var $row = $(this);
var $row = $(this);
var label = ($row.find('.ocr-fact-label').text() || '').toLowerCase();
var label = ($row.find('.ocr-fact-label').text() || '').toLowerCase();
/* Prefer team/IPW rows; skip notes and already-on-page */
if (label.indexOf('team') !== -1 || label.indexOf('ipw') !== -1) {
if (label.indexOf('team') !== -1 || label.indexOf('ipw') !== -1) {
$row.find('input[type="checkbox"]').prop('checked', !$row.hasClass('ocr-fact-already'));
$row.find('input[type="checkbox"]').prop('checked', !$row.hasClass('ocr-fact-already'));