index.ts 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /**
  2. * Copyright (c) 2018-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  6. */
  7. import * as React from 'react';
  8. import * as ReactDOM from 'react-dom';
  9. import { StateActions } from '../mol-plugin-state/actions';
  10. import { StateTransforms } from '../mol-plugin-state/transforms';
  11. import { VolumeStreamingCustomControls } from '../mol-plugin-ui/custom/volume';
  12. import { Plugin } from '../mol-plugin-ui/plugin';
  13. import { PluginBehaviors } from './behavior';
  14. import { StructureFocusRepresentation } from './behavior/dynamic/selection/structure-focus-representation';
  15. import { BoxifyVolumeStreaming, CreateVolumeStreamingBehavior, InitVolumeStreaming } from './behavior/dynamic/volume-streaming/transformers';
  16. import { PluginContext } from './context';
  17. import { PluginSpec } from './spec';
  18. import { AssignColorVolume } from '../mol-plugin-state/actions/volume';
  19. import { AnimateModelIndex } from '../mol-plugin-state/animation/built-in/model-index';
  20. import { AnimateAssemblyUnwind } from '../mol-plugin-state/animation/built-in/assembly-unwind';
  21. import { AnimateCameraSpin } from '../mol-plugin-state/animation/built-in/camera-spin';
  22. export const DefaultPluginSpec: PluginSpec = {
  23. actions: [
  24. PluginSpec.Action(StateActions.Structure.DownloadStructure),
  25. PluginSpec.Action(StateActions.Structure.AddTrajectory),
  26. PluginSpec.Action(StateActions.Volume.DownloadDensity),
  27. PluginSpec.Action(StateActions.DataFormat.DownloadFile),
  28. PluginSpec.Action(StateActions.DataFormat.OpenFiles),
  29. PluginSpec.Action(StateActions.Structure.EnableModelCustomProps),
  30. PluginSpec.Action(StateActions.Structure.EnableStructureCustomProps),
  31. // Volume streaming
  32. PluginSpec.Action(InitVolumeStreaming),
  33. PluginSpec.Action(BoxifyVolumeStreaming),
  34. PluginSpec.Action(CreateVolumeStreamingBehavior),
  35. PluginSpec.Action(StateTransforms.Data.Download),
  36. PluginSpec.Action(StateTransforms.Data.ParseCif),
  37. PluginSpec.Action(StateTransforms.Data.ParseCcp4),
  38. PluginSpec.Action(StateTransforms.Data.ParseDsn6),
  39. PluginSpec.Action(StateTransforms.Model.TrajectoryFromMmCif),
  40. PluginSpec.Action(StateTransforms.Model.TrajectoryFromCifCore),
  41. PluginSpec.Action(StateTransforms.Model.TrajectoryFromPDB),
  42. PluginSpec.Action(StateTransforms.Model.TransformStructureConformation),
  43. PluginSpec.Action(StateTransforms.Model.StructureFromModel),
  44. PluginSpec.Action(StateTransforms.Model.StructureFromTrajectory),
  45. PluginSpec.Action(StateTransforms.Model.ModelFromTrajectory),
  46. PluginSpec.Action(StateTransforms.Model.StructureSelectionFromScript),
  47. PluginSpec.Action(StateTransforms.Representation.StructureRepresentation3D),
  48. PluginSpec.Action(StateTransforms.Representation.StructureSelectionsDistance3D),
  49. PluginSpec.Action(StateTransforms.Representation.StructureSelectionsAngle3D),
  50. PluginSpec.Action(StateTransforms.Representation.StructureSelectionsDihedral3D),
  51. PluginSpec.Action(StateTransforms.Representation.StructureSelectionsLabel3D),
  52. PluginSpec.Action(StateTransforms.Representation.StructureSelectionsOrientation3D),
  53. PluginSpec.Action(StateTransforms.Representation.ModelUnitcell3D),
  54. PluginSpec.Action(StateTransforms.Representation.ExplodeStructureRepresentation3D),
  55. PluginSpec.Action(StateTransforms.Representation.UnwindStructureAssemblyRepresentation3D),
  56. PluginSpec.Action(StateTransforms.Representation.OverpaintStructureRepresentation3DFromScript),
  57. PluginSpec.Action(StateTransforms.Representation.TransparencyStructureRepresentation3DFromScript),
  58. PluginSpec.Action(AssignColorVolume),
  59. PluginSpec.Action(StateTransforms.Volume.VolumeFromCcp4),
  60. PluginSpec.Action(StateTransforms.Volume.VolumeFromDsn6),
  61. PluginSpec.Action(StateTransforms.Volume.VolumeFromCube),
  62. PluginSpec.Action(StateTransforms.Volume.VolumeFromDx),
  63. PluginSpec.Action(StateTransforms.Representation.VolumeRepresentation3D),
  64. ],
  65. behaviors: [
  66. PluginSpec.Behavior(PluginBehaviors.Representation.HighlightLoci),
  67. PluginSpec.Behavior(PluginBehaviors.Representation.SelectLoci),
  68. PluginSpec.Behavior(PluginBehaviors.Representation.DefaultLociLabelProvider),
  69. PluginSpec.Behavior(PluginBehaviors.Representation.FocusLoci),
  70. PluginSpec.Behavior(PluginBehaviors.Camera.FocusLoci),
  71. PluginSpec.Behavior(StructureFocusRepresentation),
  72. PluginSpec.Behavior(PluginBehaviors.CustomProps.StructureInfo),
  73. PluginSpec.Behavior(PluginBehaviors.CustomProps.AccessibleSurfaceArea),
  74. PluginSpec.Behavior(PluginBehaviors.CustomProps.Interactions),
  75. PluginSpec.Behavior(PluginBehaviors.CustomProps.SecondaryStructure),
  76. PluginSpec.Behavior(PluginBehaviors.CustomProps.ValenceModel),
  77. PluginSpec.Behavior(PluginBehaviors.CustomProps.CrossLinkRestraint),
  78. ],
  79. customParamEditors: [
  80. [CreateVolumeStreamingBehavior, VolumeStreamingCustomControls]
  81. ],
  82. animations: [
  83. AnimateModelIndex,
  84. AnimateCameraSpin,
  85. AnimateAssemblyUnwind
  86. ]
  87. };
  88. export function createPlugin(target: HTMLElement, spec?: PluginSpec): PluginContext {
  89. const ctx = new PluginContext(spec || DefaultPluginSpec);
  90. ctx.init();
  91. ReactDOM.render(React.createElement(Plugin, { plugin: ctx }), target);
  92. return ctx;
  93. }
  94. /** Returns the instance of the plugin after all behaviors have been initialized */
  95. export async function createPluginAsync(target: HTMLElement, spec?: PluginSpec) {
  96. const ctx = new PluginContext(spec || DefaultPluginSpec);
  97. const init = ctx.init();
  98. ReactDOM.render(React.createElement(Plugin, { plugin: ctx }), target);
  99. await init;
  100. return ctx;
  101. }