127 lines
3.6 KiB
JavaScript
127 lines
3.6 KiB
JavaScript
// ------ Tool configuration functions ----- //
|
|
getAnnotationTextCallback = function(doneChangingTextCallback) {
|
|
// This handles the text entry for the annotation tool
|
|
function keyPressHandler(e) {
|
|
// If Enter or Esc are pressed, close the dialog
|
|
if (e.which === 13 || e.which === 27) {
|
|
closeHandler();
|
|
}
|
|
}
|
|
|
|
function closeHandler() {
|
|
dialog.get(0).close();
|
|
doneChangingTextCallback(getTextInput.val());
|
|
// Reset the text value
|
|
getTextInput.val('');
|
|
|
|
// Reset the focus to the active viewport element
|
|
// This makes the mobile Safari keyboard close
|
|
const element = getActiveViewportElement();
|
|
$(element).focus();
|
|
}
|
|
|
|
const dialog = $('#annotationDialog');
|
|
if (dialog.get(0).open === true) {
|
|
return;
|
|
}
|
|
|
|
const getTextInput = $('.annotationTextInput');
|
|
|
|
// Focus on the text input to open the Safari keyboard
|
|
getTextInput.focus();
|
|
|
|
dialog.get(0).showModal();
|
|
|
|
const confirm = dialog.find('.annotationDialogConfirm');
|
|
confirm.off('click');
|
|
confirm.on('click', () => {
|
|
closeHandler();
|
|
});
|
|
|
|
// Use keydown since keypress doesn't handle ESC in Chrome
|
|
dialog.off('keydown');
|
|
dialog.on('keydown', keyPressHandler);
|
|
};
|
|
|
|
changeAnnotationTextCallback = function(data, eventData, doneChangingTextCallback) {
|
|
const dialog = $('#relabelAnnotationDialog');
|
|
if (dialog.get(0).open === true) {
|
|
return;
|
|
}
|
|
|
|
if (isTouchDevice()) {
|
|
// Center the dialog on screen on touch devices
|
|
dialog.css({
|
|
top: 0,
|
|
left: 0,
|
|
right: 0,
|
|
bottom: 0,
|
|
margin: 'auto'
|
|
});
|
|
} else {
|
|
// Place the dialog above the tool that is being relabelled
|
|
dialog.css({
|
|
top: eventData.currentPoints.page.y - dialog.outerHeight() - 20,
|
|
left: eventData.currentPoints.page.x - dialog.outerWidth() / 2
|
|
});
|
|
}
|
|
|
|
const getTextInput = dialog.find('.annotationTextInput');
|
|
const confirm = dialog.find('.relabelConfirm');
|
|
const remove = dialog.find('.relabelRemove');
|
|
|
|
getTextInput.val(data.text);
|
|
|
|
// Focus on the text input to open the Safari keyboard
|
|
getTextInput.focus();
|
|
|
|
dialog.get(0).showModal();
|
|
|
|
confirm.off('click');
|
|
confirm.on('click', function() {
|
|
dialog.get(0).close();
|
|
doneChangingTextCallback(data, getTextInput.val());
|
|
});
|
|
|
|
// If the remove button is clicked, delete this marker
|
|
remove.off('click');
|
|
remove.on('click', function() {
|
|
dialog.get(0).close();
|
|
doneChangingTextCallback(data, undefined, true);
|
|
});
|
|
|
|
dialog.off('keydown');
|
|
dialog.on('keydown', keyPressHandler);
|
|
|
|
function keyPressHandler(e) {
|
|
// If Enter is pressed, close the dialog
|
|
if (e.which === 13) {
|
|
closeHandler();
|
|
}
|
|
}
|
|
|
|
function closeHandler() {
|
|
dialog.get(0).close();
|
|
doneChangingTextCallback(data, getTextInput.val());
|
|
// Reset the text value
|
|
getTextInput.val('');
|
|
|
|
// Reset the focus to the active viewport element
|
|
// This makes the mobile Safari keyboard close
|
|
const element = getActiveViewportElement();
|
|
$(element).focus();
|
|
}
|
|
};
|
|
|
|
Template.annotationDialogs.onRendered(() => {
|
|
const instance = Template.instance();
|
|
const dialogIds = ['annotationDialog', 'relabelAnnotationDialog'];
|
|
|
|
dialogIds.forEach(id => {
|
|
const dialog = instance.$('#' + id);
|
|
dialog.draggable();
|
|
dialogPolyfill.registerDialog(dialog.get(0));
|
|
});
|
|
});
|
|
|