Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe3019765b | ||
|
|
d1cf6854b5 | ||
|
|
2eaa244907 | ||
|
|
e1e5c1c44f | ||
|
|
45ed27d329 | ||
|
|
a490051dda | ||
|
|
edc80acd4d | ||
|
|
6b98d0999b | ||
|
|
57c4571204 | ||
|
|
6580cdec6b | ||
|
|
49b1b381a1 | ||
|
|
e8b787d057 | ||
|
|
490e46ce0c | ||
|
|
bc3984a0bf | ||
|
|
478c054075 | ||
|
|
f65aeba684 | ||
|
|
4d16c5e9e8 | ||
|
|
8c4e6b0e5b | ||
|
|
2660e0ecff | ||
|
|
f24a94b341 | ||
|
|
5dc38008f3 | ||
|
|
98d25607a9 | ||
|
|
55f885809e | ||
|
|
37a1220ee7 | ||
|
|
9518d20c4e | ||
|
|
b4e52b2334 | ||
|
|
0f7365999f | ||
|
|
83ef7668be | ||
|
|
aaf0991195 | ||
|
|
8263b5f0ba | ||
|
|
c1d20afc64 | ||
|
|
da604ff69c | ||
|
|
eeda380b67 | ||
|
|
41c2c07a74 | ||
|
|
80450450e9 | ||
|
|
c9b672e0c6 | ||
|
|
8830820821 | ||
|
|
e39d10e12f | ||
|
|
6fec430e32 | ||
|
|
d81e304ce7 | ||
|
|
052dc15d55 | ||
|
|
8d54735321 | ||
|
|
31cc0c30c1 | ||
|
|
510de73996 | ||
|
|
2547858efb | ||
|
|
4c4684295e | ||
|
|
4f144dc6eb | ||
|
|
3638eb2d4f | ||
|
|
0c81ec7e95 | ||
|
|
bc424b2f37 | ||
|
|
0b90feab1e | ||
|
|
b798463d27 | ||
|
|
fc7cf6b917 | ||
|
|
a6899c74d8 | ||
|
|
935e972348 | ||
|
|
923bb05b8d | ||
|
|
354b857bbe | ||
|
|
e18416a636 | ||
|
|
b0020fc0ac | ||
|
|
c90c24cecf | ||
|
|
0637191d77 | ||
|
|
95de0e83b9 | ||
|
|
9c4ff54f22 | ||
|
|
8478aa7a51 | ||
|
|
dbec3a32f8 | ||
|
|
b7438d57cf | ||
|
|
4b46a777d7 | ||
|
|
3921457bf3 | ||
|
|
86653f70a8 | ||
|
|
b96286be51 | ||
|
|
05cbe41d39 | ||
|
|
54f616623a | ||
|
|
6cefa13a4e | ||
|
|
e262ba473e | ||
|
|
280a100c12 | ||
|
|
d9e9fa3ff7 | ||
|
|
aaa7e91855 | ||
|
|
3d9aefbb2d | ||
|
|
e2910ca5c8 | ||
|
|
36a155dd1a | ||
|
|
8cb410bd9c | ||
|
|
79cdaa8d3b | ||
|
|
1dbcf70cee | ||
|
|
29143baa3a | ||
|
|
11c9dd3288 | ||
|
|
9a8916ff77 | ||
|
|
cb7c6151e8 | ||
|
|
aa5a9911de | ||
|
|
d7f6f96ba6 | ||
|
|
2fbc0be98d | ||
|
|
664c0f0f77 | ||
|
|
0ca1318284 | ||
|
|
f2befc0c06 | ||
|
|
6c3af6e19a | ||
|
|
d81df46453 | ||
|
|
a90493a9af | ||
|
|
5c81fe6cdc | ||
|
|
59759c718b | ||
|
|
700a10f3f4 | ||
|
|
8ece306dbe | ||
|
|
a27a4e627e | ||
|
|
2fc723b3ac | ||
|
|
1586363b2e | ||
|
|
c2b3853aa7 | ||
|
|
65afb34b8b | ||
|
|
ac71f13361 | ||
|
|
3d2687768f | ||
|
|
d3b25364cc | ||
|
|
5d49db54ee | ||
|
|
81b6469aad | ||
|
|
1d76cc921a | ||
|
|
6026bd44c3 | ||
|
|
7bc7bb0ab9 | ||
|
|
2e8410da4b | ||
|
|
cf6c11db14 | ||
|
|
ed6e2e5055 | ||
|
|
1ee6af2f82 | ||
|
|
ef62b3bf55 | ||
|
|
76faad67d9 | ||
|
|
a4b06ea86e | ||
|
|
355d5970a6 | ||
|
|
a53ca789ea | ||
|
|
6fa08d3cc0 | ||
|
|
73b804f42d | ||
|
|
151eac6f4f | ||
|
|
a6efda6120 | ||
|
|
822b31f7b7 | ||
|
|
0684e05877 | ||
|
|
8346ab12be | ||
|
|
00554390e1 | ||
|
|
5cdd1bee42 | ||
|
|
db6695435d | ||
|
|
899929afc6 | ||
|
|
a1fcafd50c | ||
|
|
a622b97a94 | ||
|
|
e86aebaa41 | ||
|
|
c1ec68091a | ||
|
|
c1ad9dba2a | ||
|
|
b1449880be | ||
|
|
b6c886837f | ||
|
|
5e639c75f7 | ||
|
|
a56edd65a7 | ||
|
|
09c9cb4508 | ||
|
|
058de25977 | ||
|
|
eb57cc3e9e | ||
|
|
1b2bac7aef | ||
|
|
b06eb44c45 | ||
|
|
5bf81934cd | ||
|
|
635cf268d4 | ||
|
|
3c2614ade7 | ||
|
|
265057a716 | ||
|
|
06b9f1db87 | ||
|
|
356a14bb16 | ||
|
|
be8ddb11db | ||
|
|
108534a4fe | ||
|
|
0a08d6389a | ||
|
|
f36ba01460 | ||
|
|
22af08d86e | ||
|
|
2ab06779f9 | ||
|
|
0ac093e19c | ||
|
|
e693c9e86b | ||
|
|
7cfc108fb4 | ||
|
|
2a126cf1dc | ||
|
|
0e732a7d41 | ||
|
|
66688c19a6 | ||
|
|
966f5c1f32 | ||
|
|
ea8bd8dc1c | ||
|
|
56da538ca0 | ||
|
|
42d5cb671e | ||
|
|
95f68a41d7 | ||
|
|
4c4c392479 | ||
|
|
907d9de965 | ||
|
|
6f69207a67 | ||
|
|
29be4f6a92 | ||
|
|
b1214063d2 | ||
|
|
da4e3e6e9f | ||
|
|
e0c28bc7d2 | ||
|
|
58259f8bd9 | ||
|
|
4828c4a6fa | ||
|
|
3e29a03f87 | ||
|
|
fa86f31f36 | ||
|
|
feb2b958a4 | ||
|
|
e3d69d78a0 | ||
|
|
ef5e393510 | ||
|
|
a9a131699f | ||
|
|
3813e3f6df | ||
|
|
499c8288eb | ||
|
|
91d22e3d84 | ||
|
|
a8174398f5 | ||
|
|
0dafd0a38b | ||
|
|
13d46476c8 | ||
|
|
bc2dce7a50 | ||
|
|
3f467b33e4 | ||
|
|
313d1e6fec | ||
|
|
a4485b8c09 | ||
|
|
a2389d5c5b | ||
|
|
8243eef67c | ||
|
|
0b54df14e2 | ||
|
|
79c07d436e | ||
|
|
40fdd00b9e | ||
|
|
65f5f1c38c | ||
|
|
c4da8325ac | ||
|
|
c815310418 | ||
|
|
9b6c4e046f | ||
|
|
94586b669f | ||
|
|
5f62c7607d | ||
|
|
ce681fe481 | ||
|
|
cdcedd6b34 | ||
|
|
1f49879298 | ||
|
|
691ab2b02c | ||
|
|
0cf9f1d536 | ||
|
|
3d743e5bdb | ||
|
|
bc824ad6a5 | ||
|
|
b9872c9a67 | ||
|
|
ea0c2285bc | ||
|
|
a611fee7af | ||
|
|
c2502bf0b0 | ||
|
|
e8d784a47d | ||
|
|
8bdc8fb7a2 | ||
|
|
aca7ab63e8 | ||
|
|
c2b765f3ff | ||
|
|
068c0743a1 | ||
|
|
0a58628f74 | ||
|
|
b225866c27 | ||
|
|
872c007a29 | ||
|
|
402cebc76c | ||
|
|
3656617044 | ||
|
|
5538481833 | ||
|
|
a52b9feeea | ||
|
|
136c82f9ad | ||
|
|
ead45fe4d0 | ||
|
|
69982dc16a | ||
|
|
d030206195 | ||
|
|
30cac21003 | ||
|
|
cd21a24ee4 | ||
|
|
73d3164426 | ||
|
|
cf32452917 | ||
|
|
403fd3cd4f | ||
|
|
6899e01fc1 | ||
|
|
6181262c76 | ||
|
|
2114bc4837 | ||
|
|
1897f0f51a | ||
|
|
91aa8c51fc | ||
|
|
903ed1917e | ||
|
|
ac23be134b | ||
|
|
ae741348a6 | ||
|
|
052e0b5a94 | ||
|
|
6c06d83525 | ||
|
|
e442512087 | ||
|
|
0e3518409e | ||
|
|
9bb675462f | ||
|
|
948eedba89 | ||
|
|
0c19bc9c28 | ||
|
|
75b91c618e | ||
|
|
e3051ea1dc | ||
|
|
48391c3108 | ||
|
|
3a8327de66 | ||
|
|
ea8dbbd29f | ||
|
|
4eb356f6be | ||
|
|
67962a5e55 | ||
|
|
e960a0a82c | ||
|
|
66c891df5b | ||
|
|
fb90c98f81 | ||
|
|
b69ff5d31a | ||
|
|
a883029044 | ||
|
|
2f168da1dc | ||
|
|
f87213790e | ||
|
|
7b199ac17f | ||
|
|
5c2d5dcd27 | ||
|
|
1e728d453b | ||
|
|
46b0857ef6 | ||
|
|
0dc24cf800 | ||
|
|
8e07af04e3 | ||
|
|
da1e3b40cc | ||
|
|
9506c01824 | ||
|
|
1f38c2f467 | ||
|
|
6f6f17f5dc | ||
|
|
a35cf02208 | ||
|
|
1c3028c59f | ||
|
|
a17950290c | ||
|
|
ff31f34551 | ||
|
|
0bfdff0b39 | ||
|
|
247b63a0e3 | ||
|
|
29a7ee30f3 | ||
|
|
e77f1a9287 | ||
|
|
7934e05083 | ||
|
|
e123dd1849 | ||
|
|
36778186e1 | ||
|
|
e518ea04c5 | ||
|
|
17731c3de3 | ||
|
|
b30cb58ff4 | ||
|
|
923ea7247c | ||
|
|
5619abe12d | ||
|
|
2d1a1bfb76 | ||
|
|
48b37453ea | ||
|
|
bc3470c272 | ||
|
|
a3297b0017 | ||
|
|
deb47e29bf | ||
|
|
5a4851630e | ||
|
|
fd4e9d8a1b | ||
|
|
8427f7490d | ||
|
|
7973b26e7a | ||
|
|
c94e87428d | ||
|
|
7ccac09b6b | ||
|
|
c5a6d96a62 | ||
|
|
4f81cdfe8c | ||
|
|
8039fd35e6 | ||
|
|
24a98f2fa8 | ||
|
|
66d41feab6 | ||
|
|
c92a2f964a | ||
|
|
9cabb93b8b | ||
|
|
ee4b71c8e7 | ||
|
|
b8732a25a3 | ||
|
|
32a3c9812d | ||
|
|
ae72e1c51e | ||
|
|
6dd6d0391f | ||
|
|
36a723c4cc | ||
|
|
cf7237d2a4 | ||
|
|
06b54585a1 | ||
|
|
f8ece108c6 | ||
|
|
4919c40b57 | ||
|
|
dc1e727613 | ||
|
|
b57b94ad0b | ||
|
|
6ee8e9126a | ||
|
|
5cd189e2e0 | ||
|
|
b0653fec68 | ||
|
|
70764a74af | ||
|
|
1f444b1913 | ||
|
|
bf95333275 | ||
|
|
2c9dbc6191 | ||
|
|
de4fcb9241 | ||
|
|
bc3bdacdaa | ||
|
|
62fea4d3ed | ||
|
|
076156b66e | ||
|
|
3fc500b291 | ||
|
|
882d7e4a30 | ||
|
|
848c85c1eb | ||
|
|
81d93b8fbf | ||
|
|
42e5b3473d | ||
|
|
510940389c | ||
|
|
9323833fcc | ||
|
|
6588e9e01b | ||
|
|
15c73ef94f | ||
|
|
c88824155f | ||
|
|
1998675dc0 | ||
|
|
fe7b424ab8 | ||
|
|
a91380a76f | ||
|
|
fd18f7cba7 | ||
|
|
4a9143ab31 | ||
|
|
d3650d9d80 | ||
|
|
dff3d16831 | ||
|
|
d601f0aec2 | ||
|
|
3d1bb2c60f | ||
|
|
5953bbab42 | ||
|
|
7aff45c2dc | ||
|
|
a224ed7cc7 | ||
|
|
1291dc5571 | ||
|
|
6a0b9bd209 | ||
|
|
d93a80398d | ||
|
|
129633a66d | ||
|
|
18e1134e61 | ||
|
|
2cb6593b6b | ||
|
|
5961bdbd9e | ||
|
|
0db42e2056 | ||
|
|
137847e85c | ||
|
|
5ce39d3c81 | ||
|
|
e98794a0a7 | ||
|
|
640cd18515 | ||
|
|
c6d4c73c8a | ||
|
|
575c10114b | ||
|
|
a57e511fa3 | ||
|
|
38c66e7c1a | ||
|
|
5ca7c7e640 | ||
|
|
6b8b32015d | ||
|
|
6900b4dadf | ||
|
|
bc86664726 | ||
|
|
54cf30ae68 | ||
|
|
41463d8eb5 | ||
|
|
a2161532db | ||
|
|
9a8b7a4d8d | ||
|
|
bfdc468d4b | ||
|
|
b706383687 | ||
|
|
6e9d60d76d | ||
|
|
79c5f64dd4 | ||
|
|
81cbeb1d5a | ||
|
|
877e1e5eb3 | ||
|
|
75ff924be1 | ||
|
|
d69a01193d | ||
|
|
e6c1ba29d9 | ||
|
|
725ec80983 | ||
|
|
7f49bd99c2 | ||
|
|
abe32272dd | ||
|
|
8bc2242d9f | ||
|
|
cea3dd60b6 | ||
|
|
7645bdd418 | ||
|
|
eda9443b1a | ||
|
|
a0d8e3c666 | ||
|
|
f25104789e | ||
|
|
f983e4eb6b | ||
|
|
c984013e1e | ||
|
|
8fdedd4da1 | ||
|
|
e848d6afbe | ||
|
|
81cb30833f | ||
|
|
f520e27f40 | ||
|
|
fa015d91fe | ||
|
|
34e1ee2bf6 | ||
|
|
5ab047ea0f | ||
|
|
9ab17dec80 | ||
|
|
1f930c112b | ||
|
|
42c3eff3f7 | ||
|
|
121143515a | ||
|
|
147fef74c6 | ||
|
|
668b25eeb2 | ||
|
|
34f5b2cb8a | ||
|
|
380f950d4d | ||
|
|
6e2ca0af12 | ||
|
|
fd8b62610f | ||
|
|
4474f29ebf | ||
|
|
cd29c83a64 | ||
|
|
b0164e1f96 | ||
|
|
e4e2fbf885 | ||
|
|
92ac427d00 | ||
|
|
3ba3638ab7 | ||
|
|
2f60c241ee | ||
|
|
ae0d5e4ffb | ||
|
|
68cd79db34 | ||
|
|
8a6bff42c9 | ||
|
|
c88f50125b | ||
|
|
b5fc054fa5 | ||
|
|
0bb5ff8b09 | ||
|
|
1d6f71d680 | ||
|
|
3beb1f5c7c | ||
|
|
c41bd81526 | ||
|
|
2f1380a31d | ||
|
|
d8717d64ba | ||
|
|
96c9d50ee2 | ||
|
|
3027b1d3d4 | ||
|
|
8c94ef8aa0 | ||
|
|
44ed0b9ceb | ||
|
|
8a1f365a7e | ||
|
|
6b46e0837f | ||
|
|
fd51d0acf3 | ||
|
|
0eab4d68f6 | ||
|
|
245f62685a | ||
|
|
f3d375a7a8 | ||
|
|
39328d6e0c | ||
|
|
7b0d0e810c | ||
|
|
9dd1083918 | ||
|
|
aa438c8b83 | ||
|
|
cc7c310eee | ||
|
|
4ab6500c1c | ||
|
|
14c555fcfb | ||
|
|
bf7dc2f8dd | ||
|
|
d583163ac8 | ||
|
|
a3f7b36986 | ||
|
|
7c3189379c | ||
|
|
fcd2ba78bb | ||
|
|
48b9173f2e | ||
|
|
184f49d909 | ||
|
|
b8127b0d16 | ||
|
|
1a50671823 | ||
|
|
996eb1b06f | ||
|
|
ad1a42d210 | ||
|
|
91bf3197ae | ||
|
|
17c3ec0d0c | ||
|
|
8a17ac1baa | ||
|
|
a7aee75025 | ||
|
|
0902b92f79 | ||
|
|
9659f29e50 | ||
|
|
f21d5f25ec | ||
|
|
3b787824d3 | ||
|
|
a0ce9a79a9 | ||
|
|
acefa1a423 | ||
|
|
b42a9039cc | ||
|
|
b3ad3eff8b | ||
|
|
28c85b8fb9 | ||
|
|
e9b0867bd2 | ||
|
|
f52b43b380 | ||
|
|
fd61c8e874 | ||
|
|
c2bb507fe4 | ||
|
|
091854df0e | ||
|
|
a1b91e1f96 | ||
|
|
b95d789821 | ||
|
|
de8947f3d0 | ||
|
|
b1c6a97839 | ||
|
|
8c46f1b6ba | ||
|
|
fb6cbbdaad | ||
|
|
e7ee3ec63c | ||
|
|
a57f55dcbf | ||
|
|
27f7679494 | ||
|
|
26977b370e | ||
|
|
109d467b95 | ||
|
|
63268318ed | ||
|
|
45157d80c6 | ||
|
|
687a5e2efb | ||
|
|
b07c0e4d23 | ||
|
|
9358bf24db | ||
|
|
24932b16d7 | ||
|
|
6cdd5a6405 | ||
|
|
3f5b4f49f2 | ||
|
|
6cf2e8753e | ||
|
|
33cc78c987 | ||
|
|
7cd8d1ec74 | ||
|
|
e0809d526e | ||
|
|
ae3169e6ae | ||
|
|
2878d978c4 | ||
|
|
56ec6ed22c | ||
|
|
f9fce53cc4 | ||
|
|
aee474b53e | ||
|
|
8a0bcf6b79 | ||
|
|
ad25905783 | ||
|
|
0b5ff47cc0 | ||
|
|
da50e33aa8 | ||
|
|
e6b431d92f | ||
|
|
7d1c5d1ac6 | ||
|
|
8903bddb17 | ||
|
|
41c335c0e6 | ||
|
|
2104dccec5 | ||
|
|
db5b908d62 |
@@ -14,6 +14,15 @@ npm-debug.log
|
||||
build/
|
||||
.vscode/
|
||||
.DS_Store
|
||||
fixtures/typings-test/*.js
|
||||
|
||||
# Directories needed for code coverage
|
||||
/coverage/
|
||||
|
||||
# Keep legacy files out of the repo, this can be removed when we merge v3 into master
|
||||
dist/
|
||||
src/utils/TestUtils.ts
|
||||
src/xterm.js
|
||||
|
||||
# Keep the demo builds out of Git
|
||||
demo/dist/
|
||||
|
||||
Vendored
+1
-2
@@ -1,9 +1,8 @@
|
||||
{
|
||||
"search.exclude": {
|
||||
"**/node_modules": true,
|
||||
"**/bower_components": true,
|
||||
"**/dist": true,
|
||||
"**/build": true,
|
||||
"**/lib": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,45 +19,63 @@ Bill Church <billchurch@users.noreply.github.com>
|
||||
Bob Reid <bobreid@Bobs-MacBook-Pro.local>
|
||||
bottleofwater <nison.mael+bottleofwater@gmail.com>
|
||||
Brian Mock <brian@mockbrian.com>
|
||||
Bruno Ribeito <b.m.fernandes.ribeiro@gmail.com>
|
||||
Carson Anderson <carson@betterservers.com>
|
||||
CHaBou <chabup@delean.fr>
|
||||
Christian Budde Christensen <budde377@gmail.com>
|
||||
Christof Marti <chrmarti@microsoft.com>
|
||||
Christopher Jeffrey <chjjeffrey@gmail.com>
|
||||
coderaiser <mnemonic.enemy@gmail.com>
|
||||
Dan Brown <jdanbrown@gmail.com>
|
||||
Daniel Griffen <daniel@griffen.io>
|
||||
Daniel Imms <daimms@microsoft.com>
|
||||
Daniel Risacher <drisacher@gmail.com>
|
||||
Dan Kaplun <dbkaplun@twitch.tv>
|
||||
Darin Morrison <freebroccolo@users.noreply.github.com>
|
||||
dcylabs <dcylabs@gmail.com>
|
||||
Dominik Csapak <d.csapak@proxmox.com>
|
||||
Edgar Andrés Margffoy Tuay <andfoy@gmail.com>
|
||||
Elliot Saba <staticfloat@gmail.com>
|
||||
Exile <exile@chamber.ee>
|
||||
Felipe Gasper <felipe@felipegasper.com>
|
||||
ficristo <ficristo.work@gmail.com>
|
||||
Gary Ritchie <gary@rstudio.com>
|
||||
hiro-su <h.sugipon@gmail.com>
|
||||
Ian Lewis <ianlewis@google.com>
|
||||
imoses <ido@twiggle.com>
|
||||
InDieTasten <indietasten@gmail.com>
|
||||
irokas <akasidiari@inf.uth.gr>
|
||||
Jakob Gillich <jakob@gillich.me>
|
||||
Jean Bruenn <himself@jeanbruenn.info>
|
||||
Jeremy Danyow <jedanyow@microsoft.com>
|
||||
Joao Moreno <jomo@microsoft.com>
|
||||
Joao Moreno <mail@joaomoreno.com>
|
||||
Johannes Zellner <johannes@nebulon.de>
|
||||
Jon Masters <jon.masters@sky.com>
|
||||
Jörg Breitbart <jerch@rockborn.de>
|
||||
Justin Mecham <justin@mecham.me>
|
||||
Kirill Merkushev <lanwen@yandex.ru>
|
||||
Luca <LucaT1@users.noreply.github.com>
|
||||
Lucian Buzzo <lucian.buzzo@gmail.com>
|
||||
Lukas Drgon <lukas.drgon@gmail.com>
|
||||
Maël Nison <nison.mael@gmail.com>
|
||||
Marc Dumais <marc.dumais@ericsson.com>
|
||||
Martin Chloride <i@martincl2.me>
|
||||
Martin Koppehel <martin.koppehel@st.ovgu.de>
|
||||
Martin Wang <jiahaow@ca.ibm.com>
|
||||
Matt Bierner <matb@microsoft.com>
|
||||
Michael Irwin <mikesir87@gmail.com>
|
||||
Mikko Karvonen <mikko.karvonen@arm.com>
|
||||
mofux <t.zilz@mofux.org>
|
||||
Nicolas Ramz <nicolas.ramz@gmail.com>
|
||||
npezza93 <npezza93@gmail.com>
|
||||
Oleksandr Andriienko <oandriie@redhat.com>
|
||||
Paris Kasidiaris <pariskasidiaris@gmail.com>
|
||||
Paris Kasidiaris <paris@sourcelair.com>
|
||||
Peter Baumgarten <me@peterbaumgarten.com>
|
||||
Rick Baker <rick@ricktbaker.com>
|
||||
runarberg <runar@greenqloud.com>
|
||||
Samuel Williams <samuel.williams@oriontransfer.co.nz>
|
||||
Saswat Das <saswatds@users.noreply.github.com>
|
||||
Saul Costa <saul@codevolve.com>
|
||||
Shuanglei Tao <tsl0922@gmail.com>
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
FROM node:6.9
|
||||
FROM node:6
|
||||
MAINTAINER Paris Kasidiaris <paris@sourcelair.com>
|
||||
|
||||
# Set the working directory
|
||||
@@ -6,7 +6,7 @@ WORKDIR /usr/src/app
|
||||
|
||||
# Set an entrypoint, to automatically install node modules
|
||||
ENTRYPOINT ["/bin/bash", "-c", "if [[ ! -d node_modules ]]; then npm install; fi; exec \"${@:0}\";"]
|
||||
CMD ["npm", "run", "dev"]
|
||||
CMD ["npm", "run", "start"]
|
||||
|
||||
# First, install dependencies to improve layer caching
|
||||
COPY package.json /usr/src/app/
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
web: npm run dev
|
||||
@@ -1,6 +1,6 @@
|
||||
# [](https://xtermjs.org)
|
||||
# [](https://xtermjs.org)
|
||||
|
||||
[](https://travis-ci.org/sourcelair/xterm.js) [](https://coveralls.io/github/sourcelair/xterm.js) [](https://gitter.im/sourcelair/xterm.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||
[](https://travis-ci.org/xtermjs/xterm.js) [](https://coveralls.io/github/sourcelair/xterm.js) [](https://gitter.im/sourcelair/xterm.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [](https://www.jsdelivr.com/package/npm/xterm)
|
||||
|
||||
Xterm.js is a terminal front-end component written in JavaScript that works in the browser.
|
||||
|
||||
@@ -19,6 +19,75 @@ It enables applications to provide fully featured terminals to their users and c
|
||||
- Xterm.js is not a terminal application that you can download and use on your computer
|
||||
- Xterm.js is not `bash`. Xterm.js can be connected to processes like `bash` and let you interact with them (provide input, receive output)
|
||||
|
||||
## Getting Started
|
||||
|
||||
First you need to install the module, we ship exclusively through [npm](https://www.npmjs.com/) so you need that installed and then add xterm.js as a dependency by running:
|
||||
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
To start using xterm.js on your browser, add the `xterm.js` and `xterm.css` to the head of your html page. Then create a `<div id="terminal"></div>` onto which xterm can attach itself.
|
||||
|
||||
```html
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="node_modules/xterm/dist/xterm.css" />
|
||||
<script src="node_modules/xterm/dist/xterm.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="terminal"></div>
|
||||
<script>
|
||||
var term = new Terminal();
|
||||
term.open(document.getElementById('terminal'));
|
||||
term.write('Hello from \033[1;3;31mxterm.js\033[0m $ ')
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
Finally instantiate the `Terminal` object and then call the `open` function with the DOM object of the `div`.
|
||||
|
||||
### Importing
|
||||
|
||||
The proposed way to load xterm.js is via the ES6 module syntax.
|
||||
|
||||
```javascript
|
||||
import { Terminal } from 'xterm';
|
||||
```
|
||||
|
||||
*Note: There are currently no typings for addons so you will need to upcast if using TypeScript, eg. `(<any>xterm).fit()`.*
|
||||
|
||||
### Addons
|
||||
|
||||
Addons are JavaScript modules that extend the `Terminal` prototype with new methods and attributes to provide additional functionality. There are a handful available in the main repository in the `src/addons` directory and you can even write your own, by using xterm.js' public API.
|
||||
|
||||
To use an addon, just import the JavaScript module and pass it to `Terminal`'s `applyAddon` method:
|
||||
|
||||
```javascript
|
||||
import { Terminal } from xterm;
|
||||
import * as fit from 'xterm/lib/addons/fit/fit';
|
||||
|
||||
|
||||
Terminal.applyAddon(fit);
|
||||
|
||||
var xterm = new Terminal(); // Instantiate the terminal
|
||||
xterm.fit(); // Use the `fit` method, provided by the `fit` addon
|
||||
```
|
||||
|
||||
## Browser Support
|
||||
|
||||
Since xterm.js is typically implemented as a developer tool, only modern browsers are supported officially. Here is a list of the versions we aim to support:
|
||||
|
||||
- Chrome latest
|
||||
- Edge latest
|
||||
- Firefox latest
|
||||
- Safari latest
|
||||
- IE11
|
||||
|
||||
Xterm.js works seamlessly in Electron apps and may even work on earlier versions of the browsers but these are the browsers we strive to keep working.
|
||||
|
||||
## Real-world uses
|
||||
Xterm.js is used in several world-class applications to provide great terminal experiences.
|
||||
|
||||
@@ -43,31 +112,24 @@ Xterm.js is used in several world-class applications to provide great terminal e
|
||||
- [**SSHy**](https://github.com/stuicey/SSHy): HTML5 Based SSHv2 Web Client with E2E encryption utilising `xterm.js`, SJCL & websockets.
|
||||
- [**JupyterLab**](https://github.com/jupyterlab/jupyterlab): An extensible
|
||||
computational environment for Jupyter, supporting interactive data science and scientific computing across all programming languages.
|
||||
- [**Theia**](https://github.com/theia-ide/theia): Theia is a cloud & desktop IDE framework implemented in TypeScript.
|
||||
- [**Opshell**](https://github.com/ricktbaker/opshell) Ops Helper tool to make life easier working with AWS instances across multiple organizations.
|
||||
- [**Proxmox VE**](https://www.proxmox.com/en/proxmox-ve): Proxmox VE is a complete open-source platform for enterprise virtualization. It uses xterm.js for container terminals and the host shell.
|
||||
- [**Script Runner**](https://github.com/ioquatix/script-runner): Run scripts (or a shell) in Atom.
|
||||
- [**Whack Whack Terminal**](https://github.com/Microsoft/WhackWhackTerminal): Terminal emulator for Visual Studio 2017.
|
||||
- [**VTerm**](https://github.com/vterm/vterm): Extensible terminal emulator based on Electron and React.
|
||||
|
||||
Do you use xterm.js in your application as well? Please [open a Pull Request](https://github.com/sourcelair/xterm.js/pulls) to include it here. We would love to have it in our list.
|
||||
|
||||
## Browser Support
|
||||
|
||||
Since xterm.js is typically implemented as a developer tool, only modern browsers are supported officially. Here is a list of the versions we aim to support:
|
||||
|
||||
- Chrome 48+
|
||||
- Edge 13+
|
||||
- Firefox 44+
|
||||
- Internet Explorer 11+
|
||||
- Opera 35+
|
||||
- Safari 8+
|
||||
|
||||
Xterm.js works seamlessly in Electron apps and may even work on earlier versions of the browsers but these are the browsers we strive to keep working.
|
||||
|
||||
## Demo
|
||||
|
||||
### Linux or macOS
|
||||
|
||||
Run the following commands:
|
||||
First, be sure that a C++ compiler such as GCC-C++ or Clang is installed, then run these commands:
|
||||
|
||||
```
|
||||
$ npm install
|
||||
$ npm start
|
||||
npm install
|
||||
npm start
|
||||
```
|
||||
|
||||
Then open http://0.0.0.0:3000 in a web browser.
|
||||
@@ -76,53 +138,14 @@ Then open http://0.0.0.0:3000 in a web browser.
|
||||
|
||||
First, ensure [node-gyp](https://github.com/nodejs/node-gyp) is installed and configured correctly, then run these commands.
|
||||
|
||||
Note: Do not use ConEmu, as it seems to break the demo for some reason.
|
||||
|
||||
```
|
||||
> npm install
|
||||
> npm start
|
||||
npm install
|
||||
npm start
|
||||
```
|
||||
|
||||
Then open http://127.0.0.1:3000 in a web browser.
|
||||
|
||||
## Getting Started
|
||||
|
||||
To start using xterm.js on your browser, add the `xterm.js` and `xterm.css` to the head of your html page. Then create a `<div id="terminal"></div>` onto which xterm can attach itself.
|
||||
```html
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="bower_components/xterm.js/dist/xterm.css" />
|
||||
<script src="bower_components/xterm.js/dist/xterm.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="terminal"></div>
|
||||
<script>
|
||||
var term = new Terminal();
|
||||
term.open(document.getElementById('terminal'));
|
||||
term.write('Hello from \033[1;3;31mxterm.js\033[0m $ ')
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
Finally instantiate the `Terminal` object and then call the `open` function with the DOM object of the `div`.
|
||||
|
||||
## Addons
|
||||
|
||||
Addons are JavaScript modules that attach functions to the `Terminal` prototype to extend its functionality. There are a handful available in the main repository in the `dist/addons` directory, you can even write your own (though they may break when the internals of xterm.js change across versions).
|
||||
|
||||
To use an addon, just include the JavaScript file after xterm.js and before the `Terminal` object has been instantiated. The function should then be exposed on the `Terminal` object:
|
||||
|
||||
```html
|
||||
<script src="node_modules/dist/xterm.js"></script>
|
||||
<script src="node_modules/dist/addons/fit/fit.js"></script>
|
||||
```
|
||||
|
||||
```js
|
||||
var xterm = new Terminal();
|
||||
// init code...
|
||||
xterm.fit();
|
||||
```
|
||||
*Note: Do not use ConEmu, as it seems to break the demo for some reason.*
|
||||
|
||||
## Releases
|
||||
|
||||
|
||||
+1
-8
@@ -12,12 +12,6 @@ CURRENT_PACKAGE_JSON_VERSION=$(cat package.json \
|
||||
| awk -F: '{ print $2 }' \
|
||||
| sed 's/[",]//g' \
|
||||
| tr -d '[[:space:]]')
|
||||
CURRENT_BOWER_JSON_VERSION=$(cat bower.json \
|
||||
| grep version \
|
||||
| head -1 \
|
||||
| awk -F: '{ print $2 }' \
|
||||
| sed 's/[",]//g' \
|
||||
| tr -d '[[:space:]]')
|
||||
|
||||
# Build xterm.js into `dist`
|
||||
export BUILD_DIR=dist
|
||||
@@ -26,9 +20,8 @@ npm run build
|
||||
# Update AUTHORS file
|
||||
sh bin/generate-authors
|
||||
|
||||
# Update version in package.json and bower.json
|
||||
# Update version in package.json
|
||||
sed -i "s/\"version\": \"$CURRENT_PACKAGE_JSON_VERSION\"/\"version\": \"$NEW_VERSION\"/g" package.json
|
||||
sed -i "s/\"version\": \"$CURRENT_BOWER_JSON_VERSION\"/\"version\": \"$NEW_VERSION\"/g" bower.json
|
||||
|
||||
git commit -S -s -a -m "Bump version to $NEW_VERSION"
|
||||
git tag $NEW_VERSION
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"name": "xterm.js",
|
||||
"version": "2.9.2",
|
||||
"ignore": ["demo", "test", ".gitignore"],
|
||||
"main": [
|
||||
"dist/xterm.js",
|
||||
"dist/xterm.css"
|
||||
]
|
||||
}
|
||||
+6
-2
@@ -17,8 +17,12 @@ app.get('/style.css', function(req, res){
|
||||
res.sendFile(__dirname + '/style.css');
|
||||
});
|
||||
|
||||
app.get('/main.js', function(req, res){
|
||||
res.sendFile(__dirname + '/main.js');
|
||||
app.get('/dist/bundle.js', function(req, res){
|
||||
res.sendFile(__dirname + '/dist/bundle.js');
|
||||
});
|
||||
|
||||
app.get('/dist/bundle.js.map', function(req, res){
|
||||
res.sendFile(__dirname + '/dist/bundle.js.map');
|
||||
});
|
||||
|
||||
app.post('/terminals', function (req, res) {
|
||||
|
||||
+12
-6
@@ -7,11 +7,6 @@
|
||||
<link rel="stylesheet" href="style.css" />
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/es6-promise/4.1.1/es6-promise.auto.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/fetch/1.0.0/fetch.min.js"></script>
|
||||
<script src="/build/xterm.js" ></script>
|
||||
<script src="/build/addons/attach/attach.js" ></script>
|
||||
<script src="/build/addons/fit/fit.js" ></script>
|
||||
<script src="/build/addons/fullscreen/fullscreen.js" ></script>
|
||||
<script src="/build/addons/search/search.js" ></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>xterm.js: xterm, in the browser</h1>
|
||||
@@ -38,6 +33,17 @@
|
||||
</select>
|
||||
</label>
|
||||
</p>
|
||||
<p>
|
||||
<label>
|
||||
bellStyle
|
||||
<select id="option-bell-style">
|
||||
<option value="">none</option>
|
||||
<option value="sound">sound</option>
|
||||
<option value="visual">visual</option>
|
||||
<option value="both">both</option>
|
||||
</select>
|
||||
</label>
|
||||
</p>
|
||||
<p>
|
||||
<label>scrollback <input type="number" id="option-scrollback" value="1000" /></label>
|
||||
</p>
|
||||
@@ -59,6 +65,6 @@
|
||||
</div>
|
||||
</div>
|
||||
<p><strong>Attention:</strong> The demo is a barebones implementation and is designed for xterm.js evaluation purposes only. Exposing the demo to the public as is would introduce security risks for the host.</p>
|
||||
<script src="main.js" defer ></script>
|
||||
<script src="dist/bundle.js" defer ></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+47
-26
@@ -1,10 +1,23 @@
|
||||
import * as Terminal from '../build/xterm';
|
||||
import * as attach from '../build/addons/attach/attach';
|
||||
import * as fit from '../build/addons/fit/fit';
|
||||
import * as fullscreen from '../build/addons/fullscreen/fullscreen';
|
||||
import * as search from '../build/addons/search/search';
|
||||
import * as winptyCompat from '../build/addons/winptyCompat/winptyCompat';
|
||||
|
||||
|
||||
Terminal.applyAddon(attach);
|
||||
Terminal.applyAddon(fit);
|
||||
Terminal.applyAddon(fullscreen);
|
||||
Terminal.applyAddon(search);
|
||||
Terminal.applyAddon(winptyCompat);
|
||||
|
||||
|
||||
var term,
|
||||
protocol,
|
||||
socketURL,
|
||||
socket,
|
||||
pid,
|
||||
charWidth,
|
||||
charHeight;
|
||||
pid;
|
||||
|
||||
var terminalContainer = document.getElementById('terminal-container'),
|
||||
actionElements = {
|
||||
@@ -15,16 +28,19 @@ var terminalContainer = document.getElementById('terminal-container'),
|
||||
cursorBlink: document.querySelector('#option-cursor-blink'),
|
||||
cursorStyle: document.querySelector('#option-cursor-style'),
|
||||
scrollback: document.querySelector('#option-scrollback'),
|
||||
tabstopwidth: document.querySelector('#option-tabstopwidth')
|
||||
tabstopwidth: document.querySelector('#option-tabstopwidth'),
|
||||
bellStyle: document.querySelector('#option-bell-style')
|
||||
},
|
||||
colsElement = document.getElementById('cols'),
|
||||
rowsElement = document.getElementById('rows');
|
||||
|
||||
function setTerminalSize () {
|
||||
var cols = parseInt(colsElement.value, 10),
|
||||
rows = parseInt(rowsElement.value, 10),
|
||||
width = (cols * charWidth).toString() + 'px',
|
||||
height = (rows * charHeight).toString() + 'px';
|
||||
function setTerminalSize() {
|
||||
var cols = parseInt(colsElement.value, 10);
|
||||
var rows = parseInt(rowsElement.value, 10);
|
||||
var viewportElement = document.querySelector('.xterm-viewport');
|
||||
var scrollBarWidth = viewportElement.offsetWidth - viewportElement.clientWidth;
|
||||
var width = (cols * term.renderer.dimensions.actualCellWidth + 20 /*room for scrollbar*/).toString() + 'px';
|
||||
var height = (rows * term.renderer.dimensions.actualCellHeight).toString() + 'px';
|
||||
|
||||
terminalContainer.style.width = width;
|
||||
terminalContainer.style.height = height;
|
||||
@@ -53,6 +69,9 @@ optionElements.cursorBlink.addEventListener('change', function () {
|
||||
optionElements.cursorStyle.addEventListener('change', function () {
|
||||
term.setOption('cursorStyle', optionElements.cursorStyle.value);
|
||||
});
|
||||
optionElements.bellStyle.addEventListener('change', function () {
|
||||
term.setOption('bellStyle', optionElements.bellStyle.value);
|
||||
});
|
||||
optionElements.scrollback.addEventListener('change', function () {
|
||||
term.setOption('scrollback', parseInt(optionElements.scrollback.value, 10));
|
||||
});
|
||||
@@ -72,6 +91,7 @@ function createTerminal() {
|
||||
scrollback: parseInt(optionElements.scrollback.value, 10),
|
||||
tabStopWidth: parseInt(optionElements.tabstopwidth.value, 10)
|
||||
});
|
||||
window.term = term; // Expose `term` to window for debugging purposes
|
||||
term.on('resize', function (size) {
|
||||
if (!pid) {
|
||||
return;
|
||||
@@ -86,29 +106,30 @@ function createTerminal() {
|
||||
socketURL = protocol + location.hostname + ((location.port) ? (':' + location.port) : '') + '/terminals/';
|
||||
|
||||
term.open(terminalContainer);
|
||||
term.winptyCompatInit();
|
||||
term.fit();
|
||||
term.focus();
|
||||
|
||||
var initialGeometry = term.proposeGeometry(),
|
||||
cols = initialGeometry.cols,
|
||||
rows = initialGeometry.rows;
|
||||
// fit is called within a setTimeout, cols and rows need this.
|
||||
setTimeout(function () {
|
||||
colsElement.value = term.cols;
|
||||
rowsElement.value = term.rows;
|
||||
|
||||
colsElement.value = cols;
|
||||
rowsElement.value = rows;
|
||||
// Set terminal size again to set the specific dimensions on the demo
|
||||
setTerminalSize();
|
||||
|
||||
fetch('/terminals?cols=' + cols + '&rows=' + rows, {method: 'POST'}).then(function (res) {
|
||||
fetch('/terminals?cols=' + term.cols + '&rows=' + term.rows, {method: 'POST'}).then(function (res) {
|
||||
|
||||
charWidth = Math.ceil(term.element.offsetWidth / cols);
|
||||
charHeight = Math.ceil(term.element.offsetHeight / rows);
|
||||
|
||||
res.text().then(function (pid) {
|
||||
window.pid = pid;
|
||||
socketURL += pid;
|
||||
socket = new WebSocket(socketURL);
|
||||
socket.onopen = runRealTerminal;
|
||||
socket.onclose = runFakeTerminal;
|
||||
socket.onerror = runFakeTerminal;
|
||||
res.text().then(function (processId) {
|
||||
pid = processId;
|
||||
socketURL += processId;
|
||||
socket = new WebSocket(socketURL);
|
||||
socket.onopen = runRealTerminal;
|
||||
socket.onclose = runFakeTerminal;
|
||||
socket.onerror = runFakeTerminal;
|
||||
});
|
||||
});
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
|
||||
function runRealTerminal() {
|
||||
|
||||
@@ -14,9 +14,3 @@ h1 {
|
||||
margin: 0 auto;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
#terminal-container .terminal {
|
||||
background-color: #111;
|
||||
color: #fafafa;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
Vendored
-126
@@ -1,126 +0,0 @@
|
||||
/**
|
||||
* Implements the attach method, that attaches the terminal to a WebSocket stream.
|
||||
* @module xterm/addons/attach/attach
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
(function (attach) {
|
||||
if (typeof exports === 'object' && typeof module === 'object') {
|
||||
/*
|
||||
* CommonJS environment
|
||||
*/
|
||||
module.exports = attach(require('../../xterm'));
|
||||
} else if (typeof define == 'function') {
|
||||
/*
|
||||
* Require.js is available
|
||||
*/
|
||||
define(['../../xterm'], attach);
|
||||
} else {
|
||||
/*
|
||||
* Plain browser environment
|
||||
*/
|
||||
attach(window.Terminal);
|
||||
}
|
||||
})(function (Xterm) {
|
||||
'use strict';
|
||||
|
||||
var exports = {};
|
||||
|
||||
/**
|
||||
* Attaches the given terminal to the given socket.
|
||||
*
|
||||
* @param {Xterm} term - The terminal to be attached to the given socket.
|
||||
* @param {WebSocket} socket - The socket to attach the current terminal.
|
||||
* @param {boolean} bidirectional - Whether the terminal should send data
|
||||
* to the socket as well.
|
||||
* @param {boolean} buffered - Whether the rendering of incoming data
|
||||
* should happen instantly or at a maximum
|
||||
* frequency of 1 rendering per 10ms.
|
||||
*/
|
||||
exports.attach = function (term, socket, bidirectional, buffered) {
|
||||
bidirectional = (typeof bidirectional == 'undefined') ? true : bidirectional;
|
||||
term.socket = socket;
|
||||
|
||||
term._flushBuffer = function () {
|
||||
term.write(term._attachSocketBuffer);
|
||||
term._attachSocketBuffer = null;
|
||||
clearTimeout(term._attachSocketBufferTimer);
|
||||
term._attachSocketBufferTimer = null;
|
||||
};
|
||||
|
||||
term._pushToBuffer = function (data) {
|
||||
if (term._attachSocketBuffer) {
|
||||
term._attachSocketBuffer += data;
|
||||
} else {
|
||||
term._attachSocketBuffer = data;
|
||||
setTimeout(term._flushBuffer, 10);
|
||||
}
|
||||
};
|
||||
|
||||
term._getMessage = function (ev) {
|
||||
if (buffered) {
|
||||
term._pushToBuffer(ev.data);
|
||||
} else {
|
||||
term.write(ev.data);
|
||||
}
|
||||
};
|
||||
|
||||
term._sendData = function (data) {
|
||||
socket.send(data);
|
||||
};
|
||||
|
||||
socket.addEventListener('message', term._getMessage);
|
||||
|
||||
if (bidirectional) {
|
||||
term.on('data', term._sendData);
|
||||
}
|
||||
|
||||
socket.addEventListener('close', term.detach.bind(term, socket));
|
||||
socket.addEventListener('error', term.detach.bind(term, socket));
|
||||
};
|
||||
|
||||
/**
|
||||
* Detaches the given terminal from the given socket
|
||||
*
|
||||
* @param {Xterm} term - The terminal to be detached from the given socket.
|
||||
* @param {WebSocket} socket - The socket from which to detach the current
|
||||
* terminal.
|
||||
*/
|
||||
exports.detach = function (term, socket) {
|
||||
term.off('data', term._sendData);
|
||||
|
||||
socket = (typeof socket == 'undefined') ? term.socket : socket;
|
||||
|
||||
if (socket) {
|
||||
socket.removeEventListener('message', term._getMessage);
|
||||
}
|
||||
|
||||
delete term.socket;
|
||||
};
|
||||
|
||||
/**
|
||||
* Attaches the current terminal to the given socket
|
||||
*
|
||||
* @param {WebSocket} socket - The socket to attach the current terminal.
|
||||
* @param {boolean} bidirectional - Whether the terminal should send data
|
||||
* to the socket as well.
|
||||
* @param {boolean} buffered - Whether the rendering of incoming data
|
||||
* should happen instantly or at a maximum
|
||||
* frequency of 1 rendering per 10ms.
|
||||
*/
|
||||
Xterm.prototype.attach = function (socket, bidirectional, buffered) {
|
||||
return exports.attach(this, socket, bidirectional, buffered);
|
||||
};
|
||||
|
||||
/**
|
||||
* Detaches the current terminal from the given socket.
|
||||
*
|
||||
* @param {WebSocket} socket - The socket from which to detach the current
|
||||
* terminal.
|
||||
*/
|
||||
Xterm.prototype.detach = function (socket) {
|
||||
return exports.detach(this, socket);
|
||||
};
|
||||
|
||||
return exports;
|
||||
});
|
||||
Vendored
-86
@@ -1,86 +0,0 @@
|
||||
/**
|
||||
* Fit terminal columns and rows to the dimensions of its DOM element.
|
||||
*
|
||||
* ## Approach
|
||||
* - Rows: Truncate the division of the terminal parent element height by the terminal row height.
|
||||
*
|
||||
* - Columns: Truncate the division of the terminal parent element width by the terminal character
|
||||
* width (apply display: inline at the terminal row and truncate its width with the current
|
||||
* number of columns).
|
||||
* @module xterm/addons/fit/fit
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
(function (fit) {
|
||||
if (typeof exports === 'object' && typeof module === 'object') {
|
||||
/*
|
||||
* CommonJS environment
|
||||
*/
|
||||
module.exports = fit(require('../../xterm'));
|
||||
} else if (typeof define == 'function') {
|
||||
/*
|
||||
* Require.js is available
|
||||
*/
|
||||
define(['../../xterm'], fit);
|
||||
} else {
|
||||
/*
|
||||
* Plain browser environment
|
||||
*/
|
||||
fit(window.Terminal);
|
||||
}
|
||||
})(function (Xterm) {
|
||||
var exports = {};
|
||||
|
||||
exports.proposeGeometry = function (term) {
|
||||
if (!term.element.parentElement) {
|
||||
return null;
|
||||
}
|
||||
var parentElementStyle = window.getComputedStyle(term.element.parentElement),
|
||||
parentElementHeight = parseInt(parentElementStyle.getPropertyValue('height')),
|
||||
parentElementWidth = Math.max(0, parseInt(parentElementStyle.getPropertyValue('width')) - 17),
|
||||
elementStyle = window.getComputedStyle(term.element),
|
||||
elementPaddingVer = parseInt(elementStyle.getPropertyValue('padding-top')) + parseInt(elementStyle.getPropertyValue('padding-bottom')),
|
||||
elementPaddingHor = parseInt(elementStyle.getPropertyValue('padding-right')) + parseInt(elementStyle.getPropertyValue('padding-left')),
|
||||
availableHeight = parentElementHeight - elementPaddingVer,
|
||||
availableWidth = parentElementWidth - elementPaddingHor,
|
||||
container = term.rowContainer,
|
||||
subjectRow = term.rowContainer.firstElementChild,
|
||||
contentBuffer = subjectRow.innerHTML,
|
||||
characterHeight,
|
||||
rows,
|
||||
characterWidth,
|
||||
cols,
|
||||
geometry;
|
||||
|
||||
subjectRow.style.display = 'inline';
|
||||
subjectRow.innerHTML = 'W'; // Common character for measuring width, although on monospace
|
||||
characterWidth = subjectRow.getBoundingClientRect().width;
|
||||
subjectRow.style.display = ''; // Revert style before calculating height, since they differ.
|
||||
characterHeight = subjectRow.getBoundingClientRect().height;
|
||||
subjectRow.innerHTML = contentBuffer;
|
||||
|
||||
rows = parseInt(availableHeight / characterHeight);
|
||||
cols = parseInt(availableWidth / characterWidth);
|
||||
|
||||
geometry = {cols: cols, rows: rows};
|
||||
return geometry;
|
||||
};
|
||||
|
||||
exports.fit = function (term) {
|
||||
var geometry = exports.proposeGeometry(term);
|
||||
|
||||
if (geometry) {
|
||||
term.resize(geometry.cols, geometry.rows);
|
||||
}
|
||||
};
|
||||
|
||||
Xterm.prototype.proposeGeometry = function () {
|
||||
return exports.proposeGeometry(this);
|
||||
};
|
||||
|
||||
Xterm.prototype.fit = function () {
|
||||
return exports.fit(this);
|
||||
};
|
||||
|
||||
return exports;
|
||||
});
|
||||
-10
@@ -1,10 +0,0 @@
|
||||
.xterm.fullscreen {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
width: auto;
|
||||
height: auto;
|
||||
z-index: 255;
|
||||
}
|
||||
Vendored
-50
@@ -1,50 +0,0 @@
|
||||
/**
|
||||
* Fullscreen addon for xterm.js
|
||||
* @module xterm/addons/fullscreen/fullscreen
|
||||
* @license MIT
|
||||
*/
|
||||
(function (fullscreen) {
|
||||
if (typeof exports === 'object' && typeof module === 'object') {
|
||||
/*
|
||||
* CommonJS environment
|
||||
*/
|
||||
module.exports = fullscreen(require('../../xterm'));
|
||||
} else if (typeof define == 'function') {
|
||||
/*
|
||||
* Require.js is available
|
||||
*/
|
||||
define(['../../xterm'], fullscreen);
|
||||
} else {
|
||||
/*
|
||||
* Plain browser environment
|
||||
*/
|
||||
fullscreen(window.Terminal);
|
||||
}
|
||||
})(function (Xterm) {
|
||||
var exports = {};
|
||||
|
||||
/**
|
||||
* Toggle the given terminal's fullscreen mode.
|
||||
* @param {Xterm} term - The terminal to toggle full screen mode
|
||||
* @param {boolean} fullscreen - Toggle fullscreen on (true) or off (false)
|
||||
*/
|
||||
exports.toggleFullScreen = function (term, fullscreen) {
|
||||
var fn;
|
||||
|
||||
if (typeof fullscreen == 'undefined') {
|
||||
fn = (term.element.classList.contains('fullscreen')) ? 'remove' : 'add';
|
||||
} else if (!fullscreen) {
|
||||
fn = 'remove';
|
||||
} else {
|
||||
fn = 'add';
|
||||
}
|
||||
|
||||
term.element.classList[fn]('fullscreen');
|
||||
};
|
||||
|
||||
Xterm.prototype.toggleFullscreen = function (fullscreen) {
|
||||
exports.toggleFullScreen(this, fullscreen);
|
||||
};
|
||||
|
||||
return exports;
|
||||
});
|
||||
Vendored
-207
@@ -1,207 +0,0 @@
|
||||
/**
|
||||
* Methods for turning URL subscrings in the terminal's content into links (`a` DOM elements).
|
||||
* @module xterm/addons/linkify/linkify
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
(function (linkify) {
|
||||
if (typeof exports === 'object' && typeof module === 'object') {
|
||||
/*
|
||||
* CommonJS environment
|
||||
*/
|
||||
module.exports = linkify(require('../../xterm'));
|
||||
} else if (typeof define == 'function') {
|
||||
/*
|
||||
* Require.js is available
|
||||
*/
|
||||
define(['../../xterm'], linkify);
|
||||
} else {
|
||||
/*
|
||||
* Plain browser environment
|
||||
*/
|
||||
linkify(window.Terminal);
|
||||
}
|
||||
})(function (Xterm) {
|
||||
'use strict';
|
||||
|
||||
var exports = {},
|
||||
protocolClause = '(https?:\\/\\/)',
|
||||
domainCharacterSet = '[\\da-z\\.-]+',
|
||||
negatedDomainCharacterSet = '[^\\da-z\\.-]+',
|
||||
domainBodyClause = '(' + domainCharacterSet + ')',
|
||||
tldClause = '([a-z\\.]{2,6})',
|
||||
ipClause = '((\\d{1,3}\\.){3}\\d{1,3})',
|
||||
portClause = '(:\\d{1,5})',
|
||||
hostClause = '((' + domainBodyClause + '\\.' + tldClause + ')|' + ipClause + ')' + portClause + '?',
|
||||
pathClause = '(\\/[\\/\\w\\.-]*)*',
|
||||
negatedPathCharacterSet = '[^\\/\\w\\.-]+',
|
||||
bodyClause = hostClause + pathClause,
|
||||
start = '(?:^|' + negatedDomainCharacterSet + ')(',
|
||||
end = ')($|' + negatedPathCharacterSet + ')',
|
||||
lenientUrlClause = start + protocolClause + '?' + bodyClause + end,
|
||||
strictUrlClause = start + protocolClause + bodyClause + end,
|
||||
lenientUrlRegex = new RegExp(lenientUrlClause),
|
||||
strictUrlRegex = new RegExp(strictUrlClause);
|
||||
|
||||
/**
|
||||
* Converts all valid URLs found in the given terminal line into
|
||||
* hyperlinks. The terminal line can be either the HTML element itself
|
||||
* or the index of the termina line in the children of the terminal
|
||||
* rows container.
|
||||
*
|
||||
* @param {Xterm} terminal - The terminal that owns the given line.
|
||||
* @param {number|HTMLDivElement} line - The terminal line that should get
|
||||
* "linkified".
|
||||
* @param {boolean} lenient - The regex type that will be used to identify links. If lenient is
|
||||
* false, the regex requires a protocol clause. Defaults to true.
|
||||
* @param {string} target - Sets target="" attribute with value provided to links.
|
||||
* Default doesn't set target attribute
|
||||
* @emits linkify
|
||||
* @emits linkify:line
|
||||
*/
|
||||
exports.linkifyTerminalLine = function (terminal, line, lenient, target) {
|
||||
if (typeof line == 'number') {
|
||||
line = terminal.rowContainer.children[line];
|
||||
} else if (! (line instanceof HTMLDivElement)) {
|
||||
var message = 'The "line" argument should be either a number';
|
||||
message += ' or an HTMLDivElement';
|
||||
|
||||
throw new TypeError(message);
|
||||
}
|
||||
|
||||
if (typeof target === 'undefined') {
|
||||
target = '';
|
||||
} else {
|
||||
target = 'target="' + target + '"';
|
||||
}
|
||||
|
||||
var buffer = document.createElement('span'),
|
||||
nodes = line.childNodes;
|
||||
|
||||
for (var j=0; j<nodes.length; j++) {
|
||||
var node = nodes[j],
|
||||
match;
|
||||
|
||||
/**
|
||||
* Since we cannot access the TextNode's HTML representation
|
||||
* from the instance itself, we assign its data as textContent
|
||||
* to a dummy buffer span, in order to retrieve the TextNode's
|
||||
* HTML representation from the buffer's innerHTML.
|
||||
*/
|
||||
buffer.textContent = node.data;
|
||||
|
||||
var nodeHTML = buffer.innerHTML;
|
||||
|
||||
/**
|
||||
* Apply function only on TextNodes
|
||||
*/
|
||||
if (node.nodeType != node.TEXT_NODE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var url = exports.findLinkMatch(node.data, lenient);
|
||||
|
||||
if (!url) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var startsWithProtocol = new RegExp('^' + protocolClause),
|
||||
urlHasProtocol = url.match(startsWithProtocol),
|
||||
href = (urlHasProtocol) ? url : 'http://' + url,
|
||||
link = '<a href="' + href + '" ' + target + '>' + url + '</a>',
|
||||
newHTML = nodeHTML.replace(url, link);
|
||||
|
||||
line.innerHTML = line.innerHTML.replace(nodeHTML, newHTML);
|
||||
}
|
||||
|
||||
/**
|
||||
* This event gets emitted when conversion of all URL susbtrings
|
||||
* to HTML anchor elements (links) has finished, for a specific
|
||||
* line of the current Xterm instance.
|
||||
*
|
||||
* @event linkify:line
|
||||
*/
|
||||
terminal.emit('linkify:line', line);
|
||||
};
|
||||
|
||||
/**
|
||||
* Finds a link within a block of text.
|
||||
*
|
||||
* @param {string} text - The text to search .
|
||||
* @param {boolean} lenient - Whether to use the lenient search.
|
||||
* @return {string} A URL.
|
||||
*/
|
||||
exports.findLinkMatch = function (text, lenient) {
|
||||
var match = text.match(lenient ? lenientUrlRegex : strictUrlRegex);
|
||||
if (!match || match.length === 0) {
|
||||
return null;
|
||||
}
|
||||
return match[1];
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts all valid URLs found in the terminal view into hyperlinks.
|
||||
*
|
||||
* @param {Xterm} terminal - The terminal that should get "linkified".
|
||||
* @param {boolean} lenient - The regex type that will be used to identify links. If lenient is
|
||||
* false, the regex requires a protocol clause. Defaults to true.
|
||||
* @param {string} target - Sets target="" attribute with value provided to links.
|
||||
* Default doesn't set target attribute
|
||||
* @emits linkify
|
||||
* @emits linkify:line
|
||||
*/
|
||||
exports.linkify = function (terminal, lenient, target) {
|
||||
var rows = terminal.rowContainer.children;
|
||||
|
||||
lenient = (typeof lenient == "boolean") ? lenient : true;
|
||||
for (var i=0; i<rows.length; i++) {
|
||||
var line = rows[i];
|
||||
|
||||
exports.linkifyTerminalLine(terminal, line, lenient, target);
|
||||
}
|
||||
|
||||
/**
|
||||
* This event gets emitted when conversion of all URL substrings to
|
||||
* HTML anchor elements (links) has finished for the current Xterm
|
||||
* instance's view.
|
||||
*
|
||||
* @event linkify
|
||||
*/
|
||||
terminal.emit('linkify');
|
||||
};
|
||||
|
||||
/**
|
||||
* Extend Xterm prototype.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Converts all valid URLs found in the current terminal linte into
|
||||
* hyperlinks.
|
||||
*
|
||||
* @memberof Xterm
|
||||
* @param {number|HTMLDivElement} line - The terminal line that should get
|
||||
* "linkified".
|
||||
* @param {boolean} lenient - The regex type that will be used to identify links. If lenient is
|
||||
* false, the regex requires a protocol clause. Defaults to true.
|
||||
* @param {string} target - Sets target="" attribute with value provided to links.
|
||||
* Default doesn't set target attribute
|
||||
*/
|
||||
Xterm.prototype.linkifyTerminalLine = function (line, lenient, target) {
|
||||
return exports.linkifyTerminalLine(this, line, lenient, target);
|
||||
};
|
||||
|
||||
/**
|
||||
* Converts all valid URLs found in the current terminal into hyperlinks.
|
||||
*
|
||||
* @memberof Xterm
|
||||
* @param {boolean} lenient - The regex type that will be used to identify links. If lenient is
|
||||
* false, the regex requires a protocol clause. Defaults to true.
|
||||
* @param {string} target - Sets target="" attribute with value provided to links.
|
||||
* Default doesn't set target attribute
|
||||
*/
|
||||
Xterm.prototype.linkify = function (lenient, target) {
|
||||
return exports.linkify(this, lenient, target);
|
||||
};
|
||||
|
||||
return exports;
|
||||
});
|
||||
Vendored
-135
@@ -1,135 +0,0 @@
|
||||
/**
|
||||
* This module provides methods for attaching a terminal to a terminado WebSocket stream.
|
||||
*
|
||||
* @module xterm/addons/terminado/terminado
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
(function (attach) {
|
||||
if (typeof exports === 'object' && typeof module === 'object') {
|
||||
/*
|
||||
* CommonJS environment
|
||||
*/
|
||||
module.exports = attach(require('../../xterm'));
|
||||
} else if (typeof define == 'function') {
|
||||
/*
|
||||
* Require.js is available
|
||||
*/
|
||||
define(['../../xterm'], attach);
|
||||
} else {
|
||||
/*
|
||||
* Plain browser environment
|
||||
*/
|
||||
attach(window.Terminal);
|
||||
}
|
||||
})(function (Xterm) {
|
||||
'use strict';
|
||||
|
||||
var exports = {};
|
||||
|
||||
/**
|
||||
* Attaches the given terminal to the given socket.
|
||||
*
|
||||
* @param {Xterm} term - The terminal to be attached to the given socket.
|
||||
* @param {WebSocket} socket - The socket to attach the current terminal.
|
||||
* @param {boolean} bidirectional - Whether the terminal should send data
|
||||
* to the socket as well.
|
||||
* @param {boolean} buffered - Whether the rendering of incoming data
|
||||
* should happen instantly or at a maximum
|
||||
* frequency of 1 rendering per 10ms.
|
||||
*/
|
||||
exports.terminadoAttach = function (term, socket, bidirectional, buffered) {
|
||||
bidirectional = (typeof bidirectional == 'undefined') ? true : bidirectional;
|
||||
term.socket = socket;
|
||||
|
||||
term._flushBuffer = function () {
|
||||
term.write(term._attachSocketBuffer);
|
||||
term._attachSocketBuffer = null;
|
||||
clearTimeout(term._attachSocketBufferTimer);
|
||||
term._attachSocketBufferTimer = null;
|
||||
};
|
||||
|
||||
term._pushToBuffer = function (data) {
|
||||
if (term._attachSocketBuffer) {
|
||||
term._attachSocketBuffer += data;
|
||||
} else {
|
||||
term._attachSocketBuffer = data;
|
||||
setTimeout(term._flushBuffer, 10);
|
||||
}
|
||||
};
|
||||
|
||||
term._getMessage = function (ev) {
|
||||
var data = JSON.parse(ev.data)
|
||||
if( data[0] == "stdout" ) {
|
||||
if (buffered) {
|
||||
term._pushToBuffer(data[1]);
|
||||
} else {
|
||||
term.write(data[1]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
term._sendData = function (data) {
|
||||
socket.send(JSON.stringify(['stdin', data]));
|
||||
};
|
||||
|
||||
term._setSize = function (size) {
|
||||
socket.send(JSON.stringify(['set_size', size.rows, size.cols]));
|
||||
};
|
||||
|
||||
socket.addEventListener('message', term._getMessage);
|
||||
|
||||
if (bidirectional) {
|
||||
term.on('data', term._sendData);
|
||||
}
|
||||
term.on('resize', term._setSize);
|
||||
|
||||
socket.addEventListener('close', term.terminadoDetach.bind(term, socket));
|
||||
socket.addEventListener('error', term.terminadoDetach.bind(term, socket));
|
||||
};
|
||||
|
||||
/**
|
||||
* Detaches the given terminal from the given socket
|
||||
*
|
||||
* @param {Xterm} term - The terminal to be detached from the given socket.
|
||||
* @param {WebSocket} socket - The socket from which to detach the current
|
||||
* terminal.
|
||||
*/
|
||||
exports.terminadoDetach = function (term, socket) {
|
||||
term.off('data', term._sendData);
|
||||
|
||||
socket = (typeof socket == 'undefined') ? term.socket : socket;
|
||||
|
||||
if (socket) {
|
||||
socket.removeEventListener('message', term._getMessage);
|
||||
}
|
||||
|
||||
delete term.socket;
|
||||
};
|
||||
|
||||
/**
|
||||
* Attaches the current terminal to the given socket
|
||||
*
|
||||
* @param {WebSocket} socket - The socket to attach the current terminal.
|
||||
* @param {boolean} bidirectional - Whether the terminal should send data
|
||||
* to the socket as well.
|
||||
* @param {boolean} buffered - Whether the rendering of incoming data
|
||||
* should happen instantly or at a maximum
|
||||
* frequency of 1 rendering per 10ms.
|
||||
*/
|
||||
Xterm.prototype.terminadoAttach = function (socket, bidirectional, buffered) {
|
||||
return exports.terminadoAttach(this, socket, bidirectional, buffered);
|
||||
};
|
||||
|
||||
/**
|
||||
* Detaches the current terminal from the given socket.
|
||||
*
|
||||
* @param {WebSocket} socket - The socket from which to detach the current
|
||||
* terminal.
|
||||
*/
|
||||
Xterm.prototype.terminadoDetach = function (socket) {
|
||||
return exports.terminadoDetach(this, socket);
|
||||
};
|
||||
|
||||
return exports;
|
||||
});
|
||||
Vendored
-2261
File diff suppressed because it is too large
Load Diff
Vendored
-5132
File diff suppressed because it is too large
Load Diff
Vendored
-1
File diff suppressed because one or more lines are too long
@@ -1,9 +0,0 @@
|
||||
version: '2'
|
||||
|
||||
services:
|
||||
web:
|
||||
build: ./
|
||||
volumes:
|
||||
- ./:/usr/src/app
|
||||
ports:
|
||||
- 3000:3000
|
||||
@@ -0,0 +1,9 @@
|
||||
version: "3"
|
||||
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
volumes:
|
||||
- ./:/usr/src/app
|
||||
ports:
|
||||
- ${XTERMJS_PORT:3000}:3000
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user