diff --git a/source/website/eventhandler.js b/source/website/eventhandler.js index 9121563..f5c7760 100644 --- a/source/website/eventhandler.js +++ b/source/website/eventhandler.js @@ -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); } diff --git a/source/website/exportdialog.js b/source/website/exportdialog.js index 1b9f9f7..f7e469f 100644 --- a/source/website/exportdialog.js +++ b/source/website/exportdialog.js @@ -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); } diff --git a/source/website/index.js b/source/website/index.js index 57d97bf..2c8a21a 100644 --- a/source/website/index.js +++ b/source/website/index.js @@ -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 (); }); diff --git a/source/website/sharingdialog.js b/source/website/sharingdialog.js index 35d3dea..26a1848 100644 --- a/source/website/sharingdialog.js +++ b/source/website/sharingdialog.js @@ -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; diff --git a/source/website/website.js b/source/website/website.js index 1e089b6..a341b23 100644 --- a/source/website/website.js +++ b/source/website/website.js @@ -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) => { diff --git a/website/index.html b/website/index.html index 5eec2e2..35fb1f9 100644 --- a/website/index.html +++ b/website/index.html @@ -34,12 +34,12 @@