Compare commits

..

1316 Commits

Author SHA1 Message Date
1a49bec3d4 Release v2.2.53 2025-01-21 11:37:59 +10:00
64f9631946 Fix use of FileUploader 2025-01-21 11:37:22 +10:00
84169a2c1e Add missing checkImageFromVersion() for IOS and IOU
Some checks are pending
Build / build (push) Waiting to run
2025-01-20 16:46:26 +10:00
2a9ced5cbd Allow ':' in project names. Fixes https://github.com/GNS3/gns3-gui/issues/3686 2025-01-20 13:39:04 +10:00
ee5b88e19a Backport: fix interface labels are not persistant
Some checks failed
Build / build (push) Has been cancelled
2024-12-23 16:05:05 +07:00
608fcfd04e Fix unable to configure Ethernet Switch. Fixes #1530
Some checks failed
Build / build (push) Has been cancelled
2024-12-19 18:16:41 +07:00
99c6502a65 Development on 2.2.53.dev1 2024-12-02 11:27:15 +10:00
28d27194be Release v2.2.52 2024-12-02 11:05:45 +10:00
52f772676b Add .iol extension filter. Ref https://github.com/GNS3/gns3-gui/issues/3664 2024-11-25 11:02:49 +10:00
8068751032 Development on 2.2.51.dev1 2024-10-21 13:25:06 +10:00
28f8de0da1 Release v2.2.50 2024-10-21 12:02:41 +10:00
8cc4fb6f75 Merge remote-tracking branch 'origin/master' into 2.2 2024-10-21 11:56:21 +10:00
1196742e3b Merge pull request #1525 from GNS3/dependabot/npm_and_yarn/body-parser-1.20.3
Bump body-parser from 1.20.1 to 1.20.3
2024-09-21 16:54:09 +07:00
d398efe229 Bump body-parser from 1.20.1 to 1.20.3
Bumps [body-parser](https://github.com/expressjs/body-parser) from 1.20.1 to 1.20.3.
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/1.20.1...1.20.3)

---
updated-dependencies:
- dependency-name: body-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-21 09:40:03 +00:00
33e8fa7f5f Merge pull request #1524 from GNS3/dependabot/npm_and_yarn/express-4.21.0
Bump express from 4.19.2 to 4.21.0
2024-09-21 16:38:57 +07:00
b9833aa00b Bump express from 4.19.2 to 4.21.0
Bumps [express](https://github.com/expressjs/express) from 4.19.2 to 4.21.0.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.0/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.19.2...4.21.0)

---
updated-dependencies:
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-21 08:22:26 +00:00
fc66124ea9 Add configure base mac address for Docker templates 2024-09-18 17:09:25 +07:00
3f74a916d4 Merge pull request #1522 from GNS3/2.2
Release v2.2.49
2024-08-06 20:44:59 +02:00
ff78754fd5 Merge branch 'master' into 2.2 2024-08-06 20:26:35 +02:00
323255286b Development on 2.2.50.dev1 2024-08-06 20:25:51 +02:00
a9314b65f8 Release v2.2.49 2024-08-06 12:36:04 +02:00
e5b3a101b8 Fix CVE-2024-6345 and CVE-2024-39689. Fixes #1521 #1520 2024-07-22 19:13:46 +02:00
8b2d20e8e9 Merge pull request #1519 from GNS3/dependabot/pip/scripts/setuptools-70.0.0
Bump setuptools from 65.5.1 to 70.0.0 in /scripts
2024-07-15 20:44:13 +02:00
26023fe884 Bump setuptools from 65.5.1 to 70.0.0 in /scripts
Bumps [setuptools](https://github.com/pypa/setuptools) from 65.5.1 to 70.0.0.
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v65.5.1...v70.0.0)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-15 17:29:28 +00:00
9a2e06471c Development on 2.2.49.dev1 2024-07-13 16:33:10 +02:00
98f4ec1ce0 Merge pull request #1518 from GNS3/release/2.2.48.1
Release v2.2.48.1
2024-07-13 14:43:03 +02:00
4d695274bb Release v2.2.48.1 2024-07-11 23:40:15 +02:00
e5af89821d Show current year in default-layout.component.html 2024-07-11 23:39:53 +02:00
78b910504d Fix syntax error in index.html. Ref https://github.com/GNS3/gns3-server/issues/2399 2024-07-11 23:21:44 +02:00
93aabe0cbc Merge pull request #1515 from GNS3/2.2
Release v2.2.48
2024-07-09 00:31:25 +02:00
27446f8d14 Development on 2.2.49.dev1 2024-07-09 00:20:28 +02:00
a026374e75 Release v2.2.48 2024-07-08 18:21:21 +02:00
4f303921c6 Merge branch 'master' into 2.2 2024-07-08 18:19:14 +02:00
dea6a5021d Merge pull request #1511 from GNS3/dependabot/npm_and_yarn/socket.io-4.7.5
Bump socket.io from 4.4.1 to 4.7.5
2024-06-19 19:02:52 +02:00
46c7c58402 Bump socket.io from 4.4.1 to 4.7.5
Bumps [socket.io](https://github.com/socketio/socket.io) from 4.4.1 to 4.7.5.
- [Release notes](https://github.com/socketio/socket.io/releases)
- [Changelog](https://github.com/socketio/socket.io/blob/main/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io/compare/4.4.1...4.7.5)

---
updated-dependencies:
- dependency-name: socket.io
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-19 16:25:06 +00:00
0df3525bbf Merge pull request #1509 from GNS3/dependabot/npm_and_yarn/ws-6.2.3
Bump ws from 6.2.2 to 6.2.3
2024-06-18 20:06:15 +02:00
9667e2363c Bump ws from 6.2.2 to 6.2.3
Bumps [ws](https://github.com/websockets/ws) from 6.2.2 to 6.2.3.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/6.2.2...6.2.3)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-18 16:17:11 +00:00
24ec96a2dd Change interface label to fit in the SVG rect. Ref #1504 2024-06-17 17:37:07 +02:00
9844a2f88f Disable AdButler 2024-06-17 17:16:33 +02:00
0cdbeb98a2 Update Google Analytics ID 2024-06-17 16:18:14 +02:00
dc40d3be6e Merge pull request #1502 from GNS3/dependabot/pip/scripts/requests-2.32.0
Bump requests from 2.31.0 to 2.32.0 in /scripts
2024-05-21 13:46:33 +07:00
2015917767 ---
updated-dependencies:
- dependency-name: requests
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-21 05:25:06 +00:00
360d77d2ef Add Qemu for auxiliary console support. 2024-05-16 17:14:13 +07:00
75c3d8ed97 Merge pull request #1500 from GNS3/release/v2.2.47
Release v2.2.47
2024-05-15 16:44:26 +07:00
f94d59206e Development on 2.2.48.dev1 2024-05-15 16:28:14 +07:00
5b41f9789a Release v2.2.47 2024-05-15 11:51:18 +07:00
ac84106dbc Merge pull request #1499 from GNS3/feature/aux-console
Auxiliary console support
2024-05-14 22:17:16 +07:00
21f2267960 Merge remote-tracking branch 'origin/feature/aux-console' into feature/aux-console 2024-05-14 22:12:01 +07:00
a9781943d5 Check auxiliary console port is defined 2024-05-14 22:11:38 +07:00
6fc2f6f964 Merge branch '2.2' into feature/aux-console 2024-05-14 20:19:59 +07:00
cd5773e58a Merge branch 'master' into 2.2 2024-05-14 20:18:30 +07:00
f4bcb844dc Merge pull request #1494
Bump @angular/core from 9.0.0 to 12.2.17
2024-05-14 20:18:10 +07:00
24cf0f5623 Merge pull request #1489 from GNS3/dependabot/npm_and_yarn/follow-redirects-1.15.6
Bump follow-redirects from 1.15.4 to 1.15.6
2024-05-14 20:10:14 +07:00
5e02a3d757 Merge pull request #1490 from GNS3/dependabot/npm_and_yarn/express-4.19.2
Bump express from 4.18.2 to 4.19.2
2024-05-14 20:09:48 +07:00
42599dafb5 Auxiliary console support 2024-05-14 20:07:30 +07:00
9c754f3444 Merge remote-tracking branch 'origin/2.2' into 2.2 2024-05-14 17:43:48 +07:00
6772f0cb16 Merge pull request #1498 from GNS3/feature/protocol-handler-service
Create protocol handler service
2024-05-14 17:43:33 +07:00
2730ee6f6e Merge branch 'master' into 2.2 2024-05-14 17:25:07 +07:00
de058e175b Fix tests 2024-05-14 17:15:29 +07:00
e9487c5ada Create protocol handler service 2024-05-14 15:18:59 +07:00
035c846f85 Merge pull request #1495 from GNS3/dependabot/npm_and_yarn/ejs-3.1.10
Bump ejs from 3.1.8 to 3.1.10
2024-05-02 08:54:27 +07:00
80239229aa Bump ejs from 3.1.8 to 3.1.10
Bumps [ejs](https://github.com/mde/ejs) from 3.1.8 to 3.1.10.
- [Release notes](https://github.com/mde/ejs/releases)
- [Commits](https://github.com/mde/ejs/compare/v3.1.8...v3.1.10)

---
updated-dependencies:
- dependency-name: ejs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-02 01:29:26 +00:00
c12a7acb2c Bump @angular/core from 9.0.0 to 12.2.17
Bumps [@angular/core](https://github.com/angular/angular/tree/HEAD/packages/core) from 9.0.0 to 12.2.17.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/12.2.17/packages/core)

---
updated-dependencies:
- dependency-name: "@angular/core"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-11 07:52:40 +00:00
23bf5ad2f3 Merge pull request #1493 from GNS3/dependabot/npm_and_yarn/tar-6.2.1
Bump tar from 6.1.11 to 6.2.1
2024-04-11 14:51:41 +07:00
bed98624cc Bump tar from 6.1.11 to 6.2.1
Bumps [tar](https://github.com/isaacs/node-tar) from 6.1.11 to 6.2.1.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v6.1.11...v6.2.1)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-10 21:17:40 +00:00
383c26dcef Merge branch 'master' into 2.2 2024-04-03 17:54:45 +07:00
f505c101f7 Merge pull request #1491 from qmwd2006/patch-1
web browser out ouf memory when upload large image file
2024-04-03 17:53:57 +07:00
ca071f79c2 web browser out ouf memory when upload large image file 2024-03-31 07:18:10 +08:00
20be9027fd Bump express from 4.18.2 to 4.19.2
Bumps [express](https://github.com/expressjs/express) from 4.18.2 to 4.19.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.2...4.19.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-28 17:27:08 +00:00
63389812b5 Bump follow-redirects from 1.15.4 to 1.15.6
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.4 to 1.15.6.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.4...v1.15.6)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-16 23:09:05 +00:00
6873432833 Merge pull request #1488 from GNS3/release/v2.2.46
Release v2.2.46
2024-02-26 17:53:06 +08:00
a7e3c24a27 Development on 2.2.47.dev1 2024-02-26 17:36:11 +08:00
358f50596c Release v2.2.46 2024-02-26 16:29:45 +08:00
b61f5803fd Merge branch 'master' into 2.2 2024-02-26 16:26:56 +08:00
c27f4aee57 Merge pull request #1486 from GNS3/dependabot/npm_and_yarn/ip-1.1.9
Bump ip from 1.1.5 to 1.1.9
2024-02-21 10:53:45 +08:00
5aa00a9f77 Bump ip from 1.1.5 to 1.1.9
Bumps [ip](https://github.com/indutny/node-ip) from 1.1.5 to 1.1.9.
- [Commits](https://github.com/indutny/node-ip/compare/v1.1.5...v1.1.9)

---
updated-dependencies:
- dependency-name: ip
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-20 21:27:19 +00:00
91075a60b1 Release v2.2.45 2024-01-12 21:18:37 +11:00
57e590a704 Merge branch 'master' into 2.2 2024-01-12 21:16:07 +11:00
8d3e571aa4 Merge pull request #1485 from GNS3/dependabot/npm_and_yarn/follow-redirects-1.15.4
Bump follow-redirects from 1.14.8 to 1.15.4
2024-01-12 12:21:20 +11:00
af5917b6e4 Bump follow-redirects from 1.14.8 to 1.15.4
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.8 to 1.15.4.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.8...v1.15.4)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-09 17:38:04 +00:00
21ed977a55 Add ipaddr.js to "allowedCommonJsDependencies" 2023-12-06 22:34:22 +10:00
f861364727 Fix console launch with protocol handler for IPv6 addresses 2023-12-06 15:10:12 +10:00
0ff4d534f4 Development on 2.2.45.dev1 2023-11-06 16:28:27 +10:00
ca408663a5 Merge pull request #1478 from GNS3/release-v2.2.44
Release v2.2.44
2023-11-06 16:27:49 +10:00
c96d66b34a Release v2.2.44 2023-11-06 15:52:05 +10:00
896ca927f3 Add correct protocol when capturing with protocol handler 2023-11-03 14:44:41 +10:00
8253f8da38 Add server protocol to gns3+pcap 2023-11-02 17:36:41 +10:00
cbb1c9ecfc Add project name in gns3+pcap protocol handler URL 2023-10-31 16:45:17 +10:00
1e8b6261dc Merge branch 'master' into 2.2 2023-10-31 16:16:22 +10:00
f3b8a42d89 Merge pull request #1476 from GNS3/console-ipv6
Support IPv6 for external consoles
2023-10-29 15:50:45 +10:00
7812ff38cc Development on 3.0.0.dev10 2023-10-29 15:36:53 +10:00
d725363fe5 Allow edit height and width for rectangles and ellipses 2023-10-24 18:23:55 +10:00
58d42558f7 Merge pull request #1467 from GNS3/dependabot/npm_and_yarn/babel/traverse-7.23.2
Bump @babel/traverse from 7.16.0 to 7.23.2
2023-10-24 18:08:43 +10:00
aecbe32c6c Merge branch 'master' into dependabot/npm_and_yarn/babel/traverse-7.23.2 2023-10-24 17:47:26 +10:00
35193043a2 Merge pull request #1469 from ventaquil/feature/add-qemu-igb-nic
Add Qemu IGB network device
2023-10-24 17:13:59 +10:00
7a229d8e3e Add Qemu IGB network device 2023-10-19 11:23:55 +02:00
ba1180786f Bump @babel/traverse from 7.16.0 to 7.23.2
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.16.0 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-17 09:34:36 +00:00
535649f0a9 Merge pull request #1458 from GNS3/release-v2.2.42
Release v2.2.42
2023-08-09 22:18:36 +10:00
a4f7db62ba Development on v2.2.43.dev1 2023-08-09 22:14:16 +10:00
662aba4ec8 Release v2.2.42 2023-08-09 20:55:57 +10:00
bfc72c219c Add missing settings to Qemu VM templates. Fixes #1456 2023-08-01 20:13:11 +10:00
997b8df598 Merge pull request #1457 from GNS3/rounded-rect
Support for rounded rectangles
2023-08-01 20:03:55 +10:00
89bff8ac30 Set ry for rectangle 2023-08-01 19:48:08 +10:00
df6248d641 Add corner radius setting to style editor 2023-08-01 19:44:04 +10:00
cefbc3c9be Support for rounded rectangles 2023-08-01 15:54:47 +10:00
de07558349 Merge pull request #1455 from GNS3/release-v2.2.41
Release v2.2.41
2023-07-12 17:10:55 +10:00
b59c528ece Development on v2.2.42.dev1 2023-07-12 16:28:33 +10:00
61334d197d Release v2.2.41 2023-07-12 16:23:12 +10:00
d855e5cb33 Merge branch 'master' into 2.2 2023-07-12 16:09:45 +10:00
b8253d365d Merge pull request #1454 from GNS3/dependabot/npm_and_yarn/semver-5.7.2
Bump semver from 5.7.1 to 5.7.2
2023-07-11 11:09:22 +10:00
05685af5c4 Bump semver from 5.7.1 to 5.7.2
Bumps [semver](https://github.com/npm/node-semver) from 5.7.1 to 5.7.2.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v5.7.1...v5.7.2)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-10 23:33:31 +00:00
8dbaa11808 Fix issues with default IOU values for memories always checked. Fixes #1453 2023-07-06 21:53:01 +10:00
0d7020af97 Fix issues with Qemu adapters in template preferences. Fixes #1449 2023-07-06 20:39:04 +10:00
58b9083c49 Merge pull request #1442 from GNS3/dependabot/npm_and_yarn/webpack-5.76.0
Bump webpack from 5.62.1 to 5.76.0
2023-06-30 18:30:43 +10:00
43213d0669 Merge pull request #1432 from GNS3/dependabot/npm_and_yarn/http-cache-semantics-4.1.1
Bump http-cache-semantics from 4.1.0 to 4.1.1
2023-06-30 18:21:22 +10:00
924cbe2542 Merge pull request #1431 from GNS3/dependabot/npm_and_yarn/jszip-3.10.1
Bump jszip from 3.7.1 to 3.10.1
2023-06-30 18:21:07 +10:00
d06a3efd2c Merge branch 'master' into dependabot/npm_and_yarn/jszip-3.10.1 2023-06-30 18:08:08 +10:00
e2466ca4ab Merge branch 'master' into dependabot/npm_and_yarn/http-cache-semantics-4.1.1 2023-06-30 18:07:02 +10:00
1da94efe63 Merge branch 'master' into dependabot/npm_and_yarn/webpack-5.76.0 2023-06-30 18:06:16 +10:00
838480509e Support for UEFI boot mode option for Qemu VMs 2023-06-23 11:29:38 +09:30
04c28bd40a Developement on v2.2.41.dev1 2023-06-06 12:23:59 +09:30
328dd37ffe Release v2.2.40 2023-06-06 10:10:29 +09:30
c5a692babf Merge pull request #1445 from GNS3/dependabot/pip/scripts/requests-2.31.0
Bump requests from 2.25.1 to 2.31.0 in /scripts
2023-05-23 08:52:15 +08:00
119afd14d2 Bump requests from 2.25.1 to 2.31.0 in /scripts
Bumps [requests](https://github.com/psf/requests) from 2.25.1 to 2.31.0.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.25.1...v2.31.0)

---
updated-dependencies:
- dependency-name: requests
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-23 00:51:18 +00:00
37e6921ffb Support HTTP/HTTPS node console. Ref https://github.com/GNS3/gns3-gui/issues/3448 2023-05-22 19:48:23 +08:00
5d48ea046d Development on v2.2.40.dev1 2023-05-08 19:05:57 +08:00
4342d27d07 Release v2.2.39 2023-05-08 18:59:31 +08:00
3394035e2e Bump webpack from 5.62.1 to 5.76.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.62.1 to 5.76.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.62.1...v5.76.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-14 17:07:32 +00:00
49403a5568 Development on v2.2.39.dev1 2023-02-28 15:27:36 +10:00
70e4745657 Merge pull request #1441
Release v2.2.38
2023-02-28 13:21:39 +08:00
543b81c81b Release v2.2.38 2023-02-28 15:17:27 +10:00
02562cd046 Merge pull request #1440 from GNS3/fix/1439
Support extra disk images when importing appliance
2023-02-26 18:42:11 +08:00
252452051a Support extra disk images (hdc/hdd) and cdrom image when importing appliance 2023-02-26 20:15:11 +10:00
a64ff3503e Merge pull request #1433 from GNS3/fix/1336
Fix new template action not using "port_segment_size" and "default_name_format"
2023-02-09 12:20:14 +05:45
318143f5a8 Fix new template action not using "port_segment_size" and "default_name_format" 2023-02-04 13:25:10 +08:00
e029bccf18 Bump http-cache-semantics from 4.1.0 to 4.1.1
Bumps [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/kornelski/http-cache-semantics/releases)
- [Commits](https://github.com/kornelski/http-cache-semantics/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-03 04:50:10 +00:00
721adacde4 Bump jszip from 3.7.1 to 3.10.1
Bumps [jszip](https://github.com/Stuk/jszip) from 3.7.1 to 3.10.1.
- [Release notes](https://github.com/Stuk/jszip/releases)
- [Changelog](https://github.com/Stuk/jszip/blob/main/CHANGES.md)
- [Commits](https://github.com/Stuk/jszip/compare/v3.7.1...v3.10.1)

---
updated-dependencies:
- dependency-name: jszip
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-02 17:12:02 +00:00
4374573c60 Remove cache and scan master branch in codeql.yml 2023-02-01 11:55:08 +08:00
1e7c04f93c Merge pull request #1423 from GNS3/dependabot/pip/scripts/setuptools-65.5.1
Bump setuptools from 54.2.0 to 65.5.1 in /scripts
2023-02-01 08:04:28 +05:45
7e172e30ba Merge pull request #1427 from GNS3/bugfix/1269
Fix console launch on Firefox
2023-01-31 17:27:37 +05:45
4d243f895c Merge pull request #1428 from GNS3/bugfix/1279
Fix error when suspending and configuring a packet filter on a link
2023-01-31 17:26:51 +05:45
aeef3e74ed Fix error when suspending and configuring a packet filter on a link 2023-01-31 19:18:27 +08:00
83d72787f4 Use a hidden iframe to open console on Firefox 2023-01-31 18:56:07 +08:00
829bfe12d7 Merge remote-tracking branch 'origin/master' 2023-01-31 09:45:45 +08:00
f5b5c717b4 Automatically add new issues to GNS3 project 2023-01-31 09:45:37 +08:00
5b7da298d6 Merge pull request #1426 from GNS3/dependabot/npm_and_yarn/ua-parser-js-0.7.33
Bump ua-parser-js from 0.7.31 to 0.7.33
2023-01-27 14:59:33 +05:45
d7742a7c59 Bump ua-parser-js from 0.7.31 to 0.7.33
Bumps [ua-parser-js](https://github.com/faisalman/ua-parser-js) from 0.7.31 to 0.7.33.
- [Release notes](https://github.com/faisalman/ua-parser-js/releases)
- [Changelog](https://github.com/faisalman/ua-parser-js/blob/master/changelog.md)
- [Commits](https://github.com/faisalman/ua-parser-js/compare/0.7.31...0.7.33)

---
updated-dependencies:
- dependency-name: ua-parser-js
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-27 08:44:32 +00:00
e0ce8c0770 Development on v2.2.38.dev1 2023-01-24 15:06:43 +08:00
061dec9d75 Release v2.2.37 2023-01-24 15:00:34 +08:00
684a160d99 Merge remote-tracking branch 'origin/master' 2023-01-04 19:03:48 +08:00
21a12c151b Development on v2.2.37dev 2023-01-04 19:03:17 +08:00
17be201862 Merge pull request #1424 from GNS3/dependabot/npm_and_yarn/json5-1.0.2
Bump json5 from 1.0.1 to 1.0.2
2023-01-04 16:43:01 +05:45
57385b84f7 Bump json5 from 1.0.1 to 1.0.2
Bumps [json5](https://github.com/json5/json5) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v1.0.1...v1.0.2)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-04 10:57:08 +00:00
8e4f860b43 Release v2.2.36 2023-01-04 18:56:35 +08:00
2c015e695d Add TPM support for Qemu VMs 2023-01-04 18:52:46 +08:00
9fe2b3646b Bump setuptools from 54.2.0 to 65.5.1 in /scripts
Bumps [setuptools](https://github.com/pypa/setuptools) from 54.2.0 to 65.5.1.
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/CHANGES.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v54.2.0...v65.5.1)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-27 15:56:29 +00:00
313966548f Scan master-3.0 branch with Mend 2022-12-27 13:21:53 +08:00
69a7cf44c5 Merge pull request #1420 from GNS3/dependabot/npm_and_yarn/snyk-1.1064.0
Bump snyk from 1.996.0 to 1.1064.0
2022-12-20 20:01:32 +05:45
faec4b07be Bump snyk from 1.996.0 to 1.1064.0
Bumps [snyk](https://github.com/snyk/snyk) from 1.996.0 to 1.1064.0.
- [Release notes](https://github.com/snyk/snyk/releases)
- [Commits](https://github.com/snyk/snyk/compare/v1.996.0...v1.1064.0)

---
updated-dependencies:
- dependency-name: snyk
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-20 13:40:30 +00:00
908c721094 Create SECURITY.md 2022-12-20 21:34:44 +08:00
e3c4188171 Create codeql.yml 2022-12-20 21:32:46 +08:00
f48471cdd4 Merge pull request #1418 from GNS3/dependabot/npm_and_yarn/express-4.18.2
Bump express from 4.17.1 to 4.18.2
2022-12-07 13:17:33 +05:45
50fb05aa8e Bump express from 4.17.1 to 4.18.2
Bumps [express](https://github.com/expressjs/express) from 4.17.1 to 4.18.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.17.1...4.18.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-07 07:18:48 +00:00
63728091c1 Merge pull request #1417 from GNS3/dependabot/npm_and_yarn/qs-6.5.3
Bump qs from 6.5.2 to 6.5.3
2022-12-07 13:03:17 +05:45
03a417d78c Bump qs from 6.5.2 to 6.5.3
Bumps [qs](https://github.com/ljharb/qs) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/ljharb/qs/releases)
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.5.2...v6.5.3)

---
updated-dependencies:
- dependency-name: qs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-07 03:40:35 +00:00
c7a7a357c6 Merge pull request #1409 from GNS3/dependabot/npm_and_yarn/socket.io-parser-4.0.5
Bump socket.io-parser from 4.0.4 to 4.0.5
2022-12-03 21:16:35 +08:00
7d95267283 Merge pull request #1416 from GNS3/dependabot/npm_and_yarn/decode-uri-component-0.2.2
Bump decode-uri-component from 0.2.0 to 0.2.2
2022-12-03 21:16:13 +08:00
8a7309bde1 Bump decode-uri-component from 0.2.0 to 0.2.2
Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2)

---
updated-dependencies:
- dependency-name: decode-uri-component
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-03 00:10:34 +00:00
afccf4955b Merge pull request #1412 from GNS3/dependabot/npm_and_yarn/loader-utils-1.4.2
Bump loader-utils from 1.4.1 to 1.4.2
2022-11-16 18:36:13 +08:00
ad57a5f3f7 Bump loader-utils from 1.4.1 to 1.4.2
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 1.4.1 to 1.4.2.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v1.4.2/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v1.4.1...v1.4.2)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-16 07:53:15 +00:00
7407ddafd3 Bump socket.io-parser from 4.0.4 to 4.0.5
Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.0.4 to 4.0.5.
- [Release notes](https://github.com/socketio/socket.io-parser/releases)
- [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io-parser/compare/4.0.4...4.0.5)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-09 22:03:22 +00:00
168de3aecb Development on v2.2.36dev 2022-11-08 19:15:15 +08:00
13f80cdaad Merge remote-tracking branch 'origin/master' 2022-11-08 19:13:48 +08:00
28f32de0b2 Release v2.2.35 2022-11-08 19:13:39 +08:00
a6a4fb401d Merge pull request #1406 from GNS3/dependabot/npm_and_yarn/loader-utils-1.4.1
Bump loader-utils from 1.4.0 to 1.4.1
2022-11-08 18:24:57 +08:00
f62366440c Bump loader-utils from 1.4.0 to 1.4.1
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v1.4.1/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v1.4.0...v1.4.1)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-08 08:31:46 +00:00
135ecbdc33 Merge pull request #1403 from GNS3/dependabot/npm_and_yarn/node-fetch-3.2.10
Bump node-fetch from 3.1.1 to 3.2.10
2022-10-18 22:02:17 +08:00
9ebbbb197b Bump node-fetch from 3.1.1 to 3.2.10
Bumps [node-fetch](https://github.com/node-fetch/node-fetch) from 3.1.1 to 3.2.10.
- [Release notes](https://github.com/node-fetch/node-fetch/releases)
- [Commits](https://github.com/node-fetch/node-fetch/compare/v3.1.1...v3.2.10)

---
updated-dependencies:
- dependency-name: node-fetch
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-07 08:23:13 +00:00
f90c074191 Merge pull request #1402 from GNS3/dependabot/npm_and_yarn/snyk-1.996.0
Bump snyk from 1.780.0 to 1.996.0
2022-10-07 10:22:46 +02:00
2d49ca30fa Bump snyk from 1.780.0 to 1.996.0
Bumps [snyk](https://github.com/snyk/snyk) from 1.780.0 to 1.996.0.
- [Release notes](https://github.com/snyk/snyk/releases)
- [Commits](https://github.com/snyk/snyk/compare/v1.780.0...v1.996.0)

---
updated-dependencies:
- dependency-name: snyk
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-06 18:40:49 +00:00
83f7d36e2d Add more video resolutions to Docker containers using VNC in WebUI. Fixes #1375 2022-08-07 23:59:44 +02:00
174053f297 Development on v2.2.34dev 2022-06-20 20:40:33 +02:00
0e4e124c14 Release v2.2.33 2022-06-20 20:24:06 +02:00
c928ab0342 Merge pull request #1332 from GNS3/bugfix/1329
Fix spice+agent and none console types not supported
2022-06-20 18:38:17 +02:00
9efd99dccb Fix spice+agent and none console types not supported. 2022-06-18 18:53:36 +02:00
7e43dc77cb Merge pull request #1322 from GNS3/dependabot/npm_and_yarn/async-2.6.4
Bump async from 2.6.3 to 2.6.4
2022-06-10 00:33:25 +08:00
d7752a4d7b Bump async from 2.6.3 to 2.6.4
Bumps [async](https://github.com/caolan/async) from 2.6.3 to 2.6.4.
- [Release notes](https://github.com/caolan/async/releases)
- [Changelog](https://github.com/caolan/async/blob/v2.6.4/CHANGELOG.md)
- [Commits](https://github.com/caolan/async/compare/v2.6.3...v2.6.4)

---
updated-dependencies:
- dependency-name: async
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 07:52:58 +00:00
40df0fe1ee Merge pull request #1321 from GNS3/dependabot/npm_and_yarn/ejs-3.1.8
Bump ejs from 3.1.6 to 3.1.8
2022-06-01 14:52:11 +07:00
d5bd84234d Bump ejs from 3.1.6 to 3.1.8
Bumps [ejs](https://github.com/mde/ejs) from 3.1.6 to 3.1.8.
- [Release notes](https://github.com/mde/ejs/releases)
- [Changelog](https://github.com/mde/ejs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/mde/ejs/compare/v3.1.6...v3.1.8)

---
updated-dependencies:
- dependency-name: ejs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 07:13:32 +00:00
a9a7ecf3e7 Merge pull request #1320 from GNS3/dependabot/npm_and_yarn/eventsource-1.1.1
Bump eventsource from 1.1.0 to 1.1.1
2022-06-01 14:12:30 +07:00
5dc5a953e6 Bump eventsource from 1.1.0 to 1.1.1
Bumps [eventsource](https://github.com/EventSource/eventsource) from 1.1.0 to 1.1.1.
- [Release notes](https://github.com/EventSource/eventsource/releases)
- [Changelog](https://github.com/EventSource/eventsource/blob/master/HISTORY.md)
- [Commits](https://github.com/EventSource/eventsource/compare/v1.1.0...v1.1.1)

---
updated-dependencies:
- dependency-name: eventsource
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 01:20:11 +00:00
32c78450a2 Development on 2.2.33dev 2022-04-27 17:53:00 +07:00
82feb9aa92 Release web UI 2.2.32 2022-04-27 17:48:47 +07:00
a08a7e1476 Fix for issue in docker configurator 2022-04-27 10:35:54 +02:00
b5e4972bdb Fix for #1303 2022-04-26 11:24:00 +02:00
dc5c0d3d94 Merge pull request #1302 from GNS3/bugfix/1298
Fix capture file name
2022-04-26 14:52:49 +07:00
04936cfc8d Fix generated capture file is not valid 2022-04-21 13:53:27 +07:00
8728056b8d Merge pull request #1296 from GNS3/dependabot/npm_and_yarn/plist-3.0.5
Bump plist from 3.0.4 to 3.0.5
2022-04-13 16:15:02 +07:00
138d1f8552 Merge pull request #1283 from GNS3/dependabot/npm_and_yarn/electron-13.6.6
Bump electron from 13.6.1 to 13.6.6
2022-04-13 16:14:26 +07:00
dc31d51844 Bump plist from 3.0.4 to 3.0.5
Bumps [plist](https://github.com/TooTallNate/node-plist) from 3.0.4 to 3.0.5.
- [Release notes](https://github.com/TooTallNate/node-plist/releases)
- [Changelog](https://github.com/TooTallNate/plist.js/blob/master/History.md)
- [Commits](https://github.com/TooTallNate/node-plist/commits)

---
updated-dependencies:
- dependency-name: plist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-12 10:07:20 +00:00
def33a353d Bump minimist from 1.2.5 to 1.2.6 (#1294)
Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-12 12:06:10 +02:00
ed3db2ea4d Bump electron from 13.6.1 to 13.6.6
Bumps [electron](https://github.com/electron/electron) from 13.6.1 to 13.6.6.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v13.6.1...v13.6.6)

---
updated-dependencies:
- dependency-name: electron
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-25 18:37:29 +00:00
7ad6de2256 Merge pull request #1261 from GNS3/dependabot/npm_and_yarn/url-parse-1.5.10
Bump url-parse from 1.5.3 to 1.5.10
2022-03-13 20:20:17 +10:00
6dcc5cdc2e Bump url-parse from 1.5.3 to 1.5.10
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.3 to 1.5.10.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.3...1.5.10)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-07 01:08:02 +00:00
089e66a02b Bump karma from 6.3.15 to 6.3.16 (#1263)
Bumps [karma](https://github.com/karma-runner/karma) from 6.3.15 to 6.3.16.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v6.3.15...v6.3.16)

---
updated-dependencies:
- dependency-name: karma
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-07 01:16:14 +01:00
da848d42af Release web UI 2.2.30 2022-02-16 01:02:04 +01:00
6b08fb8d9a Bump follow-redirects from 1.14.7 to 1.14.8 (#1254)
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-16 00:49:50 +01:00
8874e7efbc Refreshing UI (#1253)
* Update font-fixer.ts

* Update interface-status.ts

* Updating project map UI

* Updating templates menu

* Fixing tests

* Update karma.conf.js
2022-02-08 23:48:45 +01:00
2b834768c6 Update karma.conf.js 2022-02-08 23:47:22 +01:00
eabdda0e74 Update dependency karma to v6.3.14 (#1251)
Co-authored-by: whitesource-for-github-com[bot] <whitesource-for-github-com[bot]@users.noreply.github.com>
2022-02-08 14:05:07 +01:00
9e3f667767 Update dependency karma to v6.3.9 (#1247)
Co-authored-by: whitesource-for-github-com[bot] <whitesource-for-github-com[bot]@users.noreply.github.com>
2022-01-31 14:07:59 +01:00
8898141bc1 Bump nanoid from 3.1.30 to 3.2.0 (#1236)
Bumps [nanoid](https://github.com/ai/nanoid) from 3.1.30 to 3.2.0.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.1.30...3.2.0)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-31 10:42:53 +01:00
c8753ed45c Bump node-fetch from 3.0.0 to 3.1.1 (#1237)
Bumps [node-fetch](https://github.com/node-fetch/node-fetch) from 3.0.0 to 3.1.1.
- [Release notes](https://github.com/node-fetch/node-fetch/releases)
- [Changelog](https://github.com/node-fetch/node-fetch/blob/main/docs/CHANGELOG.md)
- [Commits](https://github.com/node-fetch/node-fetch/compare/v3.0.0...v3.1.1)

---
updated-dependencies:
- dependency-name: node-fetch
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-31 10:22:43 +01:00
d496d8dc64 Bump log4js from 6.3.0 to 6.4.0 (#1235)
Bumps [log4js](https://github.com/log4js-node/log4js-node) from 6.3.0 to 6.4.0.
- [Release notes](https://github.com/log4js-node/log4js-node/releases)
- [Changelog](https://github.com/log4js-node/log4js-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/log4js-node/log4js-node/compare/v6.3.0...v6.4.0)

---
updated-dependencies:
- dependency-name: log4js
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-31 00:21:55 +01:00
a8f9b6948d Bump follow-redirects from 1.14.5 to 1.14.7 (#1233)
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.5 to 1.14.7.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.5...v1.14.7)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-31 00:01:23 +01:00
ccd3ff61f1 Release web UI 2.2.29 2022-01-07 20:04:51 +01:00
abf9d8b387 Release web UI 2.2.28 2021-12-13 23:40:20 +01:00
f8cc654539 Update project-map.component.ts 2021-12-13 23:34:03 +01:00
56554f6d0c Update project-map.component.ts 2021-12-13 23:22:15 +01:00
7be137dc1c Merge pull request #1225 from GNS3/Remember-topology/servers-window-position
Update topology-summary.component.ts
2021-12-12 12:46:39 -08:00
1b45a2284d Merge pull request #1224 from GNS3/Mouse-pointer-#1219
Mouse pointer #1219
2021-12-12 12:46:11 -08:00
6b4f5186d0 Update topology-summary.component.ts 2021-12-09 02:27:19 +01:00
c3f2ebad0c Mouse pointer #1219 2021-12-08 19:18:38 +01:00
249f63a97a Update new-template-dialog.component.html 2021-12-07 20:03:36 +01:00
cc6b8cd28c Update configurator-docker.component.ts 2021-12-07 15:51:26 +01:00
96928d86f8 Updating snyk version 2021-12-02 00:51:24 +01:00
a213a7aca1 Angular version set to 12.2.12 2021-11-10 00:12:32 +01:00
fc1d17b921 Reverting updates 2021-11-09 23:28:52 +01:00
0ddf4f6e95 Release web UI 2.2.27 2021-11-08 18:09:29 +01:00
8d466d655e Updating dependencies 2021-11-08 18:03:17 +01:00
2c7dd5f179 Removing sentry/cli 2021-11-08 17:48:58 +01:00
64999f2b72 Removing electron builder 2021-11-08 17:36:51 +01:00
253c65b8c1 Fix for builds on github 2021-11-08 16:49:45 +01:00
74c1a82524 Update .gitignore 2021-11-08 13:41:11 +01:00
4e42bd7a54 Merge pull request #1199 from potats0/master
add progress bar when uploading qemu disks
2021-11-07 13:54:30 -08:00
891e65b094 Update yarn.lock 2021-11-07 18:46:57 +01:00
c808477914 Fix for error with component factory after migration to angular v13 2021-11-07 18:32:34 +01:00
8503a17187 Updating angular material 2021-11-07 18:24:48 +01:00
8afea664ff updating packages 2021-11-07 17:28:04 +01:00
538ae8b7fb Update yarn.lock 2021-11-07 16:58:08 +01:00
370694f3b0 Update package.json 2021-11-07 16:55:02 +01:00
5175b3beac Updating packages 2021-11-07 16:48:17 +01:00
2df1956dbc Updating packages 2021-11-02 22:39:08 +01:00
56384fbcc0 fix progress bar incorrect when upload file twice 2021-10-14 12:22:15 +08:00
15faca6d89 show upload file progress when uploading qemu template. 2021-10-14 10:56:17 +08:00
4142144d4d Update package.json 2021-10-06 18:08:56 +02:00
e2e87db039 Release 2.2.26 2021-10-06 17:09:46 +02:00
c868f08a25 Update yarn.lock 2021-10-06 17:03:49 +02:00
9aedd410bb Update yarn.lock 2021-10-06 14:02:26 +02:00
5fb76d7d11 Update yarn.lock 2021-10-06 13:52:57 +02:00
a7c343aa7c Merge pull request #1194 from GNS3/dependabot/npm_and_yarn/nth-check-2.0.1
Bump nth-check from 2.0.0 to 2.0.1
2021-10-06 04:47:47 -07:00
cfe8c4760b Updating dependencies 2021-10-06 13:34:19 +02:00
7cbcc84cc1 Update template.component.ts 2021-10-06 12:57:40 +02:00
357e478fb8 Fix for theming 2021-10-06 12:44:23 +02:00
063d8c9dc7 Bump nth-check from 2.0.0 to 2.0.1
Bumps [nth-check](https://github.com/fb55/nth-check) from 2.0.0 to 2.0.1.
- [Release notes](https://github.com/fb55/nth-check/releases)
- [Commits](https://github.com/fb55/nth-check/compare/v2.0.0...v2.0.1)

---
updated-dependencies:
- dependency-name: nth-check
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-22 12:57:14 +00:00
63ecacb6b6 Update package.json 2021-09-14 12:01:56 +02:00
6cecacf611 Release 2.2.25 2021-09-14 10:22:36 +02:00
c389404e58 Updating dependencies 2021-09-14 10:06:47 +02:00
b1aba60410 Option to access system status from servers page 2021-09-14 01:01:46 +02:00
4cd9f77732 Release 2.2.24 2021-08-25 11:52:56 +02:00
1619c3ec05 Fix for https://github.com/GNS3/gns3-web-ui/issues/1184 2021-08-24 17:07:47 +02:00
b33a01e225 Update yarn.lock 2021-08-24 15:12:51 +02:00
353740376e Updating angular-devkit/build-angular 2021-08-24 14:53:51 +02:00
9fe899e4df Removing vulnerabilities 2021-08-24 14:39:02 +02:00
dd1f16c53d Merge pull request #1187 from GNS3/dependabot/npm_and_yarn/url-parse-1.5.3
Bump url-parse from 1.5.1 to 1.5.3
2021-08-24 05:00:53 -07:00
3fa52d3c9c Updating dependencies 2021-08-24 13:55:15 +02:00
bc5dd0271f Bump url-parse from 1.5.1 to 1.5.3
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.1 to 1.5.3.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.1...1.5.3)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-24 11:04:39 +00:00
81ca3e2af2 Merge pull request #1183 from GNS3/dependabot/npm_and_yarn/tar-6.1.6
Bump tar from 6.1.0 to 6.1.6
2021-08-24 04:03:51 -07:00
d7a0d2f69a Bump tar from 6.1.0 to 6.1.6
Bumps [tar](https://github.com/npm/node-tar) from 6.1.0 to 6.1.6.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v6.1.0...v6.1.6)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-04 09:11:45 +00:00
8f0bbafa72 Updating dependencies 2021-08-04 11:10:41 +02:00
08f7456bb1 Release 2.2.23 2021-08-04 10:51:04 +02:00
752246c629 Merge branch 'master' of https://github.com/GNS3/gns3-web-ui 2021-07-30 10:58:16 +02:00
2709d8d102 Updating packages to latest versions 2021-07-30 10:57:19 +02:00
d949f536ab Merge pull request #1178 from GNS3/snyk-fix-350c45c5ff2d382873ad7318d0553fa0
[Snyk] Security upgrade snyk from 1.630.0 to 1.667.0
2021-07-30 01:25:15 -07:00
42d8bcebbb fix: package.json & yarn.lock to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-JSZIP-1251497
2021-07-28 08:00:09 +00:00
a153e97f55 Merge pull request #1169 from GNS3/dependabot/npm_and_yarn/ws-6.2.2
Bump ws from 6.2.1 to 6.2.2
2021-06-22 10:15:11 +02:00
7953a86fd9 Bump ws from 6.2.1 to 6.2.2
Bumps [ws](https://github.com/websockets/ws) from 6.2.1 to 6.2.2.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/6.2.1...6.2.2)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-22 07:57:45 +00:00
5c426ad822 Merge pull request #1170 from GNS3/dependabot/npm_and_yarn/postcss-7.0.36
Bump postcss from 7.0.35 to 7.0.36
2021-06-22 09:56:50 +02:00
a9b7e09da4 Merge pull request #1173 from GNS3/Contextual-menu-position
Contextual menu position
2021-06-22 09:43:02 +02:00
60bae5db3c Bump postcss from 7.0.35 to 7.0.36
Bumps [postcss](https://github.com/postcss/postcss) from 7.0.35 to 7.0.36.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/7.0.35...7.0.36)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-15 19:16:01 +00:00
d6e5dee1aa Update main.yml 2021-06-15 15:32:59 +02:00
cb101e8202 Updating dependencies 2021-06-15 15:25:19 +02:00
0124018b02 Update project-map.component.ts 2021-06-15 14:56:00 +02:00
04fdcc6893 Update package.json 2021-06-14 16:12:32 +02:00
e54638a248 Updating dependencies 2021-06-08 18:03:18 +02:00
aac7b57d22 Release 2.2.22 2021-06-05 10:24:00 +02:00
9421b4bf57 Update ReleaseNotes.txt 2021-06-05 10:23:37 +02:00
354b313eaa Merge pull request #1157 from GNS3/master-2.2.22
Version 2.2.22
2021-05-28 13:20:14 +02:00
b048a846e0 Merge branch 'master' into master-2.2.22 2021-05-27 23:32:27 +02:00
092fe5991b Update bundled-server-finder.component.ts 2021-05-27 23:32:15 +02:00
1a03bb0456 Updating help component 2021-05-27 23:28:46 +02:00
a04804eaa0 Create server.service.spec.ts 2021-05-27 23:16:47 +02:00
8a56032291 Updating dependencies 2021-05-27 22:58:34 +02:00
c80dbe6baf Updating angular to 12, removing indexed db 2021-05-27 22:17:22 +02:00
2b17b3d627 Removing unused packages 2021-05-27 20:12:06 +02:00
6e9ebfb69d Removing react-related components 2021-05-27 18:58:28 +02:00
6faba7c4ec Update bundled-server-finder.component.ts 2021-05-27 18:01:58 +02:00
3f7fe0a7f3 Merge pull request #1152 from GNS3/dependabot/npm_and_yarn/dns-packet-1.3.4
Bump dns-packet from 1.3.1 to 1.3.4
2021-05-27 17:14:01 +02:00
666e39ede3 Removing angular-persistence package, updating unit tests 2021-05-27 17:12:44 +02:00
60f8685c68 Bump dns-packet from 1.3.1 to 1.3.4
Bumps [dns-packet](https://github.com/mafintosh/dns-packet) from 1.3.1 to 1.3.4.
- [Release notes](https://github.com/mafintosh/dns-packet/releases)
- [Changelog](https://github.com/mafintosh/dns-packet/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mafintosh/dns-packet/compare/v1.3.1...v1.3.4)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-27 07:45:54 +00:00
ca5a8ea891 Path shortcuts added 2021-05-26 12:53:07 +02:00
3b07b4a2db Lazy loading topology summary component 2021-05-25 17:06:01 +02:00
9bf2980b6b Merge pull request #1148 from GNS3/In-web-UI,-import-appliance-ignores-secondary/cdrom-images
Update new-template-dialog.component.html
2021-05-24 12:18:43 +02:00
57e6200972 Update new-template-dialog.component.html 2021-05-21 15:30:30 +02:00
b692bd0f43 Update projects.component.scss 2021-05-20 12:15:49 +02:00
e37bdc6162 Changing buttons title in server & snapshot dialogs 2021-05-20 11:48:11 +02:00
bb2a963237 Fix for https://github.com/GNS3/gns3-web-ui/issues/1139 2021-05-18 16:03:53 +02:00
c0cff3a6db fix for https://github.com/GNS3/gns3-web-ui/issues/1140 2021-05-18 14:04:35 +02:00
2a96a6b601 Fix for https://github.com/GNS3/gns3-web-ui/issues/1138 2021-05-18 03:21:45 +02:00
1d5bbb58f9 Fix for https://github.com/GNS3/gns3-web-ui/issues/1140 2021-05-17 20:20:20 +02:00
d290daed11 Fix for https://github.com/GNS3/gns3-web-ui/issues/1134 2021-05-13 12:03:25 +02:00
5ba7799d8a Updating console wrapper & console menu tests 2021-05-11 19:09:07 +02:00
17da822a47 Update log-console.component.spec.ts 2021-05-11 18:28:03 +02:00
748997c635 Update settings.component.spec.ts 2021-05-11 18:16:20 +02:00
cf2f0e3110 Fix for https://github.com/GNS3/gns3-web-ui/issues/1132 2021-05-11 14:57:42 +02:00
8bfb375e02 Merge pull request #1131 from GNS3/The-ability-to-open-consoles-for-many-nodes-at-once
Console in new tab for many nodes at one click
2021-05-11 12:00:42 +02:00
9fd34e8253 Opening more than 1 console with one click in console widget 2021-05-11 02:09:40 +02:00
abdd739f06 Console in new tab for many nodes at one click 2021-05-11 01:35:07 +02:00
1f972d3261 Updating dependencies 2021-05-10 16:45:36 +02:00
42ae0b671a Updating dependencies 2021-05-10 14:18:38 +02:00
b51159513f Update web-console-full-window.component.ts 2021-05-07 16:12:03 +02:00
12ba174dfa Update edit-project-dialog.component.ts 2021-05-07 16:10:12 +02:00
62c1f8b003 Removing blocking context menu, copy-paste in console changed from ctrl-c, ctrl-v, to ctrl-shift-c, ctrl-shift-v 2021-05-07 15:46:06 +02:00
4261086495 Update main.yml 2021-04-30 14:28:37 +02:00
1e21f672fb Update package.json 2021-04-30 14:18:58 +02:00
c8caf20234 Release 2.2.21 2021-04-30 13:51:13 +02:00
e669e4cc47 Updating dependencies 2021-04-27 23:59:10 +02:00
469fa6cd23 Update add-server-dialog.component.ts 2021-04-27 15:21:37 +02:00
f664165190 Extending direct link with adding server option 2021-04-27 15:21:21 +02:00
16d86a2322 Update README.md 2021-04-19 12:17:50 +02:00
b92c6384de Update README.md 2021-04-19 12:16:33 +02:00
ccc328f279 Update karma.conf.js 2021-04-19 11:19:39 +02:00
5f5cd8aa9e Update main.yml 2021-04-19 00:39:50 +02:00
668093ffb3 Update font-bbox-calculator.spec.ts 2021-04-18 23:00:36 +02:00
644dc588b2 Update main.yml 2021-04-18 22:42:24 +02:00
7c48791ae5 Update main.yml 2021-04-18 22:35:52 +02:00
aac9476e26 Update main.yml 2021-04-16 23:01:47 +02:00
e57350e0e5 Update main.yml 2021-04-16 22:33:02 +02:00
1a853f5c36 Create main.yml 2021-04-16 21:59:16 +02:00
89db5d2602 Updating all packages 2021-04-16 14:38:55 +02:00
25829b89e6 Codecov disabled 2021-04-16 12:10:33 +02:00
611ba2b410 Update project.service.spec.ts 2021-04-16 12:08:23 +02:00
700eff76eb Get url for console sockets moved to NodeConsoleService 2021-04-16 12:05:58 +02:00
f5296dd1fb Update add-server-dialog.component.html 2021-04-15 12:04:07 +02:00
085659bbcc Merge pull request #1061 from mother/zoom-controls
Updated zoom controls
2021-04-14 19:25:10 +02:00
20afbbcb5b Updated zoom controls 2021-04-14 12:43:57 -04:00
2350f88c59 position of console changed to the right 2021-04-13 11:47:44 +02:00
bec15d4d37 Update adbutler.component.ts 2021-04-12 17:31:46 +02:00
5697274dd4 Merge pull request #1059 from GNS3/Improve-overall-performance
Improve overall performance
2021-04-12 17:17:47 +02:00
2e750a0465 Update package.json 2021-04-12 17:00:20 +02:00
708009d374 Removing unnecessary imports 2021-04-12 13:46:28 +02:00
bba7d8b221 Code optimization 2021-04-12 13:15:45 +02:00
1dc4887071 Update console-wrapper.component.scss 2021-04-10 23:43:57 +02:00
7362f2625b Fix unit tests after updating fonts package 2021-04-09 14:30:14 +02:00
9b79cb9873 Merge pull request #1055 from GNS3/Fill-node-width-and-height-with-correct-values
Fill node width and height with correct values
2021-04-09 14:10:44 +02:00
ee943eacad Update project-map.component.ts 2021-04-09 14:10:14 +02:00
02e614de42 Fix for symbol service 2021-04-09 13:53:27 +02:00
b8812a9e41 Update package.json 2021-04-08 21:32:09 +02:00
98ac55c96e Release 2.2.20 2021-04-08 13:23:36 +02:00
7d9928609d Fix for styling zoom buttons & color of left menu 2021-04-08 13:17:21 +02:00
c4df0e49f9 Update topology-summary.component.scss 2021-04-08 12:00:20 +02:00
0a67137cc6 Fix for icon styling 2021-04-08 11:56:14 +02:00
d86eca7061 Fix for styling 2021-04-08 11:28:02 +02:00
0e71897317 Fix styling for new title bar 2021-04-08 10:41:03 +02:00
330d004e3b Merge pull request #1048 from mother/ui
GNS3 web-ui - UI Updates
2021-04-08 10:15:57 +02:00
12d1f7fd41 Update adbutler.component.scss 2021-04-08 10:10:32 +02:00
ca251bd984 Merge pull request #1052 from mother/ad-banner-updates
Ad Banner Updates
2021-04-08 09:27:24 +02:00
c90f37b030 Updating dependencies 2021-04-07 22:43:19 +02:00
0d7e76eb6c Fix typo in .appveyor.yml 2021-04-08 00:38:37 +09:30
4f34076440 Trying to fix Electron build 2021-04-08 00:35:06 +09:30
249a98b340 style updates 2021-04-07 10:29:58 -04:00
9da4079d2f Update to primary UI components 2021-04-07 10:10:17 -04:00
e2c4b2a372 Merge branch 'master' of https://github.com/GNS3/gns3-web-ui 2021-04-06 17:44:14 +02:00
da5eb7a4b6 Fix for grid issues (with 4k resolution) 2021-04-06 17:44:10 +02:00
ae9efcf7b4 Update README.md 2021-04-06 19:54:52 +09:30
b8c45688f6 more cleanup 2021-04-05 14:14:28 -04:00
3026a70e61 cleanup 2021-04-05 14:09:40 -04:00
5832f9f724 rm notification-box component 2021-04-05 13:55:33 -04:00
6b676fa91e simplify ad banner, make it a footer (non-timer based) 2021-04-05 13:54:36 -04:00
785855d3bd Update package.json 2021-03-05 16:45:01 +01:00
e609965e91 Release 2.2.19 2021-03-01 21:44:00 +01:00
d042ad8ce4 Update ReleaseNotes.txt 2021-03-01 21:41:37 +01:00
ddb2e3f34a Updating package.json 2021-03-01 21:39:23 +01:00
7cd1d5ed87 Update theme.scss 2021-03-01 21:21:52 +01:00
bc45a1bea9 Use cx_Freeze v5.1.1 2021-02-28 22:43:24 +10:30
b0e197dbbd Add hidden import 2021-02-27 18:13:35 +10:30
e213279cdc Add missing psutil dependency in requirements.txt 2021-02-27 17:37:01 +10:30
d072324ef7 New attempt to fix CircleCI build 2021-02-27 16:24:47 +10:30
a101620954 Update requirements.txt 2021-02-27 15:52:39 +10:30
e5813a255e Attempt to fix CircleCI build 2021-02-27 13:49:22 +10:30
a6eb1cc09f Updating project service tests 2021-02-26 23:45:45 +01:00
1b0c62c0d1 Storing server id for recently opened project list 2021-02-26 23:02:49 +01:00
d45947999d Update project.service.ts 2021-02-26 17:51:46 +01:00
06926c53af Action button added 2021-02-26 16:41:01 +01:00
96f4600706 Update yarn.lock 2021-02-22 22:27:05 +01:00
fe8550678d Update yarn.lock 2021-02-22 20:16:44 +01:00
a0d88a937e Merge pull request #1040 from GNS3/fix_for_theming
GNS3 Web-UI - Dark Theme Not Working
2021-02-22 11:00:02 -08:00
e1b0e73916 Link to docs added 2021-02-22 19:37:18 +01:00
767dc0c963 fix for styling dafult layout 2021-02-17 19:09:22 +01:00
6c4cdb06b2 Fix for icon colors 2021-02-17 18:46:16 +01:00
91844ee770 Rewriting theme-service 2021-02-17 16:28:00 +01:00
46c4bc1d78 Fix for theming 2021-02-17 04:03:02 +01:00
baa344fbe5 Update package.json 2021-02-16 15:59:43 +01:00
73d3ab2534 Release 2.2.18 2021-02-15 23:47:09 +01:00
7294e926a8 Update ReleaseNotes.txt 2021-02-15 23:45:25 +01:00
c4eecd3e8b Working version 2021-02-15 23:43:39 +01:00
015a1a9350 Revert "Revert "Update package.json""
This reverts commit 0bbaca6439.
2021-02-15 22:29:42 +01:00
0bbaca6439 Revert "Update package.json"
This reverts commit e4ad03e1c6.
2021-02-15 22:21:32 +01:00
e4ad03e1c6 Update package.json 2021-02-15 21:54:11 +01:00
0bc000f096 Update log-console.component.ts 2021-02-15 17:10:37 +01:00
703ceb177b Update yarn.lock 2021-02-15 16:47:53 +01:00
ab533a9be4 Merge pull request #1031 from GNS3/github_issues
User should have option to list issues from github in gns3 web UI app
2021-02-15 07:07:53 -08:00
d72cf3595f Merge branch 'master' into github_issues 2021-02-15 15:30:38 +01:00
9e7d11bf8a Fix for imports 2021-02-15 15:23:49 +01:00
8b7fb1f0d2 Update package.json 2021-02-15 13:43:26 +01:00
6af1b97174 Merge pull request #1034 from GNS3/Custom-symbols-are-centered-in-GUI-but-skewed-on-Web-UI
Update node.ts
2021-02-01 13:05:14 -08:00
37f94d5002 Merge pull request #1033 from Desposyni/Template_Category_Issue
Template category issue
2021-02-01 12:49:51 -08:00
317304c08a Change end device and security device categories to guest and firewall 2021-01-31 01:35:23 +01:00
80bf232f06 Make categories singular instead of plural 2021-01-31 00:47:03 +01:00
5c1ed5de06 Eev for communication between components 2021-01-28 01:07:51 +01:00
3cc84364ff Merge branch 'master' into github_issues 2021-01-27 18:15:54 +01:00
b6fdc260c6 Update report-issue.component.tsx 2021-01-27 18:14:41 +01:00
c8ec9c1213 Update angular.json 2021-01-27 12:23:20 +01:00
33e0fbb0b4 Cleaning up code 2021-01-26 23:55:13 +01:00
d4d9093505 Update log-console.component.spec.ts 2021-01-26 17:56:40 +01:00
32945dbd55 Fixing css 2021-01-26 17:48:10 +01:00
daf7da2189 Searching by keyword added 2021-01-26 17:19:19 +01:00
ad553a6aa2 Update issue-list.tsx 2021-01-25 17:58:13 +01:00
df6d760444 Update issue-list.tsx 2021-01-25 15:11:00 +01:00
e319aa4c4e Fetching data from github api 2021-01-25 01:47:46 +01:00
4983af48d1 Initial implementation 2021-01-23 01:23:32 +01:00
b114c7db81 Update topology-summary.component.html 2021-01-21 18:02:22 +01:00
140e56643d Merge pull request #1018 from GNS3/snyk-fix-53a04c199558f2ee494429c51ddc7720
[Snyk] Security upgrade ini from 1.3.5 to 1.3.6
2021-01-20 04:53:07 -08:00
ec704d63dd Merge branch 'master' into snyk-fix-53a04c199558f2ee494429c51ddc7720 2021-01-20 04:52:37 -08:00
1fc111a6e2 Update README.md 2021-01-13 21:42:58 +01:00
7f44ad4e7c Update packages 2021-01-13 11:59:45 +01:00
ad593d8408 Update packages 2021-01-13 01:15:35 +01:00
2c5683917b Removing node-sass 2021-01-13 00:48:24 +01:00
85ab218bc2 Update node.ts 2021-01-08 11:58:57 +01:00
735a618e0c fix: package.json to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-INI-1048974
2020-12-11 02:21:56 +00:00
f508242858 Update package.json 2020-12-04 13:17:54 +01:00
991f014ba3 Release 2.2.17 2020-12-04 02:52:57 +01:00
60aa98e721 Update new-template-dialog.component.ts 2020-12-02 14:59:28 +01:00
c956bc84c8 Update new-template-dialog.component.ts 2020-12-02 12:47:25 +01:00
5668016ef5 Fix for https://github.com/GNS3/gns3-web-ui/issues/983 2020-12-02 03:53:06 +01:00
a66b66f270 Bump version to 2.2.17dev1 2020-12-01 16:35:10 +10:30
ced2cba28b Fix for uploader 2020-12-01 02:17:49 +01:00
73ef1f0f80 Update server-discovery.component.ts 2020-12-01 00:06:05 +01:00
383c628f2f Update new-template-dialog.component.ts 2020-11-28 03:22:25 +01:00
80e19f5538 migration to Angular 11 2020-11-28 01:31:20 +01:00
d7012416ec Updating packages 2020-11-28 01:03:39 +01:00
0df3420cd5 Update yarn.lock 2020-11-28 00:01:01 +01:00
75dd47afac Fix for services 2020-11-09 13:50:24 +01:00
1b96d94384 Remove bad practices #1011 2020-11-09 13:49:57 +01:00
99b90db6ed Stabilize unit tests #1010 2020-11-09 01:27:37 +01:00
165ab06fde Map widgets should be hidden when browser window has small size #1009 2020-11-08 00:00:57 +01:00
72371cb8d6 Migrating from css to scss 2020-11-07 00:38:14 +01:00
c431d163c2 Lazy loading images 2020-11-06 12:46:58 +01:00
98df9cd2b7 Release 2.2.16 2020-11-04 12:40:07 +01:00
40a580dcb0 Update symbols.component.ts 2020-11-04 12:09:30 +01:00
149b68e037 Clean code from outdated http based methods 2020-11-04 00:12:29 +01:00
288879ccb2 Option to choose protocol from AddServerDialog 2020-11-03 20:15:10 +01:00
5cb3aa051b Update http-server.service.ts 2020-11-03 13:46:22 +01:00
c420dd8512 Migration to mousetrap 2020-10-22 15:51:13 +02:00
05e1519ceb Update project-map.component.ts 2020-10-22 14:42:58 +02:00
daff351b22 Update yarn.lock 2020-10-22 14:30:23 +02:00
82aa9c1d2c Update yarn.lock 2020-10-22 14:26:00 +02:00
a28b22eafb Update package.json 2020-10-19 15:40:19 +02:00
fc34cbf524 Merge pull request #1000 from GNS3/API-requests-doesn't-use-HTTPS-when-SSL-is-configured
Api requests doesn't use https when ssl is configured
2020-10-17 00:29:58 +02:00
9861f4a2f5 Merge branch 'master' into API-requests-doesn't-use-HTTPS-when-SSL-is-configured 2020-10-17 00:27:56 +02:00
57294f49a7 Option to check for updates added 2020-10-17 00:25:01 +02:00
15b9748120 Update project-map.component.html 2020-10-16 03:23:35 +02:00
6c92941794 Fix styles for light theme 2020-10-15 17:30:20 +02:00
b6137b8ef1 Update http-server.service.ts 2020-10-13 18:41:00 +02:00
692db7b605 Merge pull request #995 from GNS3/snyk-fix-920ef333e7d961151afc78cd65f0f4cf
[Snyk] Security upgrade urllib3 from 1.24.3 to 1.25.9
2020-10-13 18:28:39 +02:00
43042fcde0 Merge branch 'master' into API-requests-doesn't-use-HTTPS-when-SSL-is-configured 2020-10-13 18:24:49 +02:00
0ca1c02d10 Update console-device-action-browser.component.ts 2020-10-13 18:10:46 +02:00
b2cb7804de Update packages 2020-10-13 16:12:14 +02:00
05971ef1ae Merge pull request #999 from scodeman/issue-998
Issue #998 PR
2020-10-12 18:36:29 +02:00
3db88acff4 Update Dockerfile 2020-10-11 15:30:47 +08:00
ccfd4d468e Release 2020.4.0-beta.1 2020-10-05 15:36:16 +02:00
d2d37135a6 Update ReleaseNotes.txt 2020-10-05 15:24:48 +02:00
0abc9756b7 fix: scripts/requirements.txt to reduce vulnerabilities
The following vulnerabilities are fixed by pinning transitive dependencies:
- https://snyk.io/vuln/SNYK-PYTHON-URLLIB3-1014645
2020-10-02 00:19:28 +00:00
22c72f411b Workaround for scroll issue 2020-09-30 12:11:49 +02:00
e16152edaf Update server-discovery.component.ts 2020-09-29 15:07:36 +02:00
c11d32e253 Update symbols.component.scss 2020-09-29 14:07:36 +02:00
d80b0142fd Update context-console-menu.component.ts 2020-09-29 14:07:27 +02:00
dce29bb45d Change Sentry DSN key 2020-09-25 10:47:03 +09:30
e4d1ef7cf7 Update context-console-menu.component.spec.ts 2020-09-23 14:24:58 +02:00
3130eda5d5 Upgrading packages 2020-09-23 11:09:42 +02:00
4bab23fa60 Update log-console.component.spec.ts 2020-09-23 10:45:43 +02:00
8ffbf1be30 Double click to open new console 2020-09-22 18:01:31 +02:00
3667a4d755 Do not log HTTP 400 error to Sentry 2020-09-19 22:12:30 +09:30
55fe1e561a Merge pull request #990 from zero77/patch-1
Update README.md
2020-09-16 13:02:56 +02:00
74803d193e Update README.md
This quickly shows all package versions across different distros at a glance.
Also, Libraries.io dependency status for GitHub repo.
2020-09-16 10:26:17 +00:00
7c27ceaab7 https://github.com/GNS3/gns3-web-ui/issues/982 2020-09-15 12:48:10 +02:00
b661ba7ddf Merge branch 'master' of https://github.com/GNS3/gns3-web-ui 2020-09-14 18:29:57 +02:00
fe2ab05f57 Release 2020.3.0-beta.4 2020-09-14 18:29:47 +02:00
a522b12842 Merge pull request #969 from GNS3/dependabot/npm_and_yarn/bl-4.0.3
Bump bl from 4.0.2 to 4.0.3
2020-09-14 18:28:17 +02:00
9455c9970c Merge pull request #988 from GNS3/snyk-fix-5392bdd7c97126b322c70ca738d5f146
[Snyk] Security upgrade node-fetch from 2.6.0 to 2.6.1
2020-09-14 18:28:05 +02:00
ac10eae134 Custom adapters for docker 2020-09-14 18:26:38 +02:00
19b1e4b230 Edit network configuration for docker nodes 2020-09-14 15:00:41 +02:00
5d6bda7e31 Change Sentry DSN key. 2020-09-13 00:21:16 +09:30
d782bcafbe fix: package.json & yarn.lock to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-NODEFETCH-674311
2020-09-12 02:26:12 +00:00
e335a552c5 Update new-template-dialog.component.ts 2020-09-10 18:34:26 +02:00
753e08a6ba Update node.ts 2020-09-10 00:41:23 +02:00
305182b01f Update node.ts 2020-09-10 00:36:32 +02:00
dd7dcf4dab Improvements for template name dialog 2020-09-09 23:43:54 +02:00
cf725931f9 Update template.component.ts 2020-09-09 16:38:51 +02:00
c7db04ce3b Missing features in docker configurator 2020-09-09 13:01:23 +02:00
93532d3274 Update new-template-dialog.component.ts 2020-09-08 12:53:02 +02:00
81bc3cb3bd Update new-template-dialog.component.ts 2020-09-08 12:17:28 +02:00
87aa6c4b59 Dialog for Qemu template name 2020-09-08 12:07:38 +02:00
b32fdf4fc2 Update for appliances 2020-09-07 15:01:32 +02:00
6f991e4885 Update new-template-dialog.component.ts 2020-09-07 13:33:20 +02:00
fe02a4cb79 Update toaster-error-handler.ts 2020-09-07 00:42:21 +02:00
61d4e2461f Release 2020.3.0-beta.3 2020-09-04 12:45:33 +02:00
c80284d7d2 Update ReleaseNotes.txt 2020-09-04 12:37:45 +02:00
00d4a5ff92 Update new-template-dialog.component.ts 2020-09-04 02:06:08 +02:00
61bb6e45bf suspend issues 2020-09-04 00:55:49 +02:00
bbb344557b Update new-template-dialog.component.html 2020-09-03 15:21:57 +02:00
94ce514cfe Merge pull request #968 from GNS3/web-console-future-enhacements
Option to resize console
2020-09-03 13:51:51 +02:00
0ccae1dde7 Fix for adding appliances 2020-09-03 12:50:07 +02:00
4c08a11452 Bump bl from 4.0.2 to 4.0.3
Bumps [bl](https://github.com/rvagg/bl) from 4.0.2 to 4.0.3.
- [Release notes](https://github.com/rvagg/bl/releases)
- [Commits](https://github.com/rvagg/bl/compare/v4.0.2...v4.0.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-02 18:09:17 +00:00
8687c0b1f0 Update adbutler.component.ts 2020-09-02 18:58:55 +02:00
36b610eafa Update new-template-dialog.component.ts 2020-09-02 16:31:12 +02:00
58497c1f5a Update log-console.component.ts 2020-09-02 15:30:01 +02:00
bd6693cb11 Update console-wrapper.component.scss 2020-09-01 15:15:15 +02:00
c732ed5a72 Fix for console start 2020-08-31 17:21:37 +02:00
696a708930 Update console-wrapper.component.scss 2020-08-31 15:27:32 +02:00
ad783722d0 Option to resize console 2020-08-28 14:14:40 +02:00
d266d5ece2 Merge pull request #966 from GNS3/fix-for-tests
Fix for tests
2020-08-27 13:55:06 +02:00
8948bd7205 Update app.component.spec.ts 2020-08-27 13:25:00 +02:00
9c1c15df8a Update tsconfig.app.json 2020-08-27 13:13:48 +02:00
97a6d5298e Merge pull request #965 from GNS3/Upgrade-Sentry-SDK
Update sentry-error-handler.ts
2020-08-26 18:04:45 +02:00
8978c0cc33 Update app.component.spec.ts 2020-08-26 18:03:57 +02:00
9e37f47ef1 Fix for log-console-component tests 2020-08-26 17:48:05 +02:00
0682595f6f Update nodes-menu.component.spec.ts 2020-08-26 17:39:47 +02:00
f79e320d55 Update project-map.component.spec.ts 2020-08-26 17:34:54 +02:00
e33fe70a38 Update cloud-nodes-add-template.component.spec.ts 2020-08-26 16:07:23 +02:00
535a48211a Update ethernet-switches-add-template.component.spec.ts 2020-08-26 16:05:02 +02:00
659db6a73e Fix for compute service 2020-08-26 16:02:18 +02:00
340004d9d5 Update server-discovery.component.spec.ts 2020-08-26 15:53:13 +02:00
cb133d9525 Fix for dialogs 2020-08-26 13:13:01 +02:00
910ddb9955 Fix for unit tests 2020-08-26 12:39:55 +02:00
c3c25efb71 Merge pull request #941 from GNS3/fix-for-tests
Fix for tests
2020-08-25 15:58:53 +02:00
29a8b9f527 Update tsconfig.base.json 2020-08-25 15:58:28 +02:00
9dfd58b14b Merge branch 'master' into fix-for-tests 2020-08-25 15:46:57 +02:00
dd4ab0013b Update project-map.component.ts 2020-08-20 18:37:53 +02:00
a7e05cff7c Update project-map.component.ts 2020-08-20 18:32:28 +02:00
128d02b85d Fix for https://github.com/GNS3/gns3-web-ui/issues/961 2020-08-20 16:45:21 +02:00
a0073e1d23 Fix for delete error 2020-08-20 00:32:54 +02:00
0742574221 Update sentry-error-handler.ts 2020-08-19 23:57:53 +02:00
72418a1a9f Release 2020.3.0-beta.2 2020-08-07 09:50:50 +02:00
4d6678fa4d fix for sentry errors 2020-08-07 09:45:36 +02:00
5aeecb08a1 Update toaster-error-handler.ts 2020-08-06 23:52:01 +02:00
8bd289c3d2 Update sentry-error-handler.ts 2020-08-06 23:51:56 +02:00
9b77b40bd0 Update notification-box.component.ts 2020-08-06 23:27:22 +02:00
69177e86fc Update notification-box.component.ts 2020-08-06 23:18:41 +02:00
75de6d2c38 Settings for link labels 2020-08-06 19:40:51 +02:00
76dbcc0782 Update for map settings service 2020-08-06 15:20:28 +02:00
a1f6be337a Update link.service.ts 2020-08-06 11:40:18 +02:00
d1fb7e6624 Update adbutler.component.ts 2020-08-06 10:08:40 +02:00
29e8949872 Update appliance.ts 2020-08-06 00:49:59 +02:00
1e36a721b6 Update new-template-dialog.component.ts 2020-08-06 00:49:56 +02:00
b2e96172e6 Update adbutler.component.scss 2020-08-06 00:48:19 +02:00
05cda2b3a6 Update for qemu appliances 2020-08-05 12:32:22 +02:00
d0e6318198 Fix for https://github.com/GNS3/gns3-web-ui/issues/955 2020-08-05 12:24:51 +02:00
b78f3824fc Update app-routing.module.ts 2020-08-04 15:37:11 +02:00
ffb3646d08 Fix for appliances 2020-08-04 14:30:56 +02:00
af564d6cd7 Fix for tooltips 2020-08-03 16:52:37 +02:00
01ea42e930 InterfaceStatus updated 2020-07-31 14:55:28 +02:00
7ee47d2e86 Update yarn.lock 2020-07-23 14:42:53 +02:00
841f5c6283 Update package.json 2020-07-23 14:42:41 +02:00
dea33c9992 Update toaster-error-handler.ts 2020-07-22 17:58:00 +02:00
2c9ea028d7 Update new-template-dialog.component.html 2020-07-22 14:14:37 +02:00
1f6f81a02e Fix for 943 2020-07-22 12:47:51 +02:00
e228ac2654 Update interface-status.ts 2020-07-21 20:02:55 +02:00
dede19d686 Merge pull request #944 from GNS3/dependabot/npm_and_yarn/lodash-4.17.19
Bump lodash from 4.17.15 to 4.17.19
2020-07-20 16:28:05 +02:00
26153aa0e7 Update app.module.ts 2020-07-20 16:27:26 +02:00
6d023828ec Update google-analytics.service.ts 2020-07-20 16:27:23 +02:00
acf5a9fadb Bump lodash from 4.17.15 to 4.17.19
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot[bot] <support@github.com>
2020-07-16 18:27:30 +00:00
e9aeb169c5 Update interface-status.ts 2020-07-16 17:51:57 +02:00
141fc9cae5 Update interface-status.ts 2020-07-16 17:28:38 +02:00
4125c98e82 Update interface-status.ts 2020-07-16 17:24:19 +02:00
801c10feff Update interface-status.ts 2020-07-16 17:21:18 +02:00
0d4cc53ebb Update tsconfig.base.json 2020-07-15 15:00:56 +02:00
da16f39355 Update confirmation-dialog.component.spec.ts 2020-07-15 15:00:48 +02:00
565051c259 Update yarn.lock 2020-07-14 13:11:47 +02:00
da43d843c0 Unit tests migrated to angular 10 2020-07-14 13:01:06 +02:00
1356aa1962 Update package.json 2020-07-14 12:48:57 +02:00
8362e3463b Update tsconfig.base.json 2020-07-14 12:43:24 +02:00
695ca81cc0 Merge pull request #938 from GNS3/snyk-fix-470ae95600eebd24979fe9af6bdb138d
[Snyk] Fix for 1 vulnerabilities
2020-07-14 11:19:50 +02:00
97d259c7f4 Merge pull request #940 from GNS3/Integrate-link-labels-to-links
Integrate link labels to links
2020-07-14 10:54:38 +02:00
62587fbdcd Option enabled 2020-07-13 18:40:32 +02:00
a3142c6fb1 Option in menu 2020-07-13 17:28:35 +02:00
46c6cd1d7e Update link.service.ts 2020-07-13 16:52:46 +02:00
4c528bea07 Update interface-status.ts 2020-07-13 16:52:33 +02:00
9adcd6090d fix: package.json, yarn.lock & .snyk to reduce vulnerabilities
The following vulnerabilities are fixed with a Snyk patch:
- https://snyk.io/vuln/SNYK-JS-LODASH-567746
2020-07-10 04:13:48 +00:00
9a974ae72d Update link-status.ts 2020-07-09 15:22:15 +02:00
b5c2c3b4f2 Update interface-status.ts 2020-07-09 14:03:47 +02:00
f185f97ad5 Update interface-status.ts 2020-07-09 13:19:03 +02:00
1b05924070 Update project-web-service-handler.ts 2020-07-08 11:55:46 +02:00
2ebe412cc8 Merge pull request #937 from GNS3/dependabot/npm_and_yarn/npm-registry-fetch-4.0.5
Bump npm-registry-fetch from 4.0.4 to 4.0.5
2020-07-07 22:03:29 +02:00
a3e4483478 Bump npm-registry-fetch from 4.0.4 to 4.0.5
Bumps [npm-registry-fetch](https://github.com/npm/registry-fetch) from 4.0.4 to 4.0.5.
- [Release notes](https://github.com/npm/registry-fetch/releases)
- [Changelog](https://github.com/npm/npm-registry-fetch/blob/latest/CHANGELOG.md)
- [Commits](https://github.com/npm/registry-fetch/commits)

Signed-off-by: dependabot[bot] <support@github.com>
2020-07-07 19:36:20 +00:00
76f71b7c8b Reelease 2020.3.0-beta.1 2020-07-07 13:32:32 +02:00
1924fcbce0 Update ReleaseNotes.txt 2020-07-07 13:30:38 +02:00
20441a3e38 Update yarn.lock 2020-07-07 13:26:16 +02:00
aa78dc682f Merge pull request #934 from GNS3/Updating-dependencies
Upgrade to Angular 10 [high importance]
2020-07-07 11:19:35 +02:00
ed2ec8f004 Update tsconfig.base.json 2020-07-06 17:56:01 +02:00
290ed5ee89 Update angular.json 2020-07-06 17:02:12 +02:00
491eb86451 Update from master 2020-07-06 15:06:43 +02:00
b8ed394937 Merge pull request #895 from GNS3/Upgrade-Sentry-SDK
Upgrade sentry SDK
2020-07-06 14:33:08 +02:00
0195b3dfc9 All packages updated to newest version 2020-07-01 10:25:59 +02:00
33786ccd14 Upgrade bootstrap 2020-06-30 17:05:10 +02:00
c7d7a97279 Upgrading angular material 2020-06-30 16:35:17 +02:00
4ddc8a198d Update package.json 2020-06-30 16:27:38 +02:00
fc7c52efb7 Update yarn.lock 2020-06-30 15:55:00 +02:00
9b626b6805 Update package.json 2020-06-30 15:44:33 +02:00
5365e228a6 Update yarn.lock 2020-06-30 15:16:59 +02:00
9215ab8e87 downgrade types/node 2020-06-30 13:41:43 +02:00
38941c209b tsconfig updated 2020-06-30 13:30:48 +02:00
c8104a577f Update to Angular 10 2020-06-30 10:42:31 +02:00
7c4e745075 Update package.json 2020-06-30 09:59:13 +02:00
b91ca628a0 Update package.json 2020-06-29 13:02:59 +02:00
f0ec495ff4 Merge pull request #904 from GNS3/whitesource/configure
Configure WhiteSource for GitHub.com
2020-06-26 09:04:49 +08:00
b35c4ace6a Add .whitesource configuration file 2020-06-26 01:02:01 +00:00
31fa79472a Replace Greenkeeper's badge by Snyk's badge 2020-06-25 13:42:51 +09:30
9938055638 Merge pull request #898 from GNS3/snyk-fix-456c9ae5252b41ddd3db2dcc687a93bd
[Snyk] Security upgrade psutil from 5.6.6 to 5.6.7
2020-06-24 20:56:36 +08:00
f4dde0ecae fix: scripts/requirements.txt to reduce vulnerabilities
The following vulnerabilities are fixed by pinning transitive dependencies:
- https://snyk.io/vuln/SNYK-PYTHON-PSUTIL-483082
2020-06-24 12:34:46 +00:00
62e866273b Removing raven dependencies 2020-06-24 12:57:02 +02:00
3e2c537a6d message for system status page 2020-06-24 11:49:29 +02:00
1658845022 Update status-chart.component.scss 2020-06-24 10:32:56 +02:00
e76527840b Upgrade sentry SDK 2020-06-23 16:56:53 +02:00
09fe6dbcbb Update new-template-dialog.component.html 2020-06-23 15:08:26 +02:00
92cfb2d94a Fix for importing appliances 2020-06-23 14:36:48 +02:00
206242dba9 Update link.service.ts 2020-06-23 12:16:28 +02:00
c78517c22e Update status page 2020-06-23 12:11:28 +02:00
91cfd1d257 Link to preferences 2020-06-22 20:19:23 +02:00
7b1c5deff5 Refreshing list of templates 2020-06-22 18:15:50 +02:00
fc6a5671fb Update new-template-dialog.component.ts 2020-06-22 15:27:09 +02:00
b0c331d054 Support for IOU appliances 2020-06-22 15:25:02 +02:00
d07fad3c79 Update new-template-dialog.component.html 2020-06-22 14:35:35 +02:00
c0b9311b38 Fix for IOS appliances 2020-06-22 14:13:25 +02:00
41e7f1c53e Fix for docker templates 2020-06-22 11:36:21 +02:00
e7dfa6242b Update new-template-dialog.component.ts 2020-06-19 11:47:35 +02:00
3c47cbcb1b Update new-template-dialog.component.html 2020-06-18 19:20:26 +02:00
671b2d9d37 Merge pull request #884 from GNS3/Create-templates-from-appliances
Create templates from appliances
2020-06-18 17:43:21 +02:00
df8f39e951 Fix for importing images 2020-06-18 17:27:52 +02:00
7a62a7589a Settings for appliances added 2020-06-18 17:12:39 +02:00
b8e2bb00ac Option to upload image for appliance added 2020-06-18 16:50:31 +02:00
300e710341 Settings for appliances added 2020-06-18 15:01:35 +02:00
67754192ea Info dialog updated 2020-06-18 10:08:21 +02:00
c415011f34 Update d3-map.component.ts 2020-06-18 09:45:31 +02:00
561226f31b Merge branch 'master' into Create-templates-from-appliances 2020-06-17 17:40:01 +02:00
c7dc56babd Fix for drawing grid 2020-06-17 17:30:11 +02:00
1a8701d845 Fix for node grid 2020-06-17 17:17:51 +02:00
2fd1bb2358 Release 2020.2.0-beta.5 2020-06-17 15:45:26 +02:00
976d92a866 Update ReleaseNotes.txt 2020-06-17 15:44:37 +02:00
220bda22f5 Update node.service.ts 2020-06-17 13:49:05 +02:00
57490b7272 Update node.service.ts 2020-06-17 11:56:52 +02:00
6d0f41714a Update web-console-full-window.component.ts 2020-06-17 11:17:27 +02:00
e853849cc9 code cleaned up 2020-06-17 10:55:39 +02:00
0f4890fd10 Update project-map.component.ts 2020-06-17 10:12:59 +02:00
edb7aefba2 Fix for Chrome browser in private mode 2020-06-16 19:16:18 +02:00
71415dac8f info dialog for appiances 2020-06-16 14:09:09 +02:00
15505b9b8c update for template dialog 2020-06-15 14:29:07 +02:00
66bbe2cd11 Update appliances.service.ts 2020-06-15 12:33:37 +02:00
b3109a8cc5 Merge branch 'master' into Create-templates-from-appliances 2020-06-15 12:21:30 +02:00
41f5af2b90 Merge pull request #889 from GNS3/Strange-behavior-with-Firefox
Strange behavior with firefox
2020-06-15 12:18:42 +02:00
a7f5a5fa09 Fix for auto_close 2020-06-15 10:39:22 +02:00
7248a0f183 Code cleaned up 2020-06-12 16:08:12 +02:00
53b4e064ee Updating server service 2020-06-12 15:44:04 +02:00
5f52f25da4 Update server.service.ts 2020-06-12 14:28:53 +02:00
84212c0c33 Update server.service.ts 2020-06-12 12:05:27 +02:00
d6808ba1d7 Updating mat-stepper for docker templates 2020-06-10 13:53:34 +02:00
d190765a99 Updating stepper for qemu nodes 2020-06-10 12:39:59 +02:00
68a13e293b Updating stepper for IOU devices 2020-06-10 11:41:40 +02:00
0463b8c3b8 Update add-ios-template.component.html 2020-06-10 11:18:20 +02:00
da5dcd5fe9 Update add-docker-template.component.ts 2020-06-10 10:33:14 +02:00
f06ba2bf77 Update template-mocks.service.ts 2020-06-10 10:14:33 +02:00
06e3befe0e Update project-map.component.ts 2020-06-09 17:55:35 +02:00
932c482855 Dialog for changing hostname added 2020-06-09 17:21:13 +02:00
bf292b4286 Update toaster-error-handler.ts 2020-06-09 13:17:37 +02:00
7fa49824c6 Update node.ts 2020-06-09 12:34:14 +02:00
2b380a2699 replicate_network_connection_state added to qemu configurator 2020-06-08 16:05:59 +02:00
eb9102769c Fix for chid.value is undefined 2020-06-08 11:58:11 +02:00
672d25132f Update node.ts 2020-06-05 02:32:53 +02:00
b8ded15ef7 Update project-map.component.ts 2020-06-04 03:02:17 +02:00
3a57e73192 Update symbols.component.html 2020-06-04 02:39:27 +02:00
38dc9ccced Release 2020.2.0-beta.4 2020-06-03 18:56:21 +02:00
f3b6b8393a Update ReleaseNotes.txt 2020-06-03 18:55:32 +02:00
de0454f420 Fix for platforms and adapters 2020-06-03 14:22:37 +02:00
6bf268b47f Fix for network addapters c7200, c3725, c3745, c2691 2020-06-03 12:49:05 +02:00
7625ff5cfa Update add-docker-template.component.ts 2020-06-02 18:08:25 +02:00
455a13b96f Default values in templates 2020-06-02 17:29:14 +02:00
25b1edd178 Option to upload appliance added 2020-06-02 03:15:45 +02:00
d15b4db9fe Filter option added 2020-05-29 01:37:30 +02:00
d5e0c8271b Update new-template-dialog.component.ts 2020-05-28 13:22:57 +02:00
b37b5c7134 Appliance table added 2020-05-28 03:19:59 +02:00
4992eae284 Creating appliance service 2020-05-22 17:49:21 +02:00
0cee6188fb Change sentence "on your local computer" to "locally" 2020-05-20 15:42:14 +09:30
1ed8123082 Change title to "IOU device templates" 2020-05-20 15:27:03 +09:30
424799a54d Change title to "IOS router templates" 2020-05-20 15:26:26 +09:30
5a314f2631 Merge pull request #864 from GNS3/greenkeeper/@sentry/cli-1.53.0
Update @sentry/cli to version 1.53.0
2020-05-18 21:46:40 +02:00
3adc53eda9 chore(package): update @sentry/cli to version 1.53.0 2020-05-18 18:43:26 +00:00
6fc059bd10 fix for docker templates 2020-05-15 23:46:36 +02:00
0e8f9326a3 Update adbutler.component.ts 2020-05-15 00:11:50 +02:00
9a2744bc64 Update add-docker-template.component.ts 2020-05-14 23:04:47 +02:00
d127986b03 Support for Qemu 2020-05-14 16:35:26 +02:00
9e5985c8c8 Update add-iou-template.component.html 2020-05-14 16:34:56 +02:00
5e2d3c6a87 Update add-iou-template.component.ts 2020-05-14 16:14:22 +02:00
482834594f Update add-iou-template.component.ts 2020-05-14 16:13:38 +02:00
3eda507229 Update toaster-error-handler.ts 2020-05-14 16:13:17 +02:00
2f3014fcf6 Support for IOU images 2020-05-12 15:21:18 +02:00
494055a5b5 Merge branch 'master' of https://github.com/GNS3/gns3-web-ui 2020-05-12 13:17:36 +02:00
9f58be90ea Update add-ios-template.component.ts 2020-05-12 13:17:32 +02:00
6f118413af Change "New IOS router" to "New IOS router template" 2020-05-12 11:53:51 +09:30
7a5437c29e Server type in template preferences 2020-05-08 17:02:13 +02:00
c684577c57 Server type in template preferences 2020-05-08 17:01:51 +02:00
afa9facb3a Update gns3vm.component.html 2020-05-08 14:52:46 +02:00
82891b248f Option to auto-hide menu toolbar on the left side 2020-05-07 18:09:43 +02:00
81b388a7fe New port setting for GNS3 VM preferences 2020-05-07 17:18:53 +02:00
cace01ce9a Release 2020.2.0-beta.3 2020-05-06 23:50:53 +02:00
02095ca359 Fix for node select interface 2020-05-06 23:40:33 +02:00
5e95cfdea1 Update add-ios-template.component.ts 2020-05-06 19:44:46 +02:00
449c8a97db roll back changes 2020-05-06 12:18:00 +02:00
f185762969 Update http-console-new-tab-action.component.ts 2020-05-06 11:16:31 +02:00
3f0772c352 Update bundled-server-finder.component.ts 2020-05-06 10:58:52 +02:00
79dee73590 Update template.component.ts 2020-05-06 10:03:45 +02:00
11e116f508 Release 2020.2.0-beta.2 2020-05-05 23:30:25 +02:00
5600364583 Update template.component.ts 2020-05-05 21:40:56 +02:00
e01c06a54e Update template.component.html 2020-05-05 18:19:06 +02:00
81b6eb32cf Update template.component.scss 2020-05-05 18:02:00 +02:00
53c57b069e Update project-map.component.html 2020-05-05 17:38:40 +02:00
626769aa61 Update web-console-full-window.component.ts 2020-05-05 17:05:12 +02:00
467cf2b1d8 Update ReleaseNotes.txt 2020-05-04 18:51:44 +02:00
1fd926593a Update ReleaseNotes.txt 2020-05-04 18:50:18 +02:00
9595787e59 Merge pull request #832 from GNS3/Drag-&-drop-to-add-new-nodes
Initial implementation of drag & drop to add new node
2020-05-04 18:19:20 +02:00
9b482837d8 Menu height extended 2020-05-04 18:05:39 +02:00
fe51a1797d List restyled 2020-05-04 16:36:14 +02:00
6b6ac2f312 Calculating node position updated 2020-05-04 12:35:44 +02:00
8da4407109 CanDeactivate project map component when console is open 2020-05-02 20:26:42 +02:00
c3ebdd6498 Fix for console icons 2020-05-02 11:06:25 +02:00
c23892f836 Option to minimize added 2020-05-01 23:30:30 +02:00
9e2bc25c01 Fix for console widget 2020-04-30 16:33:20 +02:00
9594e397e5 Updating drop mechanism 2020-04-30 15:16:01 +02:00
a75de3b179 Update add-ios-template.component.ts 2020-04-29 17:34:26 +02:00
e78ca38f30 Possibility to manage network adapters added 2020-04-29 17:27:47 +02:00
57c9caa40f Update add-ios-template.component.html 2020-04-28 10:31:14 +02:00
b6d02ca5d4 Default settings for templates 2020-04-27 22:38:37 +02:00
18f7f350f7 Use node names in HTTP console tabs 2020-04-27 18:02:33 +02:00
72b6be6862 IOS service updated 2020-04-22 16:36:11 +02:00
1d0baa8857 Support for adding IOS images 2020-04-21 22:35:52 +02:00
d3d897c936 Update add-docker-template.component.html 2020-04-20 19:38:06 +02:00
01d49a7321 Initial implementation of drag & drop to add new node 2020-04-20 15:21:34 +02:00
6860efa2a6 Fix for symbols component 2020-04-19 00:24:55 +02:00
505c6152fb Update project-map.component.html 2020-04-17 13:12:31 +02:00
9a33b28576 Adding node dialog updated 2020-04-16 17:40:45 +02:00
b3aee79f40 Update toaster-error-handler.ts 2020-04-16 14:58:09 +02:00
ee784783a9 fix for creating ethernet switches and hubs 2020-04-16 13:49:20 +02:00
09a03ea013 Update configurator-cloud.component.ts 2020-04-16 13:10:42 +02:00
0bcc662d91 Update project-map.component.ts 2020-04-15 22:42:58 +02:00
0e4ea77d3f Update web-console-full-window.component.ts 2020-04-15 17:18:34 +02:00
71c1798152 Update web-console.component.ts 2020-04-15 17:12:05 +02:00
1199dedc23 Update mapsettings.service.ts 2020-04-15 11:57:04 +02:00
e85fb93923 Update project-map.component.html 2020-04-14 10:26:10 +02:00
ffefd65625 Upgrade psutil to version 5.6.6 2020-04-12 21:54:20 +09:30
10f7376030 Update configurator-qemu.component.ts 2020-04-10 14:35:44 +02:00
3f4bb0b172 Update notification-box.component.ts 2020-04-10 13:07:31 +02:00
33c35308f9 Update notification-box.component.ts 2020-04-10 11:06:00 +02:00
e7766ec708 Update project-map-guard.ts 2020-04-09 13:32:41 +02:00
1afbb39d85 Update project-map.component.ts 2020-04-09 12:14:46 +02:00
5c57135a80 Release 2020.2.0-beta.1 2020-04-07 14:29:16 +02:00
252bcf89d5 Update import-appliance.component.html 2020-04-07 14:25:07 +02:00
7279ca71ed Update context-menu.component.html 2020-04-03 18:47:12 +02:00
2b2511537b Update project-map.component.scss 2020-04-03 18:41:02 +02:00
e21602069e Update add-server-dialog.component.ts 2020-04-03 18:26:07 +02:00
24fffafbf1 Update screenshot-dialog.component.ts 2020-04-02 01:08:57 +02:00
f71af8c57c Update info-dialog.component.html 2020-04-01 23:54:15 +02:00
f722872a94 Fix for footer 2020-04-01 23:51:13 +02:00
b424abb600 Update web-console-full-window.component.ts 2020-04-01 18:35:05 +02:00
48dbd7f6aa Web console in new tab 2020-04-01 00:07:19 +02:00
2d8c5966cd Close button for console added 2020-03-30 18:40:55 +02:00
d16913a678 Merge pull request #768 from GNS3/HTML5-console-support
HTML5 console support
2020-03-30 17:50:57 +02:00
65f86ee4e4 Resizing disabled 2020-03-30 09:29:16 +02:00
7393fd52e1 Bug fixes 2020-03-28 19:28:31 +01:00
bb75727aaf Update yarn.lock 2020-03-28 09:35:05 -07:00
ee9fc3cb29 Update yarn.lock 2020-03-28 09:33:30 -07:00
2cd3b7a4d6 Update dependencies 2020-03-27 16:31:22 -07:00
7f16a6db1e Update yarn.lock 2020-03-27 22:38:38 +01:00
6e21cfeb4f Fix for style 2020-03-27 22:20:40 +01:00
2c3387c960 Update web-console.component.ts 2020-03-27 13:45:05 +01:00
a341d7c2ec Fix for tabs 2020-03-27 13:14:14 +01:00
43787e94e8 Resize evnt added 2020-03-26 22:53:29 +01:00
4402a53ae0 Fix for xtermjs 2020-03-26 21:18:22 +01:00
c33c6b8f36 Release 2020.1.0-alpha.1 2020-03-24 23:32:07 +01:00
4fc87c4cda Initial implementation 2020-03-23 01:26:52 +01:00
34059da0f6 Show interface availability 2020-03-18 16:13:14 +01:00
6a21b88a4a Fix for unit tests 2020-03-18 14:11:43 +01:00
7ca696643f Merge branch 'master' of https://github.com/GNS3/gns3-web-ui 2020-03-18 11:07:15 +01:00
a0aa918016 Update topology-summary.component.spec.ts 2020-03-18 11:07:11 +01:00
0cad0ee459 Switch to circleci 2.1 configuration to enable pipelines 2020-03-18 17:41:16 +10:30
2b45f7a643 Extending error information 2020-03-17 17:45:01 +01:00
ae540777a4 Update symbols.component.scss 2020-03-17 14:37:07 +01:00
117e67ed33 Suffixes added 2020-03-17 14:01:57 +01:00
8b332a51f5 Update toaster.service.ts 2020-03-16 22:26:30 +01:00
1622d7d60a Update bring-to-front-action.component.ts 2020-03-16 17:43:31 +01:00
ac3335a33d Fix for 'back to project' error 2020-03-16 13:00:02 +01:00
b33eb4ce24 Updating topology summary widget 2020-03-09 13:52:26 +01:00
271807cd9a Update import-project-dialog.component.html 2020-03-09 09:35:36 +01:00
a83d2141f6 Update project-map.component.html 2020-03-06 18:11:10 +01:00
00ed82183c Update toaster.service.ts 2020-03-06 18:03:26 +01:00
6b5051d58b Update servers.component.ts 2020-03-06 17:57:57 +01:00
51805832c3 Update add-server-dialog.component.ts 2020-03-06 17:36:37 +01:00
f0aeb8df07 Update projects.component.html 2020-03-06 17:31:37 +01:00
f6f7ceb627 Updating node converters 2020-03-02 16:12:36 +01:00
c2c74f34ea Merge pull request #687 from GNS3/e2e
Introducing E2E tests in GNS3 Web UI
2020-03-02 10:33:02 +01:00
ea2f5e8801 Update package.json 2020-03-02 10:12:00 +01:00
e5f0bbb07c Merge branch 'master' into e2e 2020-03-02 09:57:16 +01:00
a0043660e8 Merge branch 'master' into e2e 2020-02-28 15:39:42 +01:00
541fc18811 Merge pull request #698 from GNS3/async-validators
Async validator for projects
2020-02-28 15:17:44 +01:00
487eda0dee Update add-blank-project-dialog.component.spec.ts 2020-02-28 15:17:09 +01:00
7598cfffcd Merge branch 'master' into async-validators 2020-02-28 14:44:22 +01:00
04a2cd543a Merge pull request #688 from GNS3/angular-resolvers
Introducing the Angular 8 Resolvers to Web UI to fetch data before navigating to the route
2020-02-28 14:30:13 +01:00
5c37f4dfa6 Merge branch 'master' into angular-resolvers 2020-02-28 14:27:52 +01:00
0148480d5b Merge branch 'master' into angular-resolvers 2020-02-28 14:11:32 +01:00
0d1739e63e Merge branch 'master' into e2e 2020-02-28 14:07:50 +01:00
cfdfebc2d4 Merge pull request #701 from GNS3/Route-guards-for-project-map-page
Route guards for project-map page
2020-02-28 14:06:41 +01:00
1950a675cc Merge branch 'master' into Route-guards-for-project-map-page 2020-02-28 14:04:20 +01:00
52880ddc3e Updating list when project removed 2020-02-28 14:02:00 +01:00
c996c1fe51 Update project-map-guard.ts 2020-02-28 13:24:34 +01:00
54c2af8896 Update project-map-guard.ts 2020-02-28 12:33:09 +01:00
851d006ef2 Updating e2e tests 2020-02-27 13:11:35 +01:00
53b3128c66 Update project-map.po.ts 2020-02-27 11:30:05 +01:00
8b2535c03d Merge branch 'master' into async-validators 2020-02-27 10:50:04 +01:00
7ddc75b2ff Merge pull request #696 from GNS3/Activating-text-editing-in-ngZone.runOutsideAngular-to-avoid-'refreshing-effect'
Activating text editing in ngZone.runOutsideAngular to avoid 'refresh effect'
2020-02-27 10:46:10 +01:00
b195bad841 Merge branch 'master' into Activating-text-editing-in-ngZone.runOutsideAngular-to-avoid-'refreshing-effect' 2020-02-27 10:44:54 +01:00
1df117ba60 Merge pull request #694 from GNS3/Handle-router-events-with-progress-service
Handle router events with progress service
2020-02-27 10:41:28 +01:00
5f448da7d3 Merge branch 'master' into Handle-router-events-with-progress-service 2020-02-27 10:39:51 +01:00
5abbbcdb65 Update app.component.spec.ts 2020-02-27 10:39:01 +01:00
f9938db312 Merge pull request #702 from GNS3/Basic-cache-for-some-of-the-services
Basic cache for some of the services
2020-02-27 10:14:41 +01:00
e69b4684e7 Update symbol.service.spec.ts 2020-02-27 10:08:53 +01:00
94f690bb2f Merge branch 'master' into Basic-cache-for-some-of-the-services 2020-02-27 08:51:21 +01:00
e6c9df863c Merge pull request #709 from GNS3/Node-information-dialog-improvements
Node information dialog improvements
2020-02-27 08:48:59 +01:00
ca3045d236 Merge branch 'master' into Node-information-dialog-improvements 2020-02-27 08:29:12 +01:00
cf60f1a046 E2E for project map page 2020-02-26 19:39:36 +01:00
2e82ed8ebf Merge branch 'master' into e2e 2020-02-26 17:21:33 +01:00
36a5596d33 Test for projects page added 2020-02-26 13:43:30 +01:00
6ac9c94922 Merge pull request #699 from GNS3/scrollPositionRestoration
Scroll position restoration
2020-02-25 15:11:33 +01:00
556f0f8ed5 Merge pull request #710 from GNS3/System-status-improvements
System status improvements
2020-02-25 15:10:38 +01:00
8fc1505a96 Merge pull request #708 from GNS3/Changes-with-add-node-dialog
Updating add node dialog
2020-02-25 15:10:04 +01:00
82d31b8f19 Merge pull request #704 from GNS3/Disable-click-outside-of-angular-material-dialog-area-to-close-the-dialog
Disable click outside of angular material dialog area to close the di…
2020-02-25 15:08:07 +01:00
b54fe1d9d1 Merge pull request #707 from GNS3/Dynamic-AdButler-component
Dynamic components
2020-02-25 15:06:54 +01:00
882bc94bb6 Merge pull request #703 from GNS3/New-disk-interface-and-NIC-models-for-Qemu-VMs
Update qemu-configuration.service.ts
2020-02-25 15:06:23 +01:00
adadf886ab Merge pull request #695 from GNS3/One-subscription-instead-of-many-subscriptions
One subscription instead of many subscriptions
2020-02-25 15:05:42 +01:00
135f37fa92 Merge pull request #692 from GNS3/remove-extended-ng-classes
Getters in code instead of extended ngClass in HTML files
2020-02-25 15:05:07 +01:00
3c722f3baa Merge pull request #690 from GNS3/angular-onpush
Introducing onPush strategy
2020-02-25 15:04:43 +01:00
cd111fde13 Merge pull request #697 from GNS3/Project-name-as-page-title
Project name as page title
2020-02-25 15:04:19 +01:00
7f1d91ff1e System status improvements 2020-02-24 15:46:21 +01:00
62e0d64bf7 Node information dialog improvements 2020-02-24 15:40:49 +01:00
c73a8ddf16 Updating add node dialog 2020-02-24 15:19:28 +01:00
f40b2c64c2 Update template-list-dialog.component.ts 2020-02-24 13:49:31 +01:00
0f542c3e3b Dynamic AdButler component 2020-02-24 11:55:23 +01:00
2396bef0cc Disable click outside of angular material dialog area to close the dialog 2020-02-20 12:17:36 +01:00
156096a948 Update qemu-configuration.service.ts 2020-02-20 09:58:16 +01:00
76d0f0d209 Basic cache for some of the services 2020-02-19 15:54:18 +01:00
0beff5f418 Route guards for project-map page 2020-02-19 11:23:18 +01:00
6413c2fdec Scroll position restoration 2020-02-17 15:53:41 +01:00
f7143b4d93 Async validator for projects 2020-02-17 15:02:25 +01:00
2e851cd6d2 Project name as page title 2020-02-17 11:48:25 +01:00
d8a8af306e Activating text editing in ngZone.runOutsideAngular to avoid 'refreshing effect' 2020-02-17 11:24:35 +01:00
a1476384e6 One subscription instead of many subscriptions 2020-02-14 15:40:06 +01:00
20a86eb6bf Handle router events with progress service 2020-02-14 11:55:00 +01:00
b28f224fdd Getters in code instead of extended ngClass in HTML files 2020-02-13 11:26:27 +01:00
4de4471d73 On push strategy for project map components 2020-02-11 17:16:47 +01:00
875c4f3152 Fix for unit tests 2020-02-10 14:52:54 +01:00
4d369eef30 server resolver for snapshots page 2020-02-10 13:43:48 +01:00
f5ee039510 server reolver for projects page 2020-02-10 11:52:39 +01:00
fce7241bb2 e2e 2020-02-07 16:52:12 +01:00
f744c02c44 e2e 2020-02-07 13:57:32 +01:00
e11281ddf6 Update node.ts 2020-01-27 17:37:24 +01:00
b134a7fecf Support for starting local server 2020-01-21 06:34:44 -08:00
f49cc1960c Option to open file explorer added 2020-01-21 12:06:26 +01:00
235483dba5 Merge pull request #669 from GNS3/System-status
Support for system status
2020-01-20 23:24:29 -08:00
4955245b9c Update status-info.component.ts 2020-01-20 17:38:40 +01:00
8175c47b6f Update status-info.component.ts 2020-01-20 17:23:00 +01:00
61cca78609 Memory data added 2020-01-20 17:16:07 +01:00
acc41aebe1 Update status-chart.component.ts 2020-01-20 16:54:57 +01:00
9835c5b4cc Circle progress added 2020-01-20 16:43:29 +01:00
eab9bca34a Merge pull request #668 from GNS3/During-adding-the-node-customer-is-able-to-change-the-server-where-node-should-be-located-at
Option to choose server type for node added
2020-01-20 04:02:06 -08:00
31cffedd93 Option to choose server type for node added 2020-01-20 10:34:07 +01:00
46f3b9f1f0 Merge pull request #653 from GNS3/Direct-links-to-servers-and-projects
Direct links to servers and projects
2020-01-16 05:18:04 -08:00
fd2599f4a1 Update edit-project-dialog.component.ts 2020-01-16 13:08:13 +01:00
0adaa88e6d Update adbutler.component.ts 2020-01-13 15:00:29 +01:00
7b94cb779a Update direct-link.component.ts 2020-01-07 06:38:07 -08:00
50c5701192 Basic implementation 2020-01-07 05:54:31 -08:00
2d2738024e Merge pull request #649 from GNS3/Integrate-Google-Analytics-in-Web-UI
Integrate Google Analytics in Web UI
2020-01-07 10:28:25 +01:00
11baa33169 GoogleAnalytics service added 2020-01-03 03:53:33 -08:00
939d6d4e0a Merge pull request #651 from GNS3/TypeError-n.source-is-undefined
Update interface-status.ts
2020-01-03 11:58:32 +01:00
50e2c02f93 Update interface-status.ts 2020-01-03 02:12:51 -08:00
85f3172111 Update index.html 2020-01-02 05:45:06 -08:00
67aaaa8b2a Update package.json 2019-12-30 05:19:19 -08:00
5c2b773d33 Release naming convention 2019-12-30 14:17:39 +01:00
3b452d746c Release 2019.2.0-alpha.11 2019-12-30 02:29:52 -08:00
492539460d Merge pull request #644 from GNS3/Updating-release-notes
Updating ReleaseNotes.txt
2019-12-30 11:22:36 +01:00
5cf1326d1e Update ReleaseNotes.txt 2019-12-30 02:20:20 -08:00
46dbd31ec1 Bump psutil version to 5.6.3 2019-12-24 03:38:12 +08:00
0820b835d7 Force Python 3.6.5 for building on macOS 2019-12-24 02:52:23 +08:00
a88fd0df76 Try to upgrade yarn before node 2019-12-24 01:52:43 +08:00
9b239ebc85 Merge pull request #639 from GNS3/GNS3---Importing-appliances-&-creating-templates-from-appliances
GNS3 - Importing appliances & creating templates from appliances
2019-12-23 13:16:37 +01:00
9a4bb93add Code cleaned up 2019-12-23 04:16:17 -08:00
58069d4962 Update import-appliance.component.ts 2019-12-23 04:08:54 -08:00
e965bc11e2 Update import-appliance.component.ts 2019-12-23 03:50:12 -08:00
60f3bd6f1e Update yarn.lock 2019-12-20 01:20:02 -08:00
a704d0dcd0 Creating templates added 2019-12-20 01:10:51 -08:00
b048c308d6 Importing appliances extracted to separated component 2019-12-17 07:12:25 -08:00
d60d906043 Test version 2019-12-09 15:59:02 +01:00
14fcf9466d Merge pull request #631 from GNS3/Wizard-with-option-to-configure-gns3vm-(electron-version)
GNS3 - Wizard with option to configure gns3vm (electron version)
2019-12-05 15:29:48 +01:00
fe29be8237 Unit tests updated 2019-12-05 15:28:13 +01:00
bbe19e0513 Dialog added to projects page 2019-12-05 14:53:23 +01:00
8f4b2c502f Merge pull request #626 from GNS3/white-theme
Light theme (white) support
2019-11-28 14:25:44 +01:00
f9af6e32be Saving theme in local storage 2019-11-28 05:25:07 -08:00
6870f707bf Fix for map view 2019-11-28 05:07:29 -08:00
80207eda36 White theme for web UI 2019-11-28 04:27:11 -08:00
999921bfe4 Fix for dialogs 2019-11-27 07:23:03 -08:00
0c8c09ef56 Light theme added for non-material components 2019-11-27 07:18:41 -08:00
919e5fb44b Theme for mat icons updated 2019-11-26 08:06:07 -08:00
49b669819d Update theme-light.scss 2019-11-26 06:02:06 -08:00
aefcc16b3a Update theme-light.scss 2019-11-26 05:32:02 -08:00
578038e792 Update default-layout.component.css 2019-11-26 04:49:44 -08:00
5b340507e5 Update default-layout.component.css 2019-11-26 03:44:19 -08:00
8b25b2fa08 Initial implementation 2019-11-26 02:39:24 -08:00
4c7bf86ff0 Merge pull request #609 from GNS3/greenkeeper/electron-7.1.2
Update electron to the latest version 🚀
2019-11-21 13:46:48 +01:00
e02311af57 Merge pull request #606 from GNS3/greenkeeper/yargs-15.0.2
Update yargs to the latest version 🚀
2019-11-21 13:46:28 +01:00
7062f4b874 Merge pull request #610 from GNS3/GNS3-VM-preferences
Support for GNS3 VM preferences
2019-11-20 14:47:41 +01:00
fbcebb9c2a Merge pull request #612 from GNS3/greenkeeper/@types/node-12.12.10
Greenkeeper/@types/node 12.12.10
2019-11-20 14:35:36 +01:00
5048f84e9c Merge pull request #611 from GNS3/greenkeeper/ngx-device-detector-1.3.18
Greenkeeper/ngx device detector 1.3.18
2019-11-20 14:34:48 +01:00
de3938d5e0 Support for managing GNS3 VM preferences enabled 2019-11-20 05:26:09 -08:00
95d0645506 Support for GNS3 VM preferences 2019-11-20 02:37:51 -08:00
abad187ea6 chore(package): update lockfile
https://npm.im/greenkeeper-lockfile
2019-11-20 02:58:03 +00:00
2d364c3636 chore(package): update electron to version 7.1.2 2019-11-20 02:53:16 +00:00
0782994340 chore(package): update lockfile yarn.lock 2019-11-19 23:28:46 +00:00
8aa4a52d34 chore(package): update ngx-device-detector to version 1.3.18 2019-11-19 23:28:42 +00:00
1f624e3957 chore(package): update lockfile
https://npm.im/greenkeeper-lockfile
2019-11-19 19:30:08 +00:00
b1b84efa61 chore(package): update @types/node to version 12.12.10 2019-11-19 19:25:10 +00:00
84efd2d2a9 chore(package): update lockfile
https://npm.im/greenkeeper-lockfile
2019-11-19 12:51:59 +00:00
12616a6519 fix(package): update yargs to version 15.0.2 2019-11-19 12:47:13 +00:00
d37d4ebac1 Merge pull request #603 from GNS3/Before-connection-to-the-server-we-need-to-check-minimal-supported-version
Before connection to the server we need to check minimal supported version
2019-11-19 11:10:53 +01:00
91fa54cf9b Before connection to the server we need to check minimal supported version 2019-11-19 02:01:20 -08:00
58a02c7066 Merge pull request #596 from GNS3/Improvements-for-adding-nodes
Improvements for adding nodes
2019-11-18 16:26:33 +01:00
f8c798340e Merge branch 'master' into Improvements-for-adding-nodes 2019-11-18 07:25:55 -08:00
f16be0b97b Merge pull request #597 from GNS3/Some-issues-with-projects-that-don't-exist
Some issues with projects that don't exist
2019-11-18 16:23:51 +01:00
9ade466b80 Merge branch 'master' into Some-issues-with-projects-that-don't-exist 2019-11-18 07:23:55 -08:00
4b1ee170df Merge pull request #599 from GNS3/Screenshot-SVG-image-issue
Screenshot SVG image issue
2019-11-18 16:22:53 +01:00
e982c6d4c7 Merge branch 'master' into Screenshot-SVG-image-issue 2019-11-18 07:22:47 -08:00
7eaabf0cc8 Merge pull request #602 from GNS3/Missing-import-config-in-node-contextual-menu
Missing import config in node contextual menu
2019-11-18 16:21:21 +01:00
ff5d79f38f Dialog for im porting private config added 2019-11-18 07:21:17 -08:00
8ca4eabe22 Dialog to choose config type to export 2019-11-18 05:47:44 -08:00
01d2fc2d43 Initial implementation added 2019-11-18 04:25:54 -08:00
5db7fbc461 Fix for unit tests 2019-11-15 04:36:56 -08:00
6986dccf6e Support for png files 2019-11-15 03:45:30 -08:00
ed9ca9ed03 Update adbutler.component.ts 2019-11-14 05:07:58 -08:00
fa59471dd8 Fix for open project error 2019-11-14 04:34:28 -08:00
1ff8f00397 Fix for navigation issue 2019-11-14 03:58:29 -08:00
f225de7467 Support for different names 2019-11-14 00:42:22 -08:00
b6d74c58cb Code cleaned up 2019-11-13 07:30:06 -08:00
ce97ba085d Initial implementation 2019-11-13 01:54:54 -08:00
a0cace9b62 Update projects.component.spec.ts 2019-11-06 05:36:48 -08:00
ffc3e02855 Close button added 2019-11-06 05:15:26 -08:00
47cc51a68d Option to close project from map menu added 2019-11-06 03:30:43 -08:00
fabfff2e8f Update node.ts 2019-11-06 02:47:31 -08:00
bc89f796a6 Merge pull request #577 from GNS3/Some-actions-should-be-allowed-when-selecting-multiple-nodes
Actions for group of nodes added
2019-11-05 13:47:09 +01:00
ed7d67f570 Actions for group of niodes added 2019-11-05 04:44:14 -08:00
1798aaf7dd Fix for routing 2019-11-05 02:24:19 -08:00
00cf8a29c7 Merge pull request #576 from GNS3/404-Not-found-page-support
404 Not found page support
2019-11-05 10:43:00 +01:00
0e04e9b021 Support for 404 2019-11-05 01:42:04 -08:00
e6e518b40f Merge pull request #575 from GNS3/Adbutler-error
Checking if ad is loaded correctly added
2019-11-05 09:43:17 +01:00
6f65063477 Checking if ad is loaded correctly added 2019-11-05 00:31:11 -08:00
1a531e5f6e Merge pull request #574 from GNS3/No-indicators-that-a-link-is-suspended
Support for suspended status added
2019-11-04 14:16:27 +01:00
c9c11d1031 Support for suspended status added 2019-11-04 05:14:05 -08:00
3132136020 Update package.json 2019-10-31 04:18:58 -07:00
67e6003f47 Release 2019.2.0-alpha.10 2019-10-31 03:52:22 -07:00
ae414c1f60 Update package.json 2019-10-31 02:53:47 -07:00
c5515ca832 Release 2019.2.0-alpha.9 2019-10-31 01:39:43 -07:00
97c5c4599f Merge pull request #564 from GNS3/release_branch
Updating release notes
2019-10-30 14:18:44 +01:00
a8731da525 Update ReleaseNotes.txt 2019-10-30 06:15:22 -07:00
349078a61c Update ReleaseNotes.txt 2019-10-30 05:37:10 -07:00
20b87dd330 Update config.yml 2019-10-30 02:32:49 -07:00
44ce03d354 Update config.yml 2019-10-30 02:28:04 -07:00
fb381370f5 Update config.yml 2019-10-30 02:24:43 -07:00
146543bc87 Update config.yml 2019-10-30 02:20:15 -07:00
43131547e5 Merge pull request #543 from GNS3/Widget-dragging
Topology summary widget & servers summary & console with option to drag
2019-10-29 10:12:33 +01:00
50b28596ae Dragging for console widget 2019-10-29 01:29:53 -07:00
3e8c21082b Solution ready for topology summary widget 2019-10-28 08:09:59 -07:00
cb71af1ea3 Dragging with resizing 2019-10-28 07:48:39 -07:00
6b327316b7 Merge pull request #555 from GNS3/Support-for-global-variables
Support for global variables
2019-10-28 12:52:54 +01:00
a6ed6660ca Update topology-summary.component.ts 2019-10-28 03:57:57 -07:00
d51f024a16 Support for global variables added 2019-10-28 03:39:36 -07:00
3447ac4b42 Merge branch 'master' into Widget-dragging 2019-10-28 01:20:20 -07:00
830e9edc60 Merge branch 'master' into Support-for-global-variables 2019-10-28 01:19:22 -07:00
e80aec68fe Fix for unit tests 2019-10-28 01:12:20 -07:00
2d588c411d Merge pull request #530 from GNS3/Fit-in-view-option
Option to fit in view
2019-10-25 14:29:56 +02:00
0c788b9898 Code cleaned up 2019-10-25 05:19:30 -07:00
1762c118b6 Merge branch 'master' into Support-for-global-variables 2019-10-25 04:23:34 -07:00
3a10302a9b Merge branch 'master' into Widget-dragging 2019-10-25 04:22:39 -07:00
92b9163bf3 Merge branch 'master' into Fit-in-view-option 2019-10-25 04:22:19 -07:00
8e97a71696 Code cleaned up 2019-10-25 04:22:02 -07:00
3e54df0b79 Merge pull request #553 from GNS3/Snap-to-grid
Snap to grid
2019-10-25 10:48:56 +02:00
0dbede58f2 Merge pull request #552 from GNS3/Option-to-show-the-grid
Option to show the grid
2019-10-25 10:48:31 +02:00
0bffe1b0b0 Merge pull request #547 from GNS3/Usage-instructions-should-be-available-from-context-menu
Usage instructions for nodes
2019-10-25 10:47:58 +02:00
98f93901ec Initial implementaion - global variables 2019-10-25 00:43:13 -07:00
ceda238507 Fix for unit tests 2019-10-24 23:27:15 -07:00
6274c90a33 Button added 2019-10-24 08:10:03 -07:00
b372493e51 Snap to grid for drawings 2019-10-24 08:05:50 -07:00
6b804fa525 Snap to grid for nodes applied 2019-10-24 07:34:01 -07:00
2f1d6d80d5 Option to show grid available from menu 2019-10-24 05:11:26 -07:00
128953b0fe Initial implementation 2019-10-24 03:02:32 -07:00
97aa9d7413 Usage instructions added 2019-10-23 05:39:03 -07:00
cb7ec182d3 Merge branch 'master' into Fit-in-view-option 2019-10-23 04:40:09 -07:00
adb65dc50c Merge branch 'master' into Widget-dragging 2019-10-23 04:39:42 -07:00
6d81bd4a0b Merge pull request #542 from GNS3/Widget-resizing
Topology summary widget & servers summary & console widget with option to resize
2019-10-23 13:35:12 +02:00
9a6bcad71c Merge branch 'master' into Widget-dragging 2019-10-23 04:33:50 -07:00
9c49236f1c Merge branch 'master' into Widget-resizing 2019-10-23 04:31:35 -07:00
6880c993ab Merge pull request #535 from GNS3/Support-for-layers
Support for layers
2019-10-23 13:22:38 +02:00
9674f20941 Merge pull request #534 from GNS3/update-dependencies
Updating dependencies
2019-10-23 13:10:57 +02:00
d32e3f6b7f Merge pull request #540 from GNS3/Context-menu-for-inserted-drawings
Context menu for inserted drawings
2019-10-23 12:47:32 +02:00
1db8157f1a Toggle button added 2019-10-23 03:00:40 -07:00
e7973839c7 Update config.yml 2019-10-23 02:17:24 -07:00
df125f87b2 Update config.yml 2019-10-23 02:09:55 -07:00
b3f9a61d60 Update config.yml 2019-10-23 02:08:32 -07:00
949dcb0fc1 Merge branch 'master' into Widget-dragging 2019-10-23 01:30:49 -07:00
f7a9b78833 Merge branch 'master' into Widget-resizing 2019-10-23 01:30:35 -07:00
1703075b63 Merge branch 'master' into Context-menu-for-inserted-drawings 2019-10-23 01:30:18 -07:00
fc21c0717f Merge branch 'master' into Support-for-layers 2019-10-23 01:29:59 -07:00
01f90433b0 Merge branch 'master' into update-dependencies 2019-10-23 01:29:36 -07:00
3051368ee7 Merge branch 'master' into Fit-in-view-option 2019-10-23 01:28:52 -07:00
052eab0367 Merge pull request #533 from GNS3/Show-errors-&-warnings-as-notifications
Show errors & warnings as notifications
2019-10-23 10:26:32 +02:00
761e1a62ce Another approach for topology summary widget 2019-10-22 07:06:02 -07:00
b17fcd251b Ability to drag widgets added 2019-10-22 06:15:53 -07:00
3d3983926b Log console with option to resize 2019-10-22 04:57:13 -07:00
0659bf01fe Resizing topology & servers summary applied 2019-10-22 02:42:32 -07:00
3f1257cfe9 Initial implementation 2019-10-22 01:09:38 -07:00
31d7719fee Context menu for inserted drawings 2019-10-21 07:03:37 -07:00
bea4d4f296 Update drawing.ts 2019-10-21 06:05:33 -07:00
87454fd7ed Layers for nodes added 2019-10-17 07:35:22 -07:00
3ac5bf879a Update package.json 2019-10-17 05:31:55 -07:00
8e8d5a46a5 Update package.json 2019-10-17 05:15:46 -07:00
85b60f390d Update package.json 2019-10-17 05:08:55 -07:00
c01ad75457 Update node.ts 2019-10-17 04:16:04 -07:00
a60595c299 Merge branch 'master' into Show-errors-&-warnings-as-notifications 2019-10-17 01:49:41 -07:00
eac1662294 Merge branch 'master' into Fit-in-view-option 2019-10-17 01:49:23 -07:00
7576b1c81c Update project-map.component.ts 2019-10-16 08:19:00 -07:00
18b037ef04 Merge pull request #502 from GNS3/greenkeeper/xterm-4.0.0
Update xterm to the latest version 🚀
2019-10-16 16:12:26 +02:00
623ff89f1a Notifications added 2019-10-16 06:58:59 -07:00
b8d607b7c6 Update project-map.component.ts 2019-10-16 05:07:43 -07:00
2981d6eafe Update project-map.component.ts 2019-10-11 05:55:05 -07:00
ebd2614b84 Initial implementation 2019-10-11 04:02:13 -07:00
3cb517743c Merge pull request #446 from GNS3/custom-html-adbutler-ads
AdButler - custom HTML ad
2019-10-11 08:35:22 +02:00
59778da856 Merge pull request #528 from GNS3/Disabling-experimental-features
Disabling experimental features
2019-10-11 08:33:07 +02:00
8def343892 Disabling experimental features 2019-10-10 06:55:19 -07:00
8233985136 Update notification-box.component.ts 2019-10-10 06:03:28 -07:00
d756ce9b87 Merge branch 'master' into custom-html-adbutler-ads 2019-10-10 05:44:00 -07:00
63987f5df8 Update log-console.component.ts 2019-10-09 08:10:28 -07:00
efdf98b869 Update project-map-menu.component.spec.ts 2019-10-09 00:40:25 -07:00
37c491acc6 Merge pull request #521 from GNS3/screenshots
Fix for screenshots
2019-10-08 14:55:13 +02:00
4a180adda9 Update screenshot-dialog.component.html 2019-10-08 05:54:35 -07:00
b0b2c0718e Dialog for screenshots introduced 2019-10-08 05:21:35 -07:00
e4d977fe15 Merge branch 'master' into screenshots 2019-10-08 00:59:52 -07:00
3afcac3963 Merge pull request #524 from GNS3/node_configs
Support for editing config files - IOU & routers
2019-10-08 09:23:44 +02:00
864bb84270 Update export-config-action.component.ts 2019-10-08 00:21:02 -07:00
70f7c54de0 Unit tests updated 2019-10-07 23:42:36 -07:00
0d89b7df11 Support for editing config files - IOU & routers 2019-10-04 06:27:34 -07:00
70c9b98c3f Merge pull request #523 from GNS3/WebUI-starts-at-0,0-position
Option to center view added
2019-10-04 12:51:27 +02:00
ff5f8eddc3 Option to center view added 2019-10-04 03:45:34 -07:00
14581d0d5f Merge branch 'master' of https://github.com/GNS3/gns3-web-ui 2019-10-04 01:22:06 -07:00
5e76902934 Update nodes-menu.component.ts 2019-10-04 01:21:51 -07:00
725c387bdd Merge pull request #522 from GNS3/View-options-(like-show-interface-labels,-etc.)-should-be-taken-from-configuration-file
View options (like show interface labels, etc.) should be taken from configuration file
2019-10-04 10:16:53 +02:00
e7ac895b85 Editing projects updated 2019-10-04 01:15:46 -07:00
fb148ff534 Update project-map-menu.component.spec.ts 2019-10-04 00:34:40 -07:00
077c94f567 Update project-map-menu.component.ts 2019-10-03 08:31:39 -07:00
20413c6d8a Merge pull request #520 from GNS3/GNS3---After-importing/adding-new-project-we-should-ask-user-if-we-should-navigate-to-the-map-page
After importing new project we should ask user if we should navigate to the map page
2019-10-03 16:53:23 +02:00
1a7be375a9 Unit tests updated 2019-10-03 07:52:48 -07:00
41c67ae6ec Bottom sheet for imported projects 2019-10-03 07:16:57 -07:00
0ab0e7712e Merge pull request #519 from GNS3/WebUI-Cannot-read-property-'forEach'-of-undefined
Web ui cannot read property 'for each' of undefined
2019-10-03 13:48:35 +02:00
ce8574d64b Update node-to-map-node-converter.ts 2019-10-03 04:15:30 -07:00
02be6b2449 Bug fixed 2019-10-03 02:56:12 -07:00
42f1f8b49a Update lock-action.component.ts 2019-10-02 07:07:52 -07:00
6cf670d5cf Merge pull request #516 from GNS3/Ability-to-lock-single-item-on-map
Ability to lock single item on map
2019-10-02 15:43:41 +02:00
c2263336a9 Solution with svg crowbar library 2019-10-02 06:14:51 -07:00
26fed4cabb Another approach for map screenshots 2019-10-02 04:29:32 -07:00
45653036f9 Fix for #515 2019-10-01 06:14:35 -07:00
4d5ac71f0b Fix for #514 2019-10-01 01:24:26 -07:00
dfa25d7b94 Fix for 512 2019-09-30 06:44:19 -07:00
a242c1c66f Unit tests fixed 2019-09-30 05:53:30 -07:00
8764a417d3 Action available from context menu 2019-09-30 04:48:01 -07:00
35ade675df Merge pull request #511 from GNS3/package-updating
Package updating
2019-09-28 16:05:17 +02:00
5a82f982a9 Update import-project-dialog.component.spec.ts 2019-09-27 05:26:54 -07:00
f92894d4c2 Tests updated 2019-09-27 04:56:21 -07:00
4bb9b98154 Update package.json 2019-09-27 03:02:44 -07:00
c94c12c27a Update package.json 2019-09-27 00:09:24 -07:00
ac53a8d936 Release 2019.2.0-alpha.8 2019-09-26 23:43:47 -07:00
088a6c4399 Update .appveyor.yml 2019-09-26 13:18:52 -07:00
c1c679593e Fix for appveyor 2019-09-26 13:16:43 -07:00
bb11e88f13 Merge pull request #508 from GNS3/winpcap-support
User should have possibility to start capture in WebUI (branch from node configurator to avoid conflicts) & console connect to all nodes
2019-09-25 14:23:32 +02:00
5d8d2a3c2b Build command updated 2019-09-25 05:23:10 -07:00
68453092b2 Update .appveyor.yml 2019-09-25 04:57:25 -07:00
98c079175f Unit tests added 2019-09-25 04:37:25 -07:00
d594fc0a36 Merge branch 'master' into winpcap-support 2019-09-25 02:57:19 -07:00
eba1e07a0f Update topology-summary.component.spec.ts 2019-09-25 02:52:12 -07:00
1b4d4d2837 Filters on topology summary added 2019-09-25 02:41:34 -07:00
258623f62e Merge pull request #507 from GNS3/User-should-have-option-to-choose-name-for-exporting-project
User should have option to choose name for duplicated project (branch from node configurator to avoid conflicts)
2019-09-25 11:15:24 +02:00
5aedd2758d Merge pull request #505 from GNS3/custom-console-for-particular-node
Custom console for particular node (branch from node configurator to avoid conflicts)
2019-09-25 10:01:34 +02:00
170560e5f7 Merge branch 'master' into winpcap-support 2019-09-25 00:27:00 -07:00
2d227bc05b Merge branch 'master' into User-should-have-option-to-choose-name-for-exporting-project 2019-09-25 00:26:34 -07:00
c80a052e55 Merge branch 'master' into custom-console-for-particular-node 2019-09-25 00:17:48 -07:00
e513d7145e Update .appveyor.yml 2019-09-25 00:17:10 -07:00
a75acc3747 Adding filters on topology summary 2019-09-24 23:58:41 -07:00
b55d5ff59f Merge pull request #504 from GNS3/node-configurator
Configurators for nodes & template preferences for TraceNG & Qemu image creator
2019-09-25 08:42:29 +02:00
5832d3f36e Console connect to all nodes added 2019-09-24 07:12:26 -07:00
03b88da9f6 Merge branch 'custom-console-for-particular-node' into winpcap-support 2019-09-24 05:48:13 -07:00
abad45814a Update start-capture.component.spec.ts 2019-09-24 05:12:09 -07:00
53b85fa57f Update context-menu.component.html 2019-09-24 04:14:57 -07:00
679a0d02bb Support for starting wireshark 2019-09-24 04:14:44 -07:00
a989a88dbb Support for packet capture 2019-09-24 02:10:03 -07:00
cdbf2e4eb2 Unit tests updated 2019-09-23 06:08:42 -07:00
544e77d82e Option to choose project name added 2019-09-23 04:51:49 -07:00
716ca9d47f Merge branch 'master' into node-configurator 2019-09-23 02:26:10 -07:00
f678a6cdd7 Merge branch 'master' into custom-console-for-particular-node 2019-09-23 02:25:51 -07:00
d893c54362 Update .appveyor.yml 2019-09-23 02:25:37 -07:00
46b5a136d9 Update .appveyor.yml 2019-09-23 02:05:26 -07:00
1dddc2462c Merge branch 'master' into custom-console-for-particular-node 2019-09-23 01:01:08 -07:00
d0445daa75 Merge branch 'master' into node-configurator 2019-09-23 01:00:47 -07:00
f6c1454cfc Update .appveyor.yml 2019-09-23 00:44:58 -07:00
8c375da67c Update .appveyor.yml 2019-09-23 00:37:06 -07:00
6ac5a40009 Update .appveyor.yml 2019-09-23 00:29:53 -07:00
380a45883e Custom console for particular node 2019-09-20 07:01:28 -07:00
78767399fc Qemu configurator extended 2019-09-20 03:19:55 -07:00
041b9bc271 Qemu image configurator added 2019-09-19 08:30:48 -07:00
074b1d840e Support for managing traceng templates added 2019-09-18 05:37:51 -07:00
5ec9e0134a Configurator for traceng added 2019-09-18 03:00:53 -07:00
02fc46567b Configurator for nat added 2019-09-18 01:47:24 -07:00
c8a2067847 Configurator for docker added 2019-09-18 01:07:24 -07:00
125706dd7b Dialog for IOS added 2019-09-17 06:27:34 -07:00
6f92207847 Configurator for IOU added 2019-09-17 04:15:50 -07:00
c1099b22bb Update configurator-vmware.component.html 2019-09-17 01:58:48 -07:00
94f179c74f Temporary fix for qemu template details page 2019-09-17 01:53:30 -07:00
fb06398517 Configurator for VMware added 2019-09-17 00:57:06 -07:00
75bf2ef3de Support for ATM switch added 2019-09-16 04:00:05 -07:00
83558d0d4e Support for frame-relay-switch added 2019-09-16 02:35:10 -07:00
a50209455c Dialog for cloud added 2019-09-13 07:29:59 -07:00
9800e3ea4c Component fpor udp tunnels added 2019-09-13 06:29:34 -07:00
aea8010e0a Configurator for switch 2019-09-12 07:55:17 -07:00
36a8387ea2 Update node.service.ts 2019-09-12 04:28:31 -07:00
4b90568b7b Configurator for qemu 2019-09-12 04:26:00 -07:00
8fe6a3d517 Basic implementation for qemu 2019-09-11 08:11:43 -07:00
41707d6724 Update custom-adapters.component.spec.ts 2019-09-11 05:45:58 -07:00
35c96d1c90 Code cleaned up 2019-09-11 05:40:23 -07:00
e904454623 Fix for virtualbox 2019-09-11 04:58:45 -07:00
838359b4ac Code cleaned up 2019-09-11 04:33:42 -07:00
eaf74aa878 chore(package): update lockfile
https://npm.im/greenkeeper-lockfile
2019-09-11 00:20:07 +00:00
b1480670e1 fix(package): update xterm to version 4.0.0 2019-09-11 00:15:42 +00:00
24ab40bfa9 Support for virtualbox 2019-09-10 06:55:58 -07:00
9ab7616d89 Fix for configurator name 2019-09-10 04:07:08 -07:00
32dc9e3c07 Update ethernet-switches-template-details.component.spec.ts 2019-09-10 03:57:46 -07:00
bdf8e89dfa Support for ethernet switches 2019-09-10 03:05:54 -07:00
0fe44b2235 Dialog for ethernet hubs added 2019-09-09 09:33:10 -07:00
96e297ff6a Validation added 2019-09-09 08:56:14 -07:00
ecce86aaf7 Dialog for VPCS added 2019-09-09 06:57:42 -07:00
5e76feca5c Action to suspend added 2019-09-09 02:27:48 -07:00
cd5edebd98 Reload action added 2019-09-06 08:51:13 -07:00
00597accac Option to show interface labels should be saved for opened project 2019-09-06 08:18:26 -07:00
03dbac5aba Console updated 2019-09-06 06:18:03 -07:00
92d0908327 Servers summary added 2019-09-06 05:05:57 -07:00
9344174e89 Update projects.component.spec.ts 2019-09-05 05:48:04 -07:00
f07353943c Filtering for projects added 2019-09-05 05:32:34 -07:00
903448f102 Dialog for editing project properties added 2019-09-05 02:27:56 -07:00
7450dd6731 Ability to change symbol by context menu added 2019-09-04 05:14:29 -07:00
df8e5825cc Update save-project-dialog.component.ts 2019-09-04 02:03:16 -07:00
5b2eaefc01 Merge pull request #498 from GNS3/Support-for-editing-config-files
Ability to add custom symbols
2019-09-03 19:43:25 +02:00
6bca43563d Filtering symbols added 2019-09-03 10:42:16 -07:00
2fe8cc72aa Importing symbols added 2019-09-03 08:22:55 -07:00
675bb04b6c Merge pull request #472 from GNS3/Support-for-editing-config-files
Support for editing config files - VPCS
2019-09-03 10:12:18 +02:00
a879aab519 Merge branch 'master' into Support-for-editing-config-files 2019-09-02 07:10:05 -07:00
e89a8c79f2 Update log-console.component.ts 2019-09-02 07:08:08 -07:00
2fca17376a Merge branch 'master' into Support-for-editing-config-files 2019-09-02 06:16:21 -07:00
506394336b Merge pull request #495 from GNS3/screenshot-of-map
Ability to take screenshot of map
2019-09-02 15:11:05 +02:00
a1dcf6b8b3 Merge pull request #478 from GNS3/List-of-debug-events
Console with log events
2019-09-02 15:04:08 +02:00
998889b721 Merge pull request #496 from GNS3/Web-console-support
Support for default telnet console - basic implementation as agreed
2019-09-02 14:44:53 +02:00
4d2d7f6180 Code cleaned up 2019-09-02 05:43:36 -07:00
a146dfcb40 Export config added 2019-09-02 01:24:12 -07:00
9d9481e983 Merge branch 'master' into Support-for-editing-config-files 2019-08-30 05:41:05 -07:00
b4eff2361f Support for default telnet console added 2019-08-30 04:59:08 -07:00
583be8032a Update package.json 2019-08-30 00:41:05 -07:00
f7b113f813 Release 2019.2.0-alpha.7 2019-08-29 08:23:19 -07:00
b25cfa229c Bug fixing 2019-08-29 08:07:08 -07:00
63bcd6f4b2 Overriding wrong styles 2019-08-29 05:50:51 -07:00
c4959b97da Release notes updated 2019-08-29 03:52:30 -07:00
f257992ffc Console log component modified 2019-08-28 07:43:49 -07:00
aef6d044b3 exchnaging filter to mat menu 2019-08-28 07:04:17 -07:00
94240ee783 Code cleaned up 2019-08-28 04:19:20 -07:00
eca520073b Update project-map-menu.component.ts 2019-08-28 03:59:48 -07:00
26bc2df064 Update project-map-menu.component.ts 2019-08-28 02:03:17 -07:00
c2d40943ee Test implementation 2019-08-28 01:08:37 -07:00
69934fb870 Support for log events added 2019-08-26 08:16:36 -07:00
40ef11edbe Update log-console.component.spec.ts 2019-08-26 06:48:43 -07:00
801b3ebfac Introducing filters 2019-08-26 05:17:50 -07:00
fee26eff87 Requests to server visible in console 2019-08-22 05:26:48 -07:00
fc746f04cb Merge branch 'master' into List-of-debug-events 2019-08-22 03:02:13 -07:00
e181be93c2 Merge pull request #493 from GNS3/Export/import-project
Update import-project-dialog.component.spec.ts
2019-08-22 11:42:15 +02:00
a25f71c523 Merge pull request #483 from GNS3/Export/import-project
Import/export option available from map menu
2019-08-22 11:41:24 +02:00
44c924b654 Update import-project-dialog.component.spec.ts 2019-08-22 01:50:58 -07:00
8ad744213b Review fixes 2019-08-22 00:32:28 -07:00
c2d5e6fd08 Merge branch 'master' into Export/import-project 2019-08-21 23:48:18 -07:00
554944fb51 Merge branch 'master' into List-of-debug-events 2019-08-21 07:37:11 -07:00
9eca05016c Merge branch 'master' into Export/import-project 2019-08-21 07:34:00 -07:00
92ae767a6f Merge pull request #491 from GNS3/Topology-summary---prototype
Topology summary
2019-08-21 16:24:42 +02:00
37aa6191ab Code cleaned up 2019-08-21 06:32:44 -07:00
b515f53b24 Merge branch 'master' into Topology-summary---prototype 2019-08-21 05:15:43 -07:00
22820f6320 Unit tests for filtering & sorting nodes on topology summary added 2019-08-21 05:02:47 -07:00
d8e1486692 Merge pull request #481 from GNS3/Show-node-information-by-context-menu
Show node information by context menu
2019-08-21 11:35:23 +02:00
f3bfcebcf6 Merge pull request #476 from GNS3/Changing-scrollbar-style-to-modern-look
Changing scrollbar style to modern look
2019-08-21 11:28:54 +02:00
b9a2879f60 Merge branch 'master' into Topology-summary---prototype 2019-08-21 00:14:45 -07:00
cfef46e25c Update log-console.component.spec.ts 2019-08-21 00:13:44 -07:00
43e87307ba Update project-map-component 2019-08-20 06:52:13 -07:00
6f62f4171d Update project-map.component.ts 2019-08-20 06:20:03 -07:00
032a700040 Merge branch 'master' into Export/import-project 2019-08-20 06:09:01 -07:00
25588f5953 Merge pull request #485 from GNS3/Action-to-duplicate-project-should-be-available-on-projects-page
Action to duplicate project should be available on projects page
2019-08-20 14:56:06 +02:00
8163b4d709 Unit tests added 2019-08-20 05:49:54 -07:00
af4ef62132 Merge branch 'master' into Action-to-duplicate-project-should-be-available-on-projects-page 2019-08-20 05:06:26 -07:00
73bbc12d84 Merge branch 'master' into Topology-summary---prototype 2019-08-20 04:56:54 -07:00
6be70591c9 Merge branch 'master' into List-of-debug-events 2019-08-20 04:52:22 -07:00
0524099dce Update info-dialog-component 2019-08-20 04:44:14 -07:00
72998d87e2 Merge branch 'master' into Changing-scrollbar-style-to-modern-look 2019-08-20 03:40:15 -07:00
672c6577e2 Merge branch 'master' into Show-node-information-by-context-menu 2019-08-20 03:30:03 -07:00
12f31987d4 Merge branch 'master' into Export/import-project 2019-08-20 02:21:54 -07:00
ef0803a94a Merge branch 'master' into Export/import-project 2019-08-20 02:16:48 -07:00
3cc062f457 Merge pull request #479 from GNS3/User-has-ability-to-delete-project-in-the-opened-project
User has ability to delete project in the opened project
2019-08-20 11:05:05 +02:00
3e96766daa Merge branch 'master' into User-has-ability-to-delete-project-in-the-opened-project 2019-08-20 01:59:38 -07:00
ded882a7bc Merge pull request #473 from GNS3/Keyboard-shortcuts-support
Keyboard shortcuts added
2019-08-20 10:40:55 +02:00
479a9e1df9 Merge pull request #488 from GNS3/Action-'bring-to-front'-should-be-available-from-context-menu
Action 'bring to front' should be available from context menu
2019-08-20 10:27:22 +02:00
3da59f20e0 Update log console component 2019-08-19 01:34:29 -07:00
51ef91f8d3 Update topology summary component 2019-08-19 00:59:04 -07:00
909e197b9a Filters added 2019-08-14 06:10:41 -07:00
8581753520 Initial implementation of topology summary 2019-08-12 08:46:15 -07:00
cd365798bb Unit tests added 2019-08-12 05:40:40 -07:00
528842b713 Action created 2019-08-12 04:05:04 -07:00
1abcad72d2 Update project-map.component.ts 2019-08-12 01:58:10 -07:00
cd5890ca2b Save as button added 2019-08-09 07:43:22 -07:00
85b7d0943d Option to add blank project 2019-08-09 07:27:27 -07:00
c0ef682e9c Duplicate action added 2019-08-09 06:32:58 -07:00
2f1f6b5a35 Update project-map.component.spec.ts 2019-08-09 04:33:54 -07:00
46ef26931d Import/export buttons added 2019-08-09 04:14:55 -07:00
c70d9852f6 Displaying ports updated 2019-08-08 06:25:28 -07:00
162806b268 Information dialog added 2019-08-08 05:44:35 -07:00
c9bdfeba8f Delete button added 2019-08-07 05:59:24 -07:00
99df35282e Button on map to show/hide console 2019-08-07 05:19:54 -07:00
7f30d6ddf6 Update log-console.component.ts 2019-08-07 03:02:52 -07:00
668b640a9e Unit tests added 2019-08-07 01:55:19 -07:00
91545e5049 Extending commands 2019-08-06 07:19:59 -07:00
6d965e5773 Merge branch 'master' into List-of-debug-events 2019-08-06 07:05:28 -07:00
34a31449f3 start/stop/suspend/reload commands added 2019-08-06 04:44:29 -07:00
4487ab5167 Update template-list-dialog 2019-08-06 00:15:28 -07:00
031291612f Update template-list-dialog.component.ts 2019-08-05 23:49:22 -07:00
3f696a9200 Widget prepared 2019-08-05 07:07:47 -07:00
9b876dd1a9 Update adbutler.component.spec.ts 2019-08-02 01:58:44 -07:00
ee1b18dee1 Update adbutler.component.scss 2019-08-02 01:28:06 -07:00
1e346c9e72 Breaktime reduced for demo 2019-08-02 01:03:44 -07:00
ebbeac6e0b Merge branch 'master' into custom-html-adbutler-ads 2019-08-02 00:49:03 -07:00
d94f6d3d7d Keyboard shortcuts added 2019-08-01 09:10:51 -07:00
e610fcd6ec Merge branch 'master' into Support-for-editing-config-files 2019-08-01 04:14:13 -07:00
8da7311fa4 Fix for text-editor component 2019-08-01 03:42:50 -07:00
649bd0f245 Merge pull request #471 from GNS3/Editing-node-labels-on-double-click
Editing interface labels on double click
2019-08-01 11:02:33 +02:00
ee2d755eb0 Update text-editor.component.spec.ts 2019-08-01 00:51:42 -07:00
07aefc6933 Update text-editor.component.ts 2019-08-01 00:19:27 -07:00
4ed1f3da30 Option to edit on double click added 2019-07-31 08:06:25 -07:00
6a5aca2dcd Unit tests added 2019-07-30 08:44:43 -07:00
753649a321 Support for editing VPCS config files 2019-07-30 07:21:55 -07:00
d2271f0421 Update text-editor.component.ts 2019-07-30 01:17:45 -07:00
13ddddb944 Merge pull request #461 from GNS3/object-CloseEvent
Failed to construct WebSocket error fixed
2019-07-29 10:02:10 +02:00
dfaea6297b Bug fixed 2019-07-26 07:56:51 -07:00
430107c065 Update project-web-service-handler 2019-07-26 06:13:42 -07:00
d11413d10e Merge pull request #459 from GNS3/Licenses-are-not-shown-when-web-ui-released-in-gns3server
Licenses are not shown when web ui released in gns3server
2019-07-26 13:44:19 +02:00
8b5aed9597 Merge pull request #458 from GNS3/Option-to-duplicate-should-not-be-available-while-node-is-running
Option to duplicate should not be available while node is running
2019-07-26 13:36:44 +02:00
e5817cc3fb Merge branch 'master' into Licenses-are-not-shown-when-web-ui-released-in-gns3server 2019-07-26 03:41:26 -07:00
37c43c8e1b Merge branch 'master' into Option-to-duplicate-should-not-be-available-while-node-is-running 2019-07-26 03:40:57 -07:00
28d05a70cf Merge pull request #456 from GNS3/Update-dependencies-June-2019
Angular 8 Upgrade
2019-07-26 12:35:20 +02:00
485e41c329 Update config.yml 2019-07-26 03:07:36 -07:00
1b63b2082d Update config.yml 2019-07-26 03:00:15 -07:00
c17bc3731c Update config.yml 2019-07-26 02:53:04 -07:00
15c5203678 Update config.yml 2019-07-26 02:50:18 -07:00
4d05a4269e Update config.yml 2019-07-26 02:00:11 -07:00
478a09fc34 Update config.yml 2019-07-26 01:58:35 -07:00
a1909c19d0 Update config.yml 2019-07-26 01:56:22 -07:00
f81f3b5887 Update config.yml 2019-07-26 01:43:48 -07:00
4351e93d70 Update config.yml 2019-07-26 01:34:50 -07:00
1b3f2b5623 Merge branch 'Update-dependencies-June-2019' into Licenses-are-not-shown-when-web-ui-released-in-gns3server 2019-07-25 06:15:24 -07:00
5c99ec64eb Update duplicate-action-component 2019-07-25 06:11:51 -07:00
6e23aed7b9 Update config.yml 2019-07-25 05:13:18 -07:00
7893858b6d Update config.yml 2019-07-25 04:44:19 -07:00
0904d94019 Update yarn.lock 2019-07-25 04:04:44 -07:00
b6404a6bdf Upgrading node version 2019-07-25 03:16:35 -07:00
c2bff662ec Angular 8 Upgrade 2019-07-25 01:25:47 -07:00
da7ecf3446 Update console-device-action-component 2019-07-23 04:31:00 -07:00
ebd24bf235 Update adbutler.component.scss 2019-07-09 04:59:09 -07:00
2be02a8bd0 Implementation of custom html ad 2019-07-09 03:48:02 -07:00
4f33fb49f9 Update help.component.ts 2019-07-04 04:57:58 -07:00
230aaf31fd Fixes after review 2019-06-05 01:56:28 -07:00
8eafbf66c9 Revert break time to default value 2019-05-29 00:45:50 -07:00
d37b043711 Fixes after review 2019-05-29 00:42:14 -07:00
a3110e87aa Fixes after review 2019-05-28 13:41:30 -07:00
fc43f98f86 Restyling box 2019-05-23 02:17:57 -07:00
6da54a290c Restyling box 2019-05-22 00:26:19 -07:00
d7b73b4653 Unit tests fixed 2019-05-21 23:31:19 -07:00
fd6393acf7 Initial implementation 2019-05-20 07:23:50 -07:00
0809759765 Initial implementation 2019-05-16 04:42:23 -07:00
897 changed files with 40688 additions and 21466 deletions

View File

@ -14,11 +14,13 @@ init:
- git config --global core.autocrlf input
install:
- ps: Install-Product node 8 x64
- ps: Install-Product node 12 x64
- yarn install
build_script:
- cmd: set NODE_OPTIONS=--max-old-space-size=8092
- yarn buildforelectron
- "%PYTHON%\\python.exe -m pip install -U pip"
- "%PYTHON%\\python.exe -m pip install -r scripts\\requirements.txt"
- "%PYTHON%\\python.exe scripts\\build.py download -a"
- "%PYTHON%\\python.exe scripts\\build.py build_exe -b dist/exe.gns3server -s"

View File

@ -1,12 +1,26 @@
# iOS CircleCI 2.0 configuration file
version: 2
# iOS CircleCI 2.1 configuration file
version: 2.1
orbs:
node: circleci/node@4.2.0
jobs:
build:
macos:
xcode: "9.4.0"
xcode: "10.1.0"
steps:
- checkout
- node/install:
install-yarn: true
- run:
name: Update BREW and print configs
command: |
brew update
brew analytics off
brew --env
brew --config
- run:
name: Set timezone and check current datetime
@ -14,6 +28,32 @@ jobs:
sudo systemsetup -settimezone Europe/Warsaw
echo "Today is $(date +"%Y-%m-%d %T")"
- run:
name: Set ENV variables
command: |
echo 'export HOMEBREW_NO_AUTO_UPDATE=1' >> ~/.envs
- run:
name: Install Python version 3.6.5 & readline 7.0.5
command: |
source ~/.envs
curl -o /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/python.rb https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb
curl -o /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/readline.rb https://raw.githubusercontent.com/Homebrew/homebrew-core/b1bd1c4a62e1336422de3614d1fc49ffbce589a8/Formula/readline.rb
# remove check for old compilers which creates the error described in https://github.com/sashkab/homebrew-python/issues/36
sed -i.bak -e '58,61d' /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/python.rb
# remove 'do devel' block to avoid error: Calling 'devel' blocks in formulae is disabled!
sed -i.bak -e '14,17d' /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/python.rb
brew unlink python
brew uninstall --ignore-dependencies readline
brew install readline
brew info readline
brew pin readline
# --ignore-dependencies is used to prevent this issue: https://github.com/tensorflow/tensorflow/issues/25093
brew install --ignore-dependencies python
#brew link python 3.6.5_1
brew info python
brew pin python
- run:
name: Installed python and pip version
command: |
@ -46,8 +86,11 @@ jobs:
name: Building gns3server
command: |
python3 -V
pip3 install -r scripts/requirements.txt
python3 -m pip install -U pip
python3 -m pip install -r scripts/requirements.txt
python3 scripts/build.py download -a
# necessary because of https://github.com/GNS3/gns3-gui/issues/2849
python3 -m pip install jsonschema==2.6.0
python3 scripts/build.py build_exe -b dist/exe.gns3server -s
python3 scripts/build.py validate -b dist
@ -74,4 +117,3 @@ workflows:
filters:
tags:
only: /v.*/

View File

@ -0,0 +1,16 @@
name: Add new issues to GNS3 project
on:
issues:
types:
- opened
jobs:
add-to-project:
name: Add issue to project
runs-on: ubuntu-latest
steps:
- uses: actions/add-to-project@v0.4.0
with:
project-url: https://github.com/orgs/GNS3/projects/3
github-token: ${{ secrets.ADD_NEW_ISSUES_TO_PROJECT }}

76
.github/workflows/codeql.yml vendored Normal file
View File

@ -0,0 +1,76 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ "master", "master-3.0" ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ "master", "master-3.0" ]
schedule:
- cron: '38 18 * * 6'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'javascript', 'python' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Use only 'java' to analyze code written in Java, Kotlin or both
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
# Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
category: "/language:${{matrix.language}}"

25
.github/workflows/main.yml vendored Normal file
View File

@ -0,0 +1,25 @@
name: Build
on:
push:
branches:
- '**'
pull_request:
branches:
- master
- master-3.0
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- name: Setup node 14
uses: actions/setup-node@v2
with:
node-version: 14.x
- uses: c-hive/gha-yarn-cache@v1
- name: Install JS dependencies
run: yarn install
- name: Test
run: yarn test

1
.gitignore vendored
View File

@ -1,6 +1,7 @@
# See http://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
/.angular
/dist
/tmp
/out-tsc

8
.snyk Normal file
View File

@ -0,0 +1,8 @@
# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities.
version: v1.16.0
ignore: {}
# patches apply the minimum changes required to fix a vulnerability
patch:
SNYK-JS-LODASH-567746:
- ngx-childprocess > @types/electron > electron > @electron/get > global-tunnel-ng > lodash:
patched: '2020-07-10T04:10:11.863Z'

View File

@ -1,7 +1,7 @@
language: node_js
node_js:
- '10' # use node for latest
- '11' # use node for latest
# Issue with Travis: https://github.com/travis-ci/travis-ci/issues/8836#issuecomment-356362524
sudo: required
@ -37,12 +37,12 @@ before_install:
before_script:
# greenkeeper-lockfile support
- greenkeeper-lockfile-update
- npm install -g codecov
# - npm install -g codecov
script: yarn coverage
after_success:
- codecov
# - codecov
after_script:
# greenkeeper-lockfile support

14
.whitesource Normal file
View File

@ -0,0 +1,14 @@
{
"scanSettings": {
"configMode": "AUTO",
"configExternalURL": "",
"projectToken" : "",
"baseBranches": ["master", "master-3.0"]
},
"checkRunSettings": {
"vulnerableCheckRunConclusionLevel": "failure"
},
"issueSettings": {
"minSeverityLevel": "LOW"
}
}

View File

@ -1,5 +1,5 @@
# Dockerfile for GNS3 Web-ui development
FROM node:carbon
FROM node:stretch
# Create user
RUN useradd --user-group --create-home --shell /bin/false gns3-web-ui

View File

@ -1,16 +1,9 @@
# gns3-web-ui
[![Greenkeeper badge](https://badges.greenkeeper.io/GNS3/gns3-web-ui.svg)](https://greenkeeper.io/)
[![Travis CI](https://api.travis-ci.org/GNS3/gns3-web-ui.svg?branch=master)](https://travis-ci.org)
[![AppVeyor](https://ci.appveyor.com/api/projects/status/github/GNS3/gns3-web-ui?branch=master&svg=true)](https://www.appveyor.com/)
[![CircleCI](https://circleci.com/gh/GNS3/gns3-web-ui/tree/master.png)](https://circleci.com/gh/GNS3/gns3-web-ui/tree/master.png)
[![codecov](https://codecov.io/gh/GNS3/gns3-web-ui/branch/master/graph/badge.svg)](https://codecov.io/gh/GNS3/gns3-web-ui)
Test WebUI implementation for GNS3.
This is not production ready version. It has been made to evaluate possibility of creation Web User Interface for GNS3 application.
[![Build](https://github.com/GNS3/gns3-web-ui/actions/workflows/main.yml/badge.svg)](https://github.com/GNS3/gns3-web-ui/actions/workflows/main.yml)
[![Dependency](https://img.shields.io/librariesio/github/GNS3/gns3-web-ui)](https://libraries.io/github/GNS3/gns3-web-ui)
[![Packages versions](https://repology.org/badge/latest-versions/gns3.svg)](https://repology.org/metapackage/gns3/versions)
[![Packages](https://repology.org/badge/tiny-repos/gns3.svg)](https://repology.org/metapackage/gns3/versions)
## Demo
@ -30,6 +23,14 @@ We're using [yarn](https://yarnpkg.com/lang/en/) for packages installation:
yarn install
```
## JavaScript heap out of memory
Increase the memory allocated to Node if you get JavaScript heap out of memory errors.
```
export NODE_OPTIONS=--max-old-space-size=8192
```
#### Run GNS3 server
Visit [gns3-server](https://github.com/GNS3/gns3-server) for guide how to run GNS3 server.
@ -79,6 +80,10 @@ Run `yarn ng test` to execute the unit tests via [Karma](https://karma-runner.gi
## Releasing
### Release naming convention
Releases are named by the year and quarter when release is happening, e.g. January 2020 release is named 2020.1.X.
### Bumping releases
We're using [version-bump-prompt](https://www.npmjs.com/package/version-bump-prompt) for increasing version.

5
SECURITY.md Normal file
View File

@ -0,0 +1,5 @@
# Security Policy
## Reporting a Vulnerability
Please use GitHub's report a vulnerability feature. More information can be found in https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability

View File

@ -1,197 +1,247 @@
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"gns3-web-ui": {
"root": "",
"sourceRoot": "src",
"projectType": "application",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist",
"index": "src/index.html",
"main": "src/main.ts",
"tsConfig": "src/tsconfig.app.json",
"polyfills": "src/polyfills.ts",
"assets": [
"src/assets",
"src/favicon.ico",
"src/ReleaseNotes.txt"
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"gns3-web-ui": {
"root": "",
"sourceRoot": "src",
"projectType": "application",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"allowedCommonJsDependencies": [
"rxjs",
"rxjs-compat",
"uuid",
"css-tree",
"save-svg-as-png",
"angular-draggable-droppable",
"dom-set",
"dom-plane",
"mousetrap",
"@mattlewis92/dom-autoscroller",
"rxjs/Rx",
"rxjs/add/operator/map",
"rxjs-compat/add/operator/map",
"classnames",
"stylenames",
"ipaddr.js"
],
"styles": [
"node_modules/bootstrap/dist/css/bootstrap.min.css",
"node_modules/notosans-fontface/css/notosans-fontface.min.css",
"src/styles.css",
"src/theme.scss"
],
"scripts": []
},
"configurations": {
"production": {
"optimization": true,
"outputHashing": "all",
"sourceMap": {
"hidden": true,
"scripts": true,
"styles": false
},
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
]
},
"electronProd": {
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.electron.prod.ts"
}
]
},
"electronDev": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.electron.ts"
}
]
},
"githubProd": {
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.github.prod.ts"
}
]
}
}
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "gns3-web-ui:build"
},
"configurations": {
"production": {
"browserTarget": "gns3-web-ui:build:production"
},
"electronProd": {
"browserTarget": "gns3-web-ui:build:electronProd"
},
"electronDev": {
"browserTarget": "gns3-web-ui:build:electronDev"
},
"githubProd": {
"browserTarget": "gns3-web-ui:build:githubProd"
}
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "gns3-web-ui:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"karmaConfig": "./karma.conf.js",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.spec.json",
"scripts": [],
"styles": [
"node_modules/bootstrap/dist/css/bootstrap.min.css",
"node_modules/notosans-fontface/css/notosans-fontface.min.css",
"src/styles.css",
"src/theme.scss"
],
"assets": [
"src/assets",
"src/favicon.ico"
],
"codeCoverageExclude": [
"src/app/cartography/components/experimental-map/**/*"
]
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"src/tsconfig.app.json",
"src/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
},
"gns3-web-ui-e2e": {
"root": "e2e",
"sourceRoot": "e2e",
"projectType": "application",
"architect": {
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "./protractor.conf.js",
"devServerTarget": "gns3-web-ui:serve"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"e2e/tsconfig.e2e.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
}
},
"defaultProject": "gns3-web-ui",
"schematics": {
"@schematics/angular:component": {
"prefix": "app",
"styleext": "scss"
},
"@schematics/angular:directive": {
"prefix": "app"
}
}
"outputPath": "dist",
"index": "src/index.html",
"main": "src/main.ts",
"tsConfig": "src/tsconfig.app.json",
"polyfills": "src/polyfills.ts",
"assets": [
"src/assets",
"src/favicon.ico",
"src/ReleaseNotes.txt"
],
"styles": [
"node_modules/bootstrap/dist/css/bootstrap.min.css",
"node_modules/notosans-fontface/css/notosans-fontface.min.css",
"src/styles.scss",
"src/theme.scss"
],
"scripts": [],
"vendorChunk": true,
"extractLicenses": false,
"buildOptimizer": true,
"sourceMap": true,
"optimization": false,
"namedChunks": true,
"aot": true
},
"configurations": {
"production": {
"budgets": [
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": {
"hidden": true,
"scripts": true,
"styles": false
},
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
]
},
"electronProd": {
"budgets": [
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.electron.prod.ts"
}
]
},
"electronDev": {
"budgets": [
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
],
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.electron.ts"
}
]
},
"githubProd": {
"budgets": [
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.github.prod.ts"
}
]
}
}
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "gns3-web-ui:build"
},
"configurations": {
"production": {
"browserTarget": "gns3-web-ui:build:production"
},
"electronProd": {
"browserTarget": "gns3-web-ui:build:electronProd"
},
"electronDev": {
"browserTarget": "gns3-web-ui:build:electronDev"
},
"githubProd": {
"browserTarget": "gns3-web-ui:build:githubProd"
}
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "gns3-web-ui:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"karmaConfig": "./karma.conf.js",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.spec.json",
"scripts": [],
"styles": [
"node_modules/bootstrap/dist/css/bootstrap.min.css",
"node_modules/notosans-fontface/css/notosans-fontface.min.css",
"src/styles.scss",
"src/theme.scss"
],
"sourceMap": false,
"assets": [
"src/assets",
"src/favicon.ico"
]
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"src/tsconfig.app.json",
"src/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**",
"**/*.spec.ts"
]
}
}
},
"schematics": {
"@schematics/angular:component": {
"style": "scss"
}
}
},
"gns3-web-ui-e2e": {
"root": "e2e",
"sourceRoot": "e2e",
"projectType": "application",
"architect": {
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "./protractor.conf.js",
"devServerTarget": "gns3-web-ui:serve"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"e2e/tsconfig.e2e.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
}
},
"defaultProject": "gns3-web-ui",
"schematics": {
"@schematics/angular:component": {
"prefix": "app",
"style": "scss"
},
"@schematics/angular:directive": {
"prefix": "app"
}
},
"cli": {
"analytics": false
}
}

View File

@ -1,6 +1,5 @@
const { spawn } = require('child_process');
const { app } = require('electron');
const shell = require('node-powershell');
const path = require('path');
async function setPATHEnv() {
@ -30,50 +29,21 @@ exports.openConsole = async (consoleRequest) => {
console.log(`Starting console with command: '${command}'`);
//with node-powershell
let consoleProcess = spawn(command, [], {
shell :true
});
var ps = new shell();
ps.addCommand(command);
ps.invoke()
.then((output) => {
console.log(output)
})
.catch((err) => {
console.log(err)
ps.dispose()
});
consoleProcess.stdout.on('data', (data) => {
console.log(`Console stdout is producing: ${data.toString()}`);
});
//with exec
consoleProcess.stderr.on('data', (data) => {
console.log(`Console stderr is producing: ${data.toString()}`);
});
// var exec = require('child_process').exec;
// function Callback(err, stdout, stderr) {
// if (err) {
// console.log(`exec error: ${err}`);
// return;
// }else{
// console.log(`${stdout}`);
// }
// }
// res = exec(command, Callback);
//with spawn
// let consoleProcess = spawn('cmd.exe dir', [], {
// shell :true
// });
// consoleProcess.stdout.on('data', (data) => {
// console.log(`Console stdout is producing: ${data.toString()}`);
// });
// consoleProcess.stderr.on('data', (data) => {
// console.log(`Console stderr is producing: ${data.toString()}`);
// });
// consoleProcess.on('close', (code) => {
// console.log(`child process exited with code ${code}`);
// });
consoleProcess.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
}

1
debug.log Normal file
View File

@ -0,0 +1 @@
[1109/003452.026:ERROR:directory_reader_win.cc(43)] FindFirstFile: The system cannot find the path specified. (0x3)

View File

@ -1,14 +1,20 @@
import { Gns3WebUiPage } from './app.po';
describe('gns3-web-ui App', () => {
describe('GNS3 Web UI Application', () => {
let page: Gns3WebUiPage;
beforeEach(() => {
page = new Gns3WebUiPage();
});
it('should display title', () => {
page.navigateTo();
expect(page.getTitleText()).toEqual('GNS3 Web UI');
it('should have correct page title', async () => {
// arrange
await page.navigateTo();
// act
let text = await page.getTitleText();
// assert
expect(text).toEqual('GNS3 Web UI');
});
});

View File

@ -6,7 +6,7 @@ export class Gns3WebUiPage {
}
getTitleText() {
return browser.getTitle();
return browser.driver.getTitle();
}
getParagraphText() {

21
e2e/helpers/common.po.ts Normal file
View File

@ -0,0 +1,21 @@
import { browser } from 'protractor';
export class TestHelper {
sleep(value: number) {
browser.sleep(value);
}
waitForLoading() {
browser.waitForAngular();
}
async asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
getCurrentUrl() {
return browser.getCurrentUrl();
}
}

View File

@ -0,0 +1,50 @@
import { browser, by } from 'protractor';
import { TestHelper } from './common.po';
export class ProjectMapPage {
helper = new TestHelper();
async openAddProjectDialog() {
let addButton = await browser.driver.findElement(by.css('button.addNode'));
await addButton.click();
}
async addNode() {
let inputs = await browser.driver.findElements(by.css('input.mat-input-element'));
await inputs[0].sendKeys('VPCS');
this.helper.sleep(1000);
let selects = await browser.driver.findElements(by.css('mat-select.mat-select'));
await selects[1].click();
this.helper.sleep(1000);
let options = await browser.driver.findElements(by.css('mat-option.mat-option'));
await options[1].click(); //first option should be chosen
this.helper.sleep(1000);
// new select appears after refreshing data
selects = await browser.driver.findElements(by.css('mat-select.mat-select'));
if (selects[2]) {
await selects[2].click();
this.helper.sleep(1000);
options = await browser.driver.findElements(by.css('mat-option.mat-option'));
await options[0].click();
this.helper.sleep(1000);
}
let addButton = await browser.driver.findElement(by.css('button.addButton'));
await addButton.click();
this.helper.sleep(1000);
}
async verifyIfNodeWithLabelExists(labelToFind: string) {
this.helper.sleep(5000);
let nodeLabel = await browser.driver.findElement(by.css('#map > g > g.layer > g.nodes > g > g > g > g > text'));
let selectedNode;
let textFromNodeLabel = await nodeLabel.getText();
if (textFromNodeLabel == labelToFind) selectedNode = nodeLabel;
return selectedNode ? true : false;
}
}

20
e2e/helpers/project.po.ts Normal file
View File

@ -0,0 +1,20 @@
import { browser, by } from 'protractor';
import { TestHelper } from './common.po';
export class ProjectsPage {
helper = new TestHelper();
async openAddProjectDialog() {
let addButton = await browser.driver.findElement(by.css('button.add-button'));
await addButton.click();
}
async createProject() {
let today = new Date();
let inputs = await browser.driver.findElements(by.css('input.mat-input-element'));
await inputs[1].sendKeys('test project ' + today.getUTCMilliseconds());
this.helper.sleep(2000);
let dialogButton = await browser.driver.findElement(by.css('button.add-project-button'));
await dialogButton.click();
}
}

41
e2e/helpers/server.po.ts Normal file
View File

@ -0,0 +1,41 @@
import { browser, by } from 'protractor';
import { TestHelper } from './common.po';
export class ServersPage {
helper = new TestHelper();
maximizeWindow() {
browser.driver.manage().window().maximize();
}
navigateToServersPage() {
return browser.get('/servers');
}
getAddServerNotificationText() {
return browser.driver.findElement(by.className('mat-card-content')).getText();
}
async clickAddServer() {
let serversTable = await this.checkServersTable();
if (serversTable.length === 0) {
let buttons = await browser.driver.findElements(by.className('mat-button mat-button-base'));
await buttons[3].click();
}
}
checkServersTable() {
return browser.driver.findElements(by.css('mat-cell'));
}
async navigateToServerProjects() {
this.helper.sleep(2000);
let hyperlinks = await browser.driver.findElements(by.css('a.table-link'));
let serverLink;
await this.helper.asyncForEach(hyperlinks, async (element) => {
let text = await element.getText();
if (text === '127.0.0.1') serverLink = element;
});
await serverLink.click();
}
}

View File

@ -0,0 +1,40 @@
import { TestHelper } from './helpers/common.po';
import { ProjectMapPage } from './helpers/project-map.po';
import { ProjectsPage } from './helpers/project.po';
import { ServersPage } from './helpers/server.po';
describe('Project map page', () => {
let serversPage: ServersPage;
let projectsPage: ProjectsPage;
let projectMapPage: ProjectMapPage;
let helper: TestHelper;
beforeEach(async () => {
serversPage = new ServersPage();
projectsPage = new ProjectsPage();
projectMapPage = new ProjectMapPage();
helper = new TestHelper();
serversPage.maximizeWindow();
await serversPage.navigateToServersPage();
await serversPage.clickAddServer();
await serversPage.navigateToServerProjects();
await projectsPage.openAddProjectDialog();
helper.sleep(2000);
await projectsPage.createProject();
helper.sleep(2000);
});
it('user should have possibility to add nodes to map', async () => {
// arrange
projectMapPage.openAddProjectDialog();
helper.sleep(2000);
//act
projectMapPage.addNode();
helper.sleep(2000);
//assert
expect(await projectMapPage.verifyIfNodeWithLabelExists('PC1')).toBe(true);
});
});

33
e2e/projects.e2e-spec.ts Normal file
View File

@ -0,0 +1,33 @@
import { TestHelper } from './helpers/common.po';
import { ProjectsPage } from './helpers/project.po';
import { ServersPage } from './helpers/server.po';
describe('Projects page', () => {
let serversPage: ServersPage;
let projectsPage: ProjectsPage;
let helper: TestHelper;
beforeEach(() => {
serversPage = new ServersPage();
projectsPage = new ProjectsPage();
helper = new TestHelper();
});
it('user should have possibility to create new project', async () => {
// arrange
serversPage.maximizeWindow();
await serversPage.navigateToServersPage();
await serversPage.clickAddServer();
await serversPage.navigateToServerProjects();
helper.sleep(2000);
//act
await projectsPage.openAddProjectDialog();
helper.sleep(2000);
await projectsPage.createProject();
helper.sleep(2000);
//assert
expect(helper.getCurrentUrl()).toMatch('server/1/project/');
});
});

43
e2e/servers.e2e-spec.ts Normal file
View File

@ -0,0 +1,43 @@
import { TestHelper } from './helpers/common.po';
import { ServersPage } from './helpers/server.po';
describe('Servers page', () => {
let page: ServersPage;
let helper: TestHelper;
beforeEach(() => {
page = new ServersPage();
helper = new TestHelper();
});
xit('user should have possibility to add server', async () => {
// arrange
page.maximizeWindow();
await page.navigateToServersPage();
// act
let text = await page.getAddServerNotificationText();
// assert
expect(text).toBe("We've discovered GNS3 server on 127.0.0.1:3080, would you like to add to the list?");
});
it('user should see added server in the list', async () => {
// arrange
page.maximizeWindow();
await page.navigateToServersPage();
await page.clickAddServer();
helper.sleep(1000);
// act
let firstRowOfServersTable = await page.checkServersTable();
let serverData = [];
await helper.asyncForEach(firstRowOfServersTable, async (element) => {
serverData.push(await element.getText());
});
// assert
expect(serverData).toContain('127.0.0.1');
expect(serverData).toContain('3080');
});
});

View File

@ -1,5 +1,5 @@
{
"extends": "../tsconfig.json",
"extends": "../tsconfig.base.json",
"compilerOptions": {
"outDir": "../out-tsc/e2e",
"baseUrl": "./",

View File

@ -26,6 +26,6 @@ module.exports = function (config) {
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
singleRun: true
});
};

View File

@ -1,6 +1,6 @@
{
"name": "gns3-web-ui",
"version": "2019.2.0-alpha.6dev",
"version": "2.2.53",
"author": {
"name": "GNS3 Technology Inc.",
"email": "developers@gns3.com"
@ -17,6 +17,7 @@
"start": "ng serve",
"startforelectron": "ng serve --configuration=electronDev",
"build": "ng build",
"buildforproduction": "ng build --source-map=false --build-optimizer --configuration=production --base-href /static/web-ui/",
"buildforelectron": "ng build --configuration=electronProd",
"buildforgithub": "ng build --configuration=githubProd",
"test": "ng test",
@ -34,83 +35,104 @@
"prettier:write": "yarn prettier:base -- --write \"src/**/*.{ts,js,html,scss}\"",
"generate-licenses-file": "yarn license-checker --production --csv --out licenses.csv",
"prebuildforelectron": "node set-variables-in-env.js --set src/environments/environment.electron.prod.ts",
"postbuildforelectron": "node set-variables-in-env.js --unset src/environments/environment.electron.prod.ts"
"postbuildforelectron": "node set-variables-in-env.js --unset src/environments/environment.electron.prod.ts",
"postinstall": "ngcc --properties es5 browser module main --first-only --create-ivy-entry-points && ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points",
"snyk-protect": "snyk protect",
"prepare": "yarn run snyk-protect"
},
"private": true,
"dependencies": {
"@angular/animations": "^7.2.14",
"@angular/cdk": "^7.3.7",
"@angular/common": "^7.2.14",
"@angular/compiler": "^7.2.14",
"@angular/core": "^7.2.14",
"@angular/forms": "^7.2.14",
"@angular/http": "^7.2.14",
"@angular/material": "^7.3.7",
"@angular/platform-browser": "^7.2.14",
"@angular/platform-browser-dynamic": "^7.2.14",
"@angular/router": "^7.2.14",
"angular-persistence": "^1.0.1",
"angular2-hotkeys": "^2.1.4",
"angular2-indexeddb": "^1.2.3",
"bootstrap": "4.3.1",
"command-exists": "^1.2.8",
"core-js": "^3.0.1",
"css-tree": "^1.0.0-alpha.29",
"d3-ng2-service": "^2.1.0",
"hammerjs": "^2.0.8",
"ini": "^1.3.5",
"@angular/animations": "^12.2.12",
"@angular/cdk": "^12.2.12",
"@angular/common": "^12.2.12",
"@angular/compiler": "^12.2.12",
"@angular/core": "^12.2.12",
"@angular/forms": "^12.2.12",
"@angular/material": "^12.2.12",
"@angular/platform-browser": "^12.2.12",
"@angular/platform-browser-dynamic": "^12.2.12",
"@angular/router": "^12.2.12",
"@sentry/browser": "^6.14.1",
"@types/jest": "^27.0.2",
"@types/mocha": "^9.0.0",
"@types/react": "^17.0.34",
"@types/react-dom": "^17.0.11",
"angular-draggable-droppable": "^5.0.0",
"angular-resizable-element": "^3.4.0",
"bootstrap": "^5.1.3",
"command-exists": "^1.2.9",
"core-js": "^3.19.1",
"css-tree": "^1.1.3",
"d3-ng2-service": "^2.2.0",
"eev": "^0.1.5",
"ini": "^2.0.0",
"ipaddr.js": "^2.1.0",
"material-design-icons": "^3.0.1",
"ng2-file-upload": "^1.3.0",
"ngx-electron": "^2.1.1",
"node-fetch": "^2.4.1",
"node-powershell": "^4.0.0",
"notosans-fontface": "^1.1.0",
"raven-js": "^3.27.0",
"rxjs": "^6.5.1",
"rxjs-compat": "^6.5.1",
"tree-kill": "^1.2.1",
"typeface-roboto": "^0.0.54",
"xterm": "^3.14.5",
"yargs": "^13.2.2",
"zone.js": "^0.9.0"
"mousetrap": "^1.6.5",
"ng-circle-progress": "^1.6.0",
"ng2-file-upload": "^1.4.0",
"ngx-childprocess": "^0.0.6",
"ngx-device-detector": "^2.1.1",
"ngx-electron": "^2.2.0",
"node-fetch": "^3.2.10",
"notosans-fontface": "1.2.2",
"prettier-plugin-organize-imports": "^2.3.4",
"rxjs": "^6.6.7",
"rxjs-compat": "^6.6.7",
"save-svg-as-png": "^1.4.17",
"snyk": "^1.1064.0",
"spark-md5": "^3.0.2",
"svg-crowbar": "^0.7.0",
"tree-kill": "^1.2.2",
"tslib": "^2.3.1",
"typeface-roboto": "^1.1.13",
"xterm": "^4.15.0",
"xterm-addon-attach": "^0.6.0",
"xterm-addon-fit": "^0.5.0",
"yargs": "^17.2.1",
"zone.js": "~0.11.4"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.13.8",
"@angular/cli": "^7.3.8",
"@angular/compiler-cli": "^7.2.14",
"@angular/language-service": "^7.2.14",
"@sentry/cli": "^1.41.2",
"@sentry/electron": "^0.17.1",
"@types/jasmine": "~3.3.12",
"@types/jasminewd2": "~2.0.6",
"@types/node": "~12.0.0",
"codelyzer": "~5.0.1",
"electron": "5.0.2",
"electron-builder": "20.39.0",
"jasmine-core": "~3.4.0",
"jasmine-spec-reporter": "~4.2.1",
"jquery": "^3.4.0",
"karma": "~4.1.0",
"karma-chrome-launcher": "~2.2.0",
"karma-cli": "~2.0.0",
"karma-coverage-istanbul-reporter": "^2.0.5",
"karma-jasmine": "~2.0.1",
"karma-jasmine-html-reporter": "^1.4.2",
"@angular-devkit/build-angular": "^12.2.12",
"@angular/cli": "^12.2.12",
"@angular/compiler-cli": "^12.2.12",
"@angular/language-service": "^12.2.12",
"@sentry/cli": "^1.71.0",
"@sentry/electron": "^2.5.4",
"@types/jasmine": "^3.10.2",
"@types/jasminewd2": "^2.0.10",
"@types/node": "16.11.6",
"codelyzer": "^6.0.2",
"electron": "^13.6.6",
"electron-builder": "^22.9.1",
"file-loader": "^6.2.0",
"jasmine-core": "~3.10.1",
"jasmine-spec-reporter": "~7.0.0",
"jquery": "^3.6.0",
"karma": "^6.3.16",
"karma-chrome-launcher": "~3.1.0",
"karma-cli": "^2.0.0",
"karma-coverage-istanbul-reporter": "~3.0.3",
"karma-jasmine": "~4.0.1",
"karma-jasmine-html-reporter": "^1.7.0",
"license-checker": "^25.0.1",
"node-sass": "^4.12.0",
"popper.js": "^1.15.0",
"prettier": "^1.17.0",
"protractor": "~5.4.2",
"replace": "^1.1.0",
"ts-mockito": "^2.3.1",
"ts-node": "~8.1.0",
"tslint": "~5.16.0",
"popper.js": "^1.16.1",
"prettier": "^2.4.1",
"protractor": "^7.0.0",
"replace": "^1.2.1",
"rxjs-tslint": "^0.1.8",
"ts-mockito": "^2.6.1",
"ts-node": "~10.4.0",
"tslint": "^6.1.3",
"tslint-config-prettier": "^1.18.0",
"typescript": "<3.3.0"
"typescript": "4.2.3",
"webpack": "5.76.0",
"yarn-upgrade-all": "^0.5.4"
},
"greenkeeper": {
"ignore": [
"typescript"
]
}
},
"snyk": true
}

View File

@ -144,7 +144,7 @@ def download_from_github(name, definition, output_directory):
files = []
if platform.system() == "Windows":
files = definition['files']['windows']
for filename in files:
dependency_file = os.path.join(dependency_dir, filename)
dependency_url = list(filter(lambda x: x['name'] == filename, release['assets']))[0]['browser_download_url']
@ -161,7 +161,7 @@ def download_from_http(name, definition, output_directory):
files = []
if platform.system() == "Windows":
files = definition['files']['windows']
for filename in files:
dependency_file = os.path.join(dependency_dir, filename)
download(url, dependency_file)
@ -193,7 +193,7 @@ def is_tagged():
return True
if os.environ.get('APPVEYOR_REPO_TAG', False) in (1, "True", "true"):
return True
def is_web_ui_non_dev():
package_file = os.path.join(FILE_DIR, '..', 'package.json')
@ -237,6 +237,8 @@ def download_command(arguments):
if platform.system() == "Windows":
requirements = 'win-requirements.txt'
elif platform.system() == "Darwin":
requirements = 'mac-requirements.txt'
else:
requirements = 'requirements.txt'
@ -277,13 +279,11 @@ def build_command(arguments):
]
excludes = [
"raven.deprecation", # reported problem in raven package (6.4.0)
"distutils", # issue on macOS
"tkinter", # issue on Windows
]
packages = [
"raven",
"psutil",
"asyncio",
"packaging", # needed for linux

View File

@ -1,7 +1,6 @@
setuptools==40.8.0
setuptools==71.1.0
cx_Freeze==5.1.1
requests==2.21.0
packaging==19.0
appdirs==1.4.3
psutil==5.5.1
jsonschema==2.6.0 # lock down jsonschema, 3.0 makes problems
requests==2.32.3
packaging==20.9
appdirs==1.4.4
psutil==5.8.0

View File

@ -1,16 +1,180 @@
GNS3 WebUI is web implementation of user interface for GNS3 software.
Current version: 2019.2.0
Current version: 2.2.32
What's New
- Help section added with information about third party components
- Showing progress when server starting
- Possibility to edit interface & node labels by using context menu
- Enhancements in moving elements on map
- Context menu extended with option to duplicate
- Main menu extended with option to lock all items on map
Bug Fixes & enhancements
- Fixed generated capture file is not valid
- Fixed Docker additional directories
Current version: 2020.4.0-beta.1
Bug Fixes & enhancements
- symbol is not properly selected in change symbol dialog
- issue when using the scroll wheel on the web console
- missing settings for Docker nodes
- error on servers page
What's new
- double click nodes to open the console
Current version: 2020.3.0-beta.3
Bug Fixes & enhancements
- direct download URL in template dialog
- fix for issues with suspnded nodes
- fix for bug with deleting templates
- fix for importing images
What's new
- Option to resize console
- Improvements in creating templates
GNS3 Web UI 2020.3.0-beta.1
Bug Fixes & enhancements
- refreshing list of templates after adding new template from project map 
- link to preferences from project page 
- disallow user to create Qemu template when binary is not selected 
- extending the time for notification to appear 
- open first settings menu at start 
- the menu for the map rearranged 
- restyling SystemStatus page 
- marking files which already exist in appliance wizard
What's new
- Option to import appliances
GNS3 Web UI 2020.2.0-beta.5
Bug Fixes
- Removing issues with positioning interface labels while adding link between nodes on map
- Bug in symbol selection
- Same question is asked after going back to project
- Cannot read property 'forEach' of undefined
- Error when selecting existing Docker image
- Invalid property when adding VMware VM template
- Invalid type for adapters field when adding Docker template
- Prevent user to move to another step when adding template
- Web UI cannot set flag "Leave this project running in the background after closing"
What's new
- Default values in templates
- New option for Qemu VMs
- Ability to quickly change Hostname from right click
- Progress bar for node creation
GNS3 Web UI 2020.2.0-beta.4
Bug Fixes
- New port setting for GNS3 VM preferences
- Option to auto-hide menu toolbar on the left side
- Server type in template preferences
- Error when selecting existing Docker image
- Default values in templates
- TypeError: Cannot read property 'message' of undefined
- TypeError: e.error is undefined
- TypeError: Cannot read property 'placements' of null
- Creating IOS templates -> fix for platforms and network adapters
GNS3 Web UI 2020.2.0-beta.2
What's New
- Drag & drop to add new nodes on topology
- Option to minimize/maximize and hide console widget
- Ability to add IOS templates
- Node names in HTTP console tabs
- Default settings for templates
- Support for adding IOS images
- Node dialog updated
- Messages with description in toasts
- Adding interfaces to cloud nodes
- Changes in notification box mechanism (once per day option)
- Additional tooltips added
- Copy/paste options in console (only Chrome full support)
- More details for server failed connections
Bug Fixes
- Fix for console icons
- Fix for creating ethernet switches and hubs
- Fix for opening console from context menu
- Qemu configurator now works properly
- Fixes in snap to grid option
- Symbols preview now works correctly
- Error messages in preferences should be displayed
- Default values for New Ethernet devices in configurator
- Fix for wrong adapter types in Qemu
- Fix for fit in view option on Firefox
- Fix for navigation errors
GNS3 Web UI 2020.2.0-beta.1
What's New
- Support for suspended status added
- Suport for 404 page
- Actions for group of nodes added
- Updating packages
- Button to close project added
- Opening ads in new window
- New dialog for adding nodes
- Option to import config
- Support for light theme added
Bug Fixes
- Fix for navigating to project that doesn't exist
- Fix for AdButler errors
- Fix for screenshot issue
- Proper centering of icons
- Fix for adding custom symbols
- Fix for return command in console
- Fix for deleting links
- Fix for duplicating any node type
- Fix for console errors on servers page
- Fix for console errors on projects page
GNS3 Web UI 2019.2.0 v10
What's New
- Qemu image configurator
- Custom console for particular node
- Option to connect console to all nodes
- Option to start Winpcap
- Filtering devices with packet filters on topology summary
- Filtering devices with captures on topology summary
- View options taken from map configuration
- Servers summary widget
- Ability to lock single item on the map
- Editing & import & export config files
- Context menu for inserted drawings
- Ability to drag topology summary & servers summary & console widgets
- Ability to resize topology summary & servers summary & console widgets
- Option to show the grid
- Option to snap to grid
- Usage instructions available from context menu
- Errors & warnings visible as notifications
- Fit in view options
- Support for global variables
- Support for layers
- Extending template preferences
Bug Fixes
- Input validation in styles editor
- Fix for saving map as image
- Removing errors with uncorrect subscriptions
GNS3 Web UI 2019.2.0 v9
What's New
- Editing interface labels on double click
- Support for keyboard shortcuts
- Menu extended with option to delete currently opened project, export & import project
- Possibility to save current state of project
- Ability to duplicate project from projects page
- Node information dialog available from context menu
- Topology summary widget on map view
- Improvements in dialog styles
Bug Fixes
- Removing issues with opening console
- Context menu now is correctly placed
- Entered text in text & style editor is now validated
- Text validation in dialogs
- Removing errors with creating WebSockets

View File

@ -1,58 +1,58 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { ProjectMapComponent } from './components/project-map/project-map.component';
import { ServersComponent } from './components/servers/servers.component';
import { ProjectsComponent } from './components/projects/projects.component';
import { DefaultLayoutComponent } from './layouts/default-layout/default-layout.component';
import { SettingsComponent } from './components/settings/settings.component';
import { BundledServerFinderComponent } from './components/bundled-server-finder/bundled-server-finder.component';
import { PreferencesComponent } from './components/preferences/preferences.component';
import { QemuPreferencesComponent } from './components/preferences/qemu/qemu-preferences/qemu-preferences.component';
import { QemuVmTemplatesComponent } from './components/preferences/qemu/qemu-vm-templates/qemu-vm-templates.component';
import { QemuVmTemplateDetailsComponent } from './components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component';
import { AddQemuVmTemplateComponent } from './components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component';
import { GeneralPreferencesComponent } from './components/preferences/general/general-preferences.component';
import { VpcsPreferencesComponent } from './components/preferences/vpcs/vpcs-preferences/vpcs-preferences.component';
import { VpcsTemplatesComponent } from './components/preferences/vpcs/vpcs-templates/vpcs-templates.component';
import { AddVpcsTemplateComponent } from './components/preferences/vpcs/add-vpcs-template/add-vpcs-template.component';
import { VpcsTemplateDetailsComponent } from './components/preferences/vpcs/vpcs-template-details/vpcs-template-details.component';
import { VirtualBoxPreferencesComponent } from './components/preferences/virtual-box/virtual-box-preferences/virtual-box-preferences.component';
import { VirtualBoxTemplatesComponent } from './components/preferences/virtual-box/virtual-box-templates/virtual-box-templates.component';
import { VirtualBoxTemplateDetailsComponent } from './components/preferences/virtual-box/virtual-box-template-details/virtual-box-template-details.component';
import { AddVirtualBoxTemplateComponent } from './components/preferences/virtual-box/add-virtual-box-template/add-virtual-box-template.component';
import { DirectLinkComponent } from './components/direct-link/direct-link.component';
import { HelpComponent } from './components/help/help.component';
import { InstalledSoftwareComponent } from './components/installed-software/installed-software.component';
import { PageNotFoundComponent } from './components/page-not-found/page-not-found.component';
import { BuiltInPreferencesComponent } from './components/preferences/built-in/built-in-preferences.component';
import { EthernetHubsTemplatesComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component';
import { EthernetHubsAddTemplateComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component';
import { EthernetHubsTemplateDetailsComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-template-details/ethernet-hubs-template-details.component';
import { CloudNodesTemplatesComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component';
import { CloudNodesAddTemplateComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component';
import { CloudNodesTemplateDetailsComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component';
import { EthernetSwitchesTemplatesComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component';
import { CloudNodesTemplatesComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component';
import { EthernetHubsAddTemplateComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component';
import { EthernetHubsTemplateDetailsComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-template-details/ethernet-hubs-template-details.component';
import { EthernetHubsTemplatesComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component';
import { EthernetSwitchesAddTemplateComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component';
import { EthernetSwitchesTemplateDetailsComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component';
import { DynamipsPreferencesComponent } from './components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component';
import { IosTemplatesComponent } from './components/preferences/dynamips/ios-templates/ios-templates.component';
import { InstalledSoftwareComponent } from './components/installed-software/installed-software.component';
import { IosTemplateDetailsComponent } from './components/preferences/dynamips/ios-template-details/ios-template-details.component';
import { AddIosTemplateComponent } from './components/preferences/dynamips/add-ios-template/add-ios-template.component';
import { VmwarePreferencesComponent } from './components/preferences/vmware/vmware-preferences/vmware-preferences.component';
import { VmwareTemplatesComponent } from './components/preferences/vmware/vmware-templates/vmware-templates.component';
import { VmwareTemplateDetailsComponent } from './components/preferences/vmware/vmware-template-details/vmware-template-details.component';
import { AddVmwareTemplateComponent } from './components/preferences/vmware/add-vmware-template/add-vmware-template.component';
import { DockerTemplatesComponent } from './components/preferences/docker/docker-templates/docker-templates.component';
import { EthernetSwitchesTemplatesComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component';
import { AddDockerTemplateComponent } from './components/preferences/docker/add-docker-template/add-docker-template.component';
import { DockerTemplateDetailsComponent } from './components/preferences/docker/docker-template-details/docker-template-details.component';
import { IouTemplatesComponent } from './components/preferences/ios-on-unix/iou-templates/iou-templates.component';
import { AddIouTemplateComponent } from './components/preferences/ios-on-unix/add-iou-template/add-iou-template.component';
import { IouTemplateDetailsComponent } from './components/preferences/ios-on-unix/iou-template-details/iou-template-details.component';
import { CopyQemuVmTemplateComponent } from './components/preferences/qemu/copy-qemu-vm-template/copy-qemu-vm-template.component';
import { CopyIosTemplateComponent } from './components/preferences/dynamips/copy-ios-template/copy-ios-template.component';
import { CopyDockerTemplateComponent } from './components/preferences/docker/copy-docker-template/copy-docker-template.component';
import { DockerTemplateDetailsComponent } from './components/preferences/docker/docker-template-details/docker-template-details.component';
import { DockerTemplatesComponent } from './components/preferences/docker/docker-templates/docker-templates.component';
import { AddIosTemplateComponent } from './components/preferences/dynamips/add-ios-template/add-ios-template.component';
import { CopyIosTemplateComponent } from './components/preferences/dynamips/copy-ios-template/copy-ios-template.component';
import { IosTemplateDetailsComponent } from './components/preferences/dynamips/ios-template-details/ios-template-details.component';
import { IosTemplatesComponent } from './components/preferences/dynamips/ios-templates/ios-templates.component';
import { Gns3vmComponent } from './components/preferences/gns3vm/gns3vm.component';
import { AddIouTemplateComponent } from './components/preferences/ios-on-unix/add-iou-template/add-iou-template.component';
import { CopyIouTemplateComponent } from './components/preferences/ios-on-unix/copy-iou-template/copy-iou-template.component';
import { ListOfSnapshotsComponent } from './components/snapshots/list-of-snapshots/list-of-snapshots.component';
import { IouTemplateDetailsComponent } from './components/preferences/ios-on-unix/iou-template-details/iou-template-details.component';
import { IouTemplatesComponent } from './components/preferences/ios-on-unix/iou-templates/iou-templates.component';
import { PreferencesComponent } from './components/preferences/preferences.component';
import { AddQemuVmTemplateComponent } from './components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component';
import { CopyQemuVmTemplateComponent } from './components/preferences/qemu/copy-qemu-vm-template/copy-qemu-vm-template.component';
import { QemuVmTemplateDetailsComponent } from './components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component';
import { QemuVmTemplatesComponent } from './components/preferences/qemu/qemu-vm-templates/qemu-vm-templates.component';
import { AddVirtualBoxTemplateComponent } from './components/preferences/virtual-box/add-virtual-box-template/add-virtual-box-template.component';
import { VirtualBoxTemplateDetailsComponent } from './components/preferences/virtual-box/virtual-box-template-details/virtual-box-template-details.component';
import { VirtualBoxTemplatesComponent } from './components/preferences/virtual-box/virtual-box-templates/virtual-box-templates.component';
import { AddVmwareTemplateComponent } from './components/preferences/vmware/add-vmware-template/add-vmware-template.component';
import { VmwareTemplateDetailsComponent } from './components/preferences/vmware/vmware-template-details/vmware-template-details.component';
import { VmwareTemplatesComponent } from './components/preferences/vmware/vmware-templates/vmware-templates.component';
import { AddVpcsTemplateComponent } from './components/preferences/vpcs/add-vpcs-template/add-vpcs-template.component';
import { VpcsTemplateDetailsComponent } from './components/preferences/vpcs/vpcs-template-details/vpcs-template-details.component';
import { VpcsTemplatesComponent } from './components/preferences/vpcs/vpcs-templates/vpcs-templates.component';
import { ProjectMapComponent } from './components/project-map/project-map.component';
import { ProjectsComponent } from './components/projects/projects.component';
import { ServersComponent } from './components/servers/servers.component';
import { ConsoleComponent } from './components/settings/console/console.component';
import { HelpComponent } from './components/help/help.component';
import { SettingsComponent } from './components/settings/settings.component';
import { ListOfSnapshotsComponent } from './components/snapshots/list-of-snapshots/list-of-snapshots.component';
import { SystemStatusComponent } from './components/system-status/system-status.component';
import { WebConsoleFullWindowComponent } from './components/web-console-full-window/web-console-full-window.component';
import { ConsoleGuard } from './guards/console-guard';
import { DefaultLayoutComponent } from './layouts/default-layout/default-layout.component';
import { ServerResolve } from './resolvers/server-resolve';
const routes: Routes = [
{
@ -62,77 +62,149 @@ const routes: Routes = [
{ path: '', redirectTo: 'servers', pathMatch: 'full' },
{ path: 'servers', component: ServersComponent },
{ path: 'bundled', component: BundledServerFinderComponent },
{ path: 'server/:server_id/projects', component: ProjectsComponent },
{
path: 'server/:server_id/projects',
component: ProjectsComponent,
resolve: { server: ServerResolve },
},
{ path: 'help', component: HelpComponent },
{ path: 'settings', component: SettingsComponent },
{ path: 'settings/console', component: ConsoleComponent },
{ path: 'installed-software', component: InstalledSoftwareComponent },
{ path: 'server/:server_id/project/:project_id/snapshots', component: ListOfSnapshotsComponent },
{ path: 'server/:server_id/systemstatus', component: SystemStatusComponent },
{ path: 'server/:server_ip/:server_port/project/:project_id', component: DirectLinkComponent },
{
path: 'server/:server_id/project/:project_id/snapshots',
component: ListOfSnapshotsComponent,
resolve: { server: ServerResolve },
},
{ path: 'server/:server_id/preferences', component: PreferencesComponent },
{ path: 'server/:server_id/preferences/gns3vm', component: Gns3vmComponent },
// { path: 'server/:server_id/preferences/general', component: GeneralPreferencesComponent },
{ path: 'server/:server_id/preferences/builtin', component: BuiltInPreferencesComponent},
{ path: 'server/:server_id/preferences/builtin', component: BuiltInPreferencesComponent },
{ path: 'server/:server_id/preferences/builtin/ethernet-hubs', component: EthernetHubsTemplatesComponent },
{ path: 'server/:server_id/preferences/builtin/ethernet-hubs/addtemplate', component: EthernetHubsAddTemplateComponent },
{ path: 'server/:server_id/preferences/builtin/ethernet-hubs/:template_id', component: EthernetHubsTemplateDetailsComponent },
{
path: 'server/:server_id/preferences/builtin/ethernet-hubs/addtemplate',
component: EthernetHubsAddTemplateComponent,
},
{
path: 'server/:server_id/preferences/builtin/ethernet-hubs/:template_id',
component: EthernetHubsTemplateDetailsComponent,
},
{ path: 'server/:server_id/preferences/builtin/ethernet-switches', component: EthernetSwitchesTemplatesComponent },
{ path: 'server/:server_id/preferences/builtin/ethernet-switches/addtemplate', component: EthernetSwitchesAddTemplateComponent },
{ path: 'server/:server_id/preferences/builtin/ethernet-switches/:template_id', component: EthernetSwitchesTemplateDetailsComponent },
{
path: 'server/:server_id/preferences/builtin/ethernet-switches',
component: EthernetSwitchesTemplatesComponent,
},
{
path: 'server/:server_id/preferences/builtin/ethernet-switches/addtemplate',
component: EthernetSwitchesAddTemplateComponent,
},
{
path: 'server/:server_id/preferences/builtin/ethernet-switches/:template_id',
component: EthernetSwitchesTemplateDetailsComponent,
},
{ path: 'server/:server_id/preferences/builtin/cloud-nodes', component: CloudNodesTemplatesComponent },
{ path: 'server/:server_id/preferences/builtin/cloud-nodes/addtemplate', component: CloudNodesAddTemplateComponent },
{ path: 'server/:server_id/preferences/builtin/cloud-nodes/:template_id', component: CloudNodesTemplateDetailsComponent },
{
path: 'server/:server_id/preferences/builtin/cloud-nodes/addtemplate',
component: CloudNodesAddTemplateComponent,
},
{
path: 'server/:server_id/preferences/builtin/cloud-nodes/:template_id',
component: CloudNodesTemplateDetailsComponent,
},
//{ path: 'server/:server_id/preferences/dynamips', component: DynamipsPreferencesComponent },
{ path: 'server/:server_id/preferences/dynamips/templates', component: IosTemplatesComponent },
{ path: 'server/:server_id/preferences/dynamips/templates/addtemplate', component: AddIosTemplateComponent },
{ path: 'server/:server_id/preferences/dynamips/templates/:template_id', component: IosTemplateDetailsComponent },
{ path: 'server/:server_id/preferences/dynamips/templates/:template_id/copy', component: CopyIosTemplateComponent },
{
path: 'server/:server_id/preferences/dynamips/templates/:template_id/copy',
component: CopyIosTemplateComponent,
},
// { path: 'server/:server_id/preferences/qemu', component: QemuPreferencesComponent },
{ path: 'server/:server_id/preferences/qemu/templates', component: QemuVmTemplatesComponent },
{ path: 'server/:server_id/preferences/qemu/templates/:template_id/copy', component: CopyQemuVmTemplateComponent },
{
path: 'server/:server_id/preferences/qemu/templates/:template_id/copy',
component: CopyQemuVmTemplateComponent,
},
{ path: 'server/:server_id/preferences/qemu/templates/:template_id', component: QemuVmTemplateDetailsComponent },
{ path: 'server/:server_id/preferences/qemu/addtemplate', component: AddQemuVmTemplateComponent },
// { path: 'server/:server_id/preferences/vpcs', component: VpcsPreferencesComponent },
{ path: 'server/:server_id/preferences/vpcs/templates', component: VpcsTemplatesComponent },
{ path: 'server/:server_id/preferences/vpcs/templates/:template_id', component: VpcsTemplateDetailsComponent},
{ path: 'server/:server_id/preferences/vpcs/templates/:template_id', component: VpcsTemplateDetailsComponent },
{ path: 'server/:server_id/preferences/vpcs/addtemplate', component: AddVpcsTemplateComponent },
// { path: 'server/:server_id/preferences/virtualbox', component: VirtualBoxPreferencesComponent },
{ path: 'server/:server_id/preferences/virtualbox/templates', component: VirtualBoxTemplatesComponent },
{ path: 'server/:server_id/preferences/virtualbox/templates/:template_id', component: VirtualBoxTemplateDetailsComponent },
{
path: 'server/:server_id/preferences/virtualbox/templates/:template_id',
component: VirtualBoxTemplateDetailsComponent,
},
{ path: 'server/:server_id/preferences/virtualbox/addtemplate', component: AddVirtualBoxTemplateComponent },
// { path: 'server/:server_id/preferences/vmware', component: VmwarePreferencesComponent },
{ path: 'server/:server_id/preferences/vmware/templates', component: VmwareTemplatesComponent },
{ path: 'server/:server_id/preferences/vmware/templates/:template_id', component: VmwareTemplateDetailsComponent },
{
path: 'server/:server_id/preferences/vmware/templates/:template_id',
component: VmwareTemplateDetailsComponent,
},
{ path: 'server/:server_id/preferences/vmware/addtemplate', component: AddVmwareTemplateComponent },
// { path: 'server/:server_id/preferences/traceng', component: TracengPreferencesComponent },
// { path: 'server/:server_id/preferences/traceng/templates', component: TracengTemplatesComponent },
// { path: 'server/:server_id/preferences/traceng/templates/:template_id', component: TracengTemplateDetailsComponent },
// { path: 'server/:server_id/preferences/traceng/addtemplate', component: AddTracengTemplateComponent },
{ path: 'server/:server_id/preferences/docker/templates', component: DockerTemplatesComponent },
{ path: 'server/:server_id/preferences/docker/templates/:template_id', component: DockerTemplateDetailsComponent },
{ path: 'server/:server_id/preferences/docker/templates/:template_id/copy', component: CopyDockerTemplateComponent },
{
path: 'server/:server_id/preferences/docker/templates/:template_id',
component: DockerTemplateDetailsComponent,
},
{
path: 'server/:server_id/preferences/docker/templates/:template_id/copy',
component: CopyDockerTemplateComponent,
},
{ path: 'server/:server_id/preferences/docker/addtemplate', component: AddDockerTemplateComponent },
{ path: 'server/:server_id/preferences/iou/templates', component: IouTemplatesComponent },
{ path: 'server/:server_id/preferences/iou/templates/:template_id', component: IouTemplateDetailsComponent },
{ path: 'server/:server_id/preferences/iou/templates/:template_id/copy', component: CopyIouTemplateComponent },
{ path: 'server/:server_id/preferences/iou/addtemplate', component: AddIouTemplateComponent }
]
{ path: 'server/:server_id/preferences/iou/addtemplate', component: AddIouTemplateComponent },
],
},
{
path: 'server/:server_id/project/:project_id', component: ProjectMapComponent,
{
path: 'server/:server_id/project/:project_id',
component: ProjectMapComponent,
canDeactivate: [ConsoleGuard],
},
{
path: 'server/:server_id/project/:project_id/nodes/:node_id',
component: WebConsoleFullWindowComponent,
},
{
path: 'static/web-ui/server/:server_id/project/:project_id/nodes/:node_id',
component: WebConsoleFullWindowComponent,
},
{
path: '**',
redirectTo: 'servers'
}
component: PageNotFoundComponent,
},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
imports: [
RouterModule.forRoot(routes, {
anchorScrolling: 'enabled',
enableTracing: false,
scrollPositionRestoration: 'enabled',
}),
],
exports: [RouterModule],
})
export class AppRoutingModule {}

View File

@ -1 +1,4 @@
<router-outlet></router-outlet>
<div [ngClass]="{ dark: darkThemeEnabled, light: !darkThemeEnabled }">
<router-outlet></router-outlet>
<!-- <app-adbutler></app-adbutler> -->
</div>

View File

@ -0,0 +1,11 @@
mat-menu-panel {
min-height: 0px;
}
.dark {
background: #263238 !important;
}
.light {
background: white !important;
}

View File

@ -1,12 +1,14 @@
import { TestBed, async, ComponentFixture } from '@angular/core/testing';
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MatIconModule } from '@angular/material/icon';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component';
import { MatIconModule } from '@angular/material';
import { SettingsService } from './services/settings.service';
import { PersistenceService } from 'angular-persistence';
import { ElectronService, NgxElectronModule } from 'ngx-electron';
import { AppComponent } from './app.component';
import { ProgressService } from './common/progress/progress.service';
import { SettingsService } from './services/settings.service';
import createSpyObj = jasmine.createSpyObj;
// import 'jasmine';
describe('AppComponent', () => {
let component: AppComponent;
@ -18,11 +20,12 @@ describe('AppComponent', () => {
TestBed.configureTestingModule({
declarations: [AppComponent],
imports: [RouterTestingModule, MatIconModule, NgxElectronModule],
providers: [SettingsService, PersistenceService]
providers: [SettingsService, ProgressService],
schemas: [NO_ERRORS_SCHEMA],
}).compileComponents();
electronService = TestBed.get(ElectronService);
settingsService = TestBed.get(SettingsService);
electronService = TestBed.inject(ElectronService);
settingsService = TestBed.inject(SettingsService);
}));
beforeEach(() => {
@ -42,23 +45,18 @@ describe('AppComponent', () => {
}));
it('should receive changed settings and forward to electron', async(() => {
const spy = createSpyObj('Electron.IpcRenderer', ['send']);
spyOnProperty(electronService, 'isElectronApp').and.returnValue(true);
spyOnProperty(electronService, 'ipcRenderer').and.returnValue(spy);
settingsService.set('crash_reports', true);
settingsService.setReportsSettings(true);
component.ngOnInit();
settingsService.set('crash_reports', false);
expect(spy.send).toHaveBeenCalled();
expect(spy.send.calls.mostRecent().args[0]).toEqual('settings.changed');
expect(spy.send.calls.mostRecent().args[1].crash_reports).toEqual(false);
settingsService.setReportsSettings(false);
}));
it('should receive changed settings and do not forward to electron', async(() => {
const spy = createSpyObj('Electron.IpcRenderer', ['send']);
spyOnProperty(electronService, 'isElectronApp').and.returnValue(false);
settingsService.set('crash_reports', true);
settingsService.setReportsSettings(true);
component.ngOnInit();
settingsService.set('crash_reports', false);
settingsService.setReportsSettings(false);
expect(spy.send).not.toHaveBeenCalled();
}));
});

View File

@ -1,29 +1,67 @@
import { Component, OnInit } from '@angular/core';
import { MatIconRegistry } from '@angular/material';
import { OverlayContainer } from '@angular/cdk/overlay';
import { Component, HostBinding, OnInit } from '@angular/core';
import { MatIconRegistry } from '@angular/material/icon';
import { DomSanitizer } from '@angular/platform-browser';
import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';
import { ElectronService } from 'ngx-electron';
import { ProgressService } from './common/progress/progress.service';
import { SettingsService } from './services/settings.service';
import { ThemeService } from './services/theme.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
styleUrls: ['./app.component.scss'],
})
export class AppComponent implements OnInit {
public darkThemeEnabled: boolean = false;
constructor(
private overlayContainer: OverlayContainer,
iconReg: MatIconRegistry,
sanitizer: DomSanitizer,
private settingsService: SettingsService,
private electronService: ElectronService
private electronService: ElectronService,
private themeService: ThemeService,
private router: Router,
private progressService: ProgressService
) {
iconReg.addSvgIcon('gns3', sanitizer.bypassSecurityTrustResourceUrl('./assets/gns3_icon.svg'));
iconReg.addSvgIcon('gns3black', sanitizer.bypassSecurityTrustResourceUrl('./assets/gns3_icon_black.svg'));
router.events.subscribe((value) => {
this.checkEvent(value);
});
}
@HostBinding('class') componentCssClass;
ngOnInit(): void {
if (this.electronService.isElectronApp) {
this.settingsService.subscribe(settings => {
this.electronService.ipcRenderer.send('settings.changed', settings);
});
this.applyTheme(this.themeService.savedTheme + '-theme');
this.themeService.themeChanged.subscribe((event: string) => {
this.applyTheme(event);
});
}
applyTheme(theme: string) {
if (theme === 'dark-theme') {
this.darkThemeEnabled = true;
} else {
this.darkThemeEnabled = false;
}
this.overlayContainer.getContainerElement().classList.add(theme);
this.componentCssClass = theme;
}
checkEvent(routerEvent): void {
if (routerEvent instanceof NavigationStart) {
this.progressService.activate();
} else if (
routerEvent instanceof NavigationEnd ||
routerEvent instanceof NavigationCancel ||
routerEvent instanceof NavigationError
) {
this.progressService.deactivate();
}
}
}

View File

@ -1,205 +1,274 @@
import * as Raven from 'raven-js';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule, ErrorHandler } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { DragDropModule } from '@angular/cdk/drag-drop';
import { OverlayModule } from '@angular/cdk/overlay';
import { CdkTableModule } from '@angular/cdk/table';
import { HttpClientModule } from '@angular/common/http';
import { ErrorHandler, NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatSidenavModule } from '@angular/material/sidenav';
import { BrowserModule, Title } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { DragAndDropModule } from 'angular-draggable-droppable';
import { ResizableModule } from 'angular-resizable-element';
import { D3Service } from 'd3-ng2-service';
import { HotkeyModule } from 'angular2-hotkeys';
import { PersistenceModule } from 'angular-persistence';
import { NgxElectronModule } from 'ngx-electron';
import { NgCircleProgressModule } from 'ng-circle-progress';
import { FileUploadModule } from 'ng2-file-upload';
import { NgxChildProcessModule } from 'ngx-childprocess';
import { NgxElectronModule } from 'ngx-electron';
import { AppRoutingModule } from './app-routing.module';
import { VersionService } from './services/version.service';
import { ProjectService } from './services/project.service';
import { SymbolService } from './services/symbol.service';
import { ServerService } from './services/server.service';
import { IndexedDbService } from './services/indexed-db.service';
import { HttpServer, ServerErrorHandler } from './services/http-server.service';
import { SnapshotService } from './services/snapshot.service';
import { ProgressDialogService } from './common/progress-dialog/progress-dialog.service';
import { NodeService } from './services/node.service';
import { TemplateService } from './services/template.service';
import { LinkService } from './services/link.service';
import { ProjectsComponent } from './components/projects/projects.component';
import { AddBlankProjectDialogComponent } from './components/projects/add-blank-project-dialog/add-blank-project-dialog.component';
import { ImportProjectDialogComponent } from './components/projects/import-project-dialog/import-project-dialog.component';
import { ConfirmationDialogComponent } from './components/projects/confirmation-dialog/confirmation-dialog.component';
import { DefaultLayoutComponent } from './layouts/default-layout/default-layout.component';
import { ProgressDialogComponent } from './common/progress-dialog/progress-dialog.component';
import { AppComponent } from './app.component';
import { ProjectMapComponent } from './components/project-map/project-map.component';
import { ServersComponent } from './components/servers/servers.component';
import { AddServerDialogComponent } from './components/servers/add-server-dialog/add-server-dialog.component';
import { ContextMenuComponent } from './components/project-map/context-menu/context-menu.component';
import { StartNodeActionComponent } from './components/project-map/context-menu/actions/start-node-action/start-node-action.component';
import { StopNodeActionComponent } from './components/project-map/context-menu/actions/stop-node-action/stop-node-action.component';
import { TemplateComponent } from './components/template/template.component';
import { TemplateListDialogComponent } from './components/template/template-list-dialog/template-list-dialog.component';
import { CartographyModule } from './cartography/cartography.module';
import { ToasterService } from './services/toaster.service';
import { ProjectWebServiceHandler } from './handlers/project-web-service-handler';
import { DrawingsDataSource } from './cartography/datasources/drawings-datasource';
import { LinksDataSource } from './cartography/datasources/links-datasource';
import { NodesDataSource } from './cartography/datasources/nodes-datasource';
import { SymbolsDataSource } from './cartography/datasources/symbols-datasource';
import { SelectionManager } from './cartography/managers/selection-manager';
import { InRectangleHelper } from './cartography/helpers/in-rectangle-helper';
import { DrawingsDataSource } from './cartography/datasources/drawings-datasource';
import { EditStyleActionComponent } from './components/project-map/context-menu/actions/edit-style-action/edit-style-action.component';
import { MoveLayerDownActionComponent } from './components/project-map/context-menu/actions/move-layer-down-action/move-layer-down-action.component';
import { MoveLayerUpActionComponent } from './components/project-map/context-menu/actions/move-layer-up-action/move-layer-up-action.component';
import { ProjectMapShortcutsComponent } from './components/project-map/project-map-shortcuts/project-map-shortcuts.component';
import { SettingsComponent } from './components/settings/settings.component';
import { SettingsService } from './services/settings.service';
import { BundledServerFinderComponent } from './components/bundled-server-finder/bundled-server-finder.component';
import { SelectionManager } from './cartography/managers/selection-manager';
import { ToasterErrorHandler } from './common/error-handlers/toaster-error-handler';
import { ProgressDialogComponent } from './common/progress-dialog/progress-dialog.component';
import { ProgressDialogService } from './common/progress-dialog/progress-dialog.service';
import { ProgressComponent } from './common/progress/progress.component';
import { ProgressService } from './common/progress/progress.service';
import { version } from './version';
import { ToasterErrorHandler } from './common/error-handlers/toaster-error-handler';
import { environment } from '../environments/environment';
import { RavenState } from './common/error-handlers/raven-state-communicator';
import { ServerDiscoveryComponent } from './components/servers/server-discovery/server-discovery.component';
import { ServerDatabase } from './services/server.database';
import { CreateSnapshotDialogComponent } from './components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component';
import { SnapshotMenuItemComponent } from './components/snapshots/snapshot-menu-item/snapshot-menu-item.component';
import { MATERIAL_IMPORTS } from './material.imports';
import { DrawingService } from './services/drawing.service';
import { ProjectNameValidator } from './components/projects/models/projectNameValidator';
import { MatSidenavModule } from '@angular/material';
import { NodeSelectInterfaceComponent } from './components/project-map/node-select-interface/node-select-interface.component';
import { DrawLinkToolComponent } from './components/project-map/draw-link-tool/draw-link-tool.component';
import { InstalledSoftwareComponent } from './components/installed-software/installed-software.component';
import { AdbutlerComponent } from './components/adbutler/adbutler.component';
import { BundledServerFinderComponent } from './components/bundled-server-finder/bundled-server-finder.component';
import { InformationDialogComponent } from './components/dialogs/information-dialog.component';
import { DirectLinkComponent } from './components/direct-link/direct-link.component';
import { DrawingAddedComponent } from './components/drawings-listeners/drawing-added/drawing-added.component';
import { DrawingDraggedComponent } from './components/drawings-listeners/drawing-dragged/drawing-dragged.component';
import { DrawingResizedComponent } from './components/drawings-listeners/drawing-resized/drawing-resized.component';
import { TextEditedComponent } from './components/drawings-listeners/text-edited/text-edited.component';
import { InterfaceLabelDraggedComponent } from './components/drawings-listeners/interface-label-dragged/interface-label-dragged.component';
import { LinkCreatedComponent } from './components/drawings-listeners/link-created/link-created.component';
import { NodeDraggedComponent } from './components/drawings-listeners/node-dragged/node-dragged.component';
import { NodeLabelDraggedComponent } from './components/drawings-listeners/node-label-dragged/node-label-dragged.component';
import { DrawingDraggedComponent } from './components/drawings-listeners/drawing-dragged/drawing-dragged.component';
import { LinkCreatedComponent } from './components/drawings-listeners/link-created/link-created.component';
import { InterfaceLabelDraggedComponent } from './components/drawings-listeners/interface-label-dragged/interface-label-dragged.component';
import { ToolsService } from './services/tools.service';
import { TextAddedComponent } from './components/drawings-listeners/text-added/text-added.component';
import { DrawingAddedComponent } from './components/drawings-listeners/drawing-added/drawing-added.component';
import { TextEditedComponent } from './components/drawings-listeners/text-edited/text-edited.component';
import { HelpComponent } from './components/help/help.component';
import { InstallSoftwareComponent } from './components/installed-software/install-software/install-software.component';
import { StyleEditorDialogComponent } from './components/project-map/drawings-editors/style-editor/style-editor.component';
import { EditTextActionComponent } from './components/project-map/context-menu/actions/edit-text-action/edit-text-action.component';
import { TextEditorDialogComponent } from './components/project-map/drawings-editors/text-editor/text-editor.component';
import { PreferencesComponent } from './components/preferences/preferences.component';
import { QemuPreferencesComponent } from './components/preferences/qemu/qemu-preferences/qemu-preferences.component';
import { ServerSettingsService } from './services/server-settings.service';
import { QemuVmTemplatesComponent } from './components/preferences/qemu/qemu-vm-templates/qemu-vm-templates.component';
import { AddQemuVmTemplateComponent } from './components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component';
import { QemuVmTemplateDetailsComponent } from './components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component';
import { QemuService } from './services/qemu.service';
import { GeneralPreferencesComponent } from './components/preferences/general/general-preferences.component';
import { VpcsPreferencesComponent } from './components/preferences/vpcs/vpcs-preferences/vpcs-preferences.component';
import { VpcsTemplatesComponent } from './components/preferences/vpcs/vpcs-templates/vpcs-templates.component';
import { VpcsService } from './services/vpcs.service';
import { AddVpcsTemplateComponent } from './components/preferences/vpcs/add-vpcs-template/add-vpcs-template.component';
import { VpcsTemplateDetailsComponent } from './components/preferences/vpcs/vpcs-template-details/vpcs-template-details.component';
import { TemplateMocksService } from './services/template-mocks.service';
import { VirtualBoxPreferencesComponent } from './components/preferences/virtual-box/virtual-box-preferences/virtual-box-preferences.component';
import { VirtualBoxTemplatesComponent } from './components/preferences/virtual-box/virtual-box-templates/virtual-box-templates.component';
import { VirtualBoxService } from './services/virtual-box.service';
import { VirtualBoxTemplateDetailsComponent } from './components/preferences/virtual-box/virtual-box-template-details/virtual-box-template-details.component';
import { AddVirtualBoxTemplateComponent } from './components/preferences/virtual-box/add-virtual-box-template/add-virtual-box-template.component';
import { InstalledSoftwareComponent } from './components/installed-software/installed-software.component';
import { PageNotFoundComponent } from './components/page-not-found/page-not-found.component';
import { BuiltInPreferencesComponent } from './components/preferences/built-in/built-in-preferences.component';
import { EthernetHubsTemplatesComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component';
import { BuiltInTemplatesService } from './services/built-in-templates.service';
import { EthernetHubsAddTemplateComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component';
import { EthernetHubsTemplateDetailsComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-template-details/ethernet-hubs-template-details.component';
import { CloudNodesTemplatesComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component';
import { CloudNodesAddTemplateComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component';
import { CloudNodesTemplateDetailsComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component';
import { EthernetSwitchesTemplatesComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component';
import { CloudNodesTemplatesComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component';
import { EthernetHubsAddTemplateComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component';
import { EthernetHubsTemplateDetailsComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-template-details/ethernet-hubs-template-details.component';
import { EthernetHubsTemplatesComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component';
import { EthernetSwitchesAddTemplateComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component';
import { EthernetSwitchesTemplateDetailsComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component';
import { DynamipsPreferencesComponent } from './components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component';
import { IosTemplatesComponent } from './components/preferences/dynamips/ios-templates/ios-templates.component';
import { IosService } from './services/ios.service';
import { SymbolsComponent } from './components/preferences/common/symbols/symbols.component';
import { InstalledSoftwareService } from './services/installed-software.service';
import { ExternalSoftwareDefinitionService } from './services/external-software-definition.service';
import { PlatformService } from './services/platform.service';
import { IosTemplateDetailsComponent } from './components/preferences/dynamips/ios-template-details/ios-template-details.component';
import { AddIosTemplateComponent } from './components/preferences/dynamips/add-ios-template/add-ios-template.component';
import { IosConfigurationService } from './services/ios-configuration.service';
import { QemuConfigurationService } from './services/qemu-configuration.service';
import { VirtualBoxConfigurationService } from './services/virtual-box-configuration.service';
import { VpcsConfigurationService } from './services/vpcs-configuration.service';
import { BuiltInTemplatesConfigurationService } from './services/built-in-templates-configuration.service';
import { VmwarePreferencesComponent } from './components/preferences/vmware/vmware-preferences/vmware-preferences.component';
import { VmwareTemplatesComponent } from './components/preferences/vmware/vmware-templates/vmware-templates.component';
import { VmwareService } from './services/vmware.service';
import { VmwareConfigurationService } from './services/vmware-configuration.service';
import { VmwareTemplateDetailsComponent } from './components/preferences/vmware/vmware-template-details/vmware-template-details.component';
import { AddVmwareTemplateComponent } from './components/preferences/vmware/add-vmware-template/add-vmware-template.component';
import { EthernetSwitchesTemplatesComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component';
import { CustomAdaptersTableComponent } from './components/preferences/common/custom-adapters-table/custom-adapters-table.component';
import { CustomAdaptersComponent } from './components/preferences/common/custom-adapters/custom-adapters.component';
import { DeleteConfirmationDialogComponent } from './components/preferences/common/delete-confirmation-dialog/delete-confirmation-dialog.component';
import { DeleteTemplateComponent } from './components/preferences/common/delete-template-component/delete-template.component';
import { DockerService } from './services/docker.service';
import { DockerTemplatesComponent } from './components/preferences/docker/docker-templates/docker-templates.component';
import { DockerConfigurationService } from './services/docker-configuration.service';
import { AddDockerTemplateComponent } from './components/preferences/docker/add-docker-template/add-docker-template.component';
import { DockerTemplateDetailsComponent } from './components/preferences/docker/docker-template-details/docker-template-details.component';
import { IouTemplatesComponent } from './components/preferences/ios-on-unix/iou-templates/iou-templates.component';
import { IouService } from './services/iou.service';
import { AddIouTemplateComponent } from './components/preferences/ios-on-unix/add-iou-template/add-iou-template.component';
import { IouConfigurationService } from './services/iou-configuration.service';
import { IouTemplateDetailsComponent } from './components/preferences/ios-on-unix/iou-template-details/iou-template-details.component';
import { CopyQemuVmTemplateComponent } from './components/preferences/qemu/copy-qemu-vm-template/copy-qemu-vm-template.component';
import { CopyIosTemplateComponent } from './components/preferences/dynamips/copy-ios-template/copy-ios-template.component';
import { CopyIouTemplateComponent } from './components/preferences/ios-on-unix/copy-iou-template/copy-iou-template.component';
import { CopyDockerTemplateComponent } from './components/preferences/docker/copy-docker-template/copy-docker-template.component';
import { EmptyTemplatesListComponent } from './components/preferences/common/empty-templates-list/empty-templates-list.component';
import { PortsComponent } from './components/preferences/common/ports/ports.component';
import { SymbolsMenuComponent } from './components/preferences/common/symbols-menu/symbols-menu.component';
import { SearchFilter } from './filters/searchFilter.pipe';
import { RecentlyOpenedProjectService } from './services/recentlyOpenedProject.service';
import { ServerManagementService } from './services/server-management.service';
import { SymbolsComponent } from './components/preferences/common/symbols/symbols.component';
import { UdpTunnelsComponent } from './components/preferences/common/udp-tunnels/udp-tunnels.component';
import { AddDockerTemplateComponent } from './components/preferences/docker/add-docker-template/add-docker-template.component';
import { CopyDockerTemplateComponent } from './components/preferences/docker/copy-docker-template/copy-docker-template.component';
import { DockerTemplateDetailsComponent } from './components/preferences/docker/docker-template-details/docker-template-details.component';
import { DockerTemplatesComponent } from './components/preferences/docker/docker-templates/docker-templates.component';
import { AddIosTemplateComponent } from './components/preferences/dynamips/add-ios-template/add-ios-template.component';
import { CopyIosTemplateComponent } from './components/preferences/dynamips/copy-ios-template/copy-ios-template.component';
import { DynamipsPreferencesComponent } from './components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component';
import { IosTemplateDetailsComponent } from './components/preferences/dynamips/ios-template-details/ios-template-details.component';
import { IosTemplatesComponent } from './components/preferences/dynamips/ios-templates/ios-templates.component';
import { GeneralPreferencesComponent } from './components/preferences/general/general-preferences.component';
import { Gns3vmComponent } from './components/preferences/gns3vm/gns3vm.component';
import { AddIouTemplateComponent } from './components/preferences/ios-on-unix/add-iou-template/add-iou-template.component';
import { CopyIouTemplateComponent } from './components/preferences/ios-on-unix/copy-iou-template/copy-iou-template.component';
import { IouTemplateDetailsComponent } from './components/preferences/ios-on-unix/iou-template-details/iou-template-details.component';
import { IouTemplatesComponent } from './components/preferences/ios-on-unix/iou-templates/iou-templates.component';
import { PreferencesComponent } from './components/preferences/preferences.component';
import { AddQemuVmTemplateComponent } from './components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component';
import { CopyQemuVmTemplateComponent } from './components/preferences/qemu/copy-qemu-vm-template/copy-qemu-vm-template.component';
import { QemuPreferencesComponent } from './components/preferences/qemu/qemu-preferences/qemu-preferences.component';
import { QemuVmTemplateDetailsComponent } from './components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component';
import { QemuVmTemplatesComponent } from './components/preferences/qemu/qemu-vm-templates/qemu-vm-templates.component';
import { AddTracengTemplateComponent } from './components/preferences/traceng/add-traceng/add-traceng-template.component';
import { TracengPreferencesComponent } from './components/preferences/traceng/traceng-preferences/traceng-preferences.component';
import { TracengTemplateDetailsComponent } from './components/preferences/traceng/traceng-template-details/traceng-template-details.component';
import { TracengTemplatesComponent } from './components/preferences/traceng/traceng-templates/traceng-templates.component';
import { AddVirtualBoxTemplateComponent } from './components/preferences/virtual-box/add-virtual-box-template/add-virtual-box-template.component';
import { VirtualBoxPreferencesComponent } from './components/preferences/virtual-box/virtual-box-preferences/virtual-box-preferences.component';
import { VirtualBoxTemplateDetailsComponent } from './components/preferences/virtual-box/virtual-box-template-details/virtual-box-template-details.component';
import { VirtualBoxTemplatesComponent } from './components/preferences/virtual-box/virtual-box-templates/virtual-box-templates.component';
import { AddVmwareTemplateComponent } from './components/preferences/vmware/add-vmware-template/add-vmware-template.component';
import { VmwarePreferencesComponent } from './components/preferences/vmware/vmware-preferences/vmware-preferences.component';
import { VmwareTemplateDetailsComponent } from './components/preferences/vmware/vmware-template-details/vmware-template-details.component';
import { VmwareTemplatesComponent } from './components/preferences/vmware/vmware-templates/vmware-templates.component';
import { AddVpcsTemplateComponent } from './components/preferences/vpcs/add-vpcs-template/add-vpcs-template.component';
import { VpcsPreferencesComponent } from './components/preferences/vpcs/vpcs-preferences/vpcs-preferences.component';
import { VpcsTemplateDetailsComponent } from './components/preferences/vpcs/vpcs-template-details/vpcs-template-details.component';
import { VpcsTemplatesComponent } from './components/preferences/vpcs/vpcs-templates/vpcs-templates.component';
import { ChangeHostnameDialogComponent } from './components/project-map/change-hostname-dialog/change-hostname-dialog.component';
import { ChangeSymbolDialogComponent } from './components/project-map/change-symbol-dialog/change-symbol-dialog.component';
import { ConsoleWrapperComponent } from './components/project-map/console-wrapper/console-wrapper.component';
import { ContextConsoleMenuComponent } from './components/project-map/context-console-menu/context-console-menu.component';
import { AlignHorizontallyActionComponent } from './components/project-map/context-menu/actions/align-horizontally/align-horizontally.component';
import { AlignVerticallyActionComponent } from './components/project-map/context-menu/actions/align_vertically/align-vertically.component';
import { BringToFrontActionComponent } from './components/project-map/context-menu/actions/bring-to-front-action/bring-to-front-action.component';
import { ChangeHostnameActionComponent } from './components/project-map/context-menu/actions/change-hostname/change-hostname-action.component';
import { ChangeSymbolActionComponent } from './components/project-map/context-menu/actions/change-symbol/change-symbol-action.component';
import { ConfigActionComponent } from './components/project-map/context-menu/actions/config-action/config-action.component';
import { ConsoleDeviceActionBrowserComponent } from './components/project-map/context-menu/actions/console-device-action-browser/console-device-action-browser.component';
import { ConsoleDeviceActionComponent } from './components/project-map/context-menu/actions/console-device-action/console-device-action.component';
import { DeleteActionComponent } from './components/project-map/context-menu/actions/delete-action/delete-action.component';
import { DuplicateActionComponent } from './components/project-map/context-menu/actions/duplicate-action/duplicate-action.component';
import { EditConfigActionComponent } from './components/project-map/context-menu/actions/edit-config/edit-config-action.component';
import { EditStyleActionComponent } from './components/project-map/context-menu/actions/edit-style-action/edit-style-action.component';
import { EditTextActionComponent } from './components/project-map/context-menu/actions/edit-text-action/edit-text-action.component';
import { ExportConfigActionComponent } from './components/project-map/context-menu/actions/export-config/export-config-action.component';
import { HttpConsoleNewTabActionComponent } from './components/project-map/context-menu/actions/http-console-new-tab/http-console-new-tab-action.component';
import { HttpConsoleActionComponent } from './components/project-map/context-menu/actions/http-console/http-console-action.component';
import { ImportConfigActionComponent } from './components/project-map/context-menu/actions/import-config/import-config-action.component';
import { LockActionComponent } from './components/project-map/context-menu/actions/lock-action/lock-action.component';
import { MoveLayerDownActionComponent } from './components/project-map/context-menu/actions/move-layer-down-action/move-layer-down-action.component';
import { MoveLayerUpActionComponent } from './components/project-map/context-menu/actions/move-layer-up-action/move-layer-up-action.component';
import { OpenFileExplorerActionComponent } from './components/project-map/context-menu/actions/open-file-explorer/open-file-explorer-action.component';
import { PacketFiltersActionComponent } from './components/project-map/context-menu/actions/packet-filters-action/packet-filters-action.component';
import { ReloadNodeActionComponent } from './components/project-map/context-menu/actions/reload-node-action/reload-node-action.component';
import { ResumeLinkActionComponent } from './components/project-map/context-menu/actions/resume-link-action/resume-link-action.component';
import { ShowNodeActionComponent } from './components/project-map/context-menu/actions/show-node-action/show-node-action.component';
import { StartCaptureOnStartedLinkActionComponent } from './components/project-map/context-menu/actions/start-capture-on-started-link/start-capture-on-started-link.component';
import { StartCaptureActionComponent } from './components/project-map/context-menu/actions/start-capture/start-capture-action.component';
import { StartNodeActionComponent } from './components/project-map/context-menu/actions/start-node-action/start-node-action.component';
import { StopCaptureActionComponent } from './components/project-map/context-menu/actions/stop-capture/stop-capture-action.component';
import { StopNodeActionComponent } from './components/project-map/context-menu/actions/stop-node-action/stop-node-action.component';
import { SuspendLinkActionComponent } from './components/project-map/context-menu/actions/suspend-link/suspend-link-action.component';
import { SuspendNodeActionComponent } from './components/project-map/context-menu/actions/suspend-node-action/suspend-node-action.component';
import { ContextMenuComponent } from './components/project-map/context-menu/context-menu.component';
import { ConfigDialogComponent } from './components/project-map/context-menu/dialogs/config-dialog/config-dialog.component';
import { DrawLinkToolComponent } from './components/project-map/draw-link-tool/draw-link-tool.component';
import { StyleEditorDialogComponent } from './components/project-map/drawings-editors/style-editor/style-editor.component';
import { TextEditorDialogComponent } from './components/project-map/drawings-editors/text-editor/text-editor.component';
import { HelpDialogComponent } from './components/project-map/help-dialog/help-dialog.component';
import { NodeCreatedLabelStylesFixer } from './components/project-map/helpers/node-created-label-styles-fixer';
import { ImportApplianceComponent } from './components/project-map/import-appliance/import-appliance.component';
import { InfoDialogComponent } from './components/project-map/info-dialog/info-dialog.component';
import { LogConsoleComponent } from './components/project-map/log-console/log-console.component';
import { LogEventsDataSource } from './components/project-map/log-console/log-events-datasource';
import { ApplianceInfoDialogComponent } from './components/project-map/new-template-dialog/appliance-info-dialog/appliance-info-dialog.component';
import { NewTemplateDialogComponent } from './components/project-map/new-template-dialog/new-template-dialog.component';
import { TemplateNameDialogComponent } from './components/project-map/new-template-dialog/template-name-dialog/template-name-dialog.component';
import { ConfigEditorDialogComponent } from './components/project-map/node-editors/config-editor/config-editor.component';
import { ConfiguratorDialogAtmSwitchComponent } from './components/project-map/node-editors/configurator/atm_switch/configurator-atm-switch.component';
import { ConfiguratorDialogCloudComponent } from './components/project-map/node-editors/configurator/cloud/configurator-cloud.component';
import { ConfiguratorDialogDockerComponent } from './components/project-map/node-editors/configurator/docker/configurator-docker.component';
import { ConfigureCustomAdaptersDialogComponent } from './components/project-map/node-editors/configurator/docker/configure-custom-adapters/configure-custom-adapters.component';
import { EditNetworkConfigurationDialogComponent } from './components/project-map/node-editors/configurator/docker/edit-network-configuration/edit-network-configuration.component';
import { ConfiguratorDialogEthernetSwitchComponent } from './components/project-map/node-editors/configurator/ethernet-switch/configurator-ethernet-switch.component';
import { ConfiguratorDialogEthernetHubComponent } from './components/project-map/node-editors/configurator/ethernet_hub/configurator-ethernet-hub.component';
import { ConfiguratorDialogIosComponent } from './components/project-map/node-editors/configurator/ios/configurator-ios.component';
import { ConfiguratorDialogIouComponent } from './components/project-map/node-editors/configurator/iou/configurator-iou.component';
import { ConfiguratorDialogNatComponent } from './components/project-map/node-editors/configurator/nat/configurator-nat.component';
import { ConfiguratorDialogQemuComponent } from './components/project-map/node-editors/configurator/qemu/configurator-qemu.component';
import { QemuImageCreatorComponent } from './components/project-map/node-editors/configurator/qemu/qemu-image-creator/qemu-image-creator.component';
import { ConfiguratorDialogSwitchComponent } from './components/project-map/node-editors/configurator/switch/configurator-switch.component';
import { ConfiguratorDialogTracengComponent } from './components/project-map/node-editors/configurator/traceng/configurator-traceng.component';
import { ConfiguratorDialogVirtualBoxComponent } from './components/project-map/node-editors/configurator/virtualbox/configurator-virtualbox.component';
import { ConfiguratorDialogVmwareComponent } from './components/project-map/node-editors/configurator/vmware/configurator-vmware.component';
import { ConfiguratorDialogVpcsComponent } from './components/project-map/node-editors/configurator/vpcs/configurator-vpcs.component';
import { NodeSelectInterfaceComponent } from './components/project-map/node-select-interface/node-select-interface.component';
import { NodesMenuComponent } from './components/project-map/nodes-menu/nodes-menu.component';
import { PacketFiltersDialogComponent } from './components/project-map/packet-capturing/packet-filters/packet-filters.component';
import { StartCaptureDialogComponent } from './components/project-map/packet-capturing/start-capture/start-capture.component';
import { ProjectMapMenuComponent } from './components/project-map/project-map-menu/project-map-menu.component';
import { ProjectMapComponent } from './components/project-map/project-map.component';
import { ScreenshotDialogComponent } from './components/project-map/screenshot-dialog/screenshot-dialog.component';
import { WebConsoleComponent } from './components/project-map/web-console/web-console.component';
import { AddBlankProjectDialogComponent } from './components/projects/add-blank-project-dialog/add-blank-project-dialog.component';
import { ChooseNameDialogComponent } from './components/projects/choose-name-dialog/choose-name-dialog.component';
import { ConfirmationBottomSheetComponent } from './components/projects/confirmation-bottomsheet/confirmation-bottomsheet.component';
import { ConfirmationDialogComponent } from './components/projects/confirmation-dialog/confirmation-dialog.component';
import { EditProjectDialogComponent } from './components/projects/edit-project-dialog/edit-project-dialog.component';
import { ImportProjectDialogComponent } from './components/projects/import-project-dialog/import-project-dialog.component';
import { ProjectNameValidator } from './components/projects/models/projectNameValidator';
import { NavigationDialogComponent } from './components/projects/navigation-dialog/navigation-dialog.component';
import { ProjectsComponent } from './components/projects/projects.component';
import { SaveProjectDialogComponent } from './components/projects/save-project-dialog/save-project-dialog.component';
import { AddServerDialogComponent } from './components/servers/add-server-dialog/add-server-dialog.component';
import { ConfigureGns3VMDialogComponent } from './components/servers/configure-gns3vm-dialog/configure-gns3vm-dialog.component';
import { ServerDiscoveryComponent } from './components/servers/server-discovery/server-discovery.component';
import { ServersComponent } from './components/servers/servers.component';
import { ConsoleComponent } from './components/settings/console/console.component';
import { SettingsComponent } from './components/settings/settings.component';
import { CreateSnapshotDialogComponent } from './components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component';
import { ListOfSnapshotsComponent } from './components/snapshots/list-of-snapshots/list-of-snapshots.component';
import { SnapshotMenuItemComponent } from './components/snapshots/snapshot-menu-item/snapshot-menu-item.component';
import { StatusChartComponent } from './components/system-status/status-chart/status-chart.component';
import { StatusInfoComponent } from './components/system-status/status-info/status-info.component';
import { SystemStatusComponent } from './components/system-status/system-status.component';
import { TemplateListDialogComponent } from './components/template/template-list-dialog/template-list-dialog.component';
import { TemplateComponent } from './components/template/template.component';
import { TopologySummaryComponent } from './components/topology-summary/topology-summary.component';
import { WebConsoleFullWindowComponent } from './components/web-console-full-window/web-console-full-window.component';
import { DataSourceFilter } from './filters/dataSourceFilter';
import { DateFilter } from './filters/dateFilter.pipe';
import { NameFilter } from './filters/nameFilter.pipe';
import { CustomAdaptersComponent } from './components/preferences/common/custom-adapters/custom-adapters.component';
import { ConsoleDeviceActionComponent } from './components/project-map/context-menu/actions/console-device-action/console-device-action.component';
import { ConsoleComponent } from './components/settings/console/console.component';
import { NodesMenuComponent } from './components/project-map/nodes-menu/nodes-menu.component';
import { PacketFiltersActionComponent } from './components/project-map/context-menu/actions/packet-filters-action/packet-filters-action.component';
import { PacketFiltersDialogComponent } from './components/project-map/packet-capturing/packet-filters/packet-filters.component';
import { HelpDialogComponent } from './components/project-map/help-dialog/help-dialog.component';
import { StartCaptureActionComponent } from './components/project-map/context-menu/actions/start-capture/start-capture-action.component';
import { StartCaptureDialogComponent } from './components/project-map/packet-capturing/start-capture/start-capture.component';
import { SuspendLinkActionComponent } from './components/project-map/context-menu/actions/suspend-link/suspend-link-action.component';
import { ResumeLinkActionComponent } from './components/project-map/context-menu/actions/resume-link-action/resume-link-action.component';
import { StopCaptureActionComponent } from './components/project-map/context-menu/actions/stop-capture/stop-capture-action.component';
import { ProjectsFilter } from './filters/projectsFilter.pipe';
import { SearchFilter } from './filters/searchFilter.pipe';
import { TemplateFilter } from './filters/templateFilter.pipe';
import { ConsoleGuard } from './guards/console-guard';
import { ProjectWebServiceHandler } from './handlers/project-web-service-handler';
import { DefaultLayoutComponent } from './layouts/default-layout/default-layout.component';
import { MATERIAL_IMPORTS } from './material.imports';
import { ServerResolve } from './resolvers/server-resolve';
import { ApplianceService } from './services/appliances.service';
import { ProtocolHandlerService } from './services/protocol-handler.service';
import { BuiltInTemplatesConfigurationService } from './services/built-in-templates-configuration.service';
import { BuiltInTemplatesService } from './services/built-in-templates.service';
import { ComputeService } from './services/compute.service';
import { DockerConfigurationService } from './services/docker-configuration.service';
import { DockerService } from './services/docker.service';
import { DrawingService } from './services/drawing.service';
import { ExternalSoftwareDefinitionService } from './services/external-software-definition.service';
import { Gns3vmService } from './services/gns3vm.service';
import { GoogleAnalyticsService } from './services/google-analytics.service';
import { HttpServer, ServerErrorHandler } from './services/http-server.service';
import { InfoService } from './services/info.service';
import { InstalledSoftwareService } from './services/installed-software.service';
import { IosConfigurationService } from './services/ios-configuration.service';
import { IosService } from './services/ios.service';
import { IouConfigurationService } from './services/iou-configuration.service';
import { IouService } from './services/iou.service';
import { LinkService } from './services/link.service';
import { MapScaleService } from './services/mapScale.service';
import { AdbutlerComponent } from './components/adbutler/adbutler.component';
import { MapSettingsService } from './services/mapsettings.service';
import { NodeService } from './services/node.service';
import { NodeConsoleService } from './services/nodeConsole.service';
import { NotificationService } from './services/notification.service';
import { PacketCaptureService } from './services/packet-capture.service';
import { PlatformService } from './services/platform.service';
import { ProjectService } from './services/project.service';
import { QemuConfigurationService } from './services/qemu-configuration.service';
import { QemuService } from './services/qemu.service';
import { RecentlyOpenedProjectService } from './services/recentlyOpenedProject.service';
import { ServerManagementService } from './services/server-management.service';
import { ServerSettingsService } from './services/server-settings.service';
import { ServerDatabase } from './services/server.database';
import { ServerService } from './services/server.service';
import { SettingsService } from './services/settings.service';
import { ConsoleService } from './services/settings/console.service';
import { DefaultConsoleService } from './services/settings/default-console.service';
import { NodeCreatedLabelStylesFixer } from './components/project-map/helpers/node-created-label-styles-fixer';
import { SnapshotService } from './services/snapshot.service';
import { SymbolService } from './services/symbol.service';
import { TemplateMocksService } from './services/template-mocks.service';
import { TemplateService } from './services/template.service';
import { ThemeService } from './services/theme.service';
import { ToasterService } from './services/toaster.service';
import { ToolsService } from './services/tools.service';
import { TracengService } from './services/traceng.service';
import { UpdatesService } from './services/updates.service';
import { VersionService } from './services/version.service';
import { VirtualBoxConfigurationService } from './services/virtual-box-configuration.service';
import { VirtualBoxService } from './services/virtual-box.service';
import { VmwareConfigurationService } from './services/vmware-configuration.service';
import { VmwareService } from './services/vmware.service';
import { VpcsConfigurationService } from './services/vpcs-configuration.service';
import { VpcsService } from './services/vpcs.service';
import { NonNegativeValidator } from './validators/non-negative-validator';
import { RotationValidator } from './validators/rotation-validator';
import { DuplicateActionComponent } from './components/project-map/context-menu/actions/duplicate-action/duplicate-action.component';
import { MapSettingService } from './services/mapsettings.service';
import { ProjectMapMenuComponent } from './components/project-map/project-map-menu/project-map-menu.component';
import { HelpComponent } from './components/help/help.component';
if (environment.production) {
Raven.config('https://b2b1cfd9b043491eb6b566fd8acee358@sentry.io/842726', {
shouldSendCallback: () => {
return RavenState.shouldSend;
},
release: version
}).install();
}
@NgModule({
declarations: [
@ -216,6 +285,7 @@ if (environment.production) {
DefaultLayoutComponent,
ProgressDialogComponent,
ContextMenuComponent,
ContextConsoleMenuComponent,
StartNodeActionComponent,
StopNodeActionComponent,
TemplateComponent,
@ -231,7 +301,6 @@ if (environment.production) {
StopCaptureActionComponent,
ResumeLinkActionComponent,
SuspendLinkActionComponent,
ProjectMapShortcutsComponent,
SettingsComponent,
PreferencesComponent,
BundledServerFinderComponent,
@ -304,15 +373,88 @@ if (environment.production) {
SearchFilter,
DateFilter,
NameFilter,
DataSourceFilter,
TemplateFilter,
ProjectsFilter,
ListOfSnapshotsComponent,
CustomAdaptersComponent,
NodesMenuComponent,
AdbutlerComponent,
ConsoleDeviceActionComponent,
ShowNodeActionComponent,
ConsoleComponent,
NodesMenuComponent,
ProjectMapMenuComponent,
HelpComponent
HelpComponent,
ConfigEditorDialogComponent,
EditConfigActionComponent,
LogConsoleComponent,
SaveProjectDialogComponent,
TopologySummaryComponent,
InfoDialogComponent,
BringToFrontActionComponent,
ExportConfigActionComponent,
ImportConfigActionComponent,
ConsoleDeviceActionBrowserComponent,
ChangeSymbolDialogComponent,
ChangeSymbolActionComponent,
EditProjectDialogComponent,
ReloadNodeActionComponent,
SuspendNodeActionComponent,
ConfigActionComponent,
ConfiguratorDialogVpcsComponent,
ConfiguratorDialogEthernetHubComponent,
ConfiguratorDialogEthernetSwitchComponent,
PortsComponent,
ConfiguratorDialogSwitchComponent,
ConfiguratorDialogVirtualBoxComponent,
CustomAdaptersTableComponent,
ConfiguratorDialogQemuComponent,
ConfiguratorDialogCloudComponent,
UdpTunnelsComponent,
ConfiguratorDialogAtmSwitchComponent,
ConfiguratorDialogVmwareComponent,
ConfiguratorDialogIouComponent,
ConfiguratorDialogIosComponent,
ConfiguratorDialogDockerComponent,
ConfiguratorDialogNatComponent,
ConfiguratorDialogTracengComponent,
AddTracengTemplateComponent,
TracengPreferencesComponent,
TracengTemplatesComponent,
TracengTemplateDetailsComponent,
QemuImageCreatorComponent,
ChooseNameDialogComponent,
StartCaptureOnStartedLinkActionComponent,
LockActionComponent,
NavigationDialogComponent,
ScreenshotDialogComponent,
PageNotFoundComponent,
AlignHorizontallyActionComponent,
AlignVerticallyActionComponent,
ConfirmationBottomSheetComponent,
ConfigDialogComponent,
Gns3vmComponent,
ConfigureGns3VMDialogComponent,
ImportApplianceComponent,
DirectLinkComponent,
SystemStatusComponent,
StatusInfoComponent,
StatusChartComponent,
OpenFileExplorerActionComponent,
HttpConsoleActionComponent,
WebConsoleComponent,
ConsoleWrapperComponent,
HttpConsoleNewTabActionComponent,
WebConsoleFullWindowComponent,
NewTemplateDialogComponent,
ChangeHostnameActionComponent,
ChangeHostnameDialogComponent,
ApplianceInfoDialogComponent,
InformationDialogComponent,
TemplateNameDialogComponent,
ConfigureCustomAdaptersDialogComponent,
EditNetworkConfigurationDialogComponent
],
imports: [
BrowserModule,
@ -323,12 +465,16 @@ if (environment.production) {
BrowserAnimationsModule,
CdkTableModule,
CartographyModule,
HotkeyModule.forRoot(),
PersistenceModule,
NgxElectronModule,
FileUploadModule,
MatSidenavModule,
MATERIAL_IMPORTS
ResizableModule,
DragAndDropModule,
DragDropModule,
NgxChildProcessModule,
MATERIAL_IMPORTS,
NgCircleProgressModule.forRoot(),
OverlayModule,
],
providers: [
SettingsService,
@ -342,7 +488,6 @@ if (environment.production) {
NodeService,
LinkService,
DrawingService,
IndexedDbService,
HttpServer,
SnapshotService,
ProgressDialogService,
@ -352,6 +497,7 @@ if (environment.production) {
LinksDataSource,
NodesDataSource,
SymbolsDataSource,
LogEventsDataSource,
SelectionManager,
InRectangleHelper,
DrawingsDataSource,
@ -388,7 +534,22 @@ if (environment.production) {
NodeCreatedLabelStylesFixer,
NonNegativeValidator,
RotationValidator,
MapSettingService
MapSettingsService,
InfoService,
ComputeService,
TracengService,
PacketCaptureService,
ProtocolHandlerService,
NotificationService,
Gns3vmService,
ThemeService,
GoogleAnalyticsService,
NodeConsoleService,
ServerResolve,
ConsoleGuard,
Title,
ApplianceService,
UpdatesService,
],
entryComponents: [
AddServerDialogComponent,
@ -404,8 +565,42 @@ if (environment.production) {
SymbolsComponent,
DeleteConfirmationDialogComponent,
HelpDialogComponent,
StartCaptureDialogComponent
StartCaptureDialogComponent,
ConfigEditorDialogComponent,
SaveProjectDialogComponent,
InfoDialogComponent,
ChangeSymbolDialogComponent,
EditProjectDialogComponent,
ConfigureGns3VMDialogComponent,
ConfiguratorDialogVpcsComponent,
ConfiguratorDialogEthernetHubComponent,
ConfiguratorDialogEthernetSwitchComponent,
ConfiguratorDialogSwitchComponent,
ConfiguratorDialogVirtualBoxComponent,
ConfiguratorDialogQemuComponent,
ConfiguratorDialogCloudComponent,
ConfiguratorDialogAtmSwitchComponent,
ConfiguratorDialogVmwareComponent,
ConfiguratorDialogIouComponent,
ConfiguratorDialogIosComponent,
ConfiguratorDialogDockerComponent,
ConfiguratorDialogNatComponent,
ConfiguratorDialogTracengComponent,
QemuImageCreatorComponent,
ChooseNameDialogComponent,
NavigationDialogComponent,
ScreenshotDialogComponent,
ConfirmationBottomSheetComponent,
ConfigDialogComponent,
AdbutlerComponent,
NewTemplateDialogComponent,
ChangeHostnameDialogComponent,
ApplianceInfoDialogComponent,
ConfigureCustomAdaptersDialogComponent,
EditNetworkConfigurationDialogComponent,
],
bootstrap: [AppComponent]
bootstrap: [AppComponent],
})
export class AppModule {}
export class AppModule {
constructor(protected _googleAnalyticsService: GoogleAnalyticsService) {}
}

View File

@ -1,6 +1,4 @@
import { NodeComponent } from './components/experimental-map/node/node.component';
import { LinkComponent } from './components/experimental-map/link/link.component';
import { StatusComponent } from './components/experimental-map/status/status.component';
import { DraggableComponent } from './components/experimental-map/draggable/draggable.component';
import { DrawingComponent } from './components/experimental-map/drawing/drawing.component';
import { EllipseComponent } from './components/experimental-map/drawing/drawings/ellipse/ellipse.component';
import { ImageComponent } from './components/experimental-map/drawing/drawings/image/image.component';
@ -8,8 +6,10 @@ import { LineComponent } from './components/experimental-map/drawing/drawings/li
import { RectComponent } from './components/experimental-map/drawing/drawings/rect/rect.component';
import { TextComponent } from './components/experimental-map/drawing/drawings/text/text.component';
import { InterfaceLabelComponent } from './components/experimental-map/interface-label/interface-label.component';
import { DraggableComponent } from './components/experimental-map/draggable/draggable.component';
import { LinkComponent } from './components/experimental-map/link/link.component';
import { NodeComponent } from './components/experimental-map/node/node.component';
import { SelectionComponent } from './components/experimental-map/selection/selection.component';
import { StatusComponent } from './components/experimental-map/status/status.component';
export const ANGULAR_MAP_DECLARATIONS = [
NodeComponent,
@ -23,5 +23,5 @@ export const ANGULAR_MAP_DECLARATIONS = [
TextComponent,
DraggableComponent,
SelectionComponent,
InterfaceLabelComponent
InterfaceLabelComponent,
];

View File

@ -1,26 +1,22 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MatMenuModule, MatIconModule } from '@angular/material';
import { CssFixer } from './helpers/css-fixer';
import { FontFixer } from './helpers/font-fixer';
import { DefaultDrawingsFactory } from './helpers/default-drawings-factory';
import { MultiLinkCalculatorHelper } from './helpers/multi-link-calculator-helper';
import { SvgToDrawingConverter } from './helpers/svg-to-drawing-converter';
import { QtDasharrayFixer } from './helpers/qt-dasharray-fixer';
import { LayersManager } from './managers/layers-manager';
import { MapChangeDetectorRef } from './services/map-change-detector-ref';
import { Context } from './models/context';
import { NgModule } from '@angular/core';
import { MatIconModule } from '@angular/material/icon';
import { MatMenuModule } from '@angular/material/menu';
import { ANGULAR_MAP_DECLARATIONS } from './angular-map.imports';
import { D3_MAP_IMPORTS } from './d3-map.imports';
import { CanvasSizeDetector } from './helpers/canvas-size-detector';
import { DrawingsEventSource } from './events/drawings-event-source';
import { NodesEventSource } from './events/nodes-event-source';
import { MapDrawingToSvgConverter } from './converters/map/map-drawing-to-svg-converter';
import { D3MapComponent } from './components/d3-map/d3-map.component';
import { DraggableSelectionComponent } from './components/draggable-selection/draggable-selection.component';
import { DrawingAddingComponent } from './components/drawing-adding/drawing-adding.component';
import { DrawingResizingComponent } from './components/drawing-resizing/drawing-resizing.component';
import { ExperimentalMapComponent } from './components/experimental-map/experimental-map.component';
import { SelectionControlComponent } from './components/selection-control/selection-control.component';
import { SelectionSelectComponent } from './components/selection-select/selection-select.component';
import { TextEditorComponent } from './components/text-editor/text-editor.component';
import { DrawingToMapDrawingConverter } from './converters/map/drawing-to-map-drawing-converter';
import { LabelToMapLabelConverter } from './converters/map/label-to-map-label-converter';
import { LinkNodeToMapLinkNodeConverter } from './converters/map/link-node-to-map-link-node-converter';
import { LinkToMapLinkConverter } from './converters/map/link-to-map-link-converter';
import { MapDrawingToDrawingConverter } from './converters/map/map-drawing-to-drawing-converter';
import { MapDrawingToSvgConverter } from './converters/map/map-drawing-to-svg-converter';
import { MapLabelToLabelConverter } from './converters/map/map-label-to-label-converter';
import { MapLinkNodeToLinkNodeConverter } from './converters/map/map-link-node-to-link-node-converter';
import { MapLinkToLinkConverter } from './converters/map/map-link-to-link-converter';
@ -30,34 +26,40 @@ import { MapSymbolToSymbolConverter } from './converters/map/map-symbol-to-symbo
import { NodeToMapNodeConverter } from './converters/map/node-to-map-node-converter';
import { PortToMapPortConverter } from './converters/map/port-to-map-port-converter';
import { SymbolToMapSymbolConverter } from './converters/map/symbol-to-map-symbol-converter';
import { LinkNodeToMapLinkNodeConverter } from './converters/map/link-node-to-map-link-node-converter';
import { GraphDataManager } from './managers/graph-data-manager';
import {
MapNodesDataSource,
MapLinksDataSource,
MapDrawingsDataSource,
MapSymbolsDataSource
} from './datasources/map-datasource';
import { LinksEventSource } from './events/links-event-source';
import { D3MapComponent } from './components/d3-map/d3-map.component';
import { ExperimentalMapComponent } from './components/experimental-map/experimental-map.component';
import { SelectionEventSource } from './events/selection-event-source';
import { SelectionControlComponent } from './components/selection-control/selection-control.component';
import { SelectionSelectComponent } from './components/selection-select/selection-select.component';
import { DraggableSelectionComponent } from './components/draggable-selection/draggable-selection.component';
import { MapSettingsManager } from './managers/map-settings-manager';
import { DrawingResizingComponent } from './components/drawing-resizing/drawing-resizing.component';
import { FontBBoxCalculator } from './helpers/font-bbox-calculator';
import { StylesToFontConverter } from './converters/styles-to-font-converter';
import { TextElementFactory } from './helpers/drawings-factory/text-element-factory';
import { EllipseElementFactory } from './helpers/drawings-factory/ellipse-element-factory';
import { RectangleElementFactory } from './helpers/drawings-factory/rectangle-element-factory';
import { LineElementFactory } from './helpers/drawings-factory/line-element-factory';
import { TextEditorComponent } from './components/text-editor/text-editor.component';
import { DrawingAddingComponent } from './components/drawing-adding/drawing-adding.component';
import { MovingEventSource } from './events/moving-event-source';
import { D3_MAP_IMPORTS } from './d3-map.imports';
import {
MapDrawingsDataSource,
MapLinksDataSource,
MapNodesDataSource,
MapSymbolsDataSource,
} from './datasources/map-datasource';
import { MovingCanvasDirective } from './directives/moving-canvas.directive';
import { ZoomingCanvasDirective } from './directives/zooming-canvas.directive';
import { DrawingsEventSource } from './events/drawings-event-source';
import { LinksEventSource } from './events/links-event-source';
import { MovingEventSource } from './events/moving-event-source';
import { NodesEventSource } from './events/nodes-event-source';
import { SelectionEventSource } from './events/selection-event-source';
import { CanvasSizeDetector } from './helpers/canvas-size-detector';
import { CssFixer } from './helpers/css-fixer';
import { DefaultDrawingsFactory } from './helpers/default-drawings-factory';
import { EllipseElementFactory } from './helpers/drawings-factory/ellipse-element-factory';
import { LineElementFactory } from './helpers/drawings-factory/line-element-factory';
import { RectangleElementFactory } from './helpers/drawings-factory/rectangle-element-factory';
import { TextElementFactory } from './helpers/drawings-factory/text-element-factory';
import { FontBBoxCalculator } from './helpers/font-bbox-calculator';
import { FontFixer } from './helpers/font-fixer';
import { MultiLinkCalculatorHelper } from './helpers/multi-link-calculator-helper';
import { QtDasharrayFixer } from './helpers/qt-dasharray-fixer';
import { SvgToDrawingConverter } from './helpers/svg-to-drawing-converter';
import { GraphDataManager } from './managers/graph-data-manager';
import { LayersManager } from './managers/layers-manager';
import { MapSettingsManager } from './managers/map-settings-manager';
import { Context } from './models/context';
import { MapChangeDetectorRef } from './services/map-change-detector-ref';
import { EthernetLinkWidget } from './widgets/links/ethernet-link';
import { SerialLinkWidget } from './widgets/links/serial-link';
@NgModule({
imports: [CommonModule, MatMenuModule, MatIconModule],
@ -72,7 +74,7 @@ import { ZoomingCanvasDirective } from './directives/zooming-canvas.directive';
SelectionSelectComponent,
DraggableSelectionComponent,
MovingCanvasDirective,
ZoomingCanvasDirective
ZoomingCanvasDirective,
],
providers: [
CssFixer,
@ -117,8 +119,10 @@ import { ZoomingCanvasDirective } from './directives/zooming-canvas.directive';
MapSettingsManager,
FontBBoxCalculator,
StylesToFontConverter,
...D3_MAP_IMPORTS
EthernetLinkWidget,
SerialLinkWidget,
...D3_MAP_IMPORTS,
],
exports: [D3MapComponent, ExperimentalMapComponent]
exports: [D3MapComponent, ExperimentalMapComponent],
})
export class CartographyModule {}

View File

@ -1,10 +1,48 @@
<svg #svg class="map" preserveAspectRatio="none" movingCanvas zoomingCanvas>
<svg id="map" #svg class="map" preserveAspectRatio="none" movingCanvas zoomingCanvas>
<filter id="grayscale"><feColorMatrix id="feGrayscale" type="saturate" values="0" /></filter>
<defs>
<pattern
attr.x="{{ drawingGridX }}"
attr.y="{{ drawingGridY }}"
id="gridDrawing"
attr.width="{{ project.drawing_grid_size }}"
attr.height="{{ project.drawing_grid_size }}"
patternUnits="userSpaceOnUse"
>
<path
attr.d="M {{ project.drawing_grid_size }} 0 L 0 0 0 {{ project.drawing_grid_size }}"
fill="none"
stroke="silver"
attr.stroke-width="{{ gridVisibility }}"
/>
</pattern>
</defs>
<defs>
<pattern
attr.x="{{ nodeGridX }}"
attr.y="{{ nodeGridY }}"
id="gridNode"
attr.width="{{ project.grid_size }}"
attr.height="{{ project.grid_size }}"
patternUnits="userSpaceOnUse"
>
<path
attr.d="M {{ project.grid_size }} 0 L 0 0 0 {{ project.grid_size }}"
fill="none"
stroke="DarkSlateGray"
attr.stroke-width="{{ gridVisibility }}"
/>
</pattern>
</defs>
<rect width="100%" height="100%" fill="url(#gridDrawing)" />
<rect width="100%" height="100%" fill="url(#gridNode)" />
</svg>
<app-drawing-adding [svg]="svg"></app-drawing-adding>
<app-drawing-resizing></app-drawing-resizing>
<app-selection-control></app-selection-control>
<app-selection-select></app-selection-select>
<app-text-editor #textEditor [svg]="svg"></app-text-editor>
<app-text-editor #textEditor [server]="server" [svg]="svg"></app-text-editor>
<app-draggable-selection [svg]="svg"></app-draggable-selection>

Before

Width:  |  Height:  |  Size: 499 B

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { D3MapComponent } from './d3-map.component';
describe('D3MapComponent', () => {
@ -8,7 +7,7 @@ describe('D3MapComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [D3MapComponent]
declarations: [D3MapComponent],
}).compileComponents();
}));

View File

@ -7,42 +7,42 @@ import {
OnDestroy,
OnInit,
SimpleChange,
EventEmitter,
Output,
ViewChild
ViewChild,
} from '@angular/core';
import { Selection, select } from 'd3-selection';
import { GraphLayout } from '../../widgets/graph-layout';
import { Context } from '../../models/context';
import { Size } from '../../models/size';
import { select, Selection } from 'd3-selection';
import { Subscription } from 'rxjs';
import { InterfaceLabelWidget } from '../../widgets/interface-label';
import { SelectionTool } from '../../tools/selection-tool';
import { MovingTool } from '../../tools/moving-tool';
import { MapChangeDetectorRef } from '../../services/map-change-detector-ref';
import { CanvasSizeDetector } from '../../helpers/canvas-size-detector';
import { Node } from '../../models/node';
import { Link } from '../../../models/link';
import { Drawing } from '../../models/drawing';
import { Project } from '../../../models/project';
import { Server } from '../../../models/server';
import { Symbol } from '../../../models/symbol';
import { MapScaleService } from '../../../services/mapScale.service';
import { MapSettingsService } from '../../../services/mapsettings.service';
import { ToolsService } from '../../../services/tools.service';
import { CanvasSizeDetector } from '../../helpers/canvas-size-detector';
import { GraphDataManager } from '../../managers/graph-data-manager';
import { MapSettingsManager } from '../../managers/map-settings-manager';
import { Server } from '../../../models/server';
import { ToolsService } from '../../../services/tools.service';
import { Context } from '../../models/context';
import { Drawing } from '../../models/drawing';
import { Node } from '../../models/node';
import { Size } from '../../models/size';
import { MapChangeDetectorRef } from '../../services/map-change-detector-ref';
import { MovingTool } from '../../tools/moving-tool';
import { SelectionTool } from '../../tools/selection-tool';
import { GraphLayout } from '../../widgets/graph-layout';
import { InterfaceLabelWidget } from '../../widgets/interface-label';
import { TextEditorComponent } from '../text-editor/text-editor.component';
import { MapScaleService } from '../../../services/mapScale.service';
@Component({
selector: 'app-d3-map',
templateUrl: './d3-map.component.html',
styleUrls: ['./d3-map.component.scss']
styleUrls: ['./d3-map.component.scss'],
})
export class D3MapComponent implements OnInit, OnChanges, OnDestroy {
@Input() nodes: Node[] = [];
@Input() links: Link[] = [];
@Input() drawings: Drawing[] = [];
@Input() symbols: Symbol[] = [];
@Input() project: Project;
@Input() server: Server;
@Input() width = 1500;
@ -53,15 +53,18 @@ export class D3MapComponent implements OnInit, OnChanges, OnDestroy {
private parentNativeElement: any;
private svg: Selection<SVGSVGElement, any, null, undefined>;
private onChangesDetected: Subscription;
private subscriptions: Subscription[] = [];
private drawLinkTool: boolean;
protected settings = {
show_interface_labels: true
show_interface_labels: true,
};
public gridVisibility: number = 0;
public nodeGridX: number = 0;
public nodeGridY: number = 0;
public drawingGridX: number = 0;
public drawingGridY: number = 0;
constructor(
private graphDataManager: GraphDataManager,
@ -75,15 +78,22 @@ export class D3MapComponent implements OnInit, OnChanges, OnDestroy {
protected movingToolWidget: MovingTool,
public graphLayout: GraphLayout,
private toolsService: ToolsService,
private mapScaleService: MapScaleService
private mapScaleService: MapScaleService,
private mapSettingsService: MapSettingsService
) {
this.parentNativeElement = element.nativeElement;
}
@Input('show-interface-labels')
set showInterfaceLabels(value) {
this.settings.show_interface_labels = value;
this.interfaceLabelWidget.setEnabled(value);
if (value && !this.mapSettingsService.integrateLinkLabelsToLinks) {
this.settings.show_interface_labels = true;
this.interfaceLabelWidget.setEnabled(true);
} else {
this.settings.show_interface_labels = false;
this.interfaceLabelWidget.setEnabled(false);
}
this.mapChangeDetectorRef.detectChanges();
}
@ -91,6 +101,20 @@ export class D3MapComponent implements OnInit, OnChanges, OnDestroy {
this.mapSettings.isReadOnly = value;
}
resize(val: boolean) {
if (val) {
this.svg.attr('height', window.innerHeight + window.scrollY - 16);
} else {
let heightOfProjectWindow = window.innerHeight - 16;
if (this.height > heightOfProjectWindow) {
this.svg.attr('height', this.height);
} else {
this.svg.attr('height', heightOfProjectWindow);
}
}
}
ngOnChanges(changes: { [propKey: string]: SimpleChange }) {
if (
(changes['width'] && !changes['width'].isFirstChange()) ||
@ -121,9 +145,7 @@ export class D3MapComponent implements OnInit, OnChanges, OnDestroy {
}
});
this.subscriptions.push(
this.mapScaleService.scaleChangeEmitter.subscribe((value: number) => this.redraw())
);
this.subscriptions.push(this.mapScaleService.scaleChangeEmitter.subscribe((value: number) => this.redraw()));
this.subscriptions.push(
this.toolsService.isMovingToolActivated.subscribe((value: boolean) => {
@ -143,6 +165,9 @@ export class D3MapComponent implements OnInit, OnChanges, OnDestroy {
this.drawLinkTool = value;
})
);
this.gridVisibility = localStorage.getItem('gridVisibility') === 'true' ? 1 : 0;
this.mapSettingsService.isScrollDisabled.subscribe((val) => this.resize(val));
}
ngOnDestroy() {
@ -153,13 +178,14 @@ export class D3MapComponent implements OnInit, OnChanges, OnDestroy {
});
}
public applyMapSettingsChanges() {
this.redraw();
}
public createGraph(domElement: HTMLElement) {
const rootElement = select(domElement);
this.svg = rootElement.select<SVGSVGElement>('svg');
this.graphLayout.connect(
this.svg,
this.context
);
this.graphLayout.connect(this.svg, this.context);
this.graphLayout.draw(this.svg, this.context);
this.mapChangeDetectorRef.hasBeenDrawn = true;
}
@ -181,11 +207,35 @@ export class D3MapComponent implements OnInit, OnChanges, OnDestroy {
}
private redraw() {
this.updateGrid();
this.graphDataManager.setNodes(this.nodes);
this.graphDataManager.setLinks(this.links);
this.graphDataManager.setDrawings(this.drawings);
this.graphLayout.draw(this.svg, this.context);
this.textEditor.activateTextEditing();
this.textEditor.activateTextEditingForDrawings();
this.textEditor.activateTextEditingForNodeLabels();
this.mapSettingsService.mapRenderedEmitter.emit(true);
}
updateGrid() {
if (this.project.grid_size && this.project.grid_size > 0)
this.nodeGridX =
this.project.scene_width / 2 -
Math.floor(this.project.scene_width / 2 / this.project.grid_size) * this.project.grid_size;
if (this.project.grid_size && this.project.grid_size > 0)
this.nodeGridY =
this.project.scene_height / 2 -
Math.floor(this.project.scene_height / 2 / this.project.grid_size) * this.project.grid_size;
if (this.project.drawing_grid_size && this.project.drawing_grid_size > 0)
this.drawingGridX =
this.project.scene_width / 2 -
Math.floor(this.project.scene_width / 2 / this.project.drawing_grid_size) * this.project.drawing_grid_size;
if (this.project.drawing_grid_size && this.project.drawing_grid_size > 0)
this.drawingGridY =
this.project.scene_height / 2 -
Math.floor(this.project.scene_height / 2 / this.project.drawing_grid_size) * this.project.drawing_grid_size;
}
@HostListener('window:resize', ['$event'])

View File

@ -1,27 +1,26 @@
import { async, ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing';
import { DraggableSelectionComponent } from './draggable-selection.component';
import { NodesWidget } from '../../widgets/nodes';
import { DrawingsWidget } from '../../widgets/drawings';
import { LinksWidget } from '../../widgets/links';
import { LabelWidget } from '../../widgets/label';
import { InterfaceLabelWidget } from '../../widgets/interface-label';
import { SelectionManager } from '../../managers/selection-manager';
import { SelectionManagerMock } from '../../managers/selection-manager.spec';
import { NodesEventSource } from '../../events/nodes-event-source';
import { EventEmitter } from '@angular/core';
import { async, ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
import { select } from 'd3-selection';
import { MapSettingsService } from '../../../services/mapsettings.service';
import { DraggableDrag, DraggableEnd, DraggableStart } from '../../events/draggable';
import { DrawingsEventSource } from '../../events/drawings-event-source';
import { LinksEventSource } from '../../events/links-event-source';
import { NodesEventSource } from '../../events/nodes-event-source';
import { GraphDataManager } from '../../managers/graph-data-manager';
import { MockedGraphDataManager } from '../../managers/graph-data-manager.spec';
import { LinksEventSource } from '../../events/links-event-source';
import { DraggableStart, DraggableDrag, DraggableEnd } from '../../events/draggable';
import { MapNode } from '../../models/map/map-node';
import { EventEmitter } from '@angular/core';
import { SelectionManager } from '../../managers/selection-manager';
import { SelectionManagerMock } from '../../managers/selection-manager.spec';
import { MapDrawing } from '../../models/map/map-drawing';
import { MapLabel } from '../../models/map/map-label';
import { MapLinkNode } from '../../models/map/map-link-node';
import { select } from 'd3-selection';
import { MapLink } from '../../models/map/map-link';
import { MapSettingService } from '../../../services/mapsettings.service';
import { MapLinkNode } from '../../models/map/map-link-node';
import { MapNode } from '../../models/map/map-node';
import { DrawingsWidget } from '../../widgets/drawings';
import { InterfaceLabelWidget } from '../../widgets/interface-label';
import { LabelWidget } from '../../widgets/label';
import { LinksWidget } from '../../widgets/links';
import { NodesWidget } from '../../widgets/nodes';
import { DraggableSelectionComponent } from './draggable-selection.component';
describe('DraggableSelectionComponent', () => {
let component: DraggableSelectionComponent;
@ -67,8 +66,8 @@ describe('DraggableSelectionComponent', () => {
draggable: {
start: nodesStartEventEmitter,
drag: nodesDragEventEmitter,
end: nodesEndEventEmitter
}
end: nodesEndEventEmitter,
},
};
const drawingsWidgetStub = {
@ -76,11 +75,11 @@ describe('DraggableSelectionComponent', () => {
draggable: {
start: drawingsStartEventEmitter,
drag: drawingsDragEventEmitter,
end: drawingsEndEventEmitter
}
end: drawingsEndEventEmitter,
},
};
const linksWidgetStub = {
redrawLink: () => {}
redrawLink: () => {},
};
const labelWidgetStub = {
@ -88,27 +87,27 @@ describe('DraggableSelectionComponent', () => {
draggable: {
start: labelStartEventEmitter,
drag: labelDragEventEmitter,
end: labelEndEventEmitter
}
end: labelEndEventEmitter,
},
};
const interfaceLabelWidgetStub = {
draggable: {
start: interfaceLabelStartEventEmitter,
drag: interfaceLabelDragEventEmitter,
end: interfaceLabelEndEventEmitter
}
end: interfaceLabelEndEventEmitter,
},
};
const nodesEventSourceStub = {
dragged: { emit: () => {} },
labelDragged: { emit: () => {} }
labelDragged: { emit: () => {} },
};
const drawingsEventSourceStub = {
dragged: { emit: () => {} }
dragged: { emit: () => {} },
};
const linksEventSourceStub = {
interfaceDragged: { emit: () => {} }
interfaceDragged: { emit: () => {} },
};
TestBed.configureTestingModule({
@ -123,9 +122,9 @@ describe('DraggableSelectionComponent', () => {
{ provide: DrawingsEventSource, useValue: drawingsEventSourceStub },
{ provide: GraphDataManager, useValue: mockedGraphDataManager },
{ provide: LinksEventSource, useValue: linksEventSourceStub },
{ provide: MapSettingService, useClass: MapSettingService }
{ provide: MapSettingsService, useClass: MapSettingsService },
],
declarations: [DraggableSelectionComponent]
declarations: [DraggableSelectionComponent],
}).compileComponents();
}));

View File

@ -1,28 +1,28 @@
import { Component, OnInit, OnDestroy, Input } from '@angular/core';
import { Subscription, merge } from 'rxjs';
import { NodesWidget } from '../../widgets/nodes';
import { DrawingsWidget } from '../../widgets/drawings';
import { LinksWidget } from '../../widgets/links';
import { SelectionManager } from '../../managers/selection-manager';
import { NodesEventSource } from '../../events/nodes-event-source';
import { DrawingsEventSource } from '../../events/drawings-event-source';
import { GraphDataManager } from '../../managers/graph-data-manager';
import { DraggableStart, DraggableDrag, DraggableEnd } from '../../events/draggable';
import { MapNode } from '../../models/map/map-node';
import { MapDrawing } from '../../models/map/map-drawing';
import { DraggedDataEvent } from '../../events/event-source';
import { Component, Input, OnDestroy, OnInit } from '@angular/core';
import { select } from 'd3-selection';
import { MapLabel } from '../../models/map/map-label';
import { LabelWidget } from '../../widgets/label';
import { InterfaceLabelWidget } from '../../widgets/interface-label';
import { MapLinkNode } from '../../models/map/map-link-node';
import { merge, Subscription } from 'rxjs';
import { MapSettingsService } from '../../../services/mapsettings.service';
import { DraggableDrag, DraggableEnd, DraggableStart } from '../../events/draggable';
import { DrawingsEventSource } from '../../events/drawings-event-source';
import { DraggedDataEvent } from '../../events/event-source';
import { LinksEventSource } from '../../events/links-event-source';
import { MapSettingService } from '../../../services/mapsettings.service';
import { NodesEventSource } from '../../events/nodes-event-source';
import { GraphDataManager } from '../../managers/graph-data-manager';
import { SelectionManager } from '../../managers/selection-manager';
import { MapDrawing } from '../../models/map/map-drawing';
import { MapLabel } from '../../models/map/map-label';
import { MapLinkNode } from '../../models/map/map-link-node';
import { MapNode } from '../../models/map/map-node';
import { DrawingsWidget } from '../../widgets/drawings';
import { InterfaceLabelWidget } from '../../widgets/interface-label';
import { LabelWidget } from '../../widgets/label';
import { LinksWidget } from '../../widgets/links';
import { NodesWidget } from '../../widgets/nodes';
@Component({
selector: 'app-draggable-selection',
templateUrl: './draggable-selection.component.html',
styleUrls: ['./draggable-selection.component.scss']
styleUrls: ['./draggable-selection.component.scss'],
})
export class DraggableSelectionComponent implements OnInit, OnDestroy {
private start: Subscription;
@ -44,7 +44,7 @@ export class DraggableSelectionComponent implements OnInit, OnDestroy {
private drawingsEventSource: DrawingsEventSource,
private graphDataManager: GraphDataManager,
private linksEventSource: LinksEventSource,
private mapSettingsService: MapSettingService
private mapSettingsService: MapSettingsService
) {}
ngOnInit() {
@ -62,25 +62,25 @@ export class DraggableSelectionComponent implements OnInit, OnDestroy {
).subscribe((evt: DraggableStart<any>) => {
const selected = this.selectionManager.getSelected();
if (evt.datum instanceof MapNode) {
if (selected.filter(item => item instanceof MapNode && item.id === evt.datum.id).length === 0) {
if (selected.filter((item) => item instanceof MapNode && item.id === evt.datum.id).length === 0) {
this.selectionManager.setSelected([evt.datum]);
}
}
if (evt.datum instanceof MapDrawing) {
if (selected.filter(item => item instanceof MapDrawing && item.id === evt.datum.id).length === 0) {
if (selected.filter((item) => item instanceof MapDrawing && item.id === evt.datum.id).length === 0) {
this.selectionManager.setSelected([evt.datum]);
}
}
if (evt.datum instanceof MapLabel) {
if (selected.filter(item => item instanceof MapLabel && item.id === evt.datum.id).length === 0) {
if (selected.filter((item) => item instanceof MapLabel && item.id === evt.datum.id).length === 0) {
this.selectionManager.setSelected([evt.datum]);
}
}
if (evt.datum instanceof MapLinkNode) {
if (selected.filter(item => item instanceof MapLinkNode && item.id === evt.datum.id).length === 0) {
if (selected.filter((item) => item instanceof MapLinkNode && item.id === evt.datum.id).length === 0) {
this.selectionManager.setSelected([evt.datum]);
}
}
@ -94,8 +94,10 @@ export class DraggableSelectionComponent implements OnInit, OnDestroy {
).subscribe((evt: DraggableDrag<any>) => {
if (!this.isMapLocked) {
const selected = this.selectionManager.getSelected();
const selectedNodes = selected.filter(item => item instanceof MapNode);
// update nodes
let mapNodes = selected.filter((item) => item instanceof MapNode);
const lockedNodes = mapNodes.filter((item: MapNode) => item.locked);
const selectedNodes = mapNodes.filter((item: MapNode) => !item.locked);
selectedNodes.forEach((node: MapNode) => {
node.x += evt.dx;
node.y += evt.dy;
@ -105,63 +107,67 @@ export class DraggableSelectionComponent implements OnInit, OnDestroy {
const links = this.graphDataManager
.getLinks()
.filter(
link =>
(link) =>
(link.target !== undefined && link.target.id === node.id) ||
(link.source !== undefined && link.source.id === node.id)
);
links.forEach(link => {
links.forEach((link) => {
this.linksWidget.redrawLink(svg, link);
});
});
// update drawings
selected
.filter(item => item instanceof MapDrawing)
.forEach((drawing: MapDrawing) => {
drawing.x += evt.dx;
drawing.y += evt.dy;
this.drawingsWidget.redrawDrawing(svg, drawing);
});
let mapDrawings = selected.filter((item) => item instanceof MapDrawing);
const selectedDrawings = mapDrawings.filter((item: MapDrawing) => !item.locked);
selectedDrawings.forEach((drawing: MapDrawing) => {
drawing.x += evt.dx;
drawing.y += evt.dy;
this.drawingsWidget.redrawDrawing(svg, drawing);
});
// update labels
selected
.filter(item => item instanceof MapLabel)
.forEach((label: MapLabel) => {
const isParentNodeSelected = selectedNodes.filter(node => node.id === label.nodeId).length > 0;
if (isParentNodeSelected) {
return;
}
let mapLabels = selected.filter((item) => item instanceof MapLabel);
const selectedLabels = mapLabels.filter(
(item: MapLabel) => lockedNodes.filter((node) => node.id === item.nodeId).length === 0
);
selectedLabels.forEach((label: MapLabel) => {
const isParentNodeSelected = selectedNodes.filter((node) => node.id === label.nodeId).length > 0;
if (isParentNodeSelected) {
return;
}
const node = this.graphDataManager.getNodes().filter(node => node.id === label.nodeId)[0];
node.label.x += evt.dx;
node.label.y += evt.dy;
this.labelWidget.redrawLabel(svg, label);
});
const node = this.graphDataManager.getNodes().filter((node) => node.id === label.nodeId)[0];
node.label.x += evt.dx;
node.label.y += evt.dy;
this.labelWidget.redrawLabel(svg, label);
});
// update interface labels
selected
.filter(item => item instanceof MapLinkNode)
.forEach((interfaceLabel: MapLinkNode) => {
const isParentNodeSelected = selectedNodes.filter(node => node.id === interfaceLabel.nodeId).length > 0;
if (isParentNodeSelected) {
return;
}
let mapLinkNodes = selected.filter((item) => item instanceof MapLinkNode);
const selectedLinkNodes = mapLinkNodes.filter(
(item: MapLinkNode) => lockedNodes.filter((node) => node.id === item.nodeId).length === 0
);
selectedLinkNodes.forEach((interfaceLabel: MapLinkNode) => {
const isParentNodeSelected = selectedNodes.filter((node) => node.id === interfaceLabel.nodeId).length > 0;
if (isParentNodeSelected) {
return;
}
const link = this.graphDataManager
.getLinks()
.filter(link => link.nodes[0].id === interfaceLabel.id || link.nodes[1].id === interfaceLabel.id)[0];
if (link.nodes[0].id === interfaceLabel.id) {
link.nodes[0].label.x += evt.dx;
link.nodes[0].label.y += evt.dy;
}
if (link.nodes[1].id === interfaceLabel.id) {
link.nodes[1].label.x += evt.dx;
link.nodes[1].label.y += evt.dy;
}
const link = this.graphDataManager
.getLinks()
.filter((link) => link.nodes[0].id === interfaceLabel.id || link.nodes[1].id === interfaceLabel.id)[0];
if (link.nodes[0].id === interfaceLabel.id) {
link.nodes[0].label.x += evt.dx;
link.nodes[0].label.y += evt.dy;
}
if (link.nodes[1].id === interfaceLabel.id) {
link.nodes[1].label.x += evt.dx;
link.nodes[1].label.y += evt.dy;
}
this.linksWidget.redrawLink(svg, link);
});
this.linksWidget.redrawLink(svg, link);
});
}
});
@ -173,39 +179,45 @@ export class DraggableSelectionComponent implements OnInit, OnDestroy {
).subscribe((evt: DraggableEnd<any>) => {
if (!this.isMapLocked) {
const selected = this.selectionManager.getSelected();
const selectedNodes = selected.filter(item => item instanceof MapNode);
let mapNodes = selected.filter((item) => item instanceof MapNode);
const lockedNodes = mapNodes.filter((item: MapNode) => item.locked);
const selectedNodes = mapNodes.filter((item: MapNode) => !item.locked);
selectedNodes.forEach((item: MapNode) => {
this.nodesEventSource.dragged.emit(new DraggedDataEvent<MapNode>(item, evt.dx, evt.dy));
});
selected
.filter(item => item instanceof MapDrawing)
.forEach((item: MapDrawing) => {
this.drawingsEventSource.dragged.emit(new DraggedDataEvent<MapDrawing>(item, evt.dx, evt.dy));
});
let mapDrawings = selected.filter((item) => item instanceof MapDrawing);
const selectedDrawings = mapDrawings.filter((item: MapDrawing) => !item.locked);
selectedDrawings.forEach((item: MapDrawing) => {
this.drawingsEventSource.dragged.emit(new DraggedDataEvent<MapDrawing>(item, evt.dx, evt.dy));
});
selected
.filter(item => item instanceof MapLabel)
.forEach((label: MapLabel) => {
const isParentNodeSelected = selectedNodes.filter(node => node.id === label.nodeId).length > 0;
if (isParentNodeSelected) {
return;
}
let mapLabels = selected.filter((item) => item instanceof MapLabel);
const selectedLabels = mapLabels.filter(
(item: MapLabel) => lockedNodes.filter((node) => node.id === item.nodeId).length === 0
);
selectedLabels.forEach((label: MapLabel) => {
const isParentNodeSelected = selectedNodes.filter((node) => node.id === label.nodeId).length > 0;
if (isParentNodeSelected) {
return;
}
this.nodesEventSource.labelDragged.emit(new DraggedDataEvent<MapLabel>(label, evt.dx, evt.dy));
});
this.nodesEventSource.labelDragged.emit(new DraggedDataEvent<MapLabel>(label, evt.dx, evt.dy));
});
selected
.filter(item => item instanceof MapLinkNode)
.forEach((label: MapLinkNode) => {
const isParentNodeSelected = selectedNodes.filter(node => node.id === label.nodeId).length > 0;
if (isParentNodeSelected) {
return;
}
this.linksEventSource.interfaceDragged.emit(new DraggedDataEvent<MapLinkNode>(label, evt.dx, evt.dy));
});
}
let mapLinkNodes = selected.filter((item) => item instanceof MapLinkNode);
const selectedLinkNodes = mapLinkNodes.filter(
(item: MapLinkNode) => lockedNodes.filter((node) => node.id === item.nodeId).length === 0
);
selectedLinkNodes.forEach((label: MapLinkNode) => {
const isParentNodeSelected = selectedNodes.filter((node) => node.id === label.nodeId).length > 0;
if (isParentNodeSelected) {
return;
}
this.linksEventSource.interfaceDragged.emit(new DraggedDataEvent<MapLinkNode>(label, evt.dx, evt.dy));
});
}
});
}

View File

@ -1,8 +1,8 @@
import { DrawingAddingComponent } from './drawing-adding.component';
import { ComponentFixture, TestBed, async } from '@angular/core/testing';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { DrawingsEventSource } from '../../events/drawings-event-source';
import { Context } from '../../models/context';
import { DrawingAddingComponent } from './drawing-adding.component';
describe('DrawingAddingComponent', () => {
let component: DrawingAddingComponent;
@ -14,9 +14,9 @@ describe('DrawingAddingComponent', () => {
imports: [NoopAnimationsModule],
providers: [
{ provide: DrawingsEventSource, useValue: drawingsEventSource },
{ provide: Context, useClass: Context }
{ provide: Context, useClass: Context },
],
declarations: [DrawingAddingComponent]
declarations: [DrawingAddingComponent],
}).compileComponents();
}));

View File

@ -1,13 +1,13 @@
import { Component, Input, OnDestroy, OnInit } from '@angular/core';
import { Context } from '../../models/context';
import { Subscription } from 'rxjs';
import { DrawingsEventSource } from '../../events/drawings-event-source';
import { AddedDataEvent } from '../../events/event-source';
import { Subscription } from 'rxjs';
import { Context } from '../../models/context';
@Component({
selector: 'app-drawing-adding',
templateUrl: './drawing-adding.component.html',
styleUrls: ['./drawing-adding.component.scss']
styleUrls: ['./drawing-adding.component.scss'],
})
export class DrawingAddingComponent implements OnInit, OnDestroy {
@Input('svg') svg: SVGSVGElement;
@ -18,15 +18,19 @@ export class DrawingAddingComponent implements OnInit, OnDestroy {
constructor(private drawingsEventSource: DrawingsEventSource, private context: Context) {}
ngOnInit() {
this.drawingSelected = this.drawingsEventSource.selected.subscribe(evt => {
this.drawingSelected = this.drawingsEventSource.selected.subscribe((evt) => {
evt === '' ? this.deactivate() : this.activate();
});
}
activate() {
let listener = (event: MouseEvent) => {
let x = (event.pageX - (this.context.getZeroZeroTransformationPoint().x + this.context.transformation.x))/this.context.transformation.k;
let y = (event.pageY - (this.context.getZeroZeroTransformationPoint().y + this.context.transformation.y))/this.context.transformation.k;
let x =
(event.pageX - (this.context.getZeroZeroTransformationPoint().x + this.context.transformation.x)) /
this.context.transformation.k;
let y =
(event.pageY - (this.context.getZeroZeroTransformationPoint().y + this.context.transformation.y)) /
this.context.transformation.k;
this.drawingsEventSource.pointToAddSelected.emit(new AddedDataEvent(x, y));
this.deactivate();

View File

@ -1,12 +1,11 @@
import { ComponentFixture, TestBed, async } from '@angular/core/testing';
import { DrawingResizingComponent } from './drawing-resizing.component';
import { DrawingsWidget } from '../../widgets/drawings';
import { DrawingsEventSource } from '../../events/drawings-event-source';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { EventEmitter } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { DrawingsEventSource } from '../../events/drawings-event-source';
import { ResizingEnd } from '../../events/resizing';
import { MapDrawing } from '../../models/map/map-drawing';
import { DrawingsWidget } from '../../widgets/drawings';
import { DrawingResizingComponent } from './drawing-resizing.component';
export class DrawingWidgetMock {
resizingFinished = new EventEmitter<ResizingEnd<MapDrawing>>();
@ -36,9 +35,9 @@ describe('DrawingResizingComponent', () => {
imports: [NoopAnimationsModule],
providers: [
{ provide: DrawingsWidget, useValue: drawingsWidgetMock },
{ provide: DrawingsEventSource, useValue: drawingsEventSource }
{ provide: DrawingsEventSource, useValue: drawingsEventSource },
],
declarations: [DrawingResizingComponent]
declarations: [DrawingResizingComponent],
}).compileComponents();
}));

View File

@ -1,17 +1,15 @@
import { Component, OnInit, ElementRef, OnDestroy, Input, Output, EventEmitter } from '@angular/core';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { Subscription } from 'rxjs';
import { DrawingsEventSource } from '../../events/drawings-event-source';
import { DrawingsWidget } from '../../widgets/drawings';
import { MapDrawing } from '../../models/map/map-drawing';
import { ResizedDataEvent } from '../../events/event-source';
import { ResizingEnd } from '../../events/resizing';
import { MapDrawing } from '../../models/map/map-drawing';
import { DrawingsWidget } from '../../widgets/drawings';
@Component({
selector: 'app-drawing-resizing',
template: `
<ng-content></ng-content>
`,
styleUrls: ['./drawing-resizing.component.scss']
template: ` <ng-content></ng-content> `,
styleUrls: ['./drawing-resizing.component.scss'],
})
export class DrawingResizingComponent implements OnInit, OnDestroy {
resizingFinished: Subscription;

View File

@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { DraggableComponent } from './draggable.component';
describe('DraggableComponent', () => {
@ -8,7 +7,7 @@ describe('DraggableComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [DraggableComponent]
declarations: [DraggableComponent],
}).compileComponents();
}));

View File

@ -1,4 +1,4 @@
import { Component, OnInit, ElementRef, AfterViewInit, OnDestroy, Input, Output, EventEmitter } from '@angular/core';
import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';
import { Observable, Subscription } from 'rxjs';
import { Point } from '../../../models/point';
@ -8,10 +8,8 @@ export class DraggableDraggedEvent {
@Component({
selector: '[app-draggable]',
template: `
<ng-content></ng-content>
`,
styleUrls: ['./draggable.component.scss']
template: ` <ng-content></ng-content> `,
styleUrls: ['./draggable.component.scss'],
})
export class DraggableComponent implements OnInit, AfterViewInit, OnDestroy {
@Input('app-draggable') item: Point;

View File

@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { DrawingComponent } from './drawing.component';
describe('DrawingComponent', () => {
@ -8,7 +7,7 @@ describe('DrawingComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [DrawingComponent]
declarations: [DrawingComponent],
}).compileComponents();
}));

View File

@ -1,18 +1,18 @@
import { Component, OnInit, Input, ChangeDetectorRef } from '@angular/core';
import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';
import { DrawingsEventSource } from '../../../events/drawings-event-source';
import { DraggedDataEvent } from '../../../events/event-source';
import { SvgToDrawingConverter } from '../../../helpers/svg-to-drawing-converter';
import { EllipseElement } from '../../../models/drawings/ellipse-element';
import { ImageElement } from '../../../models/drawings/image-element';
import { LineElement } from '../../../models/drawings/line-element';
import { RectElement } from '../../../models/drawings/rect-element';
import { TextElement } from '../../../models/drawings/text-element';
import { SvgToDrawingConverter } from '../../../helpers/svg-to-drawing-converter';
import { DraggedDataEvent } from '../../../events/event-source';
import { MapDrawing } from '../../../models/map/map-drawing';
import { DrawingsEventSource } from '../../../events/drawings-event-source';
@Component({
selector: '[app-drawing]',
templateUrl: './drawing.component.html',
styleUrls: ['./drawing.component.scss']
styleUrls: ['./drawing.component.scss'],
})
export class DrawingComponent implements OnInit {
@Input('app-drawing') drawing: MapDrawing;
@ -26,9 +26,7 @@ export class DrawingComponent implements OnInit {
ngOnInit() {
try {
this.drawing.element = this.svgToDrawingConverter.convert(this.drawing.svg);
} catch (error) {
console.log(`Cannot convert due to Error: '${error}'`);
}
} catch (error) {}
}
OnDragging(evt) {

View File

@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { EllipseComponent } from './ellipse.component';
describe('EllipseComponent', () => {
@ -8,7 +7,7 @@ describe('EllipseComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [EllipseComponent]
declarations: [EllipseComponent],
}).compileComponents();
}));

View File

@ -1,11 +1,11 @@
import { Component, OnInit, Input } from '@angular/core';
import { EllipseElement } from '../../../../../models/drawings/ellipse-element';
import { Component, Input, OnInit } from '@angular/core';
import { QtDasharrayFixer } from '../../../../../helpers/qt-dasharray-fixer';
import { EllipseElement } from '../../../../../models/drawings/ellipse-element';
@Component({
selector: '[app-ellipse]',
templateUrl: './ellipse.component.html',
styleUrls: ['./ellipse.component.scss']
styleUrls: ['./ellipse.component.scss'],
})
export class EllipseComponent implements OnInit {
@Input('app-ellipse') ellipse: EllipseElement;

View File

@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ImageComponent } from './image.component';
describe('ImageComponent', () => {
@ -8,7 +7,7 @@ describe('ImageComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ImageComponent]
declarations: [ImageComponent],
}).compileComponents();
}));

View File

@ -1,10 +1,10 @@
import { Component, OnInit, Input } from '@angular/core';
import { Component, Input, OnInit } from '@angular/core';
import { ImageElement } from '../../../../../models/drawings/image-element';
@Component({
selector: '[app-image]',
templateUrl: './image.component.html',
styleUrls: ['./image.component.scss']
styleUrls: ['./image.component.scss'],
})
export class ImageComponent implements OnInit {
@Input('app-image') image: ImageElement;

View File

@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { LineComponent } from './line.component';
describe('LineComponent', () => {
@ -8,7 +7,7 @@ describe('LineComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [LineComponent]
declarations: [LineComponent],
}).compileComponents();
}));

View File

@ -1,11 +1,11 @@
import { Component, OnInit, Input } from '@angular/core';
import { Component, Input, OnInit } from '@angular/core';
import { QtDasharrayFixer } from '../../../../../helpers/qt-dasharray-fixer';
import { LineElement } from '../../../../../models/drawings/line-element';
@Component({
selector: '[app-line]',
templateUrl: './line.component.html',
styleUrls: ['./line.component.scss']
styleUrls: ['./line.component.scss'],
})
export class LineComponent implements OnInit {
@Input('app-line') line: LineElement;

View File

@ -7,4 +7,6 @@
[attr.stroke-dasharray]="stroke_dasharray"
[attr.width]="rect.width"
[attr.height]="rect.height"
[attr.rx]="rect.rx"
[attr.ry]="rect.ry"
/>

Before

Width:  |  Height:  |  Size: 278 B

After

Width:  |  Height:  |  Size: 322 B

View File

@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { RectComponent } from './rect.component';
describe('RectComponent', () => {
@ -8,7 +7,7 @@ describe('RectComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [RectComponent]
declarations: [RectComponent],
}).compileComponents();
}));

View File

@ -1,11 +1,11 @@
import { Component, OnInit, Input } from '@angular/core';
import { RectElement } from '../../../../../models/drawings/rect-element';
import { Component, Input, OnInit } from '@angular/core';
import { QtDasharrayFixer } from '../../../../../helpers/qt-dasharray-fixer';
import { RectElement } from '../../../../../models/drawings/rect-element';
@Component({
selector: '[app-rect]',
templateUrl: './rect.component.html',
styleUrls: ['./rect.component.scss']
styleUrls: ['./rect.component.scss'],
})
export class RectComponent implements OnInit {
@Input('app-rect') rect: RectElement;

View File

@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TextComponent } from './text.component';
describe('TextComponent', () => {
@ -8,7 +7,7 @@ describe('TextComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [TextComponent]
declarations: [TextComponent],
}).compileComponents();
}));

View File

@ -1,12 +1,12 @@
import { Component, OnInit, Input, ViewChild, ElementRef, DoCheck } from '@angular/core';
import { Component, DoCheck, ElementRef, Input, OnInit, ViewChild } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { TextElement } from '../../../../../models/drawings/text-element';
import { FontFixer } from '../../../../../helpers/font-fixer';
import { TextElement } from '../../../../../models/drawings/text-element';
@Component({
selector: '[app-text]',
templateUrl: './text.component.html',
styleUrls: ['./text.component.scss']
styleUrls: ['./text.component.scss'],
})
export class TextComponent implements OnInit, DoCheck {
static MARGIN = 4;

View File

@ -1,4 +1,6 @@
import {
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
ElementRef,
HostListener,
@ -7,29 +9,26 @@ import {
OnDestroy,
OnInit,
SimpleChange,
ChangeDetectionStrategy,
ChangeDetectorRef,
ViewChild
ViewChild,
} from '@angular/core';
import { GraphLayout } from '../../widgets/graph-layout';
import { Context } from '../../models/context';
import { Size } from '../../models/size';
import { Subscription } from 'rxjs';
import { MapChangeDetectorRef } from '../../services/map-change-detector-ref';
import { CanvasSizeDetector } from '../../helpers/canvas-size-detector';
import { Node } from '../../models/node';
import { Link } from '../../../models/link';
import { Drawing } from '../../models/drawing';
import { Symbol } from '../../../models/symbol';
import { CanvasSizeDetector } from '../../helpers/canvas-size-detector';
import { GraphDataManager } from '../../managers/graph-data-manager';
import { LayersManager } from '../../managers/layers-manager';
import { Context } from '../../models/context';
import { Drawing } from '../../models/drawing';
import { Node } from '../../models/node';
import { Size } from '../../models/size';
import { MapChangeDetectorRef } from '../../services/map-change-detector-ref';
import { GraphLayout } from '../../widgets/graph-layout';
@Component({
selector: 'app-experimental-map',
templateUrl: './experimental-map.component.html',
styleUrls: ['./experimental-map.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ExperimentalMapComponent implements OnInit, OnChanges, OnDestroy {
@Input() nodes: Node[] = [];
@ -48,7 +47,7 @@ export class ExperimentalMapComponent implements OnInit, OnChanges, OnDestroy {
private changesDetected: Subscription;
protected settings = {
show_interface_labels: true
show_interface_labels: true,
};
constructor(

View File

@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { InterfaceLabelComponent } from './interface-label.component';
describe('InterfaceLabelComponent', () => {
@ -8,7 +7,7 @@ describe('InterfaceLabelComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [InterfaceLabelComponent]
declarations: [InterfaceLabelComponent],
}).compileComponents();
}));

View File

@ -1,11 +1,11 @@
import { Component, OnInit, Input, ChangeDetectorRef, ElementRef, ViewChild } from '@angular/core';
import { ChangeDetectorRef, Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { CssFixer } from '../../../helpers/css-fixer';
@Component({
selector: '[app-interface-label]',
templateUrl: './interface-label.component.html',
styleUrls: ['./interface-label.component.scss']
styleUrls: ['./interface-label.component.scss'],
})
export class InterfaceLabelComponent implements OnInit {
@Input('app-interface-label') ignore: any;
@ -17,7 +17,7 @@ export class InterfaceLabelComponent implements OnInit {
y: 0,
text: '',
style: '',
rotation: 0
rotation: 0,
};
borderSize = 5;

View File

@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { LinkComponent } from './link.component';
describe('LinkComponent', () => {
@ -8,7 +7,7 @@ describe('LinkComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [LinkComponent]
declarations: [LinkComponent],
}).compileComponents();
}));

View File

@ -1,25 +1,25 @@
import {
ChangeDetectorRef,
Component,
OnInit,
Input,
ViewChild,
ElementRef,
EventEmitter,
ChangeDetectorRef,
OnDestroy
Input,
OnDestroy,
OnInit,
ViewChild,
} from '@angular/core';
import { Subscription } from 'rxjs';
import { LinkStrategy } from './strategies/link-strategy';
import { EthernetLinkStrategy } from './strategies/ethernet-link-strategy';
import { SerialLinkStrategy } from './strategies/serial-link-strategy';
import { MultiLinkCalculatorHelper } from '../../../helpers/multi-link-calculator-helper';
import { Node } from '../../../models/node';
import { MapLink } from '../../../models/map/map-link';
import { Node } from '../../../models/node';
import { EthernetLinkStrategy } from './strategies/ethernet-link-strategy';
import { LinkStrategy } from './strategies/link-strategy';
import { SerialLinkStrategy } from './strategies/serial-link-strategy';
@Component({
selector: '[app-link]',
templateUrl: './link.component.html',
styleUrls: ['./link.component.scss']
styleUrls: ['./link.component.scss'],
})
export class LinkComponent implements OnInit, OnDestroy {
@Input('app-link') link: MapLink;

View File

@ -1,12 +1,12 @@
import { LinkStrategy } from './link-strategy';
import { path } from 'd3-path';
import { MapLink } from '../../../../models/map/map-link';
import { LinkStrategy } from './link-strategy';
export class EthernetLinkStrategy implements LinkStrategy {
public d(link: MapLink): string {
const points = [
[link.source.x + link.source.width / 2, link.source.y + link.source.height / 2],
[link.target.x + link.target.width / 2, link.target.y + link.target.height / 2]
[link.target.x + link.target.width / 2, link.target.y + link.target.height / 2],
];
const line_generator = path();

View File

@ -1,16 +1,16 @@
import { path } from 'd3-path';
import { LinkStrategy } from './link-strategy';
import { MapLink } from '../../../../models/map/map-link';
import { LinkStrategy } from './link-strategy';
export class SerialLinkStrategy implements LinkStrategy {
private linkToPoints(link: MapLink) {
const source = {
x: link.source.x + link.source.width / 2,
y: link.source.y + link.source.height / 2
y: link.source.y + link.source.height / 2,
};
const target = {
x: link.target.x + link.target.width / 2,
y: link.target.y + link.target.height / 2
y: link.target.y + link.target.height / 2,
};
const dx = target.x - source.x;
@ -22,12 +22,12 @@ export class SerialLinkStrategy implements LinkStrategy {
const angle_source: [number, number] = [
source.x + dx / 2.0 + 15 * vect_rot[0],
source.y + dy / 2.0 + 15 * vect_rot[1]
source.y + dy / 2.0 + 15 * vect_rot[1],
];
const angle_target: [number, number] = [
target.x - dx / 2.0 - 15 * vect_rot[0],
target.y - dy / 2.0 - 15 * vect_rot[1]
target.y - dy / 2.0 - 15 * vect_rot[1],
];
return [[source.x, source.y], angle_source, angle_target, [target.x, target.y]];

View File

@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { NodeComponent } from './node.component';
describe('NodeComponent', () => {
@ -8,7 +7,7 @@ describe('NodeComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [NodeComponent]
declarations: [NodeComponent],
}).compileComponents();
}));

View File

@ -1,31 +1,30 @@
import {
Component,
OnInit,
Input,
ElementRef,
ViewChild,
ChangeDetectorRef,
AfterViewInit,
ChangeDetectionStrategy,
Output,
ChangeDetectorRef,
Component,
ElementRef,
EventEmitter,
OnDestroy,
Input,
OnChanges,
AfterViewInit
OnDestroy,
OnInit,
ViewChild,
} from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { Subscription } from 'rxjs';
import { Symbol } from '../../../../models/symbol';
import { DraggedDataEvent } from '../../../events/event-source';
import { NodesEventSource } from '../../../events/nodes-event-source';
import { CssFixer } from '../../../helpers/css-fixer';
import { FontFixer } from '../../../helpers/font-fixer';
import { Symbol } from '../../../../models/symbol';
import { MapNode } from '../../../models/map/map-node';
import { NodesEventSource } from '../../../events/nodes-event-source';
import { DraggedDataEvent } from '../../../events/event-source';
@Component({
selector: '[app-node]',
templateUrl: './node.component.html',
styleUrls: ['./node.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class NodeComponent implements OnInit, OnDestroy, OnChanges, AfterViewInit {
static NODE_LABEL_MARGIN = 3;

View File

@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { SelectionComponent } from './selection.component';
describe('SelectionComponent', () => {
@ -8,7 +7,7 @@ describe('SelectionComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [SelectionComponent]
declarations: [SelectionComponent],
}).compileComponents();
}));

View File

@ -1,11 +1,11 @@
import { Component, OnInit, Input, AfterViewInit, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';
import { Observable, Subscription, Subject } from 'rxjs';
import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { Observable, Subscription } from 'rxjs';
import { Rectangle } from '../../../models/rectangle';
@Component({
selector: '[app-selection]',
templateUrl: './selection.component.html',
styleUrls: ['./selection.component.scss']
styleUrls: ['./selection.component.scss'],
})
export class SelectionComponent implements OnInit, AfterViewInit {
@Input('app-selection') svg: SVGSVGElement;

View File

@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { StatusComponent } from './status.component';
describe('StatusComponent', () => {
@ -8,7 +7,7 @@ describe('StatusComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [StatusComponent]
declarations: [StatusComponent],
}).compileComponents();
}));

View File

@ -1,9 +1,9 @@
import { Component, ElementRef, Input, ChangeDetectorRef } from '@angular/core';
import { ChangeDetectorRef, Component, ElementRef, Input } from '@angular/core';
@Component({
selector: '[app-status]',
templateUrl: './status.component.html',
styleUrls: ['./status.component.scss']
styleUrls: ['./status.component.scss'],
})
export class StatusComponent {
static STOPPED_STATUS_RECT_WIDTH = 10;
@ -12,7 +12,7 @@ export class StatusComponent {
status: '',
path: null,
direction: null,
d: null
d: null,
};
constructor(protected element: ElementRef, private ref: ChangeDetectorRef) {}

View File

@ -1,14 +1,13 @@
import { fakeAsync, tick } from '@angular/core/testing';
import { SelectionControlComponent } from './selection-control.component';
import { SelectionManager } from '../../managers/selection-manager';
import { instance, mock, when } from 'ts-mockito';
import { SelectionEventSource } from '../../events/selection-event-source';
import { mock, when, instance } from 'ts-mockito';
import { GraphDataManager } from '../../managers/graph-data-manager';
import { MapNode } from '../../models/map/map-node';
import { MapLink } from '../../models/map/map-link';
import { InRectangleHelper } from '../../helpers/in-rectangle-helper';
import { GraphDataManager } from '../../managers/graph-data-manager';
import { SelectionManager } from '../../managers/selection-manager';
import { MapLink } from '../../models/map/map-link';
import { MapNode } from '../../models/map/map-node';
import { Rectangle } from '../../models/rectangle';
import { SelectionControlComponent } from './selection-control.component';
describe('SelectionControlComponent', () => {
let component: SelectionControlComponent;

View File

@ -1,15 +1,15 @@
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { Subscription } from 'rxjs';
import { SelectionEventSource } from '../../events/selection-event-source';
import { GraphDataManager } from '../../managers/graph-data-manager';
import { InRectangleHelper } from '../../helpers/in-rectangle-helper';
import { GraphDataManager } from '../../managers/graph-data-manager';
import { SelectionManager } from '../../managers/selection-manager';
import { Rectangle } from '../../models/rectangle';
@Component({
selector: 'app-selection-control',
templateUrl: './selection-control.component.html',
styleUrls: ['./selection-control.component.scss']
styleUrls: ['./selection-control.component.scss'],
})
export class SelectionControlComponent implements OnInit, OnDestroy {
private onSelection: Subscription;
@ -23,21 +23,21 @@ export class SelectionControlComponent implements OnInit, OnDestroy {
ngOnInit() {
this.onSelection = this.selectionEventSource.selected.subscribe((rectangle: Rectangle) => {
const selectedNodes = this.graphDataManager.getNodes().filter(node => {
const selectedNodes = this.graphDataManager.getNodes().filter((node) => {
return this.inRectangleHelper.inRectangle(rectangle, node.x, node.y);
});
const selectedLinks = this.graphDataManager.getLinks().filter(link => {
const selectedLinks = this.graphDataManager.getLinks().filter((link) => {
return this.inRectangleHelper.inRectangle(rectangle, link.x, link.y);
});
const selectedDrawings = this.graphDataManager.getDrawings().filter(drawing => {
const selectedDrawings = this.graphDataManager.getDrawings().filter((drawing) => {
return this.inRectangleHelper.inRectangle(rectangle, drawing.x, drawing.y);
});
const selectedLabels = this.graphDataManager
.getNodes()
.filter(node => {
.filter((node) => {
if (node.label === undefined) {
return false;
}
@ -45,11 +45,11 @@ export class SelectionControlComponent implements OnInit, OnDestroy {
const labelY = node.y + node.label.y;
return this.inRectangleHelper.inRectangle(rectangle, labelX, labelY);
})
.map(node => node.label);
.map((node) => node.label);
const selectedInterfacesLabelsSources = this.graphDataManager
.getLinks()
.filter(link => {
.filter((link) => {
if (link.source === undefined || link.nodes.length != 2 || link.nodes[0].label === undefined) {
return false;
}
@ -57,11 +57,11 @@ export class SelectionControlComponent implements OnInit, OnDestroy {
const interfaceLabelY = link.source.y + link.nodes[0].label.y;
return this.inRectangleHelper.inRectangle(rectangle, interfaceLabelX, interfaceLabelY);
})
.map(link => link.nodes[0]);
.map((link) => link.nodes[0]);
const selectedInterfacesLabelsTargets = this.graphDataManager
.getLinks()
.filter(link => {
.filter((link) => {
if (link.target === undefined || link.nodes.length != 2 || link.nodes[1].label === undefined) {
return false;
}
@ -69,7 +69,7 @@ export class SelectionControlComponent implements OnInit, OnDestroy {
const interfaceLabelY = link.target.y + link.nodes[1].label.y;
return this.inRectangleHelper.inRectangle(rectangle, interfaceLabelX, interfaceLabelY);
})
.map(link => link.nodes[1]);
.map((link) => link.nodes[1]);
const selectedInterfaces = [...selectedInterfacesLabelsSources, ...selectedInterfacesLabelsTargets];
@ -78,7 +78,7 @@ export class SelectionControlComponent implements OnInit, OnDestroy {
...selectedLinks,
...selectedDrawings,
...selectedLabels,
...selectedInterfaces
...selectedInterfaces,
];
this.selectionManager.setSelected(selected);

View File

@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { SelectionSelectComponent } from './selection-select.component';
describe('SelectionSelectComponent', () => {
@ -8,7 +7,7 @@ describe('SelectionSelectComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [SelectionSelectComponent]
declarations: [SelectionSelectComponent],
}).compileComponents();
}));

View File

@ -1,4 +1,4 @@
import { Component, Input, OnInit, OnDestroy } from '@angular/core';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { Subscription } from 'rxjs';
import { SelectionManager } from '../../managers/selection-manager';
import { MapChangeDetectorRef } from '../../services/map-change-detector-ref';
@ -6,16 +6,13 @@ import { MapChangeDetectorRef } from '../../services/map-change-detector-ref';
@Component({
selector: 'app-selection-select',
templateUrl: './selection-select.component.html',
styleUrls: ['./selection-select.component.scss']
styleUrls: ['./selection-select.component.scss'],
})
export class SelectionSelectComponent implements OnInit, OnDestroy {
private onSelected: Subscription;
private onUnselected: Subscription;
constructor(
private selectionManager: SelectionManager,
private mapChangeDetectorRef: MapChangeDetectorRef
) {}
constructor(private selectionManager: SelectionManager, private mapChangeDetectorRef: MapChangeDetectorRef) {}
ngOnInit() {
this.onSelected = this.selectionManager.selected.subscribe(() => {

View File

@ -1,15 +1,22 @@
import { TextEditorComponent } from './text-editor.component';
import { ComponentFixture, TestBed, async } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { DrawingsEventSource } from '../../events/drawings-event-source';
import { ToolsService } from '../../../services/tools.service';
import { Context } from '../../models/context';
import { Renderer2 } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { MockedLinkService } from '../../../components/project-map/project-map.component.spec';
import { LinkService } from '../../../services/link.service';
import { MapScaleService } from '../../../services/mapScale.service';
import { ToolsService } from '../../../services/tools.service';
import { LinksDataSource } from '../../datasources/links-datasource';
import { NodesDataSource } from '../../datasources/nodes-datasource';
import { DrawingsEventSource } from '../../events/drawings-event-source';
import { FontFixer } from '../../helpers/font-fixer';
import { SelectionManager } from '../../managers/selection-manager';
import { Context } from '../../models/context';
import { TextEditorComponent } from './text-editor.component';
describe('TemporaryTextElementComponent', () => {
describe('TextEditorComponent', () => {
let component: TextEditorComponent;
let fixture: ComponentFixture<TextEditorComponent>;
let mockedLinkService: MockedLinkService = new MockedLinkService();
beforeEach(async(() => {
TestBed.configureTestingModule({
@ -19,9 +26,14 @@ describe('TemporaryTextElementComponent', () => {
{ provide: ToolsService, useClass: ToolsService },
{ provide: Context, useClass: Context },
{ provide: Renderer2, useClass: Renderer2 },
{ provide: MapScaleService, useClass: MapScaleService }
{ provide: MapScaleService, useClass: MapScaleService },
{ provide: LinkService, useValue: mockedLinkService },
{ provide: NodesDataSource, useClass: NodesDataSource },
{ provide: LinksDataSource, useClass: LinksDataSource },
{ provide: SelectionManager, useClass: SelectionManager },
{ provide: FontFixer, useClass: FontFixer },
],
declarations: [TextEditorComponent]
declarations: [TextEditorComponent],
}).compileComponents();
}));

View File

@ -1,21 +1,43 @@
import { Component, ViewChild, ElementRef, OnInit, Input, EventEmitter, OnDestroy, Renderer2 } from '@angular/core';
import {
Component,
ElementRef,
EventEmitter,
Input,
NgZone,
OnDestroy,
OnInit,
Renderer2,
ViewChild,
} from '@angular/core';
import { select } from 'd3-selection';
import { Subscription } from 'rxjs';
import { StyleProperty } from '../../../components/project-map/drawings-editors/text-editor/text-editor.component';
import { Link } from '../../../models/link';
import { Server } from '../../../models/server';
import { LinkService } from '../../../services/link.service';
import { MapScaleService } from '../../../services/mapScale.service';
import { ToolsService } from '../../../services/tools.service';
import { LinksDataSource } from '../../datasources/links-datasource';
import { NodesDataSource } from '../../datasources/nodes-datasource';
import { DrawingsEventSource } from '../../events/drawings-event-source';
import { TextAddedDataEvent, TextEditedDataEvent } from '../../events/event-source';
import { ToolsService } from '../../../services/tools.service';
import { select } from 'd3-selection';
import { TextElement } from '../../models/drawings/text-element';
import { FontFixer } from '../../helpers/font-fixer';
import { SelectionManager } from '../../managers/selection-manager';
import { Context } from '../../models/context';
import { Subscription } from 'rxjs';
import { MapScaleService } from '../../../services/mapScale.service';
import { TextElement } from '../../models/drawings/text-element';
import { Font } from '../../models/font';
import { MapLinkNode } from '../../models/map/map-link-node';
import { Node } from '../../models/node';
@Component({
selector: 'app-text-editor',
templateUrl: './text-editor.component.html',
styleUrls: ['./text-editor.component.scss']
styleUrls: ['./text-editor.component.scss'],
})
export class TextEditorComponent implements OnInit, OnDestroy {
@ViewChild('temporaryTextElement') temporaryTextElement: ElementRef;
@Input('svg') svg: SVGSVGElement;
@Input('server') server: Server;
leftPosition: string = '0px';
topPosition: string = '0px';
@ -23,6 +45,8 @@ export class TextEditorComponent implements OnInit, OnDestroy {
private editingDrawingId: string;
private editedElement: any;
private editedLink: MapLinkNode;
private editedNode: Node;
private mapListener: Function;
private textListener: Function;
@ -34,7 +58,13 @@ export class TextEditorComponent implements OnInit, OnDestroy {
private toolsService: ToolsService,
private context: Context,
private renderer: Renderer2,
private mapScaleService: MapScaleService
private mapScaleService: MapScaleService,
private linkService: LinkService,
private linksDataSource: LinksDataSource,
private nodesDataSource: NodesDataSource,
private selectionManager: SelectionManager,
private fontFixer: FontFixer,
private ngZone: NgZone
) {}
ngOnInit() {
@ -42,7 +72,8 @@ export class TextEditorComponent implements OnInit, OnDestroy {
isActive ? this.activateTextAdding() : this.deactivateTextAdding();
});
this.activateTextEditing();
this.ngZone.runOutsideAngular(this.activateTextEditingForDrawings.bind(this));
this.ngZone.runOutsideAngular(this.activateTextEditingForNodeLabels.bind(this));
}
activateTextAdding() {
@ -50,8 +81,13 @@ export class TextEditorComponent implements OnInit, OnDestroy {
this.leftPosition = event.pageX.toString() + 'px';
this.topPosition = event.pageY.toString() + 'px';
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'initial');
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'transform', `scale(${this.mapScaleService.getScale()})`);
this.renderer.setStyle(
this.temporaryTextElement.nativeElement,
'transform',
`scale(${this.mapScaleService.getScale()})`
);
this.temporaryTextElement.nativeElement.focus();
document.documentElement.style.cursor = "default";
let textListener = () => {
this.drawingsEventSource.textAdded.emit(
@ -80,14 +116,107 @@ export class TextEditorComponent implements OnInit, OnDestroy {
this.svg.removeEventListener('click', this.mapListener as EventListenerOrEventListenerObject);
}
activateTextEditing() {
activateTextEditingForNodeLabels() {
const rootElement = select(this.svg);
rootElement
.selectAll<SVGGElement, MapLinkNode>('g.interface_label_container')
.select<SVGTextElement>('text.interface_label')
.on('dblclick', (elem, index, textElements) => {
this.selectionManager.setSelected([]);
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'initial');
this.renderer.setStyle(
this.temporaryTextElement.nativeElement,
'transform',
`scale(${this.mapScaleService.getScale()})`
);
this.editedLink = elem;
select(textElements[index]).attr('visibility', 'hidden');
select(textElements[index]).classed('editingMode', true);
this.editedNode = this.nodesDataSource.get(elem.nodeId);
this.editedLink = elem;
let x =
(elem.label.originalX + this.editedNode.x - 1) * this.context.transformation.k +
this.context.getZeroZeroTransformationPoint().x +
this.context.transformation.x;
let y =
(elem.label.originalY + this.editedNode.y + 4) * this.context.transformation.k +
this.context.getZeroZeroTransformationPoint().y +
this.context.transformation.y;
this.leftPosition = x.toString() + 'px';
this.topPosition = y.toString() + 'px';
this.temporaryTextElement.nativeElement.innerText = elem.label.text;
let styleProperties: StyleProperty[] = [];
for (let property of elem.label.style.split(';')) {
styleProperties.push({
property: property.split(': ')[0],
value: property.split(': ')[1],
});
}
let font: Font = {
font_family: styleProperties.find((p) => p.property === 'font-family')
? styleProperties.find((p) => p.property === 'font-family').value
: 'TypeWriter',
font_size: styleProperties.find((p) => p.property === 'font-size')
? Number(styleProperties.find((p) => p.property === 'font-size').value)
: 10.0,
font_weight: styleProperties.find((p) => p.property === 'font-weight')
? styleProperties.find((p) => p.property === 'font-weight').value
: 'normal',
};
font = this.fontFixer.fix(font);
this.renderer.setStyle(
this.temporaryTextElement.nativeElement,
'color',
styleProperties.find((p) => p.property === 'fill')
? styleProperties.find((p) => p.property === 'fill').value
: '#000000'
);
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'font-family', font.font_family);
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'font-size', `${font.font_size}pt`);
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'font-weight', font.font_weight);
let listener = () => {
let innerText = this.temporaryTextElement.nativeElement.innerText;
let link: Link = this.linksDataSource.get(this.editedLink.linkId);
link.nodes.find((n) => n.node_id === this.editedNode.node_id).label.text = innerText;
this.linkService.updateLink(this.server, link).subscribe((link: Link) => {
rootElement
.selectAll<SVGTextElement, TextElement>('text.editingMode')
.attr('visibility', 'visible')
.classed('editingMode', false);
this.innerText = '';
this.temporaryTextElement.nativeElement.innerText = '';
this.temporaryTextElement.nativeElement.removeEventListener('focusout', this.textListener);
this.clearStyle();
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'none');
});
};
this.textListener = listener;
this.temporaryTextElement.nativeElement.addEventListener('focusout', this.textListener);
this.temporaryTextElement.nativeElement.focus();
});
}
activateTextEditingForDrawings() {
const rootElement = select(this.svg);
rootElement
.selectAll<SVGTextElement, TextElement>('text.text_element')
.on('dblclick', (elem, index, textElements) => {
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'display', 'initial');
this.renderer.setStyle(this.temporaryTextElement.nativeElement, 'transform', `scale(${this.mapScaleService.getScale()})`);
this.renderer.setStyle(
this.temporaryTextElement.nativeElement,
'transform',
`scale(${this.mapScaleService.getScale()})`
);
this.editedElement = elem;
select(textElements[index]).attr('visibility', 'hidden');
@ -95,8 +224,14 @@ export class TextEditorComponent implements OnInit, OnDestroy {
this.editingDrawingId = textElements[index].parentElement.parentElement.getAttribute('drawing_id');
var transformData = textElements[index].parentElement.getAttribute('transform').split(/\(|\)/);
var x = (Number(transformData[1].split(/,/)[0]) * this.context.transformation.k) + this.context.getZeroZeroTransformationPoint().x + this.context.transformation.x;
var y = (Number(transformData[1].split(/,/)[1]) * this.context.transformation.k) + this.context.getZeroZeroTransformationPoint().y + this.context.transformation.y;
var x =
Number(transformData[1].split(/,/)[0]) * this.context.transformation.k +
this.context.getZeroZeroTransformationPoint().x +
this.context.transformation.x;
var y =
Number(transformData[1].split(/,/)[1]) * this.context.transformation.k +
this.context.getZeroZeroTransformationPoint().y +
this.context.transformation.y;
this.leftPosition = x.toString() + 'px';
this.topPosition = y.toString() + 'px';
this.temporaryTextElement.nativeElement.innerText = elem.text;

View File

@ -1,8 +1,7 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { Drawing } from '../../models/drawing';
import { MapDrawing } from '../../models/map/map-drawing';
import { Converter } from '../converter';
@Injectable()
export class DrawingToMapDrawingConverter implements Converter<Drawing, MapDrawing> {
@ -14,6 +13,7 @@ export class DrawingToMapDrawingConverter implements Converter<Drawing, MapDrawi
mapDrawing.projectId = drawing.project_id;
mapDrawing.rotation = drawing.rotation;
mapDrawing.svg = drawing.svg;
mapDrawing.locked = drawing.locked;
mapDrawing.x = drawing.x;
mapDrawing.y = drawing.y;
mapDrawing.z = drawing.z;

View File

@ -1,11 +1,10 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { CssFixer } from '../../helpers/css-fixer';
import { FontBBoxCalculator } from '../../helpers/font-bbox-calculator';
import { FontFixer } from '../../helpers/font-fixer';
import { Label } from '../../models/label';
import { MapLabel } from '../../models/map/map-label';
import { FontBBoxCalculator } from '../../helpers/font-bbox-calculator';
import { CssFixer } from '../../helpers/css-fixer';
import { FontFixer } from '../../helpers/font-fixer';
import { Converter } from '../converter';
@Injectable()
export class LabelToMapLabelConverter implements Converter<Label, MapLabel> {

View File

@ -1,9 +1,8 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { LabelToMapLabelConverter } from './label-to-map-label-converter';
import { LinkNode } from '../../../models/link-node';
import { MapLinkNode } from '../../models/map/map-link-node';
import { Converter } from '../converter';
import { LabelToMapLabelConverter } from './label-to-map-label-converter';
@Injectable()
export class LinkNodeToMapLinkNodeConverter implements Converter<LinkNode, MapLinkNode> {

View File

@ -1,9 +1,8 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { LinkNodeToMapLinkNodeConverter } from './link-node-to-map-link-node-converter';
import { Link } from '../../../models/link';
import { MapLink } from '../../models/map/map-link';
import { Converter } from '../converter';
import { LinkNodeToMapLinkNodeConverter } from './link-node-to-map-link-node-converter';
@Injectable()
export class LinkToMapLinkConverter implements Converter<Link, MapLink> {
@ -17,7 +16,9 @@ export class LinkToMapLinkConverter implements Converter<Link, MapLink> {
mapLink.capturing = link.capturing;
mapLink.filters = link.filters;
mapLink.linkType = link.link_type;
mapLink.nodes = link.nodes.map(linkNode => this.linkNodeToMapLinkNode.convert(linkNode, { link_id: link.link_id }));
mapLink.nodes = link.nodes.map((linkNode) =>
this.linkNodeToMapLinkNode.convert(linkNode, { link_id: link.link_id })
);
mapLink.projectId = link.project_id;
mapLink.suspend = link.suspend;
return mapLink;

View File

@ -1,8 +1,7 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { Drawing } from '../../models/drawing';
import { MapDrawing } from '../../models/map/map-drawing';
import { Converter } from '../converter';
@Injectable()
export class MapDrawingToDrawingConverter implements Converter<MapDrawing, Drawing> {
@ -14,6 +13,7 @@ export class MapDrawingToDrawingConverter implements Converter<MapDrawing, Drawi
drawing.project_id = mapDrawing.projectId;
drawing.rotation = mapDrawing.rotation;
drawing.svg = mapDrawing.svg;
drawing.locked = mapDrawing.locked;
drawing.x = mapDrawing.x;
drawing.y = mapDrawing.y;
drawing.z = mapDrawing.z;

View File

@ -1,11 +1,10 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { MapDrawing } from '../../models/map/map-drawing';
import { RectElement } from '../../models/drawings/rect-element';
import { EllipseElement } from '../../models/drawings/ellipse-element';
import { LineElement } from '../../models/drawings/line-element';
import { RectElement } from '../../models/drawings/rect-element';
import { TextElement } from '../../models/drawings/text-element';
import { MapDrawing } from '../../models/map/map-drawing';
import { Converter } from '../converter';
@Injectable()
export class MapDrawingToSvgConverter implements Converter<MapDrawing, string> {
@ -15,27 +14,13 @@ export class MapDrawingToSvgConverter implements Converter<MapDrawing, string> {
let elem = ``;
if (mapDrawing.element instanceof RectElement) {
elem = `<rect fill=\"${mapDrawing.element.fill}\" fill-opacity=\"${mapDrawing.element.fill_opacity}\" height=\"${
mapDrawing.element.height
}\" width=\"${mapDrawing.element.width}\" stroke=\"${mapDrawing.element.stroke}\" stroke-width=\"${
mapDrawing.element.stroke_width
}\" />`;
elem = `<rect fill=\"${mapDrawing.element.fill}\" fill-opacity=\"${mapDrawing.element.fill_opacity}\" height=\"${mapDrawing.element.height}\" width=\"${mapDrawing.element.width}\" stroke=\"${mapDrawing.element.stroke}\" stroke-width=\"${mapDrawing.element.stroke_width}\" rx=\"${mapDrawing.element.rx}\" ry=\"${mapDrawing.element.ry}\" />`;
} else if (mapDrawing.element instanceof EllipseElement) {
elem = `<ellipse fill=\"${mapDrawing.element.fill}\" fill-opacity=\"${mapDrawing.element.fill_opacity}\" cx=\"${
mapDrawing.element.cx
}\" cy=\"${mapDrawing.element.cy}\" rx=\"${mapDrawing.element.rx}\" ry=\"${mapDrawing.element.ry}\" stroke=\"${
mapDrawing.element.stroke
}\" stroke-width=\"${mapDrawing.element.stroke_width}\" />`;
elem = `<ellipse fill=\"${mapDrawing.element.fill}\" fill-opacity=\"${mapDrawing.element.fill_opacity}\" cx=\"${mapDrawing.element.cx}\" cy=\"${mapDrawing.element.cy}\" rx=\"${mapDrawing.element.rx}\" ry=\"${mapDrawing.element.ry}\" stroke=\"${mapDrawing.element.stroke}\" stroke-width=\"${mapDrawing.element.stroke_width}\" />`;
} else if (mapDrawing.element instanceof LineElement) {
elem = `<line stroke=\"${mapDrawing.element.stroke}\" stroke-width=\"${mapDrawing.element.stroke_width}\" x1=\"${
mapDrawing.element.x1
}\" x2=\"${mapDrawing.element.x2}\" y1=\"${mapDrawing.element.y1}\" y2=\"${mapDrawing.element.y2}\" />`;
elem = `<line stroke=\"${mapDrawing.element.stroke}\" stroke-width=\"${mapDrawing.element.stroke_width}\" x1=\"${mapDrawing.element.x1}\" x2=\"${mapDrawing.element.x2}\" y1=\"${mapDrawing.element.y1}\" y2=\"${mapDrawing.element.y2}\" />`;
} else if (mapDrawing.element instanceof TextElement) {
elem = `<text fill=\"${mapDrawing.element.fill}\" fill-opacity=\"1.0\" font-family=\"${
mapDrawing.element.font_family
}\" font-size=\"${mapDrawing.element.font_size}\" font-weight=\"${mapDrawing.element.font_weight}\">${
mapDrawing.element.text
}</text>`;
elem = `<text fill=\"${mapDrawing.element.fill}\" fill-opacity=\"1.0\" font-family=\"${mapDrawing.element.font_family}\" font-size=\"${mapDrawing.element.font_size}\" font-weight=\"${mapDrawing.element.font_weight}\">${mapDrawing.element.text}</text>`;
} else return '';
return `<svg height=\"${mapDrawing.element.height}\" width=\"${mapDrawing.element.width}\">${elem}</svg>`;

View File

@ -1,11 +1,10 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { CssFixer } from '../../helpers/css-fixer';
import { FontBBoxCalculator } from '../../helpers/font-bbox-calculator';
import { FontFixer } from '../../helpers/font-fixer';
import { Label } from '../../models/label';
import { MapLabel } from '../../models/map/map-label';
import { FontBBoxCalculator } from '../../helpers/font-bbox-calculator';
import { CssFixer } from '../../helpers/css-fixer';
import { FontFixer } from '../../helpers/font-fixer';
import { Converter } from '../converter';
@Injectable()
export class MapLabelToLabelConverter implements Converter<MapLabel, Label> {

View File

@ -1,9 +1,8 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { MapLinkNode } from '../../models/map/map-link-node';
import { MapLabelToLabelConverter } from './map-label-to-label-converter';
import { LinkNode } from '../../../models/link-node';
import { MapLinkNode } from '../../models/map/map-link-node';
import { Converter } from '../converter';
import { MapLabelToLabelConverter } from './map-label-to-label-converter';
@Injectable()
export class MapLinkNodeToLinkNodeConverter implements Converter<MapLinkNode, LinkNode> {

View File

@ -1,9 +1,8 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { MapLinkNodeToLinkNodeConverter } from './map-link-node-to-link-node-converter';
import { Link } from '../../../models/link';
import { MapLink } from '../../models/map/map-link';
import { Converter } from '../converter';
import { MapLinkNodeToLinkNodeConverter } from './map-link-node-to-link-node-converter';
@Injectable()
export class MapLinkToLinkConverter implements Converter<MapLink, Link> {
@ -17,7 +16,7 @@ export class MapLinkToLinkConverter implements Converter<MapLink, Link> {
link.capturing = mapLink.capturing;
link.filters = mapLink.filters;
link.link_type = mapLink.linkType;
link.nodes = mapLink.nodes.map(mapLinkNode => this.mapLinkNodeToMapLinkNode.convert(mapLinkNode));
link.nodes = mapLink.nodes.map((mapLinkNode) => this.mapLinkNodeToMapLinkNode.convert(mapLinkNode));
link.project_id = mapLink.projectId;
link.suspend = mapLink.suspend;
return link;

View File

@ -1,10 +1,9 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { MapNode } from '../../models/map/map-node';
import { Node } from '../../models/node';
import { Converter } from '../converter';
import { MapLabelToLabelConverter } from './map-label-to-label-converter';
import { MapPortToPortConverter } from './map-port-to-port-converter';
import { Node } from '../../models/node';
@Injectable()
export class MapNodeToNodeConverter implements Converter<MapNode, Node> {
@ -17,19 +16,22 @@ export class MapNodeToNodeConverter implements Converter<MapNode, Node> {
node.compute_id = mapNode.computeId;
node.console = mapNode.console;
node.console_host = mapNode.consoleHost;
node.console_type = mapNode.consoleType;
node.first_port_name = mapNode.firstPortName;
node.height = mapNode.height;
node.label = mapNode.label ? this.mapLabelToLabel.convert(mapNode.label) : undefined;
node.locked = mapNode.locked;
node.name = mapNode.name;
node.node_directory = mapNode.nodeDirectory;
node.node_type = mapNode.nodeType;
node.port_name_format = mapNode.portNameFormat;
node.port_segment_size = mapNode.portSegmentSize;
node.ports = mapNode.ports ? mapNode.ports.map(mapPort => this.mapPortToPort.convert(mapPort)) : [];
node.ports = mapNode.ports ? mapNode.ports.map((mapPort) => this.mapPortToPort.convert(mapPort)) : [];
node.project_id = mapNode.projectId;
node.status = mapNode.status;
node.symbol = mapNode.symbol;
node.symbol_url = mapNode.symbolUrl;
node.usage = mapNode.usage;
node.width = mapNode.width;
node.x = mapNode.x;
node.y = mapNode.y;

View File

@ -1,8 +1,7 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { Port } from '../../../models/port';
import { MapPort } from '../../models/map/map-port';
import { Converter } from '../converter';
@Injectable()
export class MapPortToPortConverter implements Converter<MapPort, Port> {

View File

@ -1,8 +1,7 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { MapSymbol } from '../../models/map/map-symbol';
import { Symbol } from '../../../models/symbol';
import { MapSymbol } from '../../models/map/map-symbol';
import { Converter } from '../converter';
@Injectable()
export class MapSymbolToSymbolConverter implements Converter<MapSymbol, Symbol> {

View File

@ -1,13 +1,12 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { CssFixer } from '../../helpers/css-fixer';
import { FontBBoxCalculator } from '../../helpers/font-bbox-calculator';
import { FontFixer } from '../../helpers/font-fixer';
import { MapNode } from '../../models/map/map-node';
import { Node } from '../../models/node';
import { Converter } from '../converter';
import { LabelToMapLabelConverter } from './label-to-map-label-converter';
import { PortToMapPortConverter } from './port-to-map-port-converter';
import { FontBBoxCalculator } from '../../helpers/font-bbox-calculator';
import { CssFixer } from '../../helpers/css-fixer';
import { FontFixer } from '../../helpers/font-fixer';
@Injectable()
export class NodeToMapNodeConverter implements Converter<Node, MapNode> {
@ -26,19 +25,24 @@ export class NodeToMapNodeConverter implements Converter<Node, MapNode> {
mapNode.computeId = node.compute_id;
mapNode.console = node.console;
mapNode.consoleHost = node.console_host;
mapNode.consoleType = node.console_type;
mapNode.firstPortName = node.first_port_name;
mapNode.height = node.height;
mapNode.label = this.labelToMapLabel.convert(node.label, { node_id: node.node_id });
mapNode.label = this.labelToMapLabel
? this.labelToMapLabel.convert(node.label, { node_id: node.node_id })
: undefined;
mapNode.locked = node.locked;
mapNode.name = node.name;
mapNode.nodeDirectory = node.node_directory;
mapNode.nodeType = node.node_type;
mapNode.portNameFormat = node.port_name_format;
mapNode.portSegmentSize = node.port_segment_size;
mapNode.ports = node.ports.map(port => this.portToMapPort.convert(port));
mapNode.ports = node.ports ? node.ports.map((port) => this.portToMapPort.convert(port)) : [];
mapNode.projectId = node.project_id;
mapNode.status = node.status;
mapNode.symbol = node.symbol;
mapNode.symbolUrl = node.symbol_url;
mapNode.usage = node.usage;
mapNode.width = node.width;
mapNode.x = node.x;
mapNode.y = node.y;

View File

@ -1,8 +1,7 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { Port } from '../../../models/port';
import { MapPort } from '../../models/map/map-port';
import { Converter } from '../converter';
@Injectable()
export class PortToMapPortConverter implements Converter<Port, MapPort> {

View File

@ -1,8 +1,7 @@
import { Injectable } from '@angular/core';
import { Converter } from '../converter';
import { Symbol } from '../../../models/symbol';
import { MapSymbol } from '../../models/map/map-symbol';
import { Converter } from '../converter';
@Injectable()
export class SymbolToMapSymbolConverter implements Converter<Symbol, MapSymbol> {

View File

@ -14,7 +14,7 @@ describe('StylesToFontConverter', () => {
const expectedFont: Font = {
font_family: 'TypeWriter',
font_size: 10,
font_weight: 'bold'
font_weight: 'bold',
};
expect(converter.convert(styles)).toEqual(expectedFont);

View File

@ -1,8 +1,7 @@
import * as csstree from 'css-tree';
import { Injectable } from '@angular/core';
import { Converter } from './converter';
import * as csstree from 'css-tree';
import { Font } from '../models/font';
import { Converter } from './converter';
@Injectable()
export class StylesToFontConverter implements Converter<string, Font> {
@ -10,30 +9,30 @@ export class StylesToFontConverter implements Converter<string, Font> {
const font: Font = {
font_family: undefined,
font_size: undefined,
font_weight: undefined
font_weight: undefined,
};
const ast = csstree.parse(styles, {
context: 'declarationList'
context: 'declarationList',
});
ast.children.forEach(child => {
if (child.property === 'font-size') {
child.value.children.forEach(value => {
ast.children.forEach((child) => {
if (child.property === 'font-size' && child.value && child.value.children) {
child.value.children.forEach((value) => {
if (value.type === 'Dimension') {
font.font_size = parseInt(value.value);
}
});
}
if (child.property === 'font-family') {
child.value.children.forEach(value => {
if (child.property === 'font-family' && child.value && child.value.children) {
child.value.children.forEach((value) => {
if (value.type === 'Identifier') {
font.font_family = value.name;
}
});
}
if (child.property === 'font-weight') {
child.value.children.forEach(value => {
if (child.property === 'font-weight' && child.value && child.value.children) {
child.value.children.forEach((value) => {
if (value.type === 'Identifier') {
font.font_weight = value.name;
}

View File

@ -1,22 +1,22 @@
import { GraphLayout } from './widgets/graph-layout';
import { LinksWidget } from './widgets/links';
import { NodesWidget } from './widgets/nodes';
import { DrawingsWidget } from './widgets/drawings';
import { DrawingLineWidget } from './widgets/drawing-line';
import { SelectionTool } from './tools/selection-tool';
import { MovingTool } from './tools/moving-tool';
import { LayersWidget } from './widgets/layers';
import { LinkWidget } from './widgets/link';
import { InterfaceStatusWidget } from './widgets/interface-status';
import { InterfaceLabelWidget } from './widgets/interface-label';
import { SelectionTool } from './tools/selection-tool';
import { DrawingWidget } from './widgets/drawing';
import { DrawingLineWidget } from './widgets/drawing-line';
import { DrawingsWidget } from './widgets/drawings';
import { EllipseDrawingWidget } from './widgets/drawings/ellipse-drawing';
import { ImageDrawingWidget } from './widgets/drawings/image-drawing';
import { LineDrawingWidget } from './widgets/drawings/line-drawing';
import { RectDrawingWidget } from './widgets/drawings/rect-drawing';
import { TextDrawingWidget } from './widgets/drawings/text-drawing';
import { LineDrawingWidget } from './widgets/drawings/line-drawing';
import { NodeWidget } from './widgets/node';
import { DrawingWidget } from './widgets/drawing';
import { GraphLayout } from './widgets/graph-layout';
import { InterfaceLabelWidget } from './widgets/interface-label';
import { InterfaceStatusWidget } from './widgets/interface-status';
import { LabelWidget } from './widgets/label';
import { LayersWidget } from './widgets/layers';
import { LinkWidget } from './widgets/link';
import { LinksWidget } from './widgets/links';
import { NodeWidget } from './widgets/node';
import { NodesWidget } from './widgets/nodes';
export const D3_MAP_IMPORTS = [
GraphLayout,
@ -37,5 +37,5 @@ export const D3_MAP_IMPORTS = [
LineDrawingWidget,
RectDrawingWidget,
TextDrawingWidget,
DrawingWidget
DrawingWidget,
];

View File

@ -20,7 +20,7 @@ export abstract class DataSource<T> {
}
public set(data: T[]) {
data.forEach(item => {
data.forEach((item) => {
const index = this.findIndex(item);
if (index >= 0) {
const updated = Object.assign(this.data[index], item);
@ -31,9 +31,9 @@ export abstract class DataSource<T> {
});
const toRemove = this.data.filter(
item => data.filter(i => this.getItemKey(i) === this.getItemKey(item)).length === 0
(item) => data.filter((i) => this.getItemKey(i) === this.getItemKey(item)).length === 0
);
toRemove.forEach(item => this.remove(item));
toRemove.forEach((item) => this.remove(item));
this.dataChange.next(this.data);
}

Some files were not shown because too many files have changed in this diff Show More