diff --git a/src/apps/viewer/index.ts b/src/apps/viewer/index.ts index 947f1be45eedcbdac2a0b5c8a131ba086ce57345..95ee7373824184c9efa64981504787cf8ab6cb6f 100644 --- a/src/apps/viewer/index.ts +++ b/src/apps/viewer/index.ts @@ -6,14 +6,39 @@ import { createPlugin, DefaultPluginSpec } from 'mol-plugin'; import './index.html' +import { PluginContext } from 'mol-plugin/context'; +import { PluginCommands } from 'mol-plugin/command'; require('mol-plugin/skin/light.scss') -createPlugin(document.getElementById('app')!, { - ...DefaultPluginSpec, - layout: { - initial: { - isExpanded: true, - showControls: true +function getParam(name: string, regex: string): string { + let r = new RegExp(`${name}=(${regex})[&]?`, 'i'); + return decodeURIComponent(((window.location.search || '').match(r) || [])[1] || ''); +} + +const hideControls = getParam('hide-controls', `[^&]+`) === '1'; + +function init() { + const plugin = createPlugin(document.getElementById('app')!, { + ...DefaultPluginSpec, + layout: { + initial: { + isExpanded: true, + showControls: !hideControls + } } + }); + trySetSnapshot(plugin); +} + +async function trySetSnapshot(ctx: PluginContext) { + try { + const snapshotUrl = getParam('snapshot-url', `[^&]+`); + if (!snapshotUrl) return; + await PluginCommands.State.Snapshots.Fetch.dispatch(ctx, { url: snapshotUrl }) + } catch (e) { + ctx.log.error('Failed to load snapshot.'); + console.warn('Failed to load snapshot', e); } -}); \ No newline at end of file +} + +init(); \ No newline at end of file diff --git a/src/mol-plugin/index.ts b/src/mol-plugin/index.ts index ffcf45afb01e8dc7f062bf432aec39cfea45b557..02c37fd5e02db8b29fd0547e57661dc8122459f5 100644 --- a/src/mol-plugin/index.ts +++ b/src/mol-plugin/index.ts @@ -9,7 +9,6 @@ import { PluginContext } from './context'; import { Plugin } from './ui/plugin' import * as React from 'react'; import * as ReactDOM from 'react-dom'; -import { PluginCommands } from './command'; import { PluginSpec } from './spec'; import { StateTransforms } from './state/transforms'; import { PluginBehaviors } from './behavior'; @@ -18,11 +17,6 @@ import { StateActions } from './state/actions'; import { InitVolumeStreaming } from './behavior/dynamic/volume-streaming/transformers'; import { StructureRepresentationInteraction } from './behavior/dynamic/selection/structure-representation-interaction'; -function getParam(name: string, regex: string): string { - let r = new RegExp(`${name}=(${regex})[&]?`, 'i'); - return decodeURIComponent(((window.location.search || '').match(r) || [])[1] || ''); -} - export const DefaultPluginSpec: PluginSpec = { actions: [ PluginSpec.Action(StateActions.Structure.DownloadStructure), @@ -71,19 +65,5 @@ export const DefaultPluginSpec: PluginSpec = { export function createPlugin(target: HTMLElement, spec?: PluginSpec): PluginContext { const ctx = new PluginContext(spec || DefaultPluginSpec); ReactDOM.render(React.createElement(Plugin, { plugin: ctx }), target); - - trySetSnapshot(ctx); - return ctx; -} - -async function trySetSnapshot(ctx: PluginContext) { - try { - const snapshotUrl = getParam('snapshot-url', `[^&]+`); - if (!snapshotUrl) return; - await PluginCommands.State.Snapshots.Fetch.dispatch(ctx, { url: snapshotUrl }) - } catch (e) { - ctx.log.error('Failed to load snapshot.'); - console.warn('Failed to load snapshot', e); - } } \ No newline at end of file diff --git a/src/mol-plugin/layout.ts b/src/mol-plugin/layout.ts index 715a84be5cd68db524c193d3add84564c831636b..3be770d7036fa5db618f7c72d8bbf9f088d616e5 100644 --- a/src/mol-plugin/layout.ts +++ b/src/mol-plugin/layout.ts @@ -58,7 +58,7 @@ export class PluginLayout extends PluginComponent<PluginLayoutStateProps> { private rootState: RootState | undefined = void 0; private expandedViewport: HTMLMetaElement; - setProps(props: PluginLayoutStateProps) { + setProps(props: Partial<PluginLayoutStateProps>) { this.updateState(props); } diff --git a/src/mol-plugin/spec.ts b/src/mol-plugin/spec.ts index 3a9611eb8d91f954dc718e7c177affaddbde2b48..6a8599df9b7870cd3b5d8b31de1b59ad89516ca5 100644 --- a/src/mol-plugin/spec.ts +++ b/src/mol-plugin/spec.ts @@ -17,7 +17,7 @@ interface PluginSpec { animations?: PluginStateAnimation[], customParamEditors?: [StateAction | StateTransformer, StateTransformParameters.Class][], layout?: { - initial?: PluginLayoutStateProps, + initial?: Partial<PluginLayoutStateProps>, controls?: { left?: React.ComponentClass | 'none', right?: React.ComponentClass | 'none',