index.ts 4.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /**
  2. * Copyright (c) 2018-2019 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 { PluginContext } from './context';
  8. import { Plugin } from './ui/plugin'
  9. import * as React from 'react';
  10. import * as ReactDOM from 'react-dom';
  11. import { PluginSpec } from './spec';
  12. import { StateTransforms } from './state/transforms';
  13. import { PluginBehaviors } from './behavior';
  14. import { AnimateModelIndex, AnimateAssemblyUnwind, AnimateUnitsExplode, AnimateStateInterpolation } from './state/animation/built-in';
  15. import { StateActions } from './state/actions';
  16. import { InitVolumeStreaming, BoxifyVolumeStreaming, CreateVolumeStreamingBehavior } from './behavior/dynamic/volume-streaming/transformers';
  17. import { StructureRepresentationInteraction } from './behavior/dynamic/selection/structure-representation-interaction';
  18. import { TransformStructureConformation } from './state/actions/structure';
  19. import { VolumeStreamingCustomControls } from './ui/custom/volume';
  20. export const DefaultPluginSpec: PluginSpec = {
  21. actions: [
  22. PluginSpec.Action(StateActions.Structure.DownloadStructure),
  23. PluginSpec.Action(StateActions.Volume.DownloadDensity),
  24. PluginSpec.Action(StateActions.DataFormat.OpenFile),
  25. PluginSpec.Action(StateActions.Structure.Create3DRepresentationPreset),
  26. PluginSpec.Action(StateActions.Structure.Remove3DRepresentationPreset),
  27. PluginSpec.Action(StateActions.Structure.EnableModelCustomProps),
  28. PluginSpec.Action(StateActions.Structure.EnableStructureCustomProps),
  29. // Volume streaming
  30. PluginSpec.Action(InitVolumeStreaming),
  31. PluginSpec.Action(BoxifyVolumeStreaming),
  32. PluginSpec.Action(CreateVolumeStreamingBehavior),
  33. PluginSpec.Action(StateTransforms.Data.Download),
  34. PluginSpec.Action(StateTransforms.Data.ParseCif),
  35. PluginSpec.Action(StateTransforms.Data.ParseCcp4),
  36. PluginSpec.Action(StateTransforms.Data.ParseDsn6),
  37. PluginSpec.Action(StateTransforms.Model.TrajectoryFromMmCif),
  38. PluginSpec.Action(StateTransforms.Model.TrajectoryFromPDB),
  39. PluginSpec.Action(TransformStructureConformation),
  40. PluginSpec.Action(StateTransforms.Model.StructureFromModel),
  41. PluginSpec.Action(StateTransforms.Model.StructureFromTrajectory),
  42. PluginSpec.Action(StateTransforms.Model.ModelFromTrajectory),
  43. PluginSpec.Action(StateTransforms.Model.StructureSelectionFromScript),
  44. PluginSpec.Action(StateTransforms.Representation.StructureRepresentation3D),
  45. PluginSpec.Action(StateTransforms.Representation.StructureLabels3D),
  46. PluginSpec.Action(StateTransforms.Representation.StructureOrientation3D),
  47. PluginSpec.Action(StateTransforms.Representation.ModelUnitcell3D),
  48. PluginSpec.Action(StateTransforms.Representation.ExplodeStructureRepresentation3D),
  49. PluginSpec.Action(StateTransforms.Representation.UnwindStructureAssemblyRepresentation3D),
  50. PluginSpec.Action(StateTransforms.Representation.OverpaintStructureRepresentation3DFromScript),
  51. PluginSpec.Action(StateTransforms.Representation.TransparencyStructureRepresentation3DFromScript),
  52. PluginSpec.Action(StateTransforms.Volume.VolumeFromCcp4),
  53. PluginSpec.Action(StateTransforms.Representation.VolumeRepresentation3D),
  54. PluginSpec.Action(StateActions.Structure.StructureFromSelection),
  55. ],
  56. behaviors: [
  57. PluginSpec.Behavior(PluginBehaviors.Representation.HighlightLoci),
  58. PluginSpec.Behavior(PluginBehaviors.Representation.SelectLoci),
  59. PluginSpec.Behavior(PluginBehaviors.Representation.DefaultLociLabelProvider),
  60. PluginSpec.Behavior(PluginBehaviors.Camera.FocusLoci),
  61. // PluginSpec.Behavior(PluginBehaviors.Labels.SceneLabels),
  62. PluginSpec.Behavior(PluginBehaviors.CustomProps.MolstarSecondaryStructure, { autoAttach: true }),
  63. PluginSpec.Behavior(PluginBehaviors.CustomProps.PDBeStructureQualityReport, { autoAttach: true, showTooltip: true }),
  64. PluginSpec.Behavior(PluginBehaviors.CustomProps.RCSBAssemblySymmetry, { autoAttach: true }),
  65. PluginSpec.Behavior(StructureRepresentationInteraction)
  66. ],
  67. customParamEditors: [
  68. [CreateVolumeStreamingBehavior, VolumeStreamingCustomControls]
  69. ],
  70. animations: [
  71. AnimateModelIndex,
  72. AnimateAssemblyUnwind,
  73. AnimateUnitsExplode,
  74. AnimateStateInterpolation
  75. ]
  76. }
  77. export function createPlugin(target: HTMLElement, spec?: PluginSpec): PluginContext {
  78. const ctx = new PluginContext(spec || DefaultPluginSpec);
  79. ReactDOM.render(React.createElement(Plugin, { plugin: ctx }), target);
  80. return ctx;
  81. }