Event handler shouldn't be a class.
This commit is contained in:
parent
052ef29ac5
commit
7dd1b0a201
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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 ();
|
||||
});
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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) => {
|
||||
|
||||
@ -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 -->
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user