Event handler shouldn't be a class.

This commit is contained in:
kovacsv 2022-01-14 17:52:50 +01:00
parent 052ef29ac5
commit 7dd1b0a201
6 changed files with 45 additions and 41 deletions

View File

@ -1,15 +1,14 @@
export class EventHandler
{
constructor (eventHandler)
{
this.eventHandler = eventHandler;
}
let eventHandlerFunc = null;
HandleEvent (eventName, eventData)
{
if (this.eventHandler === undefined || this.eventHandler === null) {
return;
}
this.eventHandler (eventName, eventData);
}
export function SetEventHandler (eventHandler)
{
eventHandlerFunc = eventHandler;
}
export function HandleEvent (eventName, eventLabel)
{
if (eventHandlerFunc === undefined || eventHandlerFunc === null) {
return;
}
eventHandlerFunc (eventName, eventLabel);
}

View File

@ -10,6 +10,7 @@ import { ShowMessageDialog } from './dialogs.js';
import { ButtonDialog, ProgressDialog } from './modal.js';
import { DownloadArrayBufferAsFile, DownloadUrlAsFile } from './utils.js';
import { CookieGetStringVal, CookieSetStringVal } from './cookiehandler.js';
import { HandleEvent } from './eventhandler.js';
export const ExportType =
{
@ -176,10 +177,9 @@ export class ImageExporterUI extends ExporterUI
export class ExportDialog
{
constructor (callbacks, eventHandler)
constructor (callbacks)
{
this.callbacks = callbacks;
this.eventHandler = eventHandler;
this.selectedExporter = null;
this.parametersDiv = null;
@ -256,7 +256,7 @@ export class ExportDialog
this.callbacks.onDialog (filesDialog);
}
});
this.eventHandler.HandleEvent ('model_exported', this.selectedExporter.GetName ());
HandleEvent ('model_exported', this.selectedExporter.GetName ());
} else if (this.selectedExporter.GetType () === ExportType.Image) {
this.selectedExporter.ExportImage (viewer);
}

View File

@ -1,9 +1,15 @@
import { SetExternalLibLocation } from '../engine/io/externallibs.js';
import { CreateDomElement } from '../engine/viewer/domutils.js';
import { AddSvgIconElement, InstallTooltip } from './utils.js';
import { SetEventHandler } from './eventhandler.js';
import { Embed } from './embed.js';
import { Website } from './website.js';
export function SetWebsiteEventHandler (eventHandler)
{
SetEventHandler (eventHandler);
}
export function StartWebsite (externalLibLocation)
{
SetExternalLibLocation (externalLibLocation);
@ -19,8 +25,7 @@ export function StartWebsite (externalLibLocation)
sidebarDiv : document.getElementById ('main_sidebar'),
sidebarSplitterDiv : document.getElementById ('main_sidebar_splitter'),
viewerDiv : document.getElementById ('main_viewer'),
fileInput : document.getElementById ('open_file'),
eventHandler : window.viewerEventHandler
fileInput : document.getElementById ('open_file')
});
website.Load ();
});

View File

