/**
* This file manages and calls all available events.
*
* @module scripts/event_handler
*/
import settings_event from "./events/main/settings.js";
import parse_event from "./events/main/parse.js";
import run_event from "./events/main/run.js";
import parse_and_run_event from "./events/main/parse&run.js";
import change_event from "./events/main/change.js";
import debug_event from "./events/main/debug.js";
import stop_event from "./events/main/stop.js";
import update_settings_event from "./events/settings/update_settings.js";
import close_settings_event from "./events/settings/close_settings.js";
import select_project_event from "./events/projects/select_project.js";
import toggle_event from "./events/projects/toggle.js";
import favorite_event from "./events/projects/favorite.js";
import delete_version_event from "./events/projects/delete_version.js";
import delete_project_event from "./events/projects/delete_project.js";
import new_event from "./events/projects/new.js";
import close_projects_event from "./events/projects/close_projects.js";
import select_version_event from "./events/versions/select_version.js";
import close_versions_event from "./events/versions/close_versions.js";
import RequestHandler from "./request_handler.js";
import PageHandler from "./page_handler.js";
/**
* Class for handling all User Interactions.
*
* @class EventHandler
*/
class EventHandler {
SETTINGS_EVENT_TAG = "settings";
PARSE_EVENT_TAG = "parse";
RUN_EVENT_TAG = "run";
PARSE_AND_RUN_EVENT_TAG = "parse&run";
CHANGE_EVENT_TAG = "change";
DEBUG_EVENT_TAG = "debug";
STOP_EVENT_TAG = "stop";
UPDATE_SETTINGS_EVENT_TAG = "update_settings";
CLOSE_SETTINGS_EVENT_TAG = "close_settings";
SELECT_PROJECT_EVENT_TAG = "select_project";
TOGGLE_EVENT_TAG = "toggle";
FAVORITE_EVENT_TAG = "favorite";
DELETE_VERSION_EVENT_TAG = "delete_version";
DELETE_PROJECT_EVENT_TAG = "delete_project";
NEW_EVENT_TAG = "new";
CLOSE_PROJECTS_EVENT_TAG = "close_projects";
SELECT_VERSION_EVENT_TAG = "select_version";
CLOSE_VERSIONS_EVENT_TAG = "close_versions";
ERROR_FORMAT = (msg) => `Error: ${msg}`;
NOT_A_NUMBER_ERROR = "Not a valid setting.";
NOT_A_VALID_NAME_ERROR = "Not a valid name.";
NOT_A_VALID_FILE_ERROR = "Not a valid file.";
REQUEST_PROJECT_NAME_MSG = "Please enter a name for the project: ";
REQUEST_DELETE_CONFIRMATION_MSG = "Please confirm you want to delete this version: ";
/**
* Constructs a new Event Handler.
*
* @constructor
*
* @param {RequestHandler} requestHandler - The Handler for HTTP interactions.
* @param {PageHandler} pageHandler - The Handler for all UI modifications.
*/
constructor(requestHandler, pageHandler) {
this.events = {};
this.isHandlingEvent = false;
this.events[this.SETTINGS_EVENT_TAG] = settings_event;
this.events[this.PARSE_EVENT_TAG] = parse_event;
this.events[this.RUN_EVENT_TAG] = run_event;
this.events[this.PARSE_AND_RUN_EVENT_TAG] = parse_and_run_event;
this.events[this.CHANGE_EVENT_TAG] = change_event;
this.events[this.DEBUG_EVENT_TAG] = debug_event;
this.events[this.STOP_EVENT_TAG] = stop_event;
this.events[this.UPDATE_SETTINGS_EVENT_TAG] = update_settings_event;
this.events[this.CLOSE_SETTINGS_EVENT_TAG] = close_settings_event;
this.events[this.SELECT_PROJECT_EVENT_TAG] = select_project_event;
this.events[this.TOGGLE_EVENT_TAG] = toggle_event;
this.events[this.FAVORITE_EVENT_TAG] = favorite_event;
this.events[this.DELETE_VERSION_EVENT_TAG] = delete_version_event;
this.events[this.DELETE_PROJECT_EVENT_TAG] = delete_project_event;
this.events[this.NEW_EVENT_TAG] = new_event;
this.events[this.CLOSE_PROJECTS_EVENT_TAG] = close_projects_event;
this.events[this.SELECT_VERSION_EVENT_TAG] = select_version_event;
this.events[this.CLOSE_VERSIONS_EVENT_TAG] = close_versions_event;
/**
* Calls an event based on the given name stored in the data tags.
*
* @function handleEvent
*
* @param {HTMLElement} target - The targeted UI element that was clicked.
* @param {string} data_tag - The name of the event to call.
* @param {object} args - The other misc. data attributes stored in the target.
*/
this.handleEvent = (target, data_tag, args) => {
if (data_tag != null && data_tag != "" && !this.isHandlingEvent) {
let callback = this.events[data_tag];
this.isHandlingEvent = true;
callback(target, args, requestHandler, pageHandler, this);
}
}
}
}
export default EventHandler;