Escape brackets in occ output before rendering
jQuery Terminal reads "[" and "]" as its own formatting syntax. occ output was echoed as is, so literal brackets, such as Symfony's "[alias]" in `occ list`, closed the color formatting of the next line early and moved text to the wrong place. Text from the output, like a display name, could also inject terminal formatting. Escape the brackets in the text and keep the ANSI sequences, so the colors still work.
This commit is contained in:
+11
-1
@@ -14,6 +14,16 @@
|
|||||||
}
|
}
|
||||||
var baseUrl = OC.generateUrl('/apps/extended_occweb');
|
var baseUrl = OC.generateUrl('/apps/extended_occweb');
|
||||||
|
|
||||||
|
// occ output is plain text with ANSI colors, but jQuery Terminal reads
|
||||||
|
// "[" and "]" as its own formatting syntax. Escape the brackets in the
|
||||||
|
// text (e.g. Symfony's "[alias]" in `occ list`) and leave the ANSI
|
||||||
|
// sequences alone, so from_ansi can still turn them into colors.
|
||||||
|
function escapeOutputBrackets(output) {
|
||||||
|
return String(output).replace(/(\x1B\[[0-9;]*[A-Za-z])|[\[\]]/g, function (match, ansi) {
|
||||||
|
return ansi ? ansi : (match === '[' ? '[' : ']');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Current terminal mode: 'occ' (regular occ commands) or 'sql'
|
// Current terminal mode: 'occ' (regular occ commands) or 'sql'
|
||||||
// (running arbitrary SQL queries via /db/query).
|
// (running arbitrary SQL queries via /db/query).
|
||||||
var mode = 'occ';
|
var mode = 'occ';
|
||||||
@@ -386,7 +396,7 @@
|
|||||||
headers: { requesttoken: OC.requestToken },
|
headers: { requesttoken: OC.requestToken },
|
||||||
data: JSON.stringify(occCommand)
|
data: JSON.stringify(occCommand)
|
||||||
}).done(function (response) {
|
}).done(function (response) {
|
||||||
term.echo('\n' + response).resume();
|
term.echo('\n' + escapeOutputBrackets(response)).resume();
|
||||||
}).fail(function (xhr, status) {
|
}).fail(function (xhr, status) {
|
||||||
term.echo('\n[[;#ff5555;]Request failed: ]' + $.terminal.escape_formatting(xhr.status + ' ' + xhr.statusText)).resume();
|
term.echo('\n[[;#ff5555;]Request failed: ]' + $.terminal.escape_formatting(xhr.status + ' ' + xhr.statusText)).resume();
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user