Blame devtools/client/sourceeditor/editor-commands-controller.js

Packit f0b94e
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit f0b94e
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit f0b94e
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit f0b94e
Packit f0b94e
"use strict";
Packit f0b94e
Packit f0b94e
/**
Packit f0b94e
 * The source editor exposes XUL commands that can be used when embedded in a XUL
Packit f0b94e
 * document. This controller drives the availability and behavior of the commands. When
Packit f0b94e
 * the editor input field is focused, this controller will update the matching menu item
Packit f0b94e
 * entries found in application menus or context menus.
Packit f0b94e
 */
Packit f0b94e
Packit f0b94e
/**
Packit f0b94e
 * Returns a controller object that can be used for editor-specific commands:
Packit f0b94e
 * - find
Packit f0b94e
 * - find again
Packit f0b94e
 * - go to line
Packit f0b94e
 * - undo
Packit f0b94e
 * - redo
Packit f0b94e
 * - delete
Packit f0b94e
 * - select all
Packit f0b94e
 */
Packit f0b94e
function createController(ed) {
Packit f0b94e
  return {
Packit f0b94e
    supportsCommand: function (cmd) {
Packit f0b94e
      switch (cmd) {
Packit f0b94e
        case "cmd_find":
Packit f0b94e
        case "cmd_findAgain":
Packit f0b94e
        case "cmd_gotoLine":
Packit f0b94e
        case "cmd_undo":
Packit f0b94e
        case "cmd_redo":
Packit f0b94e
        case "cmd_delete":
Packit f0b94e
        case "cmd_selectAll":
Packit f0b94e
          return true;
Packit f0b94e
      }
Packit f0b94e
Packit f0b94e
      return false;
Packit f0b94e
    },
Packit f0b94e
Packit f0b94e
    isCommandEnabled: function (cmd) {
Packit f0b94e
      let cm = ed.codeMirror;
Packit f0b94e
Packit f0b94e
      switch (cmd) {
Packit f0b94e
        case "cmd_find":
Packit f0b94e
        case "cmd_gotoLine":
Packit f0b94e
        case "cmd_selectAll":
Packit f0b94e
          return true;
Packit f0b94e
        case "cmd_findAgain":
Packit f0b94e
          return cm.state.search != null && cm.state.search.query != null;
Packit f0b94e
        case "cmd_undo":
Packit f0b94e
          return ed.canUndo();
Packit f0b94e
        case "cmd_redo":
Packit f0b94e
          return ed.canRedo();
Packit f0b94e
        case "cmd_delete":
Packit f0b94e
          return ed.somethingSelected();
Packit f0b94e
      }
Packit f0b94e
Packit f0b94e
      return false;
Packit f0b94e
    },
Packit f0b94e
Packit f0b94e
    doCommand: function (cmd) {
Packit f0b94e
      let cm = ed.codeMirror;
Packit f0b94e
Packit f0b94e
      let map = {
Packit f0b94e
        "cmd_selectAll": "selectAll",
Packit f0b94e
        "cmd_find": "find",
Packit f0b94e
        "cmd_undo": "undo",
Packit f0b94e
        "cmd_redo": "redo",
Packit f0b94e
        "cmd_delete": "delCharAfter",
Packit f0b94e
        "cmd_findAgain": "findNext"
Packit f0b94e
      };
Packit f0b94e
Packit f0b94e
      if (map[cmd]) {
Packit f0b94e
        cm.execCommand(map[cmd]);
Packit f0b94e
        return;
Packit f0b94e
      }
Packit f0b94e
Packit f0b94e
      if (cmd == "cmd_gotoLine") {
Packit f0b94e
        ed.jumpToLine();
Packit f0b94e
      }
Packit f0b94e
    },
Packit f0b94e
Packit f0b94e
    onEvent: function () {}
Packit f0b94e
  };
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
/**
Packit f0b94e
 * Create and insert a commands controller for the provided SourceEditor instance.
Packit f0b94e
 */
Packit f0b94e
function insertCommandsController(sourceEditor) {
Packit f0b94e
  let input = sourceEditor.codeMirror.getInputField();
Packit f0b94e
  let controller = createController(sourceEditor);
Packit f0b94e
  input.controllers.insertControllerAt(0, controller);
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
module.exports = { insertCommandsController };