Raanan Weber 7 years ago
parent
commit
a1a7a0081c

+ 0 - 23
Viewer/src/templating/viewerPlugin.ts

@@ -1,23 +0,0 @@
-import { EventCallback, Template } from "./templateManager";
-
-export interface IViewerPlugin {
-
-    readonly templateName: string;
-    readonly eventsToAttach?: Array<string>;
-
-    interactionPredicate(event: EventCallback): boolean;
-    onEvent?(event: EventCallback): void;
-    addHTMLTemplate?(template: Template): void;
-}
-
-export abstract class AbstractViewerNavbarButton implements IViewerPlugin {
-
-
-
-    public readonly templateName: string = "navBar";
-    public readonly eventsToAttach: Array<string> = ['pointerdown'];
-
-    abstract interactionPredicate(event: EventCallback): boolean;
-    abstract onEvent(event: EventCallback): void;
-    abstract addHTMLTemplate(template: Template): void;
-}

+ 37 - 0
Viewer/src/templating/viewerTemplatePlugin.ts

@@ -0,0 +1,37 @@
+import { EventCallback, Template } from "./templateManager";
+
+export interface IViewerTemplatePlugin {
+
+    readonly templateName: string;
+    readonly eventsToAttach?: Array<string>;
+
+    interactionPredicate(event: EventCallback): boolean;
+    onEvent?(event: EventCallback): void;
+    addHTMLTemplate?(template: Template): void;
+}
+
+export abstract class AbstractViewerNavbarButton implements IViewerTemplatePlugin {
+
+
+
+    public readonly templateName: string = "navBar";
+    public readonly eventsToAttach: Array<string> = ['pointerdown'];
+    protected _prepend: boolean = true;
+
+    abstract interactionPredicate(event: EventCallback): boolean;
+    abstract onEvent(event: EventCallback): void;
+
+    public addHTMLTemplate(template: Template): void {
+        let element = this._generateHTMLElement(template);
+        let container = template.parent.querySelector("div.default-control");
+        if (container) {
+            if (this._prepend) {
+                container.insertBefore(element, container.firstChild);
+            } else {
+                container.appendChild(element);
+            }
+        }
+    }
+
+    protected abstract _generateHTMLElement(template: Template): HTMLElement;
+}

+ 3 - 3
Viewer/src/viewer/defaultViewer.ts

@@ -8,7 +8,7 @@ import { CameraBehavior } from '../interfaces';
 import { ViewerModel } from '../model/viewerModel';
 import { extendClassWithConfig } from '../helper';
 import { IModelAnimation, AnimationState } from '../model/modelAnimation';
-import { IViewerPlugin } from 'templating/viewerPlugin';
+import { IViewerTemplatePlugin } from 'templating/viewerTemplatePlugin';
 
 /**
  * The Default viewer is the default implementation of the AbstractViewer.
@@ -38,9 +38,9 @@ export class DefaultViewer extends AbstractViewer {
         });
     }
 
-    private _registeredPlugins: Array<IViewerPlugin> = [];
+    private _registeredPlugins: Array<IViewerTemplatePlugin> = [];
 
-    public registerTemplatePlugin(plugin: IViewerPlugin) {
+    public registerTemplatePlugin(plugin: IViewerTemplatePlugin) {
         //validate
         if (!plugin.templateName) {
             throw new Error("No template name provided");