|
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 };
|