| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import loggerFactory from '~/utils/logger';
- const logger = loggerFactory('growi:cli:HotkeyStroke');
- export default class HotkeyStroke {
- constructor(stroke) {
- this.stroke = stroke;
- this.activeIndices = [];
- }
- get firstKey() {
- return this.stroke[0];
- }
- /**
- * Evaluate whether the specified key completes stroke or not
- * @param {string} key
- * @return T/F whether the specified key completes stroke or not
- */
- evaluate(key) {
- if (key === this.firstKey) {
- // add a new active index
- this.activeIndices.push(0);
- }
- let isCompleted = false;
- this.activeIndices = this.activeIndices
- .map((index) => {
- // return null when key does not match
- if (key !== this.stroke[index]) {
- return null;
- }
- const nextIndex = index + 1;
- if (this.stroke.length <= nextIndex) {
- isCompleted = true;
- return null;
- }
- return nextIndex;
- })
- // exclude null
- .filter(index => index != null);
- // reset if completed
- if (isCompleted) {
- this.activeIndices = [];
- }
- logger.debug('activeIndices for [', this.stroke, '] => [', this.activeIndices, ']');
- return isCompleted;
- }
- }
|