1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
/**
* The source editor exposes XUL commands that can be used when embedded in a XUL
* document. This controller drives the availability and behavior of the commands. When
* the editor input field is focused, this controller will update the matching menu item
* entries found in application menus or context menus.
*/
/**
* Returns a controller object that can be used for editor-specific commands:
* - find
* - find again
* - go to line
* - undo
* - redo
* - delete
* - select all
*/
function createController(ed) {
return {
supportsCommand: function (cmd) {
switch (cmd) {
case "cmd_find":
case "cmd_findAgain":
case "cmd_gotoLine":
case "cmd_undo":
case "cmd_redo":
case "cmd_delete":
case "cmd_selectAll":
return true;
}
return false;
},
isCommandEnabled: function (cmd) {
let cm = ed.codeMirror;
switch (cmd) {
case "cmd_find":
case "cmd_gotoLine":
case "cmd_selectAll":
return true;
case "cmd_findAgain":
return cm.state.search != null && cm.state.search.query != null;
case "cmd_undo":
return ed.canUndo();
case "cmd_redo":
return ed.canRedo();
case "cmd_delete":
return ed.somethingSelected();
}
return false;
},
doCommand: function (cmd) {
let cm = ed.codeMirror;
let map = {
"cmd_selectAll": "selectAll",
"cmd_find": "find",
"cmd_undo": "undo",
"cmd_redo": "redo",
"cmd_delete": "delCharAfter",
"cmd_findAgain": "findNext"
};
if (map[cmd]) {
cm.execCommand(map[cmd]);
return;
}
if (cmd == "cmd_gotoLine") {
ed.jumpToLine();
}
},
onEvent: function () {}
};
}
/**
* Create and insert a commands controller for the provided SourceEditor instance.
*/
function insertCommandsController(sourceEditor) {
let input = sourceEditor.codeMirror.getInputField();
let controller = createController(sourceEditor);
input.controllers.insertControllerAt(0, controller);
}
module.exports = { insertCommandsController };
|