index.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /**
  2. * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. */
  6. import { PluginContext } from './context';
  7. import { Plugin } from './ui/plugin'
  8. import * as React from 'react';
  9. import * as ReactDOM from 'react-dom';
  10. import { PluginCommands } from './command';
  11. import { PluginSpec } from './spec';
  12. import { CreateStructureFromPDBe } from './state/actions/basic';
  13. import { StateTransforms } from './state/transforms';
  14. import { PluginBehaviors } from './behavior';
  15. import { LogEntry } from 'mol-util/log-entry';
  16. function getParam(name: string, regex: string): string {
  17. let r = new RegExp(`${name}=(${regex})[&]?`, 'i');
  18. return decodeURIComponent(((window.location.search || '').match(r) || [])[1] || '');
  19. }
  20. const DefaultSpec: PluginSpec = {
  21. actions: [
  22. PluginSpec.Action(CreateStructureFromPDBe),
  23. PluginSpec.Action(StateTransforms.Data.Download),
  24. PluginSpec.Action(StateTransforms.Data.ParseCif),
  25. PluginSpec.Action(StateTransforms.Model.CreateStructureAssembly),
  26. PluginSpec.Action(StateTransforms.Model.CreateStructure),
  27. PluginSpec.Action(StateTransforms.Model.CreateModelFromTrajectory),
  28. PluginSpec.Action(StateTransforms.Visuals.CreateStructureRepresentation)
  29. ],
  30. behaviors: [
  31. PluginSpec.Behavior(PluginBehaviors.Representation.HighlightLoci),
  32. PluginSpec.Behavior(PluginBehaviors.Representation.SelectLoci),
  33. PluginSpec.Behavior(PluginBehaviors.Representation.DefaultLociLabelProvider),
  34. PluginSpec.Behavior(PluginBehaviors.Camera.FocusLociOnSelect, { minRadius: 20, extraRadius: 4 })
  35. ]
  36. }
  37. export function createPlugin(target: HTMLElement): PluginContext {
  38. const ctx = new PluginContext(DefaultSpec);
  39. ReactDOM.render(React.createElement(Plugin, { plugin: ctx }), target);
  40. trySetSnapshot(ctx);
  41. return ctx;
  42. }
  43. async function trySetSnapshot(ctx: PluginContext) {
  44. try {
  45. const snapshotUrl = getParam('snapshot-url', `[^&]+`);
  46. if (!snapshotUrl) return;
  47. await PluginCommands.State.Snapshots.Fetch.dispatch(ctx, { url: snapshotUrl })
  48. } catch (e) {
  49. ctx.log(LogEntry.error('Failed to load snapshot.'));
  50. console.warn('Failed to load snapshot', e);
  51. }
  52. }