Skip to content

Commit

Permalink
fix another edge case in #709 + refactor #717
Browse files Browse the repository at this point in the history
* fix case when echo two lines with echo newline and flush false
* refactor get_output_buffer function
* rename clear_buffer
  • Loading branch information
jcubic committed Dec 14, 2021
1 parent 84e2d43 commit 80754fb
Show file tree
Hide file tree
Showing 10 changed files with 155 additions and 37 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Expand Up @@ -2,7 +2,7 @@
### Features
* add `span` to xml formatting
* allow to use class attribute in XML formatting (`span`, `link`, and `img`)
* new API methods `buffer_clean()` and `get_output_buffer()` [#717](https://github.com/jcubic/jquery.terminal/issues/717)
* new API methods `clear_buffer()` and `get_output_buffer()` [#717](https://github.com/jcubic/jquery.terminal/issues/717)
### Bugfix
* fix bug on Android with GBoard keyboard [#693](https://github.com/jcubic/jquery.terminal/issues/693)
* fix refresh when scrollbar appear (using `scrollbar-gutter`)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -12,7 +12,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&5507ee84c3031a012991aaf4bfcff76d)](https://coveralls.io/github/jcubic/jquery.terminal?branch=devel)
[![Coverage Status](https://coveralls.io/repos/github/jcubic/jquery.terminal/badge.svg?branch=devel&f1ed231cfa14ccdffd19a376c6e07da2)](https://coveralls.io/github/jcubic/jquery.terminal?branch=devel)
![downloads](https://img.shields.io/npm/dm/jquery.terminal.svg?style=flat)
[![Paid Support](https://data.jsdelivr.com/v1/package/npm/jquery.terminal/badge?style=rounded)](https://www.jsdelivr.com/package/npm/jquery.terminal)
[![](https://img.shields.io/badge/paid-support-354465.svg)](https://support.jcubic.pl/)
Expand Down
40 changes: 40 additions & 0 deletions __tests__/__snapshots__/terminal.spec.js.snap
Expand Up @@ -47,6 +47,26 @@ exports[`Terminal plugin events enter text text should appear and interpreter fu
exports[`Terminal plugin jQuery Terminal methods generic import/export view should import view 1`] = `"<div data-index=\\"0\\"><div style=\\"width: 100%;\\"><span data-text=\\"Hello&nbsp;World!\\">Hello&nbsp;World!</span></div></div><div data-index=\\"1\\" class=\\"terminal-command\\" role=\\"presentation\\" aria-hidden=\\"true\\"><div style=\\"width: 100%;\\"><span data-text=\\">&nbsp;foo\\">&gt;&nbsp;foo</span></div></div><div data-index=\\"2\\" class=\\"terminal-command\\" role=\\"presentation\\" aria-hidden=\\"true\\"><div style=\\"width: 100%;\\"><span data-text=\\">&nbsp;bar\\">&gt;&nbsp;bar</span></div></div>"`;
exports[`Terminal plugin jQuery Terminal methods output_buffer should return buffer with flush and newline 1`] = `
"foo bar
lorem ipsum"
`;
exports[`Terminal plugin jQuery Terminal methods output_buffer should return buffer with flush and newline 2`] = `
"<div><span data-text=\\"foo&nbsp;\\">foo&nbsp;</span><span data-text=\\"bar\\">bar</span></div>
<div><span data-text=\\"lorem\\">lorem</span><span data-text=\\"&nbsp;ipsum\\">&nbsp;ipsum</span></div>"
`;
exports[`Terminal plugin jQuery Terminal methods output_buffer should return clear the buffer 1`] = `
"foo bar
lorem ipsum"
`;
exports[`Terminal plugin jQuery Terminal methods output_buffer should return clear the buffer 2`] = `
"<div><span data-text=\\"foo&nbsp;\\">foo&nbsp;</span><span data-text=\\"bar\\">bar</span></div>
<div><span data-text=\\"lorem\\">lorem</span><span data-text=\\"&nbsp;ipsum\\">&nbsp;ipsum</span></div>"
`;
exports[`Terminal plugin prompt should format prompt 1`] = `"<span style=\\"font-weight:bold;text-decoration:underline;color:#fff;--color:#fff;--original-color:#fff;\\" data-text=\\">>>\\"><span style=\\"width: 3ch;\\">&gt;&gt;&gt;</span></span><span data-text=\\"&nbsp;\\"><span style=\\"width: 1ch;\\">&nbsp;</span></span>"`;
exports[`Terminal plugin prompt should format prompt 2`] = `"<span style=\\"font-weight:bold;text-decoration:underline;color:#fff;--color:#fff;--original-color:#fff;\\" data-text=\\">>>\\"><span style=\\"width: 3ch;\\">&gt;&gt;&gt;</span></span><span data-text=\\"&nbsp;\\"><span style=\\"width: 1ch;\\">&nbsp;</span></span>"`;
Expand Down Expand Up @@ -568,3 +588,23 @@ Array [
"foobar&nbsp;&nbsp;ba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;br",
]
`;
exports[`extensions echo_newline should print mixed newline with !flush 1`] = `
"foo, bar
baz, quux"
`;
exports[`extensions echo_newline should print mixed newline with !flush 2`] = `
Array [
"foo, bar",
"baz, quux",
]
`;
exports[`extensions echo_newline should print multiple !flush && !newline 1`] = `"foo, bar, baz, "`;
exports[`extensions echo_newline should print multiple !flush && !newline 2`] = `
Array [
"foo, bar, baz, ",
]
`;
40 changes: 38 additions & 2 deletions __tests__/terminal.spec.js
Expand Up @@ -2712,8 +2712,19 @@ describe('extensions', function() {
term.echo('bar, ', {newline: false, flush: false});
term.echo('baz, ', {newline: false, flush: false});
term.flush();
expect(term.get_output()).toEqual('foo, bar, baz, ');
expect(output(term)).toEqual(['foo, bar, baz, ']);
expect(term.get_output()).toMatchSnapshot();
expect(output(term)).toMatchSnapshot();
});
it('should print mixed newline with !flush', function() {
term.echo('foo, ', {newline: false, flush: false});
term.echo('bar', {newline: false, flush: false});
term.echo('', {flush: false});
term.echo('baz, ', {newline: false, flush: false});
term.echo('quux', {newline: false, flush: false});
term.echo('', {flush: false});
term.flush();
expect(term.get_output()).toMatchSnapshot();
expect(output(term)).toMatchSnapshot();
});
});
describe('autocomplete_menu', function() {
Expand Down Expand Up @@ -5664,6 +5675,31 @@ describe('Terminal plugin', function() {
expect(term.find("[data-index='1']").children().last().text()).toEqual(nbsp("ccc> !!!"));
});
});
describe('output_buffer', function() {
var term = $('<div/>').terminal($.noop, {greetings: false});
beforeEach(() => {
term.clear();
});
it('should return buffer with flush and newline', () => {
term.echo('foo ', {newline: false, flush: false});
term.echo('bar', {flush: false});
term.echo('lorem', {newline: false, flush: false});
term.echo(' ipsum', {flush: false});
expect(term.get_output_buffer()).toMatchSnapshot();
expect(term.get_output_buffer({html: true})).toMatchSnapshot();
});
it('should return clear the buffer', () => {
term.echo('foo ', {newline: false, flush: false});
term.echo('bar', {flush: false});
term.echo('lorem', {newline: false, flush: false});
term.echo(' ipsum', {flush: false});
expect(term.get_output_buffer()).toMatchSnapshot();
expect(term.get_output_buffer({html: true})).toMatchSnapshot();
term.clear_buffer();
expect(term.get_output()).toEqual('');
expect(output(term)).toEqual([]);
});
});
describe('last_index', function() {
var term = $('<div/>').terminal($.noop, {greetings: false});
it('should return proper index', function() {
Expand Down
34 changes: 24 additions & 10 deletions js/jquery.terminal-2.29.5.js
Expand Up @@ -41,7 +41,7 @@
*
* broken image by Sophia Bai from the Noun Project (CC-BY)
*
* Date: Mon, 13 Dec 2021 22:47:44 +0000
* Date: Tue, 14 Dec 2021 12:05:15 +0000
*/
/* global define, Map */
/* eslint-disable */
Expand Down Expand Up @@ -5116,7 +5116,7 @@
// -------------------------------------------------------------------------
$.terminal = {
version: 'DEV',
date: 'Mon, 13 Dec 2021 22:47:44 +0000',
date: 'Tue, 14 Dec 2021 12:05:15 +0000',
// colors from https://www.w3.org/wiki/CSS/Properties/color/keywords
color_names: [
'transparent', 'currentcolor', 'black', 'silver', 'gray', 'white',
Expand Down Expand Up @@ -8889,6 +8889,7 @@
// -------------------------------------------------------------
clear: function() {
if (fire_event('onClear') !== false) {
buffer.clear();
lines.clear(function(i) {
return get_node(i);
});
Expand Down Expand Up @@ -9916,6 +9917,7 @@
wrapper = $('<div/>');
snapshot = [];
} else if (first) {
first = false;
appending_to_partial = true;
wrapper = partial;
}
Expand Down Expand Up @@ -10907,29 +10909,41 @@
// -------------------------------------------------------------
get_output_buffer: function(options) {
var settings = $.extend({
render: true
html: false
}, options);
var output = [];
var result = [];
var append = false;
buffer.forEach(function(data) {
if (data) {
if (is_function(data.finalize)) {
append = !data.newline;
} else {
console.log(data);
var output;
if (settings.html) {
output = data.line;
} else {
output = data.raw;
}
if (append) {
var last = output.length - 1;
output[last] += data.raw;
var last = result.length - 1;
result[last] += output;
} else {
output.push(data.raw);
result.push(output);
}
}
}
});
return output;
if (settings.html) {
return result.map(function(line) {
return '<div>' + line + '</div>';
}).join('\n');
}
return result.join('\n');
},
// -------------------------------------------------------------
buffer_clean: function() {
// :: clear flush buffer
// -------------------------------------------------------------
clear_buffer: function() {
buffer.clear();
return self;
}
Expand Down
4 changes: 2 additions & 2 deletions js/jquery.terminal-2.29.5.min.js

Large diffs are not rendered by default.

30 changes: 22 additions & 8 deletions js/jquery.terminal-src.js
Expand Up @@ -8889,6 +8889,7 @@
// -------------------------------------------------------------
clear: function() {
if (fire_event('onClear') !== false) {
buffer.clear();
lines.clear(function(i) {
return get_node(i);
});
Expand Down Expand Up @@ -9916,6 +9917,7 @@
wrapper = $('<div/>');
snapshot = [];
} else if (first) {
first = false;
appending_to_partial = true;
wrapper = partial;
}
Expand Down Expand Up @@ -10907,29 +10909,41 @@
// -------------------------------------------------------------
get_output_buffer: function(options) {
var settings = $.extend({
render: true
html: false
}, options);
var output = [];
var result = [];
var append = false;
buffer.forEach(function(data) {
if (data) {
if (is_function(data.finalize)) {
append = !data.newline;
} else {
console.log(data);
var output;
if (settings.html) {
output = data.line;
} else {
output = data.raw;
}
if (append) {
var last = output.length - 1;
output[last] += data.raw;
var last = result.length - 1;
result[last] += output;
} else {
output.push(data.raw);
result.push(output);
}
}
}
});
return output;
if (settings.html) {
return result.map(function(line) {
return '<div>' + line + '</div>';
}).join('\n');
}
return result.join('\n');
},
// -------------------------------------------------------------
buffer_clean: function() {
// :: clear flush buffer
// -------------------------------------------------------------
clear_buffer: function() {
buffer.clear();
return self;
}
Expand Down
34 changes: 24 additions & 10 deletions js/jquery.terminal.js
Expand Up @@ -41,7 +41,7 @@
*
* broken image by Sophia Bai from the Noun Project (CC-BY)
*
* Date: Mon, 13 Dec 2021 22:47:44 +0000
* Date: Tue, 14 Dec 2021 12:05:15 +0000
*/
/* global define, Map */
/* eslint-disable */
Expand Down Expand Up @@ -5116,7 +5116,7 @@
// -------------------------------------------------------------------------
$.terminal = {
version: 'DEV',
date: 'Mon, 13 Dec 2021 22:47:44 +0000',
date: 'Tue, 14 Dec 2021 12:05:15 +0000',
// colors from https://www.w3.org/wiki/CSS/Properties/color/keywords
color_names: [
'transparent', 'currentcolor', 'black', 'silver', 'gray', 'white',
Expand Down Expand Up @@ -8889,6 +8889,7 @@
// -------------------------------------------------------------
clear: function() {
if (fire_event('onClear') !== false) {
buffer.clear();
lines.clear(function(i) {
return get_node(i);
});
Expand Down Expand Up @@ -9916,6 +9917,7 @@
wrapper = $('<div/>');
snapshot = [];
} else if (first) {
first = false;
appending_to_partial = true;
wrapper = partial;
}
Expand Down Expand Up @@ -10907,29 +10909,41 @@
// -------------------------------------------------------------
get_output_buffer: function(options) {
var settings = $.extend({
render: true
html: false
}, options);
var output = [];
var result = [];
var append = false;
buffer.forEach(function(data) {
if (data) {
if (is_function(data.finalize)) {
append = !data.newline;
} else {
console.log(data);
var output;
if (settings.html) {
output = data.line;
} else {
output = data.raw;
}
if (append) {
var last = output.length - 1;
output[last] += data.raw;
var last = result.length - 1;
result[last] += output;
} else {
output.push(data.raw);
result.push(output);
}
}
}
});
return output;
if (settings.html) {
return result.map(function(line) {
return '<div>' + line + '</div>';
}).join('\n');
}
return result.join('\n');
},
// -------------------------------------------------------------
buffer_clean: function() {
// :: clear flush buffer
// -------------------------------------------------------------
clear_buffer: function() {
buffer.clear();
return self;
}
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 80754fb

Please sign in to comment.