Skip to content

Commit

Permalink
fix race condition in refresh and flush #897
Browse files Browse the repository at this point in the history
  • Loading branch information
jcubic committed Oct 20, 2023
1 parent 5416334 commit 6527660
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 55 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -8,7 +8,7 @@
[![npm](https://img.shields.io/badge/npm-DEV-blue.svg)](https://www.npmjs.com/package/jquery.terminal)
![bower](https://img.shields.io/badge/bower-DEV-yellow.svg)
[![Build and test](https://github.com/jcubic/jquery.terminal/actions/workflows/build.yaml/badge.svg?branch=devel&event=push)](https://github.com/jcubic/jquery.terminal/actions/workflows/build.yaml)
[![Coverage Status](https://coveralls.io/repos/github/jcubic/jquery.terminal/badge.svg?branch=devel&75da0f6ae07388cf17379f7dcd13e04f)](https://coveralls.io/github/jcubic/jquery.terminal?branch=devel)
[![Coverage Status](https://coveralls.io/repos/github/jcubic/jquery.terminal/badge.svg?branch=devel&e7c0298275d2f8608b0d02bda85fe16d)](https://coveralls.io/github/jcubic/jquery.terminal?branch=devel)
![NPM Downloads](https://img.shields.io/npm/dm/jquery.terminal.svg?style=flat)
[![jsDelivr Downloads](https://data.jsdelivr.com/v1/package/npm/jquery.terminal/badge?style=rounded&n=1)](https://www.jsdelivr.com/package/npm/jquery.terminal)
[![Paid Support](https://img.shields.io/badge/paid-support-354465.svg)](https://support.jcubic.pl/)
Expand Down
24 changes: 24 additions & 0 deletions __tests__/terminal.spec.js
Expand Up @@ -5663,6 +5663,30 @@ describe('Terminal plugin', function() {
done();
}, 400);
});
it('should render greetings and auth once #897', async () => {
var term = $('<div/>').terminal($.noop, {
login(username, password) {
if (username === 'guest' && password === 'guest') {
return '__TOKEN__';
}
return null;
},
greetings() {
return 'HELLO THERE';
},
memory: true,
prompt() {
return `${this.login_name()}$`
}
});
await term.exec(['guest', 'guest']);
await delay(100);
expect(output(term)).toEqual([
'login: guest',
'password: *****',
'HELLO THERE'
]);
});
});
describe('pause/paused/resume', function() {
var term = $('<div/>').appendTo('body').terminal();
Expand Down
30 changes: 13 additions & 17 deletions js/jquery.terminal-2.37.2.js
Expand Up @@ -41,7 +41,7 @@
*
* broken image by Sophia Bai from the Noun Project (CC-BY)
*
* Date: Fri, 20 Oct 2023 10:59:11 +0000
* Date: Fri, 20 Oct 2023 12:55:07 +0000
*/
/* global define, Map */
/* eslint-disable */
Expand Down Expand Up @@ -5278,7 +5278,7 @@
// -------------------------------------------------------------------------
$.terminal = {
version: 'DEV',
date: 'Fri, 20 Oct 2023 10:59:11 +0000',
date: 'Fri, 20 Oct 2023 12:55:07 +0000',
// colors from https://www.w3.org/wiki/CSS/Properties/color/keywords
color_names: [
'transparent', 'currentcolor', 'black', 'silver', 'gray', 'white',
Expand Down Expand Up @@ -8441,18 +8441,16 @@
self.echo(settings.greetings);
} else if (type === 'function') {
self.echo(function() {
if (settings.greetings) {
try {
var defer = new $.Deferred();
var ret = settings.greetings.call(self, defer.resolve);
if (ret) {
defer.resolve(ret);
}
return defer.promise();
} catch (e) {
settings.greetings = null;
display_exception(e, 'greetings');
try {
var defer = new $.Deferred();
var ret = settings.greetings.call(self, defer.resolve);
if (ret) {
defer.resolve(ret);
}
return defer.promise();
} catch (e) {
settings.greetings = null;
display_exception(e, 'greetings');
}
});
} else {
Expand Down Expand Up @@ -8762,7 +8760,7 @@
prompt = context_callback_proxy(prompt);
}
var is_dynamic_prompt = is_function(interpreter.prompt);
if (prompt !== command_line.prompt() || is_dynamic_prompt) {
if (is_dynamic_prompt || prompt !== command_line.prompt()) {
if (is_dynamic_prompt) {
// prevent flicker of old prompt until async prompt finishes
command_line.prompt('');
Expand Down Expand Up @@ -8877,9 +8875,7 @@
// for case when showing long error before init
if (echo_delay.length) {
// for case when greetting is async function
$.when.apply($, echo_delay).then(self.refresh);
} else {
self.refresh();
$.when.apply($, echo_delay);
}
}
function next() {
Expand Down
4 changes: 2 additions & 2 deletions js/jquery.terminal-2.37.2.min.js

Large diffs are not rendered by default.

26 changes: 11 additions & 15 deletions js/jquery.terminal-src.js
Expand Up @@ -8441,18 +8441,16 @@
self.echo(settings.greetings);
} else if (type === 'function') {
self.echo(function() {
if (settings.greetings) {
try {
var defer = new $.Deferred();
var ret = settings.greetings.call(self, defer.resolve);
if (ret) {
defer.resolve(ret);
}
return defer.promise();
} catch (e) {
settings.greetings = null;
display_exception(e, 'greetings');
try {
var defer = new $.Deferred();
var ret = settings.greetings.call(self, defer.resolve);
if (ret) {
defer.resolve(ret);
}
return defer.promise();
} catch (e) {
settings.greetings = null;
display_exception(e, 'greetings');
}
});
} else {
Expand Down Expand Up @@ -8762,7 +8760,7 @@
prompt = context_callback_proxy(prompt);
}
var is_dynamic_prompt = is_function(interpreter.prompt);
if (prompt !== command_line.prompt() || is_dynamic_prompt) {
if (is_dynamic_prompt || prompt !== command_line.prompt()) {
if (is_dynamic_prompt) {
// prevent flicker of old prompt until async prompt finishes
command_line.prompt('');
Expand Down Expand Up @@ -8877,9 +8875,7 @@
// for case when showing long error before init
if (echo_delay.length) {
// for case when greetting is async function
$.when.apply($, echo_delay).then(self.refresh);
} else {
self.refresh();
$.when.apply($, echo_delay);
}
}
function next() {
Expand Down
30 changes: 13 additions & 17 deletions js/jquery.terminal.js
Expand Up @@ -41,7 +41,7 @@
*
* broken image by Sophia Bai from the Noun Project (CC-BY)
*
* Date: Fri, 20 Oct 2023 10:59:11 +0000
* Date: Fri, 20 Oct 2023 12:55:07 +0000
*/
/* global define, Map */
/* eslint-disable */
Expand Down Expand Up @@ -5278,7 +5278,7 @@
// -------------------------------------------------------------------------
$.terminal = {
version: 'DEV',
date: 'Fri, 20 Oct 2023 10:59:11 +0000',
date: 'Fri, 20 Oct 2023 12:55:07 +0000',
// colors from https://www.w3.org/wiki/CSS/Properties/color/keywords
color_names: [
'transparent', 'currentcolor', 'black', 'silver', 'gray', 'white',
Expand Down Expand Up @@ -8441,18 +8441,16 @@
self.echo(settings.greetings);
} else if (type === 'function') {
self.echo(function() {
if (settings.greetings) {
try {
var defer = new $.Deferred();
var ret = settings.greetings.call(self, defer.resolve);
if (ret) {
defer.resolve(ret);
}
return defer.promise();
} catch (e) {
settings.greetings = null;
display_exception(e, 'greetings');
try {
var defer = new $.Deferred();
var ret = settings.greetings.call(self, defer.resolve);
if (ret) {
defer.resolve(ret);
}
return defer.promise();
} catch (e) {
settings.greetings = null;
display_exception(e, 'greetings');
}
});
} else {
Expand Down Expand Up @@ -8762,7 +8760,7 @@
prompt = context_callback_proxy(prompt);
}
var is_dynamic_prompt = is_function(interpreter.prompt);
if (prompt !== command_line.prompt() || is_dynamic_prompt) {
if (is_dynamic_prompt || prompt !== command_line.prompt()) {
if (is_dynamic_prompt) {
// prevent flicker of old prompt until async prompt finishes
command_line.prompt('');
Expand Down Expand Up @@ -8877,9 +8875,7 @@
// for case when showing long error before init
if (echo_delay.length) {
// for case when greetting is async function
$.when.apply($, echo_delay).then(self.refresh);
} else {
self.refresh();
$.when.apply($, echo_delay);
}
}
function next() {
Expand Down
4 changes: 2 additions & 2 deletions js/jquery.terminal.min.js

Large diffs are not rendered by default.

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

Large diffs are not rendered by default.

0 comments on commit 6527660

Please sign in to comment.