@ -4,8 +4,9 @@ import { CreateUrlBuilder } from '../engine/parameters/parameterlist.js';
import { ShowMessageDialog } from './dialogs.js';
import { ButtonDialog } from './modal.js';
import { CopyToClipboard } from './utils.js';
import { HandleEvent } from './eventhandler.js';
export function ShowSharingDialog (fileList, settings, camera, eventHandler)
export function ShowSharingDialog (fileList, settings, camera)
{
function AddCheckboxLine (parentDiv, text, id, onChange)
{
@ -60,25 +61,25 @@ export function ShowSharingDialog (fileList, settings, camera, eventHandler)
return input;
}
function AddSharingLinkTab (parentDiv, sharingLinkParams, eventHandler)
function AddSharingLinkTab (parentDiv, sharingLinkParams)
{
let section = AddDiv (parentDiv, 'ov_dialog_section');
AddDiv (section, 'ov_dialog_inner_title', 'Sharing Link');
let sharingLinkInput = AddCopyableTextInput (section, () => {
eventHandler.HandleEvent ('model_shared', 'sharing_link');
HandleEvent ('model_shared', 'sharing_link');
return GetSharingLink (sharingLinkParams);
});
sharingLinkInput.value = GetSharingLink (sharingLinkParams);
}
function AddEmbeddingCodeTab (parentDiv, settings, embeddingCodeParams, eventHandler)
function AddEmbeddingCodeTab (parentDiv, settings, embeddingCodeParams)
{
let section = AddDiv (parentDiv, 'ov_dialog_section');
section.style.marginTop = '20px';
AddDiv (section, 'ov_dialog_inner_title', 'Embedding Code');
let optionsSection = AddDiv (section, 'ov_dialog_section');
let embeddingCodeInput = AddCopyableTextInput (section, () => {
eventHandler.HandleEvent ('model_shared', 'embedding_code');
HandleEvent ('model_shared', 'embedding_code');
return GetEmbeddingCode (embeddingCodeParams);
});
AddCheckboxLine (optionsSection, 'Use current camera position', 'embed_camera', (checked) => {
@ -148,8 +149,8 @@ export function ShowSharingDialog (fileList, settings, camera, eventHandler)
}
]);
AddSharingLinkTab (contentDiv, sharingLinkParams, eventHandler);
AddEmbeddingCodeTab (contentDiv, settings, embeddingCodeParams, eventHandler);
AddSharingLinkTab (contentDiv, sharingLinkParams);
AddEmbeddingCodeTab (contentDiv, settings, embeddingCodeParams);
dialog.Show ();
return dialog;

View File

@ -4,7 +4,7 @@ import { Viewer } from '../engine/viewer/viewer.js';
import { MeasureTool } from '../engine/viewer/measuretool.js';
import { AddDiv, AddDomElement, ShowDomElement, SetDomElementOuterHeight } from '../engine/viewer/domutils.js';
import { CalculatePopupPositionToScreen, ShowListPopup } from './dialogs.js';
import { EventHandler } from './eventhandler.js';
import { HandleEvent } from './eventhandler.js';
import { HashHandler } from './hashhandler.js';
import { Navigator, Selection, SelectionType } from './navigator.js';
import { Settings, Theme } from './settings.js';
@ -40,7 +40,6 @@ export class Website
this.toolbar = new Toolbar (this.parameters.toolbarDiv);
this.navigator = new Navigator (this.parameters.navigatorDiv, this.parameters.navigatorSplitterDiv);
this.sidebar = new Sidebar (this.parameters.sidebarDiv, this.parameters.sidebarSplitterDiv, this.settings, this.measureTool);
this.eventHandler = new EventHandler (this.parameters.eventHandler);
this.modelLoaderUI = new ThreeModelLoaderUI ();
this.themeHandler = new ThemeHandler ();
this.highlightColor = new THREE.Color (0x8ec9f0);
@ -53,7 +52,7 @@ export class Website
{
this.settings.LoadFromCookies ();
this.SwitchTheme (this.settings.themeId, false);
this.eventHandler.HandleEvent ('theme_on_load', this.settings.themeId === Theme.Light ? 'light' : 'dark');
HandleEvent ('theme_on_load', this.settings.themeId === Theme.Light ? 'light' : 'dark');
this.InitViewer ();
this.InitMeasureTool ();
@ -282,7 +281,7 @@ export class Website
if (defaultColor !== null) {
importSettings.defaultColor = defaultColor;
}
this.eventHandler.HandleEvent ('model_load_started', 'hash');
HandleEvent ('model_load_started', 'hash');
this.LoadModelFromUrlList (urls, importSettings);
} else {
this.ClearModel ();
@ -386,7 +385,7 @@ export class Website
this.SetUIState (WebsiteUIState.Model);
this.OnModelLoaded (importResult, threeObject);
let importedExtension = GetFileExtension (importResult.mainFile);
this.eventHandler.HandleEvent ('model_loaded', importedExtension);
HandleEvent ('model_loaded', importedExtension);
},
onRender : () =>
{
@ -403,11 +402,11 @@ export class Website
}
let extensionsStr = extensions.join (',');
if (importError.code === ImportErrorCode.NoImportableFile) {
this.eventHandler.HandleEvent ('no_importable_file', extensionsStr);
HandleEvent ('no_importable_file', extensionsStr);
} else if (importError.code === ImportErrorCode.FailedToLoadFile) {
this.eventHandler.HandleEvent ('failed_to_load_file', extensionsStr);
HandleEvent ('failed_to_load_file', extensionsStr);
} else if (importError.code === ImportErrorCode.ImportFailed) {
this.eventHandler.HandleEvent ('import_failed', extensionsStr);
HandleEvent ('import_failed', extensionsStr);
}
}
});
@ -558,16 +557,16 @@ export class Website
onDialog : (dialog) => {
this.dialog = dialog;
}
}, this.eventHandler);
});
exportDialog.Show (this.model, this.viewer);
});
AddButton (this.toolbar, 'share', 'Share model', ['only_full_width', 'only_on_model'], () => {
this.dialog = ShowSharingDialog (importer.GetFileList (), this.settings, this.viewer.GetCamera (), this.eventHandler);
this.dialog = ShowSharingDialog (importer.GetFileList (), this.settings, this.viewer.GetCamera ());
});
this.parameters.fileInput.addEventListener ('change', (ev) => {
if (ev.target.files.length > 0) {
this.eventHandler.HandleEvent ('model_load_started', 'open_file');
HandleEvent ('model_load_started', 'open_file');
this.LoadModelFromFileList (ev.target.files);
}
});
@ -590,7 +589,7 @@ export class Website
ev.preventDefault ();
GetFilesFromDataTransfer (ev.dataTransfer, (files) => {
if (files.length > 0) {
this.eventHandler.HandleEvent ('model_load_started', 'drop');
HandleEvent ('model_load_started', 'drop');
this.LoadModelFromFileList (files);
}
});
@ -617,11 +616,11 @@ export class Website
this.UpdateGridDisplay ();
},
onEdgeDisplayChange : () => {
this.eventHandler.HandleEvent ('edge_display_changed', this.settings.showEdges ? 'on' : 'off');
HandleEvent ('edge_display_changed', this.settings.showEdges ? 'on' : 'off');
this.UpdateEdgeDisplay ();
},
onThemeChange : () => {
this.eventHandler.HandleEvent ('theme_changed', this.settings.themeId === Theme.Light ? 'light' : 'dark');
HandleEvent ('theme_changed', this.settings.themeId === Theme.Light ? 'light' : 'dark');
this.SwitchTheme (this.settings.themeId, true);
},
onMeasureToolActivedChange : (isActivated) => {

View File

@ -34,12 +34,12 @@
<!-- analytics start -->
<script type="text/javascript">
window.viewerEventHandler = (eventName, eventData) => {
OV.SetWebsiteEventHandler ((eventName, eventData) => {
console.log ({
eventName : eventName,
eventData : eventData
});
};
});
</script>
<!-- analytics end -->