diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000000000000000000000000000000000000..1a52bf384c81e38a291f36a0ad13191c99357ccb --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,18 @@ +on: + push: + pull_request: + +jobs: + eslint: + name: eslint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: install node v12 + uses: actions/setup-node@v1 + with: + node-version: 12 + - name: yarn install + run: yarn install + - name: eslint + uses: icrawl/action-eslint@v1 \ No newline at end of file diff --git a/data/rcsb-graphql/codegen.yml b/data/rcsb-graphql/codegen.yml index 726a47193be3b15ac8085a40842d210863f722c0..d42a711fef623fe14bc2189a9f92466b65b219a9 100644 --- a/data/rcsb-graphql/codegen.yml +++ b/data/rcsb-graphql/codegen.yml @@ -1,4 +1,4 @@ -schema: https://data-beta.rcsb.org/graphql +schema: https://data.rcsb.org/graphql documents: './src/mol-model-props/rcsb/graphql/symmetry.gql.ts' generates: './src/mol-model-props/rcsb/graphql/types.ts': diff --git a/package-lock.json b/package-lock.json index 215f72bdf42f6a34bba0cb24a63b1b4e8117e302..d6547d6854e46f89bd92643e8e040a937b282ca6 100644 Binary files a/package-lock.json and b/package-lock.json differ diff --git a/package.json b/package.json index 0ca273aad9eae9b9afcdbd83cc4a4aea56777cd5..0730fe89e05d7348caff149e6e23345cfb3194c2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "molstar", - "version": "0.6.4", + "version": "0.6.7", "description": "A comprehensive macromolecular library.", "homepage": "https://github.com/molstar/molstar#readme", "repository": { diff --git a/src/mol-model-props/computed/interactions/hydrogen-bonds.ts b/src/mol-model-props/computed/interactions/hydrogen-bonds.ts index 1be7234bc0c5daa92ebc976cdc0d054dfa3b44dc..a47f444e04823e1dfdfd2103cbe7639f9e38a4f3 100644 --- a/src/mol-model-props/computed/interactions/hydrogen-bonds.ts +++ b/src/mol-model-props/computed/interactions/hydrogen-bonds.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2019-2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> * @author Fred Ludlow <Fred.Ludlow@astx.com> @@ -32,7 +32,7 @@ type GeometryProps = PD.Values<GeometryParams> const HydrogenBondsParams = { ...GeometryParams, - water: PD.Boolean(true, { description: 'Include water-to-water hydrogen bonds' }), + water: PD.Boolean(false, { description: 'Include water-to-water hydrogen bonds' }), sulfurDistanceMax: PD.Numeric(4.1, { min: 1, max: 5, step: 0.1 }), } type HydrogenBondsParams = typeof HydrogenBondsParams @@ -174,9 +174,8 @@ function addUnitHydrogenAcceptors(structure: Structure, unit: Unit.Atomic, build } } - function isWater(unit: Unit.Atomic, index: StructureElement.UnitIndex) { - return unit.model.atomicHierarchy.derived.residue.moleculeType[unit.elements[index]] === MoleculeType.Water + return unit.model.atomicHierarchy.derived.residue.moleculeType[unit.residueIndex[unit.elements[index]]] === MoleculeType.Water } function isBackbone(unit: Unit.Atomic, index: StructureElement.UnitIndex) { diff --git a/src/mol-model-props/computed/interactions/metal.ts b/src/mol-model-props/computed/interactions/metal.ts index 93c9a41222da1f7514c7d315a72c7db64cc20a54..80d7881c716e7582d3cdb1474543748dd1f9af05 100644 --- a/src/mol-model-props/computed/interactions/metal.ts +++ b/src/mol-model-props/computed/interactions/metal.ts @@ -94,7 +94,7 @@ function addMetalBinding(structure: Structure, unit: Unit.Atomic, builder: Featu dative = true ionic = true } - } else if (element === Elements.S && 'CYS' === resname) { + } else if (element === Elements.S && (resname === 'CYS' || resname === 'MET')) { dative = true ionic = true } else if (element === Elements.N) { diff --git a/src/mol-model-props/computed/representations/interactions.ts b/src/mol-model-props/computed/representations/interactions.ts index 53a206f95e0d8d59b156db20a677fec50eba97a0..a77f08af3024f8f49519110e202569e09dda65ba 100644 --- a/src/mol-model-props/computed/representations/interactions.ts +++ b/src/mol-model-props/computed/representations/interactions.ts @@ -24,7 +24,7 @@ export const InteractionsParams = { ...InteractionsIntraUnitParams, ...InteractionsInterUnitParams, unitKinds: getUnitKindsParam(['atomic']), - sizeFactor: PD.Numeric(0.15, { min: 0.01, max: 1, step: 0.01 }), + sizeFactor: PD.Numeric(0.2, { min: 0.01, max: 1, step: 0.01 }), visuals: PD.MultiSelect(['intra-unit', 'inter-unit'], PD.objectToOptions(InteractionsVisuals)), } export type InteractionsParams = typeof InteractionsParams diff --git a/src/mol-model-props/rcsb/assembly-symmetry.ts b/src/mol-model-props/rcsb/assembly-symmetry.ts index a34b12cc7ee38d9c7af7b320f5d90ac10abcd448..cfcabec150049365c2576535cf1f9d15699b1a67 100644 --- a/src/mol-model-props/rcsb/assembly-symmetry.ts +++ b/src/mol-model-props/rcsb/assembly-symmetry.ts @@ -47,7 +47,7 @@ export namespace AssemblySymmetry { Representation = 'rcsb-assembly-symmetry-3d' } - export const DefaultServerUrl = 'https://data-beta.rcsb.org/graphql' + export const DefaultServerUrl = 'https://data.rcsb.org/graphql' export function isApplicable(structure?: Structure): boolean { return ( diff --git a/src/mol-model-props/rcsb/graphql/types.ts b/src/mol-model-props/rcsb/graphql/types.ts index 591e83afc715d47a0e70955350c9405f700678d2..d62903be282531a1bdf3561de7fc22f1e8ec9612 100644 --- a/src/mol-model-props/rcsb/graphql/types.ts +++ b/src/mol-model-props/rcsb/graphql/types.ts @@ -1,7 +1,7 @@ /* eslint-disable */ export type Maybe<T> = T | null; -// Generated in 2020-03-30T11:30:30-07:00 +// Generated in 2020-04-08T16:22:40-07:00 /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { @@ -800,6 +800,8 @@ export type PdbxAuditRevisionCategory = { export type PdbxAuditRevisionDetails = { readonly data_content_type: Scalars['String']; + readonly description?: Maybe<Scalars['String']>; + readonly details?: Maybe<Scalars['String']>; readonly ordinal: Scalars['Int']; readonly provider?: Maybe<Scalars['String']>; readonly revision_ordinal: Scalars['Int']; diff --git a/src/mol-plugin-state/manager/loci-label.ts b/src/mol-plugin-state/manager/loci-label.ts index ddcee6ee9f7b3e87626bd2451a6389baca83aaf4..adabbd1c74657094076593b45169b22d24777336 100644 --- a/src/mol-plugin-state/manager/loci-label.ts +++ b/src/mol-plugin-state/manager/loci-label.ts @@ -15,6 +15,8 @@ export type LociLabel = JSX.Element | string export type LociLabelProvider = { label: (loci: Loci, repr?: Representation<any>) => LociLabel | undefined group?: (entry: LociLabel) => string + /** Labels from providers with higher priority are shown first */ + priority?: number } export class LociLabelManager { @@ -22,6 +24,7 @@ export class LociLabelManager { addProvider(provider: LociLabelProvider) { this.providers.push(provider); + this.providers.sort((a, b) => (b.priority || 0) - (a.priority || 0)) this.isDirty = true this.showLabels() } diff --git a/src/mol-plugin-ui/controls.tsx b/src/mol-plugin-ui/controls.tsx index 9f1b80a33e7f5b44e98ec4233d4b2b5f3e3dc31e..63409ca18b847924a66639e1fadcbf01d42cdff7 100644 --- a/src/mol-plugin-ui/controls.tsx +++ b/src/mol-plugin-ui/controls.tsx @@ -251,9 +251,14 @@ export class SelectionViewportControls extends PluginUIComponent { this.subscribe(this.plugin.behaviors.interaction.selectionMode, () => this.forceUpdate()); } + onMouseMove = (e: React.MouseEvent) => { + // ignore mouse moves when no button is held + if (e.buttons === 0) e.stopPropagation() + } + render() { if (!this.plugin.selectionMode) return null; - return <div className='msp-selection-viewport-controls'> + return <div className='msp-selection-viewport-controls' onMouseMove={this.onMouseMove}> <StructureSelectionActionsControls /> </div>; } diff --git a/src/mol-plugin/behavior/dynamic/custom-props/rcsb/assembly-symmetry.ts b/src/mol-plugin/behavior/dynamic/custom-props/rcsb/assembly-symmetry.ts index dfe688f6190a4a2c0744845b9e5f0cd4c9b2804a..3d2cad2628ee2dce12dc17ea9a840b6c5efb7c3b 100644 --- a/src/mol-plugin/behavior/dynamic/custom-props/rcsb/assembly-symmetry.ts +++ b/src/mol-plugin/behavior/dynamic/custom-props/rcsb/assembly-symmetry.ts @@ -181,7 +181,8 @@ export const AssemblySymmetryPreset = StructureRepresentationPresetProvider({ } const assemblySymmetry = await tryCreateAssemblySymmetry(plugin, structureCell); - const preset = await PresetStructureRepresentations.auto.apply(ref, { ...params, globalThemeName: Tag.Cluster as any }, plugin); + const globalThemeName = assemblySymmetry.isOk ? Tag.Cluster as any : undefined + const preset = await PresetStructureRepresentations.auto.apply(ref, { ...params, globalThemeName }, plugin); return { components: preset.components, representations: { ...preset.representations, assemblySymmetry } }; } diff --git a/src/mol-plugin/behavior/dynamic/custom-props/rcsb/ui/assembly-symmetry.tsx b/src/mol-plugin/behavior/dynamic/custom-props/rcsb/ui/assembly-symmetry.tsx index bab4c360a346efece4eb70623f3074ca0a7f1f40..df69ba8f7e6fe0d301267ae809cc644716a92775 100644 --- a/src/mol-plugin/behavior/dynamic/custom-props/rcsb/ui/assembly-symmetry.tsx +++ b/src/mol-plugin/behavior/dynamic/custom-props/rcsb/ui/assembly-symmetry.tsx @@ -104,15 +104,16 @@ export class AssemblySymmetryControls extends CollapsableControls<{}, AssemblySy await this.plugin.builders.structure.insertStructureProperties(s.cell, params); } - const components = this.plugin.managers.structure.hierarchy.currentComponentGroups[0]; - if (values.symmetryIndex === -1) { - const name = components[0]?.representations[0]?.cell.transform.params?.colorTheme.name; - if (name === AssemblySymmetry.Tag.Cluster) { - await this.plugin.managers.structure.component.updateRepresentationsTheme(components, { color: 'default' }) + for (const components of this.plugin.managers.structure.hierarchy.currentComponentGroups) { + if (values.symmetryIndex === -1) { + const name = components[0]?.representations[0]?.cell.transform.params?.colorTheme.name; + if (name === AssemblySymmetry.Tag.Cluster) { + await this.plugin.managers.structure.component.updateRepresentationsTheme(components, { color: 'default' }) + } + } else { + tryCreateAssemblySymmetry(this.plugin, s.cell) + await this.plugin.managers.structure.component.updateRepresentationsTheme(components, { color: AssemblySymmetry.Tag.Cluster as any }) } - } else { - tryCreateAssemblySymmetry(this.plugin, s.cell) - await this.plugin.managers.structure.component.updateRepresentationsTheme(components, { color: AssemblySymmetry.Tag.Cluster as any }) } } diff --git a/src/mol-plugin/behavior/dynamic/representation.ts b/src/mol-plugin/behavior/dynamic/representation.ts index a87f63f7396d572d9dfc0c6a360110b9e233288a..41b0ad9abefdb2b2376131fd5a21ed910753f281 100644 --- a/src/mol-plugin/behavior/dynamic/representation.ts +++ b/src/mol-plugin/behavior/dynamic/representation.ts @@ -186,7 +186,8 @@ export const DefaultLociLabelProvider = PluginBehavior.create({ label.push(lociLabel(loci)) return label.join('</br>') }, - group: (label: LociLabel) => label.toString().replace(/Model [0-9]+/g, 'Models') + group: (label: LociLabel) => label.toString().replace(/Model [0-9]+/g, 'Models'), + priority: 100 }; register() { this.ctx.managers.lociLabels.addProvider(this.f); } unregister() { this.ctx.managers.lociLabels.removeProvider(this.f); }