Skip to content

Commit

Permalink
add rpc interceptor #883
Browse files Browse the repository at this point in the history
  • Loading branch information
jcubic committed Jun 28, 2023
1 parent b7ff7f2 commit 2039f07
Show file tree
Hide file tree
Showing 13 changed files with 147 additions and 78 deletions.
4 changes: 3 additions & 1 deletion CHANGELOG.md
@@ -1,4 +1,6 @@
## 2.36.1
## 2.37.0
### Features
* add `rpc` interceptor [#883](https://github.com/jcubic/jquery.terminal/issues/883)
### Bugfix
* fix CMD wrapping when prompt is empty [#882](https://github.com/jcubic/jquery.terminal/issues/882)
* fix paused terminal when using array as interpreter and RPC without system describe
Expand Down
2 changes: 1 addition & 1 deletion css/emoji.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion css/jquery.terminal-2.36.0.css
Expand Up @@ -12,7 +12,7 @@
* Copyright (c) 2011-2023 Jakub T. Jankiewicz <https://jcubic.pl/me>
* Released under the MIT license
*
* Date: Sat, 03 Jun 2023 10:49:34 +0000
* Date: Wed, 28 Jun 2023 14:16:43 +0000
*/
.terminal .terminal-output .format, .cmd .format,
.cmd-prompt, .cmd-prompt div {
Expand Down
2 changes: 1 addition & 1 deletion css/jquery.terminal-2.36.0.min.css

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion css/jquery.terminal.css
Expand Up @@ -12,7 +12,7 @@
* Copyright (c) 2011-2023 Jakub T. Jankiewicz <https://jcubic.pl/me>
* Released under the MIT license
*
* Date: Sat, 03 Jun 2023 10:49:34 +0000
* Date: Wed, 28 Jun 2023 14:16:43 +0000
*/
.terminal .terminal-output .format, .cmd .format,
.cmd-prompt, .cmd-prompt div {
Expand Down
2 changes: 1 addition & 1 deletion css/jquery.terminal.min.css

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion css/jquery.terminal.min.css.map

Large diffs are not rendered by default.

80 changes: 52 additions & 28 deletions js/jquery.terminal-2.36.0.js
Expand Up @@ -41,7 +41,7 @@
*
* broken image by Sophia Bai from the Noun Project (CC-BY)
*
* Date: Sat, 03 Jun 2023 10:49:33 +0000
* Date: Wed, 28 Jun 2023 14:16:42 +0000
*/
/* global define, Map */
/* eslint-disable */
Expand Down Expand Up @@ -3542,10 +3542,12 @@
'</span>';
}).concat([last_line]).join('\n');
}
function set(prompt) {
function set(prompt, options) {
if (prompt) {
prompt = $.terminal.apply_formatters(prompt, {prompt: true});
prompt = $.terminal.normalize(prompt);
if (options && options.formatters || !options) {
prompt = $.terminal.apply_formatters(prompt, {prompt: true});
prompt = $.terminal.normalize(prompt);
}
prompt = crlf(prompt);
}
var formatted = format_prompt(prompt);
Expand Down Expand Up @@ -3575,7 +3577,7 @@
}
}
}
return function() {
return function(options) {
// the data is used as cancelable reference because we have ref
// data object that is hold in closure and we remove `set` function
// so previous call to function prompt will be ignored
Expand All @@ -3588,7 +3590,7 @@
set: set
};
with_prompt(prompt, function(prompt) {
data.set(prompt);
data.set(prompt, options);
}, self);
};
})();
Expand Down Expand Up @@ -3801,7 +3803,7 @@
prompt_offset = len;
prompt_len = just_prompt_len + prompt_offset;
},
prompt: function(user_prompt) {
prompt: function(user_prompt, options) {
if (user_prompt === true) {
return last_rendered_prompt;
} else if (user_prompt === undefined) {
Expand All @@ -3815,7 +3817,7 @@
throw new Error('prompt must be a function or string');
}
if (should_redraw) {
draw_prompt();
draw_prompt(options);
// we could check if command is longer then numchars-new
// prompt
redraw();
Expand Down Expand Up @@ -5275,7 +5277,7 @@
// -------------------------------------------------------------------------
$.terminal = {
version: 'DEV',
date: 'Sat, 03 Jun 2023 10:49:33 +0000',
date: 'Wed, 28 Jun 2023 14:16:42 +0000',
// colors from https://www.w3.org/wiki/CSS/Properties/color/keywords
color_names: [
'transparent', 'currentcolor', 'black', 'silver', 'gray', 'white',
Expand Down Expand Up @@ -7104,6 +7106,20 @@
'params': options.params,
'id': ++ids[options.url]
};
function finalize(json, response, status, jqXHR) {
if (validJSONRPC(json) || options.method === 'system.describe') {
// don't catch errors in success callback
if (options.success) {
options.success(json, status, jqXHR);
}
deferred.resolve(json);
} else {
if (options.error) {
options.error(jqXHR, 'Invalid JSON-RPC');
}
deferred.reject({message: 'Invalid JSON-RPC', response: response});
}
}
$.ajax({
url: options.url,
beforeSend: function beforeSend(jxhr, settings) {
Expand Down Expand Up @@ -7133,18 +7149,16 @@
if (is_function(options.response)) {
options.response(jqXHR, json);
}
if (validJSONRPC(json) || options.method === 'system.describe') {
// don't catch errors in success callback
if (options.success) {
options.success(json, status, jqXHR);
}
deferred.resolve(json);
} else {
if (options.error) {
options.error(jqXHR, 'Invalid JSON-RPC');
if (is_function(options.intercept)) {
var ret = options.intercept(request, json);
if (ret) {
return unpromise(ret, function(json) {
var response = JSON.stringify(json);
finalize(json, response, status, jqXHR);
});
}
deferred.reject({message: 'Invalid JSON-RPC', response: response});
}
finalize(json, response, status, jqXHR);
},
error: options.error,
contentType: 'application/json',
Expand Down Expand Up @@ -7367,6 +7381,8 @@
// -----------------------------------------------------------------------
// :: Default options
// -----------------------------------------------------------------------
// if set to false nested formatting will not process formatting, only text
// between formatting, we need this option because we're flattening the formatting
$.terminal.nested_formatting.__meta__ = true;
// if set to false nested formatting will not inherit styles colors and attribues
$.terminal.nested_formatting.__inherit__ = true;
Expand Down Expand Up @@ -7705,6 +7721,12 @@
// :: Create interpreter function from url string
// ---------------------------------------------------------------------
function make_basic_json_rpc(url, auth) {
var rpc_interceptor;
if (settings.rpc) {
rpc_interceptor = function() {
return settings.rpc.apply(self, arguments);
};
}
var interpreter = function(method, params) {
self.pause(settings.softPause);
$.jrpc({
Expand All @@ -7718,6 +7740,7 @@
display_exception(e, 'USER');
}
},
intercept: rpc_interceptor,
response: function(jxhr, response) {
try {
settings.response.call(self, jxhr, response, self);
Expand Down Expand Up @@ -7997,7 +8020,6 @@
var rest = interpreters.slice(1);
var type = get_type(first);
if (type === 'string') {
self.pause(settings.softPause);
if (settings.describe === false) {
if (++rpc_count === 1) {
fn_interpreter = make_basic_json_rpc(first, login);
Expand All @@ -8006,6 +8028,7 @@
}
recur(rest, success);
} else {
self.pause(settings.softPause);
make_json_rpc_object(first, login, function(new_obj) {
if (new_obj) {
$.extend(object, new_obj);
Expand Down Expand Up @@ -9100,13 +9123,14 @@
// ---------------------------------------------------------------------
function typed(finish_typing_fn) {
return function typing_animation(message, options) {
var formattted = $.terminal.apply_formatters(message, {
var formatted = $.terminal.apply_formatters(message, {
animation: true
});
formatted = $.terminal.normalize(formatted);
animating = true;
var prompt = self.get_prompt();
var char_i = 0;
var len = $.terminal.length(formattted);
var len = $.terminal.length(formatted);
if (message.length > 0) {
var new_prompt = '';
if (options.prompt) {
Expand All @@ -9115,7 +9139,7 @@
self.set_prompt('');
}
var bottom = self.is_bottom();
var chars = $.terminal.partition(formattted, {wrap: false});
var chars = $.terminal.partition(formatted, {wrap: false});
var interval = setInterval(function() {
if (!skip) {
var chr = chars[char_i];
Expand All @@ -9128,16 +9152,16 @@
}
}
new_prompt += chr;
self.set_prompt(new_prompt);
command_line.prompt(new_prompt, {formatters: false});
if (bottom && (chr === '\n' || !self.is_bottom())) {
self.scroll_to_bottom();
}
char_i++;
} else {
self.skip_stop();
var chrRest = $.terminal.substring(formattted, char_i, len);
new_prompt += chrRest;
self.set_prompt(new_prompt);
var chr_rest = $.terminal.substring(formatted, char_i, len);
new_prompt += chr_rest;
command_line.prompt(new_prompt, {formatters: false});
char_i = len;
}
if (char_i === len) {
Expand Down Expand Up @@ -12153,7 +12177,7 @@
}, options);
}
function bottom_detect(intersections) {
is_bottom_detected = intersections[0].intersectionRatio === 1;
is_bottom_detected = intersections[0].intersectionRatio >= 0.9;
}
function create_bottom_detect() {
if (window.IntersectionObserver) {
Expand Down
4 changes: 2 additions & 2 deletions js/jquery.terminal-2.36.0.min.js

Large diffs are not rendered by default.

39 changes: 29 additions & 10 deletions js/jquery.terminal-src.js
Expand Up @@ -7106,6 +7106,20 @@
'params': options.params,
'id': ++ids[options.url]
};
function finalize(json, response, status, jqXHR) {
if (validJSONRPC(json) || options.method === 'system.describe') {
// don't catch errors in success callback
if (options.success) {
options.success(json, status, jqXHR);
}
deferred.resolve(json);
} else {
if (options.error) {
options.error(jqXHR, 'Invalid JSON-RPC');
}
deferred.reject({message: 'Invalid JSON-RPC', response: response});
}
}
$.ajax({
url: options.url,
beforeSend: function beforeSend(jxhr, settings) {
Expand Down Expand Up @@ -7135,18 +7149,16 @@
if (is_function(options.response)) {
options.response(jqXHR, json);
}
if (validJSONRPC(json) || options.method === 'system.describe') {
// don't catch errors in success callback
if (options.success) {
options.success(json, status, jqXHR);
}
deferred.resolve(json);
} else {
if (options.error) {
options.error(jqXHR, 'Invalid JSON-RPC');
if (is_function(options.intercept)) {
var ret = options.intercept(request, json);
if (ret) {
return unpromise(ret, function(json) {
var response = JSON.stringify(json);
finalize(json, response, status, jqXHR);
});
}
deferred.reject({message: 'Invalid JSON-RPC', response: response});
}
finalize(json, response, status, jqXHR);
},
error: options.error,
contentType: 'application/json',
Expand Down Expand Up @@ -7709,6 +7721,12 @@
// :: Create interpreter function from url string
// ---------------------------------------------------------------------
function make_basic_json_rpc(url, auth) {
var rpc_interceptor;
if (settings.rpc) {
rpc_interceptor = function() {
return settings.rpc.apply(self, arguments);
};
}
var interpreter = function(method, params) {
self.pause(settings.softPause);
$.jrpc({
Expand All @@ -7722,6 +7740,7 @@
display_exception(e, 'USER');
}
},
intercept: rpc_interceptor,
response: function(jxhr, response) {
try {
settings.response.call(self, jxhr, response, self);
Expand Down

0 comments on commit 2039f07

Please sign in to comment.