UNPKG

molstar

Version:

A comprehensive macromolecular library.

140 lines (139 loc) 5.16 kB
"use strict"; /** * Copyright (c) 2019-2023 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Binding = Binding; const input_observer_1 = require("./input/input-observer"); const string_1 = require("./string"); function Binding(triggers, action = '', description = '') { return Binding.create(triggers, action, description); } (function (Binding) { function create(triggers, action = '', description = '') { return { triggers, action, description }; } Binding.create = create; function isBinding(x) { return !!x && Array.isArray(x.triggers) && typeof x.action === 'string'; } Binding.isBinding = isBinding; Binding.Empty = { triggers: [], action: '', description: '' }; function isEmpty(binding) { return binding.triggers.length === 0 || binding.triggers.every(t => t.buttons === undefined && t.modifiers === undefined && !t.code); } Binding.isEmpty = isEmpty; function match(binding, buttons, modifiers) { return binding.triggers.some(t => Trigger.match(t, buttons, modifiers)); } Binding.match = match; function matchKey(binding, code, modifiers, key) { return binding.triggers.some(t => Trigger.matchKey(t, code, modifiers, key)); } Binding.matchKey = matchKey; function formatTriggers(binding) { return binding.triggers.map(Trigger.format).join(' or '); } Binding.formatTriggers = formatTriggers; function format(binding, name = '') { const help = binding.description || (0, string_1.stringToWords)(name); return (0, string_1.interpolate)(help, { triggers: '<i>' + formatTriggers(binding) + '</i>' }); } Binding.format = format; function Trigger(buttons, modifiers) { return Trigger.create(buttons, modifiers); } Binding.Trigger = Trigger; function TriggerKey(code, modifiers) { return Trigger.create(undefined, modifiers, code); } Binding.TriggerKey = TriggerKey; (function (Trigger) { function create(buttons, modifiers, code) { return { buttons, modifiers, code }; } Trigger.create = create; Trigger.Empty = {}; function match(trigger, buttons, modifiers) { const { buttons: b, modifiers: m } = trigger; return b !== undefined && (b === buttons || input_observer_1.ButtonsType.has(b, buttons)) && (!m || input_observer_1.ModifiersKeys.areEqual(m, modifiers)); } Trigger.match = match; function matchKey(trigger, code, modifiers, key) { const { modifiers: m, code: c } = trigger; return c !== undefined && (c === code || (c.length === 1 && code.length === 4 && code.startsWith('Key') && !!key && key.length === 1 && key.toUpperCase() === c.toUpperCase())) && (!m || input_observer_1.ModifiersKeys.areEqual(m, modifiers)); } Trigger.matchKey = matchKey; function format(trigger) { const s = []; const b = formatButtons(trigger.buttons, trigger.code); if (b) s.push(b); const c = formatCode(trigger.code); if (c) s.push(c); const m = formatModifiers(trigger.modifiers); if (m) s.push(m); return s.join(' + '); } Trigger.format = format; })(Trigger = Binding.Trigger || (Binding.Trigger = {})); })(Binding || (exports.Binding = Binding = {})); const B = input_observer_1.ButtonsType; function formatButtons(buttons, code) { const s = []; if (buttons === undefined && !code) { s.push('any mouse button'); } else if (buttons === 0) { s.push('mouse hover'); } else if (buttons !== undefined) { if (B.has(buttons, B.Flag.Primary)) s.push('left mouse button'); if (B.has(buttons, B.Flag.Secondary)) s.push('right mouse button'); if (B.has(buttons, B.Flag.Auxilary)) s.push('wheel/middle mouse button'); if (B.has(buttons, B.Flag.Forth)) s.push('three fingers'); } return s.join(' + '); } function formatModifiers(modifiers, verbose) { const s = []; if (modifiers) { if (modifiers.alt) s.push('alt key'); if (modifiers.control) s.push('control key'); if (modifiers.meta) s.push('meta/command key'); if (modifiers.shift) s.push('shift key'); if (verbose && s.length === 0) s.push('no key'); } else { if (verbose) s.push('any key'); } return s.join(' + '); } function formatCode(code) { if (code === null || code === void 0 ? void 0 : code.startsWith('Key')) code = code.substring(3); return code && (0, string_1.camelCaseToWords)(code).toLowerCase(); }