139 lines
4.2 KiB
JavaScript
139 lines
4.2 KiB
JavaScript
var keys = {
|
|
ESC: 27,
|
|
ENTER: 13
|
|
};
|
|
|
|
/**
|
|
* Close the specified dialog element and returns the browser
|
|
* focus to the active viewport.
|
|
*
|
|
* @param dialog The DOM element of the dialog to close
|
|
*/
|
|
function closeHandler(dialog) {
|
|
// Hide the lesion dialog
|
|
$(dialog).css('display', 'none');
|
|
|
|
// Remove the backdrop
|
|
$('.removableBackdrop').remove();
|
|
|
|
// Restore the focus to the active viewport
|
|
setFocusToActiveViewport();
|
|
}
|
|
|
|
/**
|
|
* Displays and updates the UI of the Text Entry Dialog given a new title,
|
|
* instructions, and doneCallback
|
|
*
|
|
* @param title Title of the dialog box
|
|
* @param instructions Instructions to display to the user
|
|
* @param doneCallback Function to execute when the dialog has been closed
|
|
*/
|
|
openTextEntryDialog = function(title, instructions, currentValue, doneCallback) {
|
|
// Get the lesion location dialog
|
|
var dialog = $('.textEntryDialog');
|
|
|
|
// Clear any input that is still on the page
|
|
var currentValueInput = dialog.find('input.currentValue');
|
|
currentValueInput.val(currentValue);
|
|
|
|
// Store the Dialog DOM data, rule level and rule in the template data
|
|
Template.textEntryDialog.dialog = dialog;
|
|
Template.textEntryDialog.title = title;
|
|
Template.textEntryDialog.instructions = instructions;
|
|
Template.textEntryDialog.doneCallback = doneCallback;
|
|
|
|
dialog.find('.title').html(title);
|
|
dialog.find('.instructions').html(instructions);
|
|
|
|
// Update the dialog's CSS so that it is visible on the page
|
|
dialog.css('display', 'block');
|
|
|
|
// Show the backdrop
|
|
UI.render(Template.removableBackdrop, document.body);
|
|
|
|
// Make sure the context menu is closed when the user clicks away
|
|
$('.removableBackdrop').one('mousedown touchstart', function() {
|
|
closeHandler(dialog);
|
|
});
|
|
};
|
|
|
|
Template.textEntryDialog.onRendered(() => {
|
|
const instance = Template.instance();
|
|
const dialog = instance.$('.settingEntryDialog');
|
|
dialog.draggable();
|
|
});
|
|
|
|
Template.textEntryDialog.events({
|
|
/**
|
|
* Save the user-specified text
|
|
*
|
|
*/
|
|
'click .save': function() {
|
|
// Retrieve the input properties to the template
|
|
var dialog = Template.textEntryDialog.dialog;
|
|
var currentValue = dialog.find('input.currentValue').val();
|
|
|
|
// If currentValue input is undefined, prevent saving this rule
|
|
if (currentValue === undefined) {
|
|
return;
|
|
}
|
|
|
|
var doneCallback = Template.textEntryDialog.doneCallback;
|
|
if (doneCallback) {
|
|
doneCallback(currentValue);
|
|
}
|
|
|
|
// Close the dialog
|
|
closeHandler(Template.textEntryDialog.dialog);
|
|
},
|
|
/**
|
|
* Allow the user to click the Cancel button to close the dialog
|
|
*/
|
|
'click .cancel': function() {
|
|
closeHandler(Template.textEntryDialog.dialog);
|
|
},
|
|
/**
|
|
* Allow Esc keydown events to close the dialog
|
|
*
|
|
* @param event The Keydown event details
|
|
* @returns {boolean} Return false to prevent bubbling of the event
|
|
*/
|
|
'keydown .textEntryDialog': function(event) {
|
|
var dialog = Template.textEntryDialog.dialog;
|
|
|
|
// If Esc key is pressed, close the dialog
|
|
if (event.which === keys.ESC) {
|
|
closeHandler(dialog);
|
|
return false;
|
|
} else if (event.which === keys.ENTER) {
|
|
var currentValue = dialog.find('input.currentValue').val();
|
|
|
|
// If currentValue input is undefined, prevent saving this rule
|
|
if (currentValue === undefined) {
|
|
return;
|
|
}
|
|
|
|
var doneCallback = Template.textEntryDialog.doneCallback;
|
|
if (doneCallback) {
|
|
doneCallback(currentValue);
|
|
}
|
|
|
|
closeHandler(dialog);
|
|
return false;
|
|
}
|
|
},
|
|
/**
|
|
* Update the currentValue ReactiveVar if the user changes the attribute value
|
|
*
|
|
* @param event The Change event for the input
|
|
* @param template The current template context
|
|
*/
|
|
'change input.currentValue': function(event, template) {
|
|
// Get the DOM element representing the input box
|
|
var input = $(event.currentTarget);
|
|
|
|
// Update the template data with the current value
|
|
Template.textEntryDialog.currentValue = input.val();
|
|
}
|
|
});
|