message: mol-plugin: interactivity binding tweaks
diff: @@ -111,15 +111,13 @@ export const SelectLoci = PluginBehavior.create({
  }
  }
  register() {
  - const actions: [keyof typeof DefaultSelectLociBindings, (current: Interactivity.Loci) => void][] = [
  - ['clickSelect', current => this.ctx.interactivity.lociSelects.select(current)],
  - ['clickSelectToggle', current => this.ctx.interactivity.lociSelects.selectToggle(current)],
  - ['clickSelectExtend', current => this.ctx.interactivity.lociSelects.selectExtend(current)],
  - ['clickSelectOnly', current => this.ctx.interactivity.lociSelects.selectOnly(current)],
  - ['clickDeselect', current => this.ctx.interactivity.lociSelects.deselect(current)],
  - ['clickDeselectAllOnEmpty', current => {
  - if (Loci.isEmpty(current.loci)) this.ctx.interactivity.lociSelects.deselectAll()
  - }],
  + const actions: [keyof typeof DefaultSelectLociBindings, (current: Interactivity.Loci) => void, ((current: Interactivity.Loci) => boolean) | undefined][] = [
  + ['clickSelect', current => this.ctx.interactivity.lociSelects.select(current), void 0],
  + ['clickSelectToggle', current => this.ctx.interactivity.lociSelects.selectToggle(current), void 0],
  + ['clickSelectExtend', current => this.ctx.interactivity.lociSelects.selectExtend(current), void 0],
  + ['clickSelectOnly', current => this.ctx.interactivity.lociSelects.selectOnly(current), void 0],
  + ['clickDeselect', current => this.ctx.interactivity.lociSelects.deselect(current), void 0],
  + ['clickDeselectAllOnEmpty', () => this.ctx.interactivity.lociSelects.deselectAll(), current => Loci.isEmpty(current.loci)],
  ];
  // sort the action so that the ones with more modifiers trigger sooner.
  @@ -134,8 +132,8 @@ export const SelectLoci = PluginBehavior.create({
  if (!this.ctx.canvas3d) return
  // only trigger the 1st action that matches
  - for (const [binding, action] of actions) {
  - if (Binding.match(this.params.bindings[binding], buttons, modifiers)) {
  + for (const [binding, action, condition] of actions) {
  + if (Binding.match(this.params.bindings[binding], buttons, modifiers) && (!condition || condition(current))) {
  action(current);
  break;
  }
  