All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.dirigible.dev-tools.quick_open.QuickOpen.js Maven / Gradle / Ivy

There is a newer version: 10.6.27
Show newest version
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import * as UI from '../ui/ui.js';  // eslint-disable-line no-unused-vars

import {FilteredListWidget, Provider} from './FilteredListWidget.js';

export const history = [];

/**
 * @unrestricted
 */
export class QuickOpenImpl {
  constructor() {
    this._prefix = null;
    this._query = '';
    /** @type {!Map>} */
    this._providers = new Map();
    /** @type {!Array} */
    this._prefixes = [];
    this._filteredListWidget = null;
    self.runtime.extensions(Provider).forEach(this._addProvider.bind(this));
    this._prefixes.sort((a, b) => b.length - a.length);
  }

  /**
   * @param {string} query
   */
  static show(query) {
    const quickOpen = new this();
    const filteredListWidget = new FilteredListWidget(null, history, quickOpen._queryChanged.bind(quickOpen));
    quickOpen._filteredListWidget = filteredListWidget;
    filteredListWidget.setPlaceholder(
        ls`Type '?' to see available commands`, ls`Type question mark to see available commands`);
    filteredListWidget.showAsDialog();
    filteredListWidget.setQuery(query);
  }

  /**
   * @param {!Root.Runtime.Extension} extension
   */
  _addProvider(extension) {
    const prefix = extension.descriptor()['prefix'];
    this._prefixes.push(prefix);
    this._providers.set(
        prefix, /** @type {function():!Promise} */
        (extension.instance.bind(extension)));
  }

  /**
   * @param {string} query
   */
  _queryChanged(query) {
    const prefix = this._prefixes.find(prefix => query.startsWith(prefix));
    if (typeof prefix !== 'string' || this._prefix === prefix) {
      return;
    }

    this._prefix = prefix;
    this._filteredListWidget.setPrefix(prefix);
    this._filteredListWidget.setProvider(null);
    this._providers.get(prefix)().then(provider => {
      if (this._prefix !== prefix) {
        return;
      }
      this._filteredListWidget.setProvider(provider);
      this._providerLoadedForTest(provider);
    });
  }

  /**
   * @param {!Provider} provider
   */
  _providerLoadedForTest(provider) {
  }
}

/**
 * @implements {UI.ActionDelegate.ActionDelegate}
 */
export class ShowActionDelegate {
  /**
   * @override
   * @param {!UI.Context.Context} context
   * @param {string} actionId
   * @return {boolean}
   */
  handleAction(context, actionId) {
    switch (actionId) {
      case 'quickOpen.show':
        QuickOpenImpl.show('');
        return true;
    }
    return false;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy