Compare commits
326 Commits
v1.0.0-alp
...
v1.0.0-alp
Author | SHA1 | Date | |
---|---|---|---|
![]() |
6e725ca16d | ||
![]() |
9683564826 | ||
![]() |
57e313d9de | ||
![]() |
1781ee2818 | ||
![]() |
406b061cf9 | ||
![]() |
d861941b15 | ||
![]() |
578a7c1a7b | ||
![]() |
a7bee5dd01 | ||
![]() |
81579fa9cc | ||
![]() |
1826cbe83b | ||
![]() |
56bf5f888c | ||
![]() |
084be557b0 | ||
![]() |
6d81290e1d | ||
![]() |
8243a219de | ||
![]() |
5196069b33 | ||
![]() |
0a4fadd5ba | ||
![]() |
0b56259a36 | ||
![]() |
0e86894d81 | ||
![]() |
6ee5275981 | ||
![]() |
029e4016af | ||
![]() |
6119d211c2 | ||
![]() |
23e93f0969 | ||
![]() |
9e228a4e93 | ||
![]() |
100a8cacdd | ||
![]() |
abb313d118 | ||
![]() |
aaf6209d9f | ||
![]() |
e0e24878e2 | ||
![]() |
deca9a20b4 | ||
![]() |
b57ff8f37a | ||
![]() |
55a54a1399 | ||
![]() |
538b5c4c28 | ||
![]() |
0419900e1d | ||
![]() |
cc9c66c4a9 | ||
![]() |
7e253d72ea | ||
![]() |
9423ce7c10 | ||
![]() |
ac8bb2de49 | ||
![]() |
ace6446790 | ||
![]() |
259a1d26b0 | ||
![]() |
7c03b62ea3 | ||
![]() |
950f071737 | ||
![]() |
9706c1079e | ||
![]() |
9c6f2747aa | ||
![]() |
1eb2dfd1b6 | ||
![]() |
c0df8f4d41 | ||
![]() |
1e902d734f | ||
![]() |
59a3c9aeb6 | ||
![]() |
21a2fa6da5 | ||
![]() |
42584e1116 | ||
![]() |
7bfc13dae5 | ||
![]() |
7cb6642f1e | ||
![]() |
f011b03fb2 | ||
![]() |
c0d8709a4c | ||
![]() |
5d605a4853 | ||
![]() |
1d69082e6c | ||
![]() |
4d91027b2c | ||
![]() |
86a21c03d2 | ||
![]() |
51950b816f | ||
![]() |
d3a192da58 | ||
![]() |
4b30dfef58 | ||
![]() |
8432e3ef66 | ||
![]() |
cdfd84a7f8 | ||
![]() |
128fe24003 | ||
![]() |
30f221d05e | ||
![]() |
5087224017 | ||
![]() |
9a8bad4851 | ||
![]() |
c3c983daf6 | ||
![]() |
dce8647f55 | ||
![]() |
f947fe3f0f | ||
![]() |
b5f96a59f8 | ||
![]() |
c90a5678cf | ||
![]() |
663da34e6d | ||
![]() |
049f08b8f9 | ||
![]() |
3c3b14bf09 | ||
![]() |
5e07dd5442 | ||
![]() |
8f2d2cbe30 | ||
![]() |
bebde4799d | ||
![]() |
9cedeb3efb | ||
![]() |
63158ac6cd | ||
![]() |
4f44087989 | ||
![]() |
ab3c49b9b2 | ||
![]() |
28d01a1b56 | ||
![]() |
a979f0108e | ||
![]() |
3c74b8ec38 | ||
![]() |
9d7bf2ae44 | ||
![]() |
3b43b3914b | ||
![]() |
e9f22dd8b5 | ||
![]() |
e68cafdb70 | ||
![]() |
fde16b8699 | ||
![]() |
245c65d750 | ||
![]() |
c7d9f944d5 | ||
![]() |
4ca806e142 | ||
![]() |
0255985bc6 | ||
![]() |
104f1ee7aa | ||
![]() |
132d0553ae | ||
![]() |
b007ff6ff6 | ||
![]() |
2bea4b9d6c | ||
![]() |
4a76c12f15 | ||
![]() |
181f3e3d33 | ||
![]() |
ee2fadbf60 | ||
![]() |
4259d3b53d | ||
![]() |
65aaa131ef | ||
![]() |
46d9aabbdd | ||
![]() |
692045ce77 | ||
![]() |
9c257b0002 | ||
![]() |
15c23eb7dd | ||
![]() |
5fc67d3648 | ||
![]() |
571884f39c | ||
![]() |
ccbcd30813 | ||
![]() |
30666c2838 | ||
![]() |
953558a866 | ||
![]() |
ace81aced2 | ||
![]() |
dc781deeb0 | ||
![]() |
e24d3d56eb | ||
![]() |
6f35e60468 | ||
![]() |
110b57bc64 | ||
![]() |
fd47a32bdb | ||
![]() |
dfd1ffbffc | ||
![]() |
f841cfeb5e | ||
![]() |
9d2398bc12 | ||
![]() |
da9cee0792 | ||
![]() |
aaac14dbd5 | ||
![]() |
23396b5c53 | ||
![]() |
021390952a | ||
![]() |
ad59baa4f5 | ||
![]() |
0420b2dbb9 | ||
![]() |
fab9429707 | ||
![]() |
5b62d5f92a | ||
![]() |
298637a150 | ||
![]() |
49c738451e | ||
![]() |
892b18df4d | ||
![]() |
de6e545f8f | ||
![]() |
e3d1d5e61e | ||
![]() |
d9e337aa46 | ||
![]() |
2881481fc2 | ||
![]() |
fa4c59e3c0 | ||
![]() |
f783e1ab06 | ||
![]() |
5cdb7527c8 | ||
![]() |
13a76db9af | ||
![]() |
0de12b6b38 | ||
![]() |
92993db122 | ||
![]() |
02082c385c | ||
![]() |
0c15f5033d | ||
![]() |
a280658bbb | ||
![]() |
3673542197 | ||
![]() |
11f188f1e8 | ||
![]() |
9a9db28054 | ||
![]() |
47d57d08ee | ||
![]() |
39e2c386f0 | ||
![]() |
c73d39026b | ||
![]() |
89dff969b1 | ||
![]() |
e1eb1beb87 | ||
![]() |
8d12d6a547 | ||
![]() |
33f67503bd | ||
![]() |
21e1656780 | ||
![]() |
ceacf5c760 | ||
![]() |
e0c0cd17bd | ||
![]() |
e81e5034b9 | ||
![]() |
11e0c36ebc | ||
![]() |
e52fd0a3dd | ||
![]() |
48ccc538e5 | ||
![]() |
53ac39232c | ||
![]() |
f68e06c9ed | ||
![]() |
6c884e090c | ||
![]() |
38cda117e2 | ||
![]() |
fb64ca08d3 | ||
![]() |
0fe7edc5b5 | ||
![]() |
1614405c62 | ||
![]() |
87730ba7b3 | ||
![]() |
eb2eef64fc | ||
![]() |
766ab48e1a | ||
![]() |
e255ca7737 | ||
![]() |
558c72bb42 | ||
![]() |
ede59ed4d4 | ||
![]() |
3ced784568 | ||
![]() |
6b12196761 | ||
![]() |
9f58e9f183 | ||
![]() |
607efaa075 | ||
![]() |
706f2042af | ||
![]() |
fa2650cd1f | ||
![]() |
33514cb073 | ||
![]() |
4d2be9ec89 | ||
![]() |
1b2236eb90 | ||
![]() |
f84fd07857 | ||
![]() |
24c59b88ca | ||
![]() |
e45090cc89 | ||
![]() |
f53b96eba8 | ||
![]() |
80699ee13f | ||
![]() |
7e7d537868 | ||
![]() |
1afb1e718b | ||
![]() |
f71f518058 | ||
![]() |
7a005132cc | ||
![]() |
34ef809aee | ||
![]() |
6352f22c48 | ||
![]() |
d0f378764f | ||
![]() |
7885badbfd | ||
![]() |
5999d169bc | ||
![]() |
40b0f8cb69 | ||
![]() |
f428be5ae7 | ||
![]() |
39183b1205 | ||
![]() |
36f82545ae | ||
![]() |
1ef8343ea9 | ||
![]() |
c9e24819ae | ||
![]() |
e2f0ceef19 | ||
![]() |
acd6995bcc | ||
![]() |
ca5e6079bc | ||
![]() |
48ad16946b | ||
![]() |
0a8af12a93 | ||
![]() |
7e602a3612 | ||
![]() |
c880db21a1 | ||
![]() |
26e212ff2f | ||
![]() |
cdc7daf029 | ||
![]() |
41b6e1d54e | ||
![]() |
1c62f3074c | ||
![]() |
514fdbfb6a | ||
![]() |
466d862caa | ||
![]() |
1f825b16c1 | ||
![]() |
17ad43bf65 | ||
![]() |
c957ebabda | ||
![]() |
0755ff291d | ||
![]() |
c0c2b693f3 | ||
![]() |
23dabca2ab | ||
![]() |
98a5a95bec | ||
![]() |
5045c4c82a | ||
![]() |
feb4c5bcb6 | ||
![]() |
de29e34363 | ||
![]() |
0fe2de591a | ||
![]() |
9bee253dd0 | ||
![]() |
a26b38f5ae | ||
![]() |
9312db1fc6 | ||
![]() |
932ed9b8f2 | ||
![]() |
49b90f15bc | ||
![]() |
5f5772501b | ||
![]() |
ed0bfb39f3 | ||
![]() |
60ce10d1e3 | ||
![]() |
e64126af37 | ||
![]() |
19565fba2c | ||
![]() |
f39443b0ff | ||
![]() |
5dde5479d8 | ||
![]() |
3d29b99ddf | ||
![]() |
4ba7cf106f | ||
![]() |
23c7acde51 | ||
![]() |
c41efbd62b | ||
![]() |
1643ca2bd5 | ||
![]() |
b640abd85d | ||
![]() |
dcf9817075 | ||
![]() |
6f8f83d178 | ||
![]() |
475c4f91be | ||
![]() |
29a6fb60de | ||
![]() |
42007f4fef | ||
![]() |
92c0df7629 | ||
![]() |
e70cb25180 | ||
![]() |
980834df6f | ||
![]() |
50968508df | ||
![]() |
8ee93297be | ||
![]() |
dc9b2553ae | ||
![]() |
a6f7f7aa05 | ||
![]() |
c087a969d6 | ||
![]() |
f4eb03fee0 | ||
![]() |
deb4b963cd | ||
![]() |
9834b27b8d | ||
![]() |
fc060acd88 | ||
![]() |
709ffadc7c | ||
![]() |
536d9537ff | ||
![]() |
94217f0b01 | ||
![]() |
80762e92d6 | ||
![]() |
e6ef21fa9d | ||
![]() |
da89560d6b | ||
![]() |
c0c2373ed6 | ||
![]() |
f2a8eb92a1 | ||
![]() |
48e8ffd729 | ||
![]() |
7327a7008c | ||
![]() |
856c7e7e9e | ||
![]() |
353a4da083 | ||
![]() |
3068c27fd6 | ||
![]() |
7de0bd95b9 | ||
![]() |
904828c3e3 | ||
![]() |
63757f7726 | ||
![]() |
05f16f1719 | ||
![]() |
78e115b698 | ||
![]() |
55b53ed5b7 | ||
![]() |
1fa7b40913 | ||
![]() |
5b7ded9097 | ||
![]() |
06b60b86f2 | ||
![]() |
052c941275 | ||
![]() |
72899b0cf2 | ||
![]() |
342316f5a5 | ||
![]() |
c215faaeb8 | ||
![]() |
c4c342bd0a | ||
![]() |
4472a033a1 | ||
![]() |
093876a445 | ||
![]() |
359e0926cb | ||
![]() |
0e9282e079 | ||
![]() |
5511f4d7cb | ||
![]() |
3ae76e66ed | ||
![]() |
42059e3bc6 | ||
![]() |
c093b204d7 | ||
![]() |
8a8f89b386 | ||
![]() |
b109fb8766 | ||
![]() |
f58cf469ed | ||
![]() |
57227ae6ce | ||
![]() |
b670fa843a | ||
![]() |
c41e551c58 | ||
![]() |
60b02b17e4 | ||
![]() |
bf8bb7ee80 | ||
![]() |
1e1d48a5f8 | ||
![]() |
77b55a003c | ||
![]() |
165ab1cfbf | ||
![]() |
d4840bafaf | ||
![]() |
9badd88c80 | ||
![]() |
7a24c9aa3a | ||
![]() |
8a7e7c4eb5 | ||
![]() |
d0c10278fb | ||
![]() |
2ae004db53 | ||
![]() |
7b34b668c1 | ||
![]() |
7c09fc4a38 | ||
![]() |
89ff9d0ea2 | ||
![]() |
b4e503b26c | ||
![]() |
edc911605b | ||
![]() |
30115d0996 | ||
![]() |
5204d944c6 | ||
![]() |
39335bc23a | ||
![]() |
cad417694d | ||
![]() |
fe75b77420 | ||
![]() |
5372ccf59c | ||
![]() |
4dad9b1661 | ||
![]() |
19e4620676 |
1
.gitignore
vendored
@@ -16,3 +16,4 @@ npm-debug.log
|
|||||||
|
|
||||||
builtin-plugins
|
builtin-plugins
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
yarn-error.log
|
||||||
|
108
.gitlab-ci.yml
@@ -1,108 +0,0 @@
|
|||||||
cache:
|
|
||||||
untracked: true
|
|
||||||
key: "$CI_BUILD_REF_NAME"
|
|
||||||
paths:
|
|
||||||
- app/node_modules
|
|
||||||
- node_modules
|
|
||||||
- typings
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- Build
|
|
||||||
- Test
|
|
||||||
- Package
|
|
||||||
- Upload
|
|
||||||
|
|
||||||
Build:
|
|
||||||
stage: Build
|
|
||||||
script:
|
|
||||||
- npm prune
|
|
||||||
- npm install
|
|
||||||
- cd app; npm prune && npm install; cd ..
|
|
||||||
- ./node_modules/.bin/typings install
|
|
||||||
tags:
|
|
||||||
- Linux
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- node_modules
|
|
||||||
- typings
|
|
||||||
- app
|
|
||||||
|
|
||||||
Test:
|
|
||||||
stage: Test
|
|
||||||
dependencies:
|
|
||||||
- Build
|
|
||||||
script:
|
|
||||||
- apt-get install -y xvfb libxtst6 libxss1 libgconf2-4 libnss3 libasound2
|
|
||||||
- xvfb-run -a make coverage
|
|
||||||
tags:
|
|
||||||
- Linux
|
|
||||||
|
|
||||||
Windows package:
|
|
||||||
stage: Package
|
|
||||||
dependencies:
|
|
||||||
- Build
|
|
||||||
script:
|
|
||||||
- call npm install
|
|
||||||
- call npm install webpack # regenerate the .cmd launcher
|
|
||||||
- cd app
|
|
||||||
- call npm install
|
|
||||||
- cd ..
|
|
||||||
- call ./node_modules/.bin/webpack.cmd --progress
|
|
||||||
- call make package-windows
|
|
||||||
- call copy dist\Elements-Electron.exe Elements-Windows-%CI_BUILD_REF_NAME%.exe
|
|
||||||
artifacts:
|
|
||||||
name: Elements-Windows-%CI_BUILD_REF_NAME%
|
|
||||||
paths:
|
|
||||||
- Elements-Windows-%CI_BUILD_REF_NAME%.exe
|
|
||||||
tags:
|
|
||||||
- Windows
|
|
||||||
|
|
||||||
macOS package:
|
|
||||||
stage: Package
|
|
||||||
dependencies:
|
|
||||||
- Build
|
|
||||||
script:
|
|
||||||
- npm install
|
|
||||||
- rm -rf node_modules/electron-macos-sign || true
|
|
||||||
- cp -r node_modules/electron-osx-sign node_modules/electron-macos-sign
|
|
||||||
- cd app; npm install; cd ..
|
|
||||||
- ./node_modules/.bin/webpack --progress
|
|
||||||
- security unlock-keychain -p rjvg login.keychain
|
|
||||||
- make package-mac
|
|
||||||
- cp dist/Elements-Electron.pkg ./Elements-macOS-$CI_BUILD_REF_NAME.pkg
|
|
||||||
artifacts:
|
|
||||||
name: Elements-macOS-$CI_BUILD_REF_NAME
|
|
||||||
paths:
|
|
||||||
- Elements-macOS-$CI_BUILD_REF_NAME.pkg
|
|
||||||
tags:
|
|
||||||
- macOS
|
|
||||||
|
|
||||||
Linux package:
|
|
||||||
stage: Package
|
|
||||||
dependencies:
|
|
||||||
- Build
|
|
||||||
script:
|
|
||||||
- npm install
|
|
||||||
- cd app; npm install; cd ..
|
|
||||||
- ./node_modules/.bin/webpack --progress
|
|
||||||
- make build-linux
|
|
||||||
- cp dist/ELEMENTS*.AppImage ./Elements-Linux-$CI_BUILD_REF_NAME.AppImage
|
|
||||||
artifacts:
|
|
||||||
name: Elements-Linux-$CI_BUILD_REF_NAME
|
|
||||||
paths:
|
|
||||||
- Elements-Linux-$CI_BUILD_REF_NAME.AppImage
|
|
||||||
tags:
|
|
||||||
- Linux
|
|
||||||
|
|
||||||
Upload packages:
|
|
||||||
stage: Upload
|
|
||||||
dependencies:
|
|
||||||
- Windows package
|
|
||||||
- macOS package
|
|
||||||
- Linux package
|
|
||||||
script:
|
|
||||||
- scp Elements-Windows-$CI_BUILD_REF_NAME.exe root@cloud.elements.tv:/mnt/elements/www/clients/
|
|
||||||
- scp Elements-macOS-$CI_BUILD_REF_NAME.pkg root@cloud.elements.tv:/mnt/elements/www/clients/
|
|
||||||
- scp Elements-Linux-$CI_BUILD_REF_NAME.AppImage root@cloud.elements.tv:/mnt/elements/www/clients/
|
|
||||||
tags:
|
|
||||||
- Local
|
|
2
.pug-lintrc.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
module.export = {
|
||||||
|
}
|
20
.travis.yml
@@ -1,7 +1,5 @@
|
|||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: linux
|
|
||||||
env: BUILD_FOR=windows
|
|
||||||
- os: linux
|
- os: linux
|
||||||
env: BUILD_FOR=linux
|
env: BUILD_FOR=linux
|
||||||
- os: osx
|
- os: osx
|
||||||
@@ -16,27 +14,23 @@ cache:
|
|||||||
- app/node_modules
|
- app/node_modules
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- npm i
|
- yarn install
|
||||||
- scripts/install-deps.js
|
- scripts/install-deps.js
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- scripts/build-native.js
|
- scripts/build-native.js
|
||||||
- npm run build
|
- yarn run build
|
||||||
- scripts/prepackage-plugins.js
|
- scripts/prepackage-plugins.js
|
||||||
- scripts/build-$BUILD_FOR.js
|
- scripts/build-$BUILD_FOR.js
|
||||||
|
|
||||||
|
dist: trusty
|
||||||
sudo: false
|
sudo: false
|
||||||
|
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- rpm
|
- rpm
|
||||||
|
- yarn
|
||||||
deploy:
|
sources:
|
||||||
provider: releases
|
- sourceline: 'deb https://dl.yarnpkg.com/debian/ stable main'
|
||||||
api_key: $GITHUB_TOKEN
|
key_url: 'https://dl.yarnpkg.com/debian/pubkey.gpg'
|
||||||
file_glob: true
|
|
||||||
file: 'dist/terminus*'
|
|
||||||
skip_cleanup: true
|
|
||||||
on:
|
|
||||||
tags: true
|
|
||||||
|
46
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to creating a positive environment include:
|
||||||
|
|
||||||
|
* Using welcoming and inclusive language
|
||||||
|
* Being respectful of differing viewpoints and experiences
|
||||||
|
* Gracefully accepting constructive criticism
|
||||||
|
* Focusing on what is best for the community
|
||||||
|
* Showing empathy towards other community members
|
||||||
|
|
||||||
|
Examples of unacceptable behavior by participants include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||||
|
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||||
|
|
||||||
|
## Our Responsibilities
|
||||||
|
|
||||||
|
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||||
|
|
||||||
|
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at e@ajenti.org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||||
|
|
||||||
|
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||||
|
|
||||||
|
[homepage]: http://contributor-covenant.org
|
||||||
|
[version]: http://contributor-covenant.org/version/1/4/
|
11
HACKING.md
@@ -10,12 +10,13 @@ First, install the dependencies:
|
|||||||
|
|
||||||
```
|
```
|
||||||
# macOS/Linux:
|
# macOS/Linux:
|
||||||
npm i
|
npm install
|
||||||
./scripts/install-deps.js
|
./scripts/install-deps.js
|
||||||
./scripts/build-native.js
|
./scripts/build-native.js
|
||||||
|
|
||||||
# Windows:
|
# Windows:
|
||||||
npm i
|
npm -g install windows-build-tools
|
||||||
|
npm install
|
||||||
node scripts\install-deps.js
|
node scripts\install-deps.js
|
||||||
node scripts\build-native.js
|
node scripts\build-native.js
|
||||||
```
|
```
|
||||||
@@ -67,7 +68,11 @@ terminus-pluginname
|
|||||||
|
|
||||||
# Plugins
|
# Plugins
|
||||||
|
|
||||||
The app will load all plugins from the source checkout in the dev mode, and from the user's plugins directory at all times (click `Open Plugins Directory` under `Settings` > `Plugins`).
|
The app will load all plugins from the source checkout in the dev mode, from the user's plugins directory at all times (click `Open Plugins Directory` under `Settings` > `Plugins`) and from the directory specified by the `TERMINUS_PLUGINS` environment var.
|
||||||
|
|
||||||
|
Only modules whose `package.json` file contains a `terminus-plugin` keyword will be loaded.
|
||||||
|
|
||||||
|
If you're currently in your plugin's directory, start Terminus as `TERMINUS_PLUGINS=$(pwd) terminus --debug`
|
||||||
|
|
||||||
A plugin should only provide a default export, which should be a `NgModule` class (or a `NgModuleWithDependencies` where applicable). This module will be injected as a dependency to the app's root module.
|
A plugin should only provide a default export, which should be a `NgModule` class (or a `NgModuleWithDependencies` where applicable). This module will be injected as a dependency to the app's root module.
|
||||||
|
|
||||||
|
44
README.md
@@ -1,2 +1,42 @@
|
|||||||
[](https://travis-ci.org/Eugeny/terminus)
|

|
||||||
[](https://ci.appveyor.com/project/Eugeny/terminus)
|
|
||||||
|
|
||||||
|
[](https://travis-ci.org/Eugeny/terminus) [](https://ci.appveyor.com/project/Eugeny/terminus) [](https://raw.githubusercontent.com/Eugeny/terminus/master/LICENSE) [](https://github.com/Eugeny/terminus/releases/latest)
|
||||||
|
[](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FEugeny%2Fterminus?ref=badge_shield)
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
**Terminus** is a terminal heavily inspired by Hyper. It is, however, designed for people who need to get things done.
|
||||||
|
|
||||||
|
* Runs on Windows, macOS and Linux
|
||||||
|
* Theming and color schemes
|
||||||
|
* Fully configurable shortcuts
|
||||||
|
* Full Unicode support including double-width characters
|
||||||
|
* Doesn't choke on fast-flowing outputs
|
||||||
|
* Proper shell-like experience on Windows including tab completion (via Clink)
|
||||||
|
* CMD, PowerShell, PowerShell Core, Cygwin, Cmder, Git-Bash and WSL (Bash on Windows) support
|
||||||
|
* Tab persistence on macOS and Linux
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Plugins
|
||||||
|
|
||||||
|
Plugins can be installed directly from the Settings view inside Terminus.
|
||||||
|
|
||||||
|
* [clickable-links](https://github.com/Eugeny/terminus-clickable-links) - makes paths and URLs in the terminal clickable
|
||||||
|
* [theme-hype](https://github.com/Eugeny/terminus-theme-hype) - a Hyper inspired theme
|
||||||
|
* [shell-selector](https://github.com/Eugeny/terminus-shell-selector) - a quick shell selector pane
|
||||||
|
* [title-control](https://github.com/kbjr/terminus-scrollbar) - allows modifying the title of the terminal tabs by providing a prefix, suffix, and/or strings to be removed
|
||||||
|
* [scrollbar](https://github.com/kbjr/terminus-scrollbar) - adds a scrollbar to terminal tabs
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Contributing
|
||||||
|
|
||||||
|
Pull requests and plugins are welcome! Publish your plugin on NPM with a `terminus-plugin` keyword to make it appear in the Plugin Manager.
|
||||||
|
|
||||||
|
See [HACKING.md](https://github.com/Eugeny/terminus/blob/master/HACKING.md) for a very brief plugin development tutorial!
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
[](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FEugeny%2Fterminus?ref=badge_large)
|
||||||
|
91
app/assets/logo.svg
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="150mm"
|
||||||
|
height="150mm"
|
||||||
|
viewBox="0 0 150 150"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
|
||||||
|
sodipodi:docname="logo.svg"
|
||||||
|
inkscape:export-filename="/home/eugene/Work/term/build/icons/512x512.png"
|
||||||
|
inkscape:export-xdpi="86.699997"
|
||||||
|
inkscape:export-ydpi="86.699997">
|
||||||
|
<defs
|
||||||
|
id="defs2" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.49497475"
|
||||||
|
inkscape:cx="85.897128"
|
||||||
|
inkscape:cy="375.72042"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:window-width="1366"
|
||||||
|
inkscape:window-height="692"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:object-paths="true" />
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-10.356544,-82.309525)">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path138"
|
||||||
|
style="opacity:0.9;fill:#bfd9f1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.12037313px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="M 33.048081,103.66303 101.30357,143.02426 80.80219,154.86063 33.048089,125.73315 Z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path116"
|
||||||
|
style="opacity:0.9;fill:#6666af;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.12037313px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 141.59934,143.95811 0.051,23.16109 -87.420905,49.42651 -0.0034,-22.16232 z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path118"
|
||||||
|
style="opacity:0.9;fill:#bfd9f1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.12037313px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 33.233182,182.28294 20.992812,12.1202 0.0034,22.16208 -20.996251,-12.19239 z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
style="opacity:0.9;fill:#9dbef0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.12649226px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 52.236336,92.196079 -19.484508,11.249681 68.551742,39.5785 -68.366041,39.4708 21.107487,12.18633 68.366044,-39.4708 19.48451,-11.24968 z"
|
||||||
|
id="path134"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccccc" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
BIN
app/assets/tray-darwinHighlightTemplate.png
Normal file
After Width: | Height: | Size: 415 B |
BIN
app/assets/tray-darwinHighlightTemplate@2x.png
Normal file
After Width: | Height: | Size: 955 B |
BIN
app/assets/tray-darwinTemplate.png
Normal file
After Width: | Height: | Size: 365 B |
BIN
app/assets/tray-darwinTemplate@2x.png
Normal file
After Width: | Height: | Size: 894 B |
BIN
app/assets/tray.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
@@ -9,26 +9,15 @@ html
|
|||||||
script(src='./preload.js')
|
script(src='./preload.js')
|
||||||
script(src='./bundle.js', defer)
|
script(src='./bundle.js', defer)
|
||||||
style#custom-css
|
style#custom-css
|
||||||
body(style='background: ; min-height: 100vh; overflow: hidden')
|
style.
|
||||||
|
body { transition: 0.5s background; }
|
||||||
|
body
|
||||||
app-root
|
app-root
|
||||||
.preload-logo
|
.preload-logo
|
||||||
div
|
div
|
||||||
.terminus-logo.animated
|
.terminus-logo
|
||||||
.part(style='transform: rotateZ(0deg)')
|
|
||||||
div
|
|
||||||
.part(style='transform: rotateZ(51deg)')
|
|
||||||
div
|
|
||||||
.part(style='transform: rotateZ(102deg)')
|
|
||||||
div
|
|
||||||
.part(style='transform: rotateZ(154deg)')
|
|
||||||
div
|
|
||||||
.part(style='transform: rotateZ(205deg)')
|
|
||||||
div
|
|
||||||
.part(style='transform: rotateZ(257deg)')
|
|
||||||
div
|
|
||||||
.part(style='transform: rotateZ(308deg)')
|
|
||||||
div
|
|
||||||
h1.terminus-title Terminus
|
h1.terminus-title Terminus
|
||||||
|
sup α
|
||||||
.progress
|
.progress
|
||||||
.bar(style='width: 0%')
|
.bar(style='width: 0%')
|
||||||
|
|
||||||
|
233
app/main.js
@@ -1,26 +1,18 @@
|
|||||||
if (process.platform == 'win32' && require('electron-squirrel-startup')) process.exit(0)
|
if (process.platform == 'win32' && require('electron-squirrel-startup')) process.exit(0)
|
||||||
|
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
require('electron-debug')({enabled: true, showDevTools: (process.argv.indexOf('--debug') != -1) ? 'undocked' : false})
|
let electronVibrancy
|
||||||
|
if (process.platform != 'linux') {
|
||||||
|
electronVibrancy = require('electron-vibrancy')
|
||||||
|
}
|
||||||
|
|
||||||
let app = electron.app
|
let app = electron.app
|
||||||
|
|
||||||
let secondInstance = app.makeSingleInstance((argv) => {
|
|
||||||
app.window.webContents.send('host:second-instance')
|
|
||||||
})
|
|
||||||
|
|
||||||
if (secondInstance) {
|
|
||||||
app.quit()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const yaml = require('js-yaml')
|
const yaml = require('js-yaml')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const Config = require('electron-config')
|
const Config = require('electron-config')
|
||||||
require('electron-debug')({enabled: true, showDevTools: process.argv.indexOf('--debug') != -1})
|
|
||||||
let windowConfig = new Config({name: 'window'})
|
let windowConfig = new Config({name: 'window'})
|
||||||
|
|
||||||
|
|
||||||
@@ -28,41 +20,45 @@ if (!process.env.TERMINUS_PLUGINS) {
|
|||||||
process.env.TERMINUS_PLUGINS = ''
|
process.env.TERMINUS_PLUGINS = ''
|
||||||
}
|
}
|
||||||
|
|
||||||
setupWindowManagement = () => {
|
setWindowVibrancy = (enabled) => {
|
||||||
let windowCloseable
|
if (enabled && !app.window.vibrancyViewID) {
|
||||||
|
app.window.vibrancyViewID = electronVibrancy.SetVibrancy(app.window, 0)
|
||||||
|
} else if (!enabled && app.window.vibrancyViewID) {
|
||||||
|
electronVibrancy.RemoveView(app.window, app.window.vibrancyViewID)
|
||||||
|
app.window.vibrancyViewID = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setupWindowManagement = () => {
|
||||||
app.window.on('show', () => {
|
app.window.on('show', () => {
|
||||||
app.window.webContents.send('host:window-shown')
|
app.window.webContents.send('host:window-shown')
|
||||||
|
if (app.tray) {
|
||||||
|
app.tray.destroy()
|
||||||
|
app.tray = null
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
app.window.on('hide', (e) => {
|
||||||
|
if (!app.tray) {
|
||||||
|
setupTray()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
app.window.on('enter-full-screen', () => app.window.webContents.send('host:window-enter-full-screen'))
|
||||||
|
app.window.on('leave-full-screen', () => app.window.webContents.send('host:window-leave-full-screen'))
|
||||||
|
|
||||||
app.window.on('close', (e) => {
|
app.window.on('close', (e) => {
|
||||||
windowConfig.set('windowBoundaries', app.window.getBounds())
|
windowConfig.set('windowBoundaries', app.window.getBounds())
|
||||||
if (!windowCloseable) {
|
|
||||||
app.window.minimize()
|
|
||||||
e.preventDefault()
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
app.window.on('closed', () => {
|
app.window.on('closed', () => {
|
||||||
app.window = null
|
app.window = null
|
||||||
})
|
})
|
||||||
|
|
||||||
electron.ipcMain.on('window-closeable', (event, flag) => {
|
|
||||||
windowCloseable = flag
|
|
||||||
})
|
|
||||||
|
|
||||||
electron.ipcMain.on('window-focus', () => {
|
electron.ipcMain.on('window-focus', () => {
|
||||||
app.window.focus()
|
app.window.focus()
|
||||||
})
|
})
|
||||||
|
|
||||||
electron.ipcMain.on('window-toggle-focus', () => {
|
|
||||||
if (app.window.isFocused()) {
|
|
||||||
app.window.minimize()
|
|
||||||
} else {
|
|
||||||
app.window.focus()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
electron.ipcMain.on('window-maximize', () => {
|
electron.ipcMain.on('window-maximize', () => {
|
||||||
app.window.maximize()
|
app.window.maximize()
|
||||||
})
|
})
|
||||||
@@ -84,48 +80,121 @@ setupWindowManagement = () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
electron.ipcMain.on('window-set-bounds', (event, bounds) => {
|
electron.ipcMain.on('window-set-bounds', (event, bounds) => {
|
||||||
let actualBounds = app.window.getBounds()
|
|
||||||
actualBounds.x = bounds.x
|
|
||||||
actualBounds.y = bounds.y
|
|
||||||
app.window.setBounds(actualBounds)
|
|
||||||
setTimeout(() => {
|
|
||||||
actualBounds = app.window.getBounds()
|
|
||||||
bounds.width += bounds.x - actualBounds.x
|
|
||||||
bounds.height += bounds.y - actualBounds.y
|
|
||||||
bounds.x = actualBounds.x
|
|
||||||
bounds.y = actualBounds.y
|
|
||||||
app.window.setBounds(bounds)
|
app.window.setBounds(bounds)
|
||||||
}, 100)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
electron.ipcMain.on('window-set-always-on-top', (event, flag) => {
|
electron.ipcMain.on('window-set-always-on-top', (event, flag) => {
|
||||||
app.window.setAlwaysOnTop(flag)
|
app.window.setAlwaysOnTop(flag)
|
||||||
})
|
})
|
||||||
|
|
||||||
app.on('before-quit', () => windowCloseable = true)
|
electron.ipcMain.on('window-set-vibrancy', (event, enabled) => {
|
||||||
|
setWindowVibrancy(enabled)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
setupTray = () => {
|
||||||
|
if (process.platform == 'darwin') {
|
||||||
|
app.tray = new electron.Tray(`${app.getAppPath()}/assets/tray-darwinTemplate.png`)
|
||||||
|
app.tray.setPressedImage(`${app.getAppPath()}/assets/tray-darwinHighlightTemplate.png`)
|
||||||
|
} else {
|
||||||
|
app.tray = new electron.Tray(`${app.getAppPath()}/assets/tray.png`)
|
||||||
|
}
|
||||||
|
|
||||||
|
app.tray.on('click', () => {
|
||||||
|
app.window.show()
|
||||||
|
app.window.focus()
|
||||||
|
})
|
||||||
|
|
||||||
|
const contextMenu = electron.Menu.buildFromTemplate([{
|
||||||
|
label: 'Show',
|
||||||
|
click () {
|
||||||
|
app.window.show()
|
||||||
|
app.window.focus()
|
||||||
|
}
|
||||||
|
}])
|
||||||
|
|
||||||
|
if (process.platform != 'darwin') {
|
||||||
|
app.tray.setContextMenu(contextMenu)
|
||||||
|
}
|
||||||
|
|
||||||
|
app.tray.setToolTip(`Terminus ${app.getVersion()}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
setupMenu = () => {
|
setupMenu = () => {
|
||||||
var template = [{
|
let template = [{
|
||||||
label: "Application",
|
label: "Application",
|
||||||
submenu: [
|
submenu: [
|
||||||
{ type: "separator" },
|
{ role: 'about', label: 'About Terminus' },
|
||||||
{ label: "Quit", accelerator: "CmdOrCtrl+Q", click: () => {
|
{ type: 'separator' },
|
||||||
app.window.webContents.send('host:quit-request')
|
{
|
||||||
}}
|
label: 'Preferences',
|
||||||
|
accelerator: 'Cmd+,',
|
||||||
|
click () {
|
||||||
|
app.window.webContents.send('host:preferences-menu')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ role: 'services', submenu: [] },
|
||||||
|
{ type: 'separator' },
|
||||||
|
{ role: 'hide' },
|
||||||
|
{ role: 'hideothers' },
|
||||||
|
{ role: 'unhide' },
|
||||||
|
{ type: 'separator' },
|
||||||
|
{
|
||||||
|
label: 'Quit',
|
||||||
|
accelerator: 'Cmd+Q',
|
||||||
|
click () {
|
||||||
|
app.quit()
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Edit",
|
label: "Edit",
|
||||||
submenu: [
|
submenu: [
|
||||||
{ label: "Undo", accelerator: "CmdOrCtrl+Z", selector: "undo:" },
|
{role: 'undo'},
|
||||||
{ label: "Redo", accelerator: "Shift+CmdOrCtrl+Z", selector: "redo:" },
|
{role: 'redo'},
|
||||||
{ type: "separator" },
|
{type: 'separator'},
|
||||||
{ label: "Cut", accelerator: "CmdOrCtrl+X", selector: "cut:" },
|
{role: 'cut'},
|
||||||
{ label: "Copy", accelerator: "CmdOrCtrl+C", selector: "copy:" },
|
{role: 'copy'},
|
||||||
{ label: "Paste", accelerator: "CmdOrCtrl+V", selector: "paste:" },
|
{role: 'paste'},
|
||||||
{ label: "Select All", accelerator: "CmdOrCtrl+A", selector: "selectAll:" }
|
{role: 'pasteandmatchstyle'},
|
||||||
|
{role: 'delete'},
|
||||||
|
{role: 'selectall'}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'View',
|
||||||
|
submenu: [
|
||||||
|
{role: 'reload'},
|
||||||
|
{role: 'forcereload'},
|
||||||
|
{role: 'toggledevtools'},
|
||||||
|
{type: 'separator'},
|
||||||
|
{role: 'resetzoom'},
|
||||||
|
{role: 'zoomin'},
|
||||||
|
{role: 'zoomout'},
|
||||||
|
{type: 'separator'},
|
||||||
|
{role: 'togglefullscreen'}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
role: 'window',
|
||||||
|
submenu: [
|
||||||
|
{role: 'minimize'},
|
||||||
|
{role: 'zoom'},
|
||||||
|
{type: 'separator'},
|
||||||
|
{role: 'front'}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
role: 'help',
|
||||||
|
submenu: [
|
||||||
|
{
|
||||||
|
label: 'Website',
|
||||||
|
click () { electron.shell.openExternal('https://eugeny.github.io/terminus') }
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}]
|
}]
|
||||||
|
|
||||||
@@ -146,16 +215,13 @@ start = () => {
|
|||||||
|
|
||||||
let options = {
|
let options = {
|
||||||
width: 800,
|
width: 800,
|
||||||
height: 400,
|
height: 600,
|
||||||
//icon: `${app.getAppPath()}/assets/img/icon.png`,
|
|
||||||
title: 'Terminus',
|
title: 'Terminus',
|
||||||
minWidth: 400,
|
minWidth: 400,
|
||||||
minHeight: 300,
|
minHeight: 300,
|
||||||
'web-preferences': {'web-security': false},
|
webPreferences: {webSecurity: false},
|
||||||
//- background to avoid the flash of unstyled window
|
|
||||||
backgroundColor: '#131d27',
|
|
||||||
frame: false,
|
frame: false,
|
||||||
//type: 'toolbar',
|
show: false,
|
||||||
}
|
}
|
||||||
Object.assign(options, windowConfig.get('windowBoundaries'))
|
Object.assign(options, windowConfig.get('windowBoundaries'))
|
||||||
|
|
||||||
@@ -163,22 +229,32 @@ start = () => {
|
|||||||
options.frame = true
|
options.frame = true
|
||||||
} else {
|
} else {
|
||||||
if (process.platform == 'darwin') {
|
if (process.platform == 'darwin') {
|
||||||
options.titleBarStyle = 'hidden-inset'
|
options.titleBarStyle = 'hiddenInset'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (process.platform == 'linux') {
|
||||||
|
options.backgroundColor = '#131d27'
|
||||||
|
}
|
||||||
|
|
||||||
app.commandLine.appendSwitch('disable-http-cache')
|
app.commandLine.appendSwitch('disable-http-cache')
|
||||||
|
|
||||||
app.window = new electron.BrowserWindow(options)
|
app.window = new electron.BrowserWindow(options)
|
||||||
|
app.window.once('ready-to-show', () => {
|
||||||
|
if (process.platform == 'darwin') {
|
||||||
|
app.window.setVibrancy('dark')
|
||||||
|
} else if (process.platform == 'windows') {
|
||||||
|
setWindowVibrancy(true)
|
||||||
|
}
|
||||||
|
app.window.show()
|
||||||
|
app.window.focus()
|
||||||
|
})
|
||||||
app.window.loadURL(`file://${app.getAppPath()}/dist/index.html`, {extraHeaders: "pragma: no-cache\n"})
|
app.window.loadURL(`file://${app.getAppPath()}/dist/index.html`, {extraHeaders: "pragma: no-cache\n"})
|
||||||
|
|
||||||
if (process.platform != 'darwin') {
|
if (process.platform != 'darwin') {
|
||||||
app.window.setMenu(null)
|
app.window.setMenu(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
app.window.show()
|
|
||||||
app.window.focus()
|
|
||||||
|
|
||||||
setupWindowManagement()
|
setupWindowManagement()
|
||||||
|
|
||||||
if (process.platform == 'darwin') {
|
if (process.platform == 'darwin') {
|
||||||
@@ -194,8 +270,6 @@ start = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
app.on('ready', start)
|
|
||||||
|
|
||||||
app.on('activate', () => {
|
app.on('activate', () => {
|
||||||
if (!app.window)
|
if (!app.window)
|
||||||
start()
|
start()
|
||||||
@@ -209,3 +283,30 @@ process.on('uncaughtException', function(err) {
|
|||||||
console.log(err)
|
console.log(err)
|
||||||
app.window.webContents.send('uncaughtException', err)
|
app.window.webContents.send('uncaughtException', err)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const argv = require('yargs')
|
||||||
|
.usage('terminus [command] [arguments]')
|
||||||
|
.version('v', 'Show version and exit', app.getVersion())
|
||||||
|
.alias('d', 'debug')
|
||||||
|
.describe('d', 'Show DevTools on start')
|
||||||
|
.alias('h', 'help')
|
||||||
|
.help('h')
|
||||||
|
.strict()
|
||||||
|
.argv
|
||||||
|
|
||||||
|
app.on('second-instance', (argv, cwd) => {
|
||||||
|
app.window.webContents.send('host:second-instance', argv, cwd)
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!app.requestSingleInstanceLock()) {
|
||||||
|
app.quit()
|
||||||
|
process.exit(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv.d) {
|
||||||
|
require('electron-debug')({enabled: true, showDevTools: 'undocked'})
|
||||||
|
}
|
||||||
|
|
||||||
|
app.on('ready', start)
|
||||||
|
@@ -12,23 +12,29 @@
|
|||||||
"watch": "webpack --progress --color --watch"
|
"watch": "webpack --progress --color --watch"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@angular/animations": "4.0.1",
|
"@angular/animations": "6.0.2",
|
||||||
"@angular/common": "4.0.1",
|
"@angular/common": "6.0.2",
|
||||||
"@angular/compiler": "4.0.1",
|
"@angular/compiler": "6.0.2",
|
||||||
"@angular/core": "4.0.1",
|
"@angular/core": "6.0.2",
|
||||||
"@angular/forms": "4.0.1",
|
"@angular/forms": "6.0.2",
|
||||||
"@angular/platform-browser": "4.0.1",
|
"@angular/platform-browser": "6.0.2",
|
||||||
"@angular/platform-browser-dynamic": "4.0.1",
|
"@angular/platform-browser-dynamic": "6.0.2",
|
||||||
"@ng-bootstrap/ng-bootstrap": "1.0.0-alpha.22",
|
"@ng-bootstrap/ng-bootstrap": "^2.0.0",
|
||||||
"devtron": "1.4.0",
|
"devtron": "1.4.0",
|
||||||
"electron-config": "0.2.1",
|
"electron-config": "0.2.1",
|
||||||
"electron-debug": "^1.0.1",
|
"electron-debug": "^1.0.1",
|
||||||
"electron-is-dev": "0.1.2",
|
"electron-is-dev": "0.1.2",
|
||||||
"electron-squirrel-startup": "^1.0.0",
|
"electron-squirrel-startup": "^1.0.0",
|
||||||
"fs-promise": "^2.0.2",
|
"electron-vibrancy": "^0.1.3",
|
||||||
"js-yaml": "3.8.2",
|
"js-yaml": "3.8.2",
|
||||||
|
"mz": "^2.6.0",
|
||||||
|
"ngx-toastr": "^8.7.3",
|
||||||
"path": "0.12.7",
|
"path": "0.12.7",
|
||||||
"rxjs": "5.3.0",
|
"rxjs": "^6.1.0",
|
||||||
"zone.js": "0.8.4"
|
"yargs": "^12.0.1",
|
||||||
|
"zone.js": "~0.8.26"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/mz": "0.0.31"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,12 +1,18 @@
|
|||||||
import { NgModule } from '@angular/core'
|
import { NgModule } from '@angular/core'
|
||||||
import { BrowserModule } from '@angular/platform-browser'
|
import { BrowserModule } from '@angular/platform-browser'
|
||||||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
|
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
|
||||||
|
import { ToastrModule } from 'ngx-toastr'
|
||||||
|
|
||||||
export async function getRootModule (plugins: any[]): Promise<any> {
|
export function getRootModule (plugins: any[]) {
|
||||||
let imports = [
|
let imports = [
|
||||||
BrowserModule,
|
BrowserModule,
|
||||||
...(plugins.map(x => x.default.forRoot ? x.default.forRoot() : x.default)),
|
...plugins,
|
||||||
NgbModule.forRoot(),
|
NgbModule.forRoot(),
|
||||||
|
ToastrModule.forRoot({
|
||||||
|
positionClass: 'toast-bottom-center',
|
||||||
|
preventDuplicates: true,
|
||||||
|
extendedTimeOut: 5000,
|
||||||
|
}),
|
||||||
]
|
]
|
||||||
let bootstrap = [
|
let bootstrap = [
|
||||||
...(plugins.filter(x => x.bootstrap).map(x => x.bootstrap)),
|
...(plugins.filter(x => x.bootstrap).map(x => x.bootstrap)),
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
import 'source-sans-pro'
|
import 'source-sans-pro'
|
||||||
import 'font-awesome/css/font-awesome.css'
|
import 'font-awesome/css/font-awesome.css'
|
||||||
|
import 'ngx-toastr/toastr.css'
|
||||||
import './preload.scss'
|
import './preload.scss'
|
||||||
|
|
||||||
import * as Raven from 'raven-js'
|
import * as Raven from 'raven-js'
|
||||||
@@ -31,3 +32,7 @@ process.on('uncaughtException', (err) => {
|
|||||||
Raven.captureException(err)
|
Raven.captureException(err)
|
||||||
console.error(err)
|
console.error(err)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const childProcess = require('child_process')
|
||||||
|
childProcess.spawn = require('electron').remote.require('child_process').spawn
|
||||||
|
childProcess.exec = require('electron').remote.require('child_process').exec
|
||||||
|
@@ -1,16 +1,21 @@
|
|||||||
import 'zone.js/dist/zone.js'
|
import 'zone.js'
|
||||||
import 'core-js/es7/reflect'
|
import 'core-js/es7/reflect'
|
||||||
import 'core-js/core/delay'
|
import 'core-js/core/delay'
|
||||||
import 'rxjs'
|
import 'rxjs'
|
||||||
|
import './toastr.scss'
|
||||||
|
|
||||||
// Always land on the start view
|
// Always land on the start view
|
||||||
location.hash = ''
|
location.hash = ''
|
||||||
|
|
||||||
import { enableProdMode } from '@angular/core'
|
import { enableProdMode, NgModuleRef } from '@angular/core'
|
||||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
|
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
|
||||||
|
|
||||||
import { getRootModule } from './app.module'
|
import { getRootModule } from './app.module'
|
||||||
import { findPlugins, loadPlugins } from './plugins'
|
import { findPlugins, loadPlugins, IPluginInfo } from './plugins'
|
||||||
|
|
||||||
|
if (process.platform === 'win32') {
|
||||||
|
process.env.HOME = process.env.HOMEDRIVE + process.env.HOMEPATH
|
||||||
|
}
|
||||||
|
|
||||||
if (require('electron-is-dev')) {
|
if (require('electron-is-dev')) {
|
||||||
console.warn('Running in debug mode')
|
console.warn('Running in debug mode')
|
||||||
@@ -18,10 +23,30 @@ if (require('electron-is-dev')) {
|
|||||||
enableProdMode()
|
enableProdMode()
|
||||||
}
|
}
|
||||||
|
|
||||||
findPlugins().then(async plugins => {
|
async function bootstrap (plugins: IPluginInfo[], safeMode = false): Promise<NgModuleRef<any>> {
|
||||||
|
if (safeMode) {
|
||||||
|
plugins = plugins.filter(x => x.isBuiltin)
|
||||||
|
}
|
||||||
let pluginsModules = await loadPlugins(plugins, (current, total) => {
|
let pluginsModules = await loadPlugins(plugins, (current, total) => {
|
||||||
(document.querySelector('.progress .bar') as HTMLElement).style.width = 100 * current / total + '%'
|
(document.querySelector('.progress .bar') as HTMLElement).style.width = 100 * current / total + '%'
|
||||||
})
|
})
|
||||||
let module = await getRootModule(pluginsModules)
|
let module = getRootModule(pluginsModules)
|
||||||
platformBrowserDynamic().bootstrapModule(module)
|
window['rootModule'] = module
|
||||||
|
return await platformBrowserDynamic().bootstrapModule(module)
|
||||||
|
}
|
||||||
|
|
||||||
|
findPlugins().then(async plugins => {
|
||||||
|
console.log('Starting with plugins:', plugins)
|
||||||
|
try {
|
||||||
|
await bootstrap(plugins)
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Angular bootstrapping error:', error)
|
||||||
|
console.warn('Trying safe mode')
|
||||||
|
window['safeModeReason'] = error
|
||||||
|
try {
|
||||||
|
await bootstrap(plugins, true)
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Bootstrap failed:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import * as fs from 'fs-promise'
|
import * as fs from 'mz/fs'
|
||||||
import * as path from 'path'
|
import * as path from 'path'
|
||||||
const nodeModule = require('module')
|
const nodeModule = require('module')
|
||||||
const nodeRequire = (global as any).require
|
const nodeRequire = (global as any).require
|
||||||
@@ -20,11 +20,7 @@ if (process.env.DEV) {
|
|||||||
nodeModule.globalPaths.unshift(path.dirname(require('electron').remote.app.getAppPath()))
|
nodeModule.globalPaths.unshift(path.dirname(require('electron').remote.app.getAppPath()))
|
||||||
}
|
}
|
||||||
|
|
||||||
const builtinPluginsPath = path.join(
|
const builtinPluginsPath = process.env.DEV ? path.dirname(require('electron').remote.app.getAppPath()) : path.join((process as any).resourcesPath, 'builtin-plugins')
|
||||||
path.dirname(require('electron').remote.app.getPath('exe')),
|
|
||||||
(process.platform === 'darwin') ? '../Resources' : 'resources',
|
|
||||||
'builtin-plugins',
|
|
||||||
)
|
|
||||||
|
|
||||||
const userPluginsPath = path.join(
|
const userPluginsPath = path.join(
|
||||||
require('electron').remote.app.getPath('appData'),
|
require('electron').remote.app.getPath('appData'),
|
||||||
@@ -35,9 +31,9 @@ const userPluginsPath = path.join(
|
|||||||
Object.assign(window, { builtinPluginsPath, userPluginsPath })
|
Object.assign(window, { builtinPluginsPath, userPluginsPath })
|
||||||
nodeModule.globalPaths.unshift(builtinPluginsPath)
|
nodeModule.globalPaths.unshift(builtinPluginsPath)
|
||||||
nodeModule.globalPaths.unshift(path.join(userPluginsPath, 'node_modules'))
|
nodeModule.globalPaths.unshift(path.join(userPluginsPath, 'node_modules'))
|
||||||
|
// nodeModule.globalPaths.unshift(path.join((process as any).resourcesPath, 'app.asar', 'node_modules'))
|
||||||
if (process.env.TERMINUS_PLUGINS) {
|
if (process.env.TERMINUS_PLUGINS) {
|
||||||
process.env.TERMINUS_PLUGINS.split(':').map(x => nodeModule.globalPaths.unshift(normalizePath(x)))
|
process.env.TERMINUS_PLUGINS.split(':').map(x => nodeModule.globalPaths.push(normalizePath(x)))
|
||||||
}
|
}
|
||||||
|
|
||||||
export declare type ProgressCallback = (current, total) => void
|
export declare type ProgressCallback = (current, total) => void
|
||||||
@@ -48,14 +44,47 @@ export interface IPluginInfo {
|
|||||||
packageName: string
|
packageName: string
|
||||||
isBuiltin: boolean
|
isBuiltin: boolean
|
||||||
version: string
|
version: string
|
||||||
|
author: string
|
||||||
homepage?: string
|
homepage?: string
|
||||||
path?: string
|
path?: string
|
||||||
info?: any
|
info?: any
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const builtinModules = [
|
||||||
|
'@angular/animations',
|
||||||
|
'@angular/common',
|
||||||
|
'@angular/compiler',
|
||||||
|
'@angular/core',
|
||||||
|
'@angular/forms',
|
||||||
|
'@angular/platform-browser',
|
||||||
|
'@angular/platform-browser-dynamic',
|
||||||
|
'@ng-bootstrap/ng-bootstrap',
|
||||||
|
'ngx-toastr',
|
||||||
|
'rxjs',
|
||||||
|
'rxjs/operators',
|
||||||
|
'terminus-core',
|
||||||
|
'terminus-settings',
|
||||||
|
'terminus-terminal',
|
||||||
|
'zone.js/dist/zone.js',
|
||||||
|
]
|
||||||
|
|
||||||
|
const cachedBuiltinModules = {}
|
||||||
|
builtinModules.forEach(m => {
|
||||||
|
cachedBuiltinModules[m] = nodeRequire(m)
|
||||||
|
})
|
||||||
|
|
||||||
|
const originalRequire = nodeRequire('module').prototype.require
|
||||||
|
nodeRequire('module').prototype.require = function (query) {
|
||||||
|
if (cachedBuiltinModules[query]) {
|
||||||
|
return cachedBuiltinModules[query]
|
||||||
|
}
|
||||||
|
return originalRequire.apply(this, arguments)
|
||||||
|
}
|
||||||
|
|
||||||
export async function findPlugins (): Promise<IPluginInfo[]> {
|
export async function findPlugins (): Promise<IPluginInfo[]> {
|
||||||
let paths = nodeModule.globalPaths
|
let paths = nodeModule.globalPaths
|
||||||
let foundPlugins: IPluginInfo[] = []
|
let foundPlugins: IPluginInfo[] = []
|
||||||
|
let candidateLocations: { pluginDir: string, packageName: string }[] = []
|
||||||
|
|
||||||
for (let pluginDir of paths) {
|
for (let pluginDir of paths) {
|
||||||
pluginDir = normalizePath(pluginDir)
|
pluginDir = normalizePath(pluginDir)
|
||||||
@@ -63,32 +92,50 @@ export async function findPlugins (): Promise<IPluginInfo[]> {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
let pluginNames = await fs.readdir(pluginDir)
|
let pluginNames = await fs.readdir(pluginDir)
|
||||||
for (let pluginName of pluginNames.filter(x => /^terminus-/.exec(x))) {
|
if (await fs.exists(path.join(pluginDir, 'package.json'))) {
|
||||||
let pluginPath = path.join(pluginDir, pluginName)
|
candidateLocations.push({
|
||||||
|
pluginDir: path.dirname(pluginDir),
|
||||||
|
packageName: path.basename(pluginDir)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
for (let packageName of pluginNames) {
|
||||||
|
candidateLocations.push({ pluginDir, packageName })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let { pluginDir, packageName } of candidateLocations) {
|
||||||
|
let pluginPath = path.join(pluginDir, packageName)
|
||||||
let infoPath = path.join(pluginPath, 'package.json')
|
let infoPath = path.join(pluginPath, 'package.json')
|
||||||
if (!await fs.exists(infoPath)) {
|
if (!await fs.exists(infoPath)) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if (foundPlugins.some(x => x.name === pluginName)) {
|
let name = packageName.substring('terminus-'.length)
|
||||||
console.info(`Plugin ${pluginName} already exists`)
|
|
||||||
|
if (foundPlugins.some(x => x.name === name)) {
|
||||||
|
console.info(`Plugin ${packageName} already exists, overriding`)
|
||||||
|
foundPlugins = foundPlugins.filter(x => x.name !== name)
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let info = await fs.readJson(infoPath)
|
let info = JSON.parse(await fs.readFile(infoPath, {encoding: 'utf-8'}))
|
||||||
console.log(pluginDir, builtinPluginsPath)
|
if (!info.keywords || !(info.keywords.includes('terminus-plugin') || info.keywords.includes('terminus-builtin-plugin'))) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
let author = info.author
|
||||||
|
author = author.name || author
|
||||||
foundPlugins.push({
|
foundPlugins.push({
|
||||||
name: pluginName.substring('terminus-'.length),
|
name: name,
|
||||||
packageName: pluginName,
|
packageName: packageName,
|
||||||
isBuiltin: pluginDir === builtinPluginsPath,
|
isBuiltin: pluginDir === builtinPluginsPath,
|
||||||
version: info.version,
|
version: info.version,
|
||||||
description: info.description,
|
description: info.description,
|
||||||
|
author,
|
||||||
path: pluginPath,
|
path: pluginPath,
|
||||||
info,
|
info,
|
||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Cannot load package info for', pluginName)
|
console.error('Cannot load package info for', packageName)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,7 +151,10 @@ export async function loadPlugins (foundPlugins: IPluginInfo[], progress: Progre
|
|||||||
console.info(`Loading ${foundPlugin.name}: ${nodeRequire.resolve(foundPlugin.path)}`)
|
console.info(`Loading ${foundPlugin.name}: ${nodeRequire.resolve(foundPlugin.path)}`)
|
||||||
progress(index, foundPlugins.length)
|
progress(index, foundPlugins.length)
|
||||||
try {
|
try {
|
||||||
let pluginModule = nodeRequire(foundPlugin.path)
|
let packageModule = nodeRequire(foundPlugin.path)
|
||||||
|
let pluginModule = packageModule.default.forRoot ? packageModule.default.forRoot() : packageModule.default
|
||||||
|
pluginModule['pluginName'] = foundPlugin.name
|
||||||
|
pluginModule['bootstrap'] = packageModule.bootstrap
|
||||||
plugins.push(pluginModule)
|
plugins.push(pluginModule)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`Could not load ${foundPlugin.name}:`, error)
|
console.error(`Could not load ${foundPlugin.name}:`, error)
|
||||||
|
@@ -1,6 +1,3 @@
|
|||||||
$color: rgba(66, 142, 173, 0.75);
|
|
||||||
|
|
||||||
|
|
||||||
.preload-logo {
|
.preload-logo {
|
||||||
-webkit-app-region: drag;
|
-webkit-app-region: drag;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
@@ -24,7 +21,7 @@ $color: rgba(66, 142, 173, 0.75);
|
|||||||
|
|
||||||
.bar {
|
.bar {
|
||||||
transition: 1s ease-out width;
|
transition: 1s ease-out width;
|
||||||
background: $color;
|
background: #a1c5e4;
|
||||||
height: 3px;
|
height: 3px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -42,63 +39,36 @@ $color: rgba(66, 142, 173, 0.75);
|
|||||||
.terminus-logo {
|
.terminus-logo {
|
||||||
width: 160px;
|
width: 160px;
|
||||||
height: 160px;
|
height: 160px;
|
||||||
|
background: url('../assets/logo.svg');
|
||||||
|
background-repeat: none;
|
||||||
|
background-size: contain;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
position: relative;
|
|
||||||
transform: rotateZ(-14.5deg);
|
|
||||||
|
|
||||||
.part {
|
|
||||||
position: absolute;
|
|
||||||
width: 160px;
|
|
||||||
height: 160px;
|
|
||||||
|
|
||||||
div {
|
|
||||||
position: absolute;
|
|
||||||
top: 33px;
|
|
||||||
left: 24px;
|
|
||||||
width: 44px;
|
|
||||||
height: 44px;
|
|
||||||
background: $color;
|
|
||||||
transform: rotateX(52deg) rotateY(-42deg);
|
|
||||||
animation: terminusLogoPartOnce ease-out 1s;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.animated .part div {
|
|
||||||
animation: terminusLogoPart infinite ease-out 2s;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.terminus-title {
|
.terminus-title {
|
||||||
color: $color;
|
color: #a1c5e4;
|
||||||
font-family: 'Source Sans Pro';
|
font-family: 'Source Sans Pro';
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-size: 42px;
|
font-size: 42px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
|
||||||
|
|
||||||
|
sup {
|
||||||
@keyframes terminusLogoPart {
|
color: #842fe0;
|
||||||
0% {
|
|
||||||
transform: rotateX(90deg) rotateY(-90deg);
|
|
||||||
}
|
|
||||||
25% {
|
|
||||||
transform: rotateX(52deg) rotateY(-42deg);
|
|
||||||
}
|
|
||||||
75% {
|
|
||||||
transform: rotateX(52deg) rotateY(-42deg);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
transform: rotateX(-90deg) rotateY(-90deg);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes terminusLogoPartOnce {
|
.modal-dialog, .modal-backdrop {
|
||||||
0% {
|
-webkit-app-region: no-drag;
|
||||||
transform: rotateX(90deg) rotateY(-90deg);
|
|
||||||
}
|
}
|
||||||
100% {
|
|
||||||
transform: rotateX(52deg) rotateY(-42deg);
|
[ngbradiogroup] input[type="radio"] {
|
||||||
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
min-height: 100vh;
|
||||||
|
overflow: hidden;
|
||||||
|
background: rgba(0,0,0,.4);
|
||||||
}
|
}
|
||||||
|
16
app/src/toastr.scss
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#toast-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.toast {
|
||||||
|
box-shadow: 0 1px 0 rgba(0,0,0,.25);
|
||||||
|
padding: 10px;
|
||||||
|
background-image: none;
|
||||||
|
width: auto;
|
||||||
|
|
||||||
|
&.toast-info {
|
||||||
|
background-color: #555;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -21,30 +21,36 @@ module.exports = {
|
|||||||
extensions: ['.ts', '.js'],
|
extensions: ['.ts', '.js'],
|
||||||
},
|
},
|
||||||
module: {
|
module: {
|
||||||
loaders: [
|
rules: [
|
||||||
{
|
{
|
||||||
test: /\.ts$/,
|
test: /\.ts$/,
|
||||||
|
use: {
|
||||||
loader: 'awesome-typescript-loader',
|
loader: 'awesome-typescript-loader',
|
||||||
options: {
|
options: {
|
||||||
configFileName: path.resolve(__dirname, 'tsconfig.json'),
|
configFileName: path.resolve(__dirname, 'tsconfig.json'),
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] },
|
{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] },
|
||||||
{ test: /\.css$/, use: ['style-loader', 'css-loader', 'sass-loader'] },
|
{ test: /\.css$/, use: ['style-loader', 'css-loader', 'sass-loader'] },
|
||||||
{
|
{
|
||||||
test: /\.(png|svg)$/,
|
test: /\.(png|svg)$/,
|
||||||
loader: "file-loader",
|
use: {
|
||||||
|
loader: 'file-loader',
|
||||||
options: {
|
options: {
|
||||||
name: 'images/[name].[ext]'
|
name: 'images/[name].[ext]'
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /\.(ttf|eot|otf|woff|woff2)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
|
test: /\.(ttf|eot|otf|woff|woff2)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
|
||||||
loader: "file-loader",
|
use: {
|
||||||
|
loader: 'file-loader',
|
||||||
options: {
|
options: {
|
||||||
name: 'fonts/[name].[ext]'
|
name: 'fonts/[name].[ext]'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
externals: {
|
externals: {
|
||||||
@@ -55,13 +61,15 @@ module.exports = {
|
|||||||
'@angular/forms': 'commonjs @angular/forms',
|
'@angular/forms': 'commonjs @angular/forms',
|
||||||
'@angular/common': 'commonjs @angular/common',
|
'@angular/common': 'commonjs @angular/common',
|
||||||
'@ng-bootstrap/ng-bootstrap': 'commonjs @ng-bootstrap/ng-bootstrap',
|
'@ng-bootstrap/ng-bootstrap': 'commonjs @ng-bootstrap/ng-bootstrap',
|
||||||
'fs-promise': 'commonjs fs-promise',
|
'child_process': 'commonjs child_process',
|
||||||
'electron': 'commonjs electron',
|
'electron': 'commonjs electron',
|
||||||
'electron-is-dev': 'commonjs electron-is-dev',
|
'electron-is-dev': 'commonjs electron-is-dev',
|
||||||
|
'ngx-toastr': 'commonjs ngx-toastr',
|
||||||
'module': 'commonjs module',
|
'module': 'commonjs module',
|
||||||
|
'mz': 'commonjs mz',
|
||||||
'path': 'commonjs path',
|
'path': 'commonjs path',
|
||||||
'rxjs': 'commonjs rxjs',
|
'rxjs': 'commonjs rxjs',
|
||||||
'zone.js': 'commonjs zone.js',
|
'zone.js': 'commonjs zone.js/dist/zone.js',
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
new webpack.optimize.ModuleConcatenationPlugin(),
|
||||||
|
565
app/yarn.lock
Normal file
@@ -0,0 +1,565 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@angular/animations@6.0.2":
|
||||||
|
version "6.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-6.0.2.tgz#92063f612c3b33d962eddc9ad538cadd231fbe47"
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.9.0"
|
||||||
|
|
||||||
|
"@angular/common@6.0.2":
|
||||||
|
version "6.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@angular/common/-/common-6.0.2.tgz#e4cbb7d45d8d2f35e918d62f0cbfd8c87e9168f7"
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.9.0"
|
||||||
|
|
||||||
|
"@angular/compiler@6.0.2":
|
||||||
|
version "6.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-6.0.2.tgz#b9d29b7e032c767179967540f1ed7f8777a615a1"
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.9.0"
|
||||||
|
|
||||||
|
"@angular/core@6.0.2":
|
||||||
|
version "6.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@angular/core/-/core-6.0.2.tgz#d183730d73182a4590a5d71083db45655f210e69"
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.9.0"
|
||||||
|
|
||||||
|
"@angular/forms@6.0.2":
|
||||||
|
version "6.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-6.0.2.tgz#a0647930e8b6e7fbd48f55eb69b399a41bcd091a"
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.9.0"
|
||||||
|
|
||||||
|
"@angular/platform-browser-dynamic@6.0.2":
|
||||||
|
version "6.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.0.2.tgz#755689df9f02bbcb270c7872a75a2ffe7e0b0c33"
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.9.0"
|
||||||
|
|
||||||
|
"@angular/platform-browser@6.0.2":
|
||||||
|
version "6.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-6.0.2.tgz#19f56f6efbd0e7af5f35fe2f8cde3557dc8ba689"
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.9.0"
|
||||||
|
|
||||||
|
"@ng-bootstrap/ng-bootstrap@^2.0.0":
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-2.0.0.tgz#65f78c7dd5a8ac424f44bb2050a9eab247cdeb0c"
|
||||||
|
|
||||||
|
"@types/mz@0.0.31":
|
||||||
|
version "0.0.31"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/mz/-/mz-0.0.31.tgz#a4d80c082fefe71e40a7c0f07d1e6555bbbc7b52"
|
||||||
|
dependencies:
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/node@*":
|
||||||
|
version "8.0.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.13.tgz#530f0f9254209b0335bf5cc6387822594ef47093"
|
||||||
|
|
||||||
|
accessibility-developer-tools@^2.11.0:
|
||||||
|
version "2.12.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/accessibility-developer-tools/-/accessibility-developer-tools-2.12.0.tgz#3da0cce9d6ec6373964b84f35db7cfc3df7ab514"
|
||||||
|
|
||||||
|
ansi-regex@^2.0.0:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
|
||||||
|
|
||||||
|
ansi-regex@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
|
||||||
|
|
||||||
|
any-promise@^1.0.0:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
|
||||||
|
|
||||||
|
argparse@^1.0.7:
|
||||||
|
version "1.0.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
|
||||||
|
dependencies:
|
||||||
|
sprintf-js "~1.0.2"
|
||||||
|
|
||||||
|
bindings@^1.2.1:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7"
|
||||||
|
|
||||||
|
camelcase@^4.1.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
|
||||||
|
|
||||||
|
cliui@^4.0.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
|
||||||
|
dependencies:
|
||||||
|
string-width "^2.1.1"
|
||||||
|
strip-ansi "^4.0.0"
|
||||||
|
wrap-ansi "^2.0.0"
|
||||||
|
|
||||||
|
code-point-at@^1.0.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
|
||||||
|
|
||||||
|
conf@^0.11.1:
|
||||||
|
version "0.11.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/conf/-/conf-0.11.2.tgz#879f479267600483e502583462ca4063fc9779b2"
|
||||||
|
dependencies:
|
||||||
|
dot-prop "^3.0.0"
|
||||||
|
env-paths "^0.3.0"
|
||||||
|
mkdirp "^0.5.1"
|
||||||
|
pkg-up "^1.0.0"
|
||||||
|
|
||||||
|
cross-spawn@^5.0.1:
|
||||||
|
version "5.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
|
||||||
|
dependencies:
|
||||||
|
lru-cache "^4.0.1"
|
||||||
|
shebang-command "^1.2.0"
|
||||||
|
which "^1.2.9"
|
||||||
|
|
||||||
|
debug@^2.2.0, debug@^2.6.8:
|
||||||
|
version "2.6.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
|
||||||
|
dependencies:
|
||||||
|
ms "2.0.0"
|
||||||
|
|
||||||
|
decamelize@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7"
|
||||||
|
dependencies:
|
||||||
|
xregexp "4.0.0"
|
||||||
|
|
||||||
|
devtron@1.4.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/devtron/-/devtron-1.4.0.tgz#b5e748bd6e95bbe70bfcc68aae6fe696119441e1"
|
||||||
|
dependencies:
|
||||||
|
accessibility-developer-tools "^2.11.0"
|
||||||
|
highlight.js "^9.3.0"
|
||||||
|
humanize-plus "^1.8.1"
|
||||||
|
|
||||||
|
dot-prop@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
|
||||||
|
dependencies:
|
||||||
|
is-obj "^1.0.0"
|
||||||
|
|
||||||
|
electron-config@0.2.1:
|
||||||
|
version "0.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/electron-config/-/electron-config-0.2.1.tgz#7e12c26412d06bf3ed3896d0479df162986b95ba"
|
||||||
|
dependencies:
|
||||||
|
conf "^0.11.1"
|
||||||
|
|
||||||
|
electron-debug@^1.0.1:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/electron-debug/-/electron-debug-1.2.0.tgz#22e51a73e1bf095d0bb51a6c3d97a203364c4222"
|
||||||
|
dependencies:
|
||||||
|
electron-is-dev "^0.1.0"
|
||||||
|
electron-localshortcut "^2.0.0"
|
||||||
|
|
||||||
|
electron-is-accelerator@^0.1.0:
|
||||||
|
version "0.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/electron-is-accelerator/-/electron-is-accelerator-0.1.2.tgz#509e510c26a56b55e17f863a4b04e111846ab27b"
|
||||||
|
|
||||||
|
electron-is-dev@0.1.2, electron-is-dev@^0.1.0:
|
||||||
|
version "0.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-0.1.2.tgz#8a1043e32b3a1da1c3f553dce28ce764246167e3"
|
||||||
|
|
||||||
|
electron-localshortcut@^2.0.0:
|
||||||
|
version "2.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/electron-localshortcut/-/electron-localshortcut-2.0.2.tgz#6a1adcd6514c957328ec7912f5ccb5e1c10706db"
|
||||||
|
dependencies:
|
||||||
|
debug "^2.6.8"
|
||||||
|
electron-is-accelerator "^0.1.0"
|
||||||
|
|
||||||
|
electron-squirrel-startup@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/electron-squirrel-startup/-/electron-squirrel-startup-1.0.0.tgz#19b4e55933fa0ef8f556784b9c660f772546a0b8"
|
||||||
|
dependencies:
|
||||||
|
debug "^2.2.0"
|
||||||
|
|
||||||
|
electron-vibrancy@^0.1.3:
|
||||||
|
version "0.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/electron-vibrancy/-/electron-vibrancy-0.1.3.tgz#04382dd6e030e5ca5e60f8e024033738cb8479e3"
|
||||||
|
dependencies:
|
||||||
|
bindings "^1.2.1"
|
||||||
|
nan "^2.0.5"
|
||||||
|
|
||||||
|
env-paths@^0.3.0:
|
||||||
|
version "0.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-0.3.1.tgz#c30ccfcbc30c890943dc08a85582517ef00da463"
|
||||||
|
|
||||||
|
esprima@^3.1.1:
|
||||||
|
version "3.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
|
||||||
|
|
||||||
|
execa@^0.7.0:
|
||||||
|
version "0.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
|
||||||
|
dependencies:
|
||||||
|
cross-spawn "^5.0.1"
|
||||||
|
get-stream "^3.0.0"
|
||||||
|
is-stream "^1.1.0"
|
||||||
|
npm-run-path "^2.0.0"
|
||||||
|
p-finally "^1.0.0"
|
||||||
|
signal-exit "^3.0.0"
|
||||||
|
strip-eof "^1.0.0"
|
||||||
|
|
||||||
|
find-up@^1.0.0:
|
||||||
|
version "1.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
|
||||||
|
dependencies:
|
||||||
|
path-exists "^2.0.0"
|
||||||
|
pinkie-promise "^2.0.0"
|
||||||
|
|
||||||
|
find-up@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
|
||||||
|
dependencies:
|
||||||
|
locate-path "^3.0.0"
|
||||||
|
|
||||||
|
get-caller-file@^1.0.1:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
|
||||||
|
|
||||||
|
get-stream@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
|
||||||
|
|
||||||
|
highlight.js@^9.3.0:
|
||||||
|
version "9.12.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e"
|
||||||
|
|
||||||
|
humanize-plus@^1.8.1:
|
||||||
|
version "1.8.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/humanize-plus/-/humanize-plus-1.8.2.tgz#a65b34459ad6367adbb3707a82a3c9f916167030"
|
||||||
|
|
||||||
|
inherits@2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
|
||||||
|
|
||||||
|
invert-kv@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
|
||||||
|
|
||||||
|
is-fullwidth-code-point@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
|
||||||
|
dependencies:
|
||||||
|
number-is-nan "^1.0.0"
|
||||||
|
|
||||||
|
is-fullwidth-code-point@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
|
||||||
|
|
||||||
|
is-obj@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
|
||||||
|
|
||||||
|
is-stream@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||||
|
|
||||||
|
isexe@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||||
|
|
||||||
|
js-yaml@3.8.2:
|
||||||
|
version "3.8.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.2.tgz#02d3e2c0f6beab20248d412c352203827d786721"
|
||||||
|
dependencies:
|
||||||
|
argparse "^1.0.7"
|
||||||
|
esprima "^3.1.1"
|
||||||
|
|
||||||
|
lcid@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
|
||||||
|
dependencies:
|
||||||
|
invert-kv "^1.0.0"
|
||||||
|
|
||||||
|
locate-path@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
|
||||||
|
dependencies:
|
||||||
|
p-locate "^3.0.0"
|
||||||
|
path-exists "^3.0.0"
|
||||||
|
|
||||||
|
lru-cache@^4.0.1:
|
||||||
|
version "4.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
|
||||||
|
dependencies:
|
||||||
|
pseudomap "^1.0.2"
|
||||||
|
yallist "^2.1.2"
|
||||||
|
|
||||||
|
mem@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
|
||||||
|
dependencies:
|
||||||
|
mimic-fn "^1.0.0"
|
||||||
|
|
||||||
|
mimic-fn@^1.0.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
|
||||||
|
|
||||||
|
minimist@0.0.8:
|
||||||
|
version "0.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
||||||
|
|
||||||
|
mkdirp@^0.5.1:
|
||||||
|
version "0.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
||||||
|
dependencies:
|
||||||
|
minimist "0.0.8"
|
||||||
|
|
||||||
|
ms@2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||||
|
|
||||||
|
mz@^2.6.0:
|
||||||
|
version "2.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mz/-/mz-2.6.0.tgz#c8b8521d958df0a4f2768025db69c719ee4ef1ce"
|
||||||
|
dependencies:
|
||||||
|
any-promise "^1.0.0"
|
||||||
|
object-assign "^4.0.1"
|
||||||
|
thenify-all "^1.0.0"
|
||||||
|
|
||||||
|
nan@^2.0.5:
|
||||||
|
version "2.10.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f"
|
||||||
|
|
||||||
|
ngx-toastr@^8.7.3:
|
||||||
|
version "8.7.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/ngx-toastr/-/ngx-toastr-8.7.3.tgz#d3b7a8077ba1c860dd8a44779ccad38c5ea15c92"
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.9.0"
|
||||||
|
|
||||||
|
npm-run-path@^2.0.0:
|
||||||
|
version "2.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
|
||||||
|
dependencies:
|
||||||
|
path-key "^2.0.0"
|
||||||
|
|
||||||
|
number-is-nan@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||||
|
|
||||||
|
object-assign@^4.0.1:
|
||||||
|
version "4.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||||
|
|
||||||
|
os-locale@^2.0.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
|
||||||
|
dependencies:
|
||||||
|
execa "^0.7.0"
|
||||||
|
lcid "^1.0.0"
|
||||||
|
mem "^1.1.0"
|
||||||
|
|
||||||
|
p-finally@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
|
||||||
|
|
||||||
|
p-limit@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec"
|
||||||
|
dependencies:
|
||||||
|
p-try "^2.0.0"
|
||||||
|
|
||||||
|
p-locate@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
|
||||||
|
dependencies:
|
||||||
|
p-limit "^2.0.0"
|
||||||
|
|
||||||
|
p-try@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1"
|
||||||
|
|
||||||
|
path-exists@^2.0.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
|
||||||
|
dependencies:
|
||||||
|
pinkie-promise "^2.0.0"
|
||||||
|
|
||||||
|
path-exists@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
|
||||||
|
|
||||||
|
path-key@^2.0.0:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
|
||||||
|
|
||||||
|
path@0.12.7:
|
||||||
|
version "0.12.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f"
|
||||||
|
dependencies:
|
||||||
|
process "^0.11.1"
|
||||||
|
util "^0.10.3"
|
||||||
|
|
||||||
|
pinkie-promise@^2.0.0:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
|
||||||
|
dependencies:
|
||||||
|
pinkie "^2.0.0"
|
||||||
|
|
||||||
|
pinkie@^2.0.0:
|
||||||
|
version "2.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
||||||
|
|
||||||
|
pkg-up@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26"
|
||||||
|
dependencies:
|
||||||
|
find-up "^1.0.0"
|
||||||
|
|
||||||
|
process@^0.11.1:
|
||||||
|
version "0.11.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
||||||
|
|
||||||
|
pseudomap@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
|
||||||
|
|
||||||
|
require-directory@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||||
|
|
||||||
|
require-main-filename@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
|
||||||
|
|
||||||
|
rxjs@^6.1.0:
|
||||||
|
version "6.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.1.0.tgz#833447de4e4f6427b9cec3e5eb9f56415cd28315"
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.9.0"
|
||||||
|
|
||||||
|
set-blocking@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||||
|
|
||||||
|
shebang-command@^1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
|
||||||
|
dependencies:
|
||||||
|
shebang-regex "^1.0.0"
|
||||||
|
|
||||||
|
shebang-regex@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
|
||||||
|
|
||||||
|
signal-exit@^3.0.0:
|
||||||
|
version "3.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
||||||
|
|
||||||
|
sprintf-js@~1.0.2:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
||||||
|
|
||||||
|
string-width@^1.0.1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
||||||
|
dependencies:
|
||||||
|
code-point-at "^1.0.0"
|
||||||
|
is-fullwidth-code-point "^1.0.0"
|
||||||
|
strip-ansi "^3.0.0"
|
||||||
|
|
||||||
|
string-width@^2.0.0, string-width@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
|
||||||
|
dependencies:
|
||||||
|
is-fullwidth-code-point "^2.0.0"
|
||||||
|
strip-ansi "^4.0.0"
|
||||||
|
|
||||||
|
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^2.0.0"
|
||||||
|
|
||||||
|
strip-ansi@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^3.0.0"
|
||||||
|
|
||||||
|
strip-eof@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
||||||
|
|
||||||
|
thenify-all@^1.0.0:
|
||||||
|
version "1.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
|
||||||
|
dependencies:
|
||||||
|
thenify ">= 3.1.0 < 4"
|
||||||
|
|
||||||
|
"thenify@>= 3.1.0 < 4":
|
||||||
|
version "3.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839"
|
||||||
|
dependencies:
|
||||||
|
any-promise "^1.0.0"
|
||||||
|
|
||||||
|
tslib@^1.9.0:
|
||||||
|
version "1.9.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.1.tgz#a5d1f0532a49221c87755cfcc89ca37197242ba7"
|
||||||
|
|
||||||
|
util@^0.10.3:
|
||||||
|
version "0.10.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
|
||||||
|
dependencies:
|
||||||
|
inherits "2.0.1"
|
||||||
|
|
||||||
|
which-module@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
||||||
|
|
||||||
|
which@^1.2.9:
|
||||||
|
version "1.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
||||||
|
dependencies:
|
||||||
|
isexe "^2.0.0"
|
||||||
|
|
||||||
|
wrap-ansi@^2.0.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
|
||||||
|
dependencies:
|
||||||
|
string-width "^1.0.1"
|
||||||
|
strip-ansi "^3.0.1"
|
||||||
|
|
||||||
|
xregexp@4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020"
|
||||||
|
|
||||||
|
"y18n@^3.2.1 || ^4.0.0":
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
|
||||||
|
|
||||||
|
yallist@^2.1.2:
|
||||||
|
version "2.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
|
||||||
|
|
||||||
|
yargs-parser@^10.1.0:
|
||||||
|
version "10.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
|
||||||
|
dependencies:
|
||||||
|
camelcase "^4.1.0"
|
||||||
|
|
||||||
|
yargs@^12.0.1:
|
||||||
|
version "12.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.1.tgz#6432e56123bb4e7c3562115401e98374060261c2"
|
||||||
|
dependencies:
|
||||||
|
cliui "^4.0.0"
|
||||||
|
decamelize "^2.0.0"
|
||||||
|
find-up "^3.0.0"
|
||||||
|
get-caller-file "^1.0.1"
|
||||||
|
os-locale "^2.0.0"
|
||||||
|
require-directory "^2.1.1"
|
||||||
|
require-main-filename "^1.0.1"
|
||||||
|
set-blocking "^2.0.0"
|
||||||
|
string-width "^2.0.0"
|
||||||
|
which-module "^2.0.0"
|
||||||
|
y18n "^3.2.1 || ^4.0.0"
|
||||||
|
yargs-parser "^10.1.0"
|
||||||
|
|
||||||
|
zone.js@~0.8.26:
|
||||||
|
version "0.8.26"
|
||||||
|
resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.8.26.tgz#7bdd72f7668c5a7ad6b118148b4ea39c59d08d2d"
|
@@ -9,8 +9,6 @@ environment:
|
|||||||
cache:
|
cache:
|
||||||
- '%USERPROFILE%\.electron'
|
- '%USERPROFILE%\.electron'
|
||||||
|
|
||||||
skip_tags: true
|
|
||||||
|
|
||||||
version: "{build}"
|
version: "{build}"
|
||||||
|
|
||||||
install:
|
install:
|
||||||
@@ -25,4 +23,4 @@ build_script:
|
|||||||
- node scripts/build-windows.js
|
- node scripts/build-windows.js
|
||||||
|
|
||||||
artifacts:
|
artifacts:
|
||||||
- path: 'dist\*.exe'
|
- path: 'dist\win\*.exe'
|
||||||
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 644 B |
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 2.3 KiB |
124
build/icons/icon.svg
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="150mm"
|
||||||
|
height="150mm"
|
||||||
|
viewBox="0 0 150 150"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
|
||||||
|
sodipodi:docname="icon.svg"
|
||||||
|
inkscape:export-filename="/home/eugene/Work/term/build/icons/512x512.png"
|
||||||
|
inkscape:export-xdpi="86.699997"
|
||||||
|
inkscape:export-ydpi="86.699997">
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient4649">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000316;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop4645" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#190065;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop4647" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient4649"
|
||||||
|
id="linearGradient4651"
|
||||||
|
x1="89.26284"
|
||||||
|
y1="85.146751"
|
||||||
|
x2="89.26284"
|
||||||
|
y2="229.47229"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.82182032,0,0,0.82182032,15.208802,28.029361)" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.49497475"
|
||||||
|
inkscape:cx="85.897128"
|
||||||
|
inkscape:cy="375.72042"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:window-width="1366"
|
||||||
|
inkscape:window-height="692"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:object-paths="true" />
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-10.356544,-82.309525)">
|
||||||
|
<rect
|
||||||
|
id="rect168"
|
||||||
|
width="123.27305"
|
||||||
|
height="123.27305"
|
||||||
|
x="23.72002"
|
||||||
|
y="95.673004"
|
||||||
|
style="fill:url(#linearGradient4651);fill-opacity:1;stroke-width:0.21743995"
|
||||||
|
rx="8.2182035"
|
||||||
|
ry="8.2182035" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path138"
|
||||||
|
style="opacity:0.9;fill:#bfd9f1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.82182032px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 47.511243,117.17807 50.067023,28.8724 -15.038249,8.68226 -35.028768,-21.3657 z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path116"
|
||||||
|
style="opacity:0.9;fill:#6666af;fill-rule:evenodd;stroke:none;stroke-width:0.82182032px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1"
|
||||||
|
d="m 127.13617,146.73547 0.0374,16.98921 -64.125308,36.25552 -0.0025,-16.25659 z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path118"
|
||||||
|
style="opacity:0.9;fill:#bfd9f1;fill-rule:evenodd;stroke:none;stroke-width:0.82182032px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1"
|
||||||
|
d="m 47.647019,174.84764 15.398727,8.89046 0.0025,16.25641 -15.401249,-8.94341 z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
style="opacity:0.9;fill:#9dbef0;fill-rule:evenodd;stroke:none;stroke-width:0.82630885px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1"
|
||||||
|
d="m 61.586284,108.76679 -14.292349,8.25191 50.284331,29.03177 -50.148115,28.95277 15.482843,8.93896 50.148116,-28.95277 14.29235,-8.25191 z"
|
||||||
|
id="path134"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccccc" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.4 KiB |
@@ -1,50 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>en_US</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>ELEMENTS</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>com.syslink.elements</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>${PRODUCT_NAME}</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>APPL</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>${VERSION}</string>
|
|
||||||
<key>CFBundleSignature</key>
|
|
||||||
<string>????</string>
|
|
||||||
<key>CFBundleURLTypes</key>
|
|
||||||
<array>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleURLName</key>
|
|
||||||
<string>Elements Client</string>
|
|
||||||
<key>CFBundleURLSchemes</key>
|
|
||||||
<array>
|
|
||||||
<string>elements-client</string>
|
|
||||||
</array>
|
|
||||||
</dict>
|
|
||||||
</array>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>619</string>
|
|
||||||
<key>LSMinimumSystemVersion</key>
|
|
||||||
<string>10.8.0</string>
|
|
||||||
<key>LSUIElement</key>
|
|
||||||
<false/>
|
|
||||||
<key>NSAppTransportSecurity</key>
|
|
||||||
<dict>
|
|
||||||
<key>NSAllowsArbitraryLoads</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
<key>NSHumanReadableCopyright</key>
|
|
||||||
<string>Copyright © 2016 Syslink GmbH. All rights reserved.</string>
|
|
||||||
<key>NSMainNibFile</key>
|
|
||||||
<string>MainMenu</string>
|
|
||||||
<key>NSPrincipalClass</key>
|
|
||||||
<string>AtomApplication</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
@@ -1,34 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Wix RequiredVersion="3.6.2830.0" xmlns="http://schemas.microsoft.com/wix/2006/wi"
|
|
||||||
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
|
|
||||||
<Bundle Name="ELEMENTS" Version="$(var.Version)" Manufacturer="ELEMENTS.tv" UpgradeCode="508475fc-0e76-4cd1-8e98-6953023ba518"
|
|
||||||
HelpUrl="http://elements.tv"
|
|
||||||
Copyright="Copyright © 2016 ELEMENTS" IconSourceFile="build/icon.ico"
|
|
||||||
AboutUrl="http://elements.tv">
|
|
||||||
|
|
||||||
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense">
|
|
||||||
<bal:WixStandardBootstrapperApplication
|
|
||||||
LicenseUrl=""
|
|
||||||
LogoFile="build\logo.png"
|
|
||||||
ThemeFile="build\windows\wix-theme.xml"
|
|
||||||
/>
|
|
||||||
</BootstrapperApplicationRef>
|
|
||||||
|
|
||||||
<Chain>
|
|
||||||
<MsiPackage
|
|
||||||
Id="ClientMSI"
|
|
||||||
Compressed="yes"
|
|
||||||
ForcePerMachine="yes"
|
|
||||||
SourceFile="dist\elements-app.msi"
|
|
||||||
Vital="yes">
|
|
||||||
</MsiPackage>
|
|
||||||
<MsiPackage
|
|
||||||
Id="DriverMSI"
|
|
||||||
Compressed="yes"
|
|
||||||
ForcePerMachine="yes"
|
|
||||||
SourceFile="build/windows/ElementsDriver_x64.msi"
|
|
||||||
Vital="yes">
|
|
||||||
</MsiPackage>
|
|
||||||
</Chain>
|
|
||||||
</Bundle>
|
|
||||||
</Wix>
|
|
@@ -1,84 +0,0 @@
|
|||||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
|
||||||
<Product Id="*" UpgradeCode="37484543-5276-2386-5427-275941245342"
|
|
||||||
Name="ELEMENTS" Version="$(var.ProductVersion)" Manufacturer="ELEMENTS.tv" Language="1033">
|
|
||||||
<Package InstallerVersion="200"
|
|
||||||
Compressed="yes"
|
|
||||||
Comments="Windows Installer Package"
|
|
||||||
Platform="x64"
|
|
||||||
InstallScope="perMachine"
|
|
||||||
InstallPrivileges="elevated" />
|
|
||||||
<MajorUpgrade AllowDowngrades="yes" Schedule="afterInstallValidate" />
|
|
||||||
<Media Id="1" Cabinet="product.cab" EmbedCab="yes"/>
|
|
||||||
|
|
||||||
<Feature Id="DefaultFeature" Level="1">
|
|
||||||
<ComponentRef Id="RegistryEntries" />
|
|
||||||
<ComponentRef Id="AppDir"/>
|
|
||||||
<ComponentRef Id="AvidSharedStorageAccess"/>
|
|
||||||
<ComponentRef Id="ApplicationShortcutDesktop"/>
|
|
||||||
<ComponentGroupRef Id="Files" />
|
|
||||||
</Feature>
|
|
||||||
|
|
||||||
<Directory Id="TARGETDIR" Name="SourceDir">
|
|
||||||
<Directory Id="DesktopFolder" Name="Desktop">
|
|
||||||
<Component Id="ApplicationShortcutDesktop" Guid="*">
|
|
||||||
<Shortcut Id="ApplicationDesktopShortcut"
|
|
||||||
Name="ELEMENTS"
|
|
||||||
Description="ELEMENTS client app"
|
|
||||||
Target="[INSTALLDIR]\\Elements.exe"
|
|
||||||
WorkingDirectory="INSTALLDIR"/>
|
|
||||||
<RemoveFolder Id="DesktopFolder" On="uninstall"/>
|
|
||||||
<RegistryValue
|
|
||||||
Root="HKCU"
|
|
||||||
Key="Software\ELEMENTS"
|
|
||||||
Name="installed"
|
|
||||||
Type="integer"
|
|
||||||
Value="1"
|
|
||||||
KeyPath="yes"/>
|
|
||||||
</Component>
|
|
||||||
</Directory>
|
|
||||||
<Directory Id="ProgramFiles64Folder">
|
|
||||||
<Directory Id="ElementsDir" Name="ELEMENTS">
|
|
||||||
<Directory Id="INSTALLDIR" Name="ELEMENTS Client">
|
|
||||||
<Component Id="AppDir" Guid="284957a6-a462-4e34-babd-c17800f11054" Win64="yes">
|
|
||||||
<CreateFolder />
|
|
||||||
<!--RemoveFile Id="RemoveFilesFromAppDirectory" Name="*.*" On="uninstall" /-->
|
|
||||||
<!--RemoveFolder Id="AppDir" On="uninstall"/-->
|
|
||||||
</Component>
|
|
||||||
</Directory>
|
|
||||||
</Directory>
|
|
||||||
</Directory>
|
|
||||||
<Component Id="RegistryEntries" Guid="572998d8-719e-4124-8fe6-6d4f8b855d7b">
|
|
||||||
<RegistryKey Root="HKLM"
|
|
||||||
Key="system\currentcontrolset\services\AvidFs"
|
|
||||||
Action="create">
|
|
||||||
<RegistryValue Type="string" Name="Description" Value="AIFMRX" />
|
|
||||||
<RegistryValue Type="string" Name="DisplayName" Value="AIFMRX" />
|
|
||||||
<RegistryValue Type="integer" Name="ErrorControl" Value="1" />
|
|
||||||
<RegistryValue Type="string" Name="Group" Value="Network" />
|
|
||||||
<RegistryValue Type="string" Name="ImagePath" Value="System32\DRIVERS\aifmrx.sys" />
|
|
||||||
<RegistryValue Type="integer" Name="Start" Value="1" />
|
|
||||||
<RegistryValue Type="integer" Name="Type" Value="2" />
|
|
||||||
</RegistryKey>
|
|
||||||
<RegistryKey Root="HKLM"
|
|
||||||
Key="system\currentcontrolset\services\AifMRx\NetworkProvider"
|
|
||||||
Action="create">
|
|
||||||
<RegistryValue Type="string" Name="DeviceName" Value="\Device\AvidFs" />
|
|
||||||
<RegistryValue Type="string" Name="Name" Value="Interface Network" />
|
|
||||||
<RegistryValue Type="string" Name="ProviderPath" Value="System32\aifmrxnp.dll" />
|
|
||||||
</RegistryKey>
|
|
||||||
<RegistryKey Root="HKLM"
|
|
||||||
Key="system\CurrentControlSet\services\LanmanWorkstation\Parameters"
|
|
||||||
Action="create">
|
|
||||||
<RegistryValue Type="integer" Name="DisableLargeMtu" Value="0" KeyPath="yes" />
|
|
||||||
<RegistryValue Type="integer" Name="DisableBandwidthThrottling" Value="1" />
|
|
||||||
<RegistryValue Type="integer" Name="EnableWsd" Value="0" />
|
|
||||||
</RegistryKey>
|
|
||||||
</Component>
|
|
||||||
<Directory Id="System64Folder" Name="SystemFolder">
|
|
||||||
<Component Id="AvidSharedStorageAccess" Guid="972c67f2-ee17-4b20-8939-b92cfa13fcf6" NeverOverwrite="yes" Win64="yes" Permanent="yes">
|
|
||||||
<File Id="AvidSharedStorageAccess.dll" Source="build\windows\AvidSharedStorageAccess.dll" KeyPath="yes"/>
|
|
||||||
</Component>
|
|
||||||
</Directory>
|
|
||||||
</Directory>
|
|
||||||
</Product>
|
|
||||||
</Wix>
|
|
Before Width: | Height: | Size: 361 KiB After Width: | Height: | Size: 106 KiB |
92
build/windows/icon.svg
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="1024"
|
||||||
|
height="1024"
|
||||||
|
viewBox="0 0 270.93332 270.93333"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||||
|
sodipodi:docname="icon.svg"
|
||||||
|
inkscape:export-filename="D:\Users\Ich\Downloads\64x64.png"
|
||||||
|
inkscape:export-xdpi="6"
|
||||||
|
inkscape:export-ydpi="6">
|
||||||
|
<defs
|
||||||
|
id="defs2" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.35355339"
|
||||||
|
inkscape:cx="-57.249603"
|
||||||
|
inkscape:cy="781.4887"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:window-width="1858"
|
||||||
|
inkscape:window-height="1050"
|
||||||
|
inkscape:window-x="54"
|
||||||
|
inkscape:window-y="1079"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
units="px" />
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-47.511065,70.941737)">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path138"
|
||||||
|
style="opacity:0.9;fill:#bfd9f1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.43524027px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="M 64.949149,-45.402272 213.30911,40.153203 168.74736,65.880709 64.949181,2.5692907 Z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path116"
|
||||||
|
style="opacity:0.9;fill:#6666af;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.43524027px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 301.0092,42.179959 -0.003,50.177506 -190.42255,107.635545 -0.003,-48.17143 z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path118"
|
||||||
|
style="opacity:0.9;fill:#bfd9f1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.43524027px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 64.948697,125.47711 45.629963,26.34447 0.005,48.17143 -45.637407,-26.50135 z"
|
||||||
|
sodipodi:nodetypes="ccccc" />
|
||||||
|
<path
|
||||||
|
style="opacity:0.9;fill:#9dbef0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.44854069px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="M 105.39355,-70.939125 64.949149,-45.402272 213.30911,40.153203 64.948697,125.47711 110.57866,151.82158 260.4947,65.557719 301.0092,42.179959 Z"
|
||||||
|
id="path134"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccccc" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
@@ -1,80 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
|
|
||||||
|
|
||||||
|
|
||||||
<Theme xmlns="http://wixtoolset.org/schemas/thmutil/2010">
|
|
||||||
<Window Width="300" Height="360" HexStyle="100a0000" FontId="0">#(loc.Caption)</Window>
|
|
||||||
<Font Id="0" Height="-12" Weight="500" Foreground="000000" Background="FFFFFF">Segoe UI</Font>
|
|
||||||
<Font Id="1" Height="-24" Weight="500" Foreground="000000">Segoe UI</Font>
|
|
||||||
<Font Id="2" Height="-22" Weight="500" Foreground="666666">Segoe UI</Font>
|
|
||||||
<Font Id="3" Height="-12" Weight="500" Foreground="000000" Background="FFFFFF">Segoe UI</Font>
|
|
||||||
<Font Id="4" Height="-12" Weight="500" Foreground="ff0000" Background="FFFFFF" Underline="yes">Segoe UI</Font>
|
|
||||||
|
|
||||||
<Image X="30" Y="30" Width="256" Height="60" ImageFile="logo.png" Visible="yes"/>
|
|
||||||
|
|
||||||
<Page Name="Help">
|
|
||||||
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.HelpHeader)</Text>
|
|
||||||
<Text X="11" Y="112" Width="-11" Height="-35" FontId="3" DisablePrefix="yes">#(loc.HelpText)</Text>
|
|
||||||
<Button Name="HelpCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.HelpCloseButton)</Button>
|
|
||||||
</Page>
|
|
||||||
<Page Name="Install">
|
|
||||||
<!--Hypertext Name="EulaHyperlink" X="11" Y="121" Width="-11" Height="51" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallLicenseLinkText)</Hypertext>
|
|
||||||
<Checkbox Name="EulaAcceptCheckbox" X="-11" Y="-41" Width="260" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallAcceptCheckbox)</Checkbox-->
|
|
||||||
<Button Name="InstallButton" X="90" Y="-120" Width="120" Height="50" TabStop="yes" FontId="0">#(loc.InstallInstallButton)</Button>
|
|
||||||
<Button Name="WelcomeCancelButton" X="110" Y="-80" Width="80" Height="23" TabStop="yes" FontId="0">#(loc.InstallCloseButton)</Button>
|
|
||||||
</Page>
|
|
||||||
<Page Name="Options">
|
|
||||||
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.OptionsHeader)</Text>
|
|
||||||
<Text X="11" Y="121" Width="-11" Height="17" FontId="3" DisablePrefix="yes">#(loc.OptionsLocationLabel)</Text>
|
|
||||||
<Editbox Name="FolderEditbox" X="11" Y="143" Width="-91" Height="21" TabStop="yes" FontId="3" FileSystemAutoComplete="yes" />
|
|
||||||
<Button Name="BrowseButton" X="-11" Y="142" Width="75" Height="23" TabStop="yes" FontId="3">#(loc.OptionsBrowseButton)</Button>
|
|
||||||
<Button Name="OptionsOkButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.OptionsOkButton)</Button>
|
|
||||||
<Button Name="OptionsCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.OptionsCancelButton)</Button>
|
|
||||||
</Page>
|
|
||||||
<Page Name="FilesInUse">
|
|
||||||
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.FilesInUseHeader)</Text>
|
|
||||||
<Text X="11" Y="121" Width="-11" Height="34" FontId="3" DisablePrefix="yes">#(loc.FilesInUseLabel)</Text>
|
|
||||||
<Text Name="FilesInUseText" X="11" Y="150" Width="-11" Height="-86" FontId="3" DisablePrefix="yes" HexStyle="0x0000C000"></Text>
|
|
||||||
|
|
||||||
<Button Name="FilesInUseCloseRadioButton" X="11" Y="-60" Width="-11" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes" HexStyle="0x000009">#(loc.FilesInUseCloseRadioButton)</Button>
|
|
||||||
<Button Name="FilesInUseDontCloseRadioButton" X="11" Y="-40" Width="-11" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes" HexStyle="0x000009">#(loc.FilesInUseDontCloseRadioButton)</Button>
|
|
||||||
|
|
||||||
<Button Name="FilesInUseOkButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.FilesInUseOkButton)</Button>
|
|
||||||
<Button Name="FilesInUseCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.FilesInUseCancelButton)</Button>
|
|
||||||
</Page>
|
|
||||||
<Page Name="Progress">
|
|
||||||
<Text X="30" Y="120" Width="-30" Height="30" FontId="2" DisablePrefix="yes">#(loc.ProgressHeader)</Text>
|
|
||||||
<Text X="30" Y="150" Width="70" Height="17" FontId="3" DisablePrefix="yes">#(loc.ProgressLabel)</Text>
|
|
||||||
<Text Name="OverallProgressPackageText" X="30" Y="200" Width="-30" Height="17" FontId="3" DisablePrefix="yes">#(loc.OverallProgressPackageText)</Text>
|
|
||||||
<Progressbar Name="OverallCalculatedProgressbar" X="30" Y="220" Width="-30" Height="20" />
|
|
||||||
<Button Name="ProgressCancelButton" X="110" Y="-40" Width="80" Height="23" TabStop="yes" FontId="0">#(loc.ProgressCancelButton)</Button>
|
|
||||||
</Page>
|
|
||||||
<Page Name="Modify">
|
|
||||||
<Text X="30" Y="110" Width="-30" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Text>
|
|
||||||
|
|
||||||
<Button Name="UninstallButton" X="90" Y="-100" Width="120" Height="50" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button>
|
|
||||||
<Button Name="RepairButton" X="110" Y="-60" Width="80" Height="23" TabStop="yes" FontId="0">#(loc.ModifyRepairButton)</Button>
|
|
||||||
<Button Name="ModifyCancelButton" X="110" Y="-30" Width="80" Height="23" TabStop="yes" FontId="0">#(loc.ModifyCloseButton)</Button>
|
|
||||||
</Page>
|
|
||||||
<Page Name="Success">
|
|
||||||
<Text Name="SuccessHeader" X="30" Y="110" Width="-30" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">Success</Text>
|
|
||||||
<Text Name="SuccessInstallHeader" X="30" Y="110" Width="-30" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">Installed successfully</Text>
|
|
||||||
<Text Name="SuccessRepairHeader" X="30" Y="110" Width="-30" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">Repaired successfully</Text>
|
|
||||||
<Text Name="SuccessUninstallHeader" X="30" Y="110" Width="-30" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">Uninstalled successfully</Text>
|
|
||||||
|
|
||||||
<Button Name="LaunchButton" X="90" Y="-100" Width="120" Height="50" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.SuccessLaunchButton)</Button>
|
|
||||||
<Button Name="SuccessCancelButton" X="110" Y="-60" Width="80" Height="23" TabStop="yes" FontId="0">#(loc.SuccessCloseButton)</Button>
|
|
||||||
</Page>
|
|
||||||
<Page Name="Failure">
|
|
||||||
<Text Name="FailureHeader" X="30" Y="110" Width="-30" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureHeader)</Text>
|
|
||||||
<Text Name="FailureInstallHeader" X="30" Y="110" Width="-30" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">Setup failed</Text>
|
|
||||||
<Text Name="FailureUninstallHeader" X="30" Y="110" Width="-30" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">Uninstall failed</Text>
|
|
||||||
<Text Name="FailureRepairHeader" X="30" Y="110" Width="-30" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">Repair failed</Text>
|
|
||||||
<Hypertext Name="FailureLogFileLink" X="30" Y="145" Width="-30" Height="50" FontId="3" TabStop="yes" HideWhenDisabled="yes">#(loc.FailureHyperlinkLogText)</Hypertext>
|
|
||||||
<Hypertext Name="FailureMessageText" X="30" Y="195" Width="-30" Height="50" FontId="3" TabStop="yes" HideWhenDisabled="yes" />
|
|
||||||
<Text Name="FailureRestartText" X="-30" Y="255" Width="400" Height="34" FontId="3" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureRestartText)</Text>
|
|
||||||
|
|
||||||
<Button Name="FailureRestartButton" X="90" Y="-100" Width="120" Height="50" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.FailureRestartButton)</Button>
|
|
||||||
<Button Name="FailureCloseButton" X="110" Y="-60" Width="80" Height="23" TabStop="yes" FontId="0">#(loc.FailureCloseButton)</Button>
|
|
||||||
</Page>
|
|
||||||
</Theme>
|
|
BIN
docs/background.jpeg
Normal file
After Width: | Height: | Size: 2.6 MiB |
BIN
docs/dist/assets/background.jpeg
vendored
Normal file
After Width: | Height: | Size: 2.6 MiB |
BIN
docs/dist/assets/terminal.png
vendored
Normal file
After Width: | Height: | Size: 21 KiB |
1
docs/dist/bundle.js
vendored
Normal file
BIN
docs/dist/fonts/background.jpeg
vendored
Normal file
After Width: | Height: | Size: 2.6 MiB |
@@ -1,22 +1,7 @@
|
|||||||
<!DOCTYPE html><html><head><link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"><link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"><link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400" rel="stylesheet"><style>body {
|
<!DOCTYPE html><html><head><base href="dist/"><meta name="viewport" content="initial-scale=1, minimal-ui, shrink-to-fit=no"><link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400" rel="stylesheet"><script src="bundle.js"></script><title>Terminus</title></head><body><div class="mt-5 mb-5" id="header"><div class="text-center"><h1>Terminus</h1><div class="subtitle mb-3">A terminal for a more modern age</div><a class="btn btn-lg btn-outline-dark mt-4" href="https://github.com/Eugeny/terminus/releases/latest" target="_blank"><strong>DOWNLOAD</strong></a><a class="btn btn-lg btn-outline-secondary mt-4 ml-3" href="https://github.com/Eugeny/terminus" target="_blank"><strong>GITHUB</strong></a></div></div><div class="background-stripe"><div class="overlay overlay1"></div><div class="overlay overlay2"></div><div class="terminal"></div></div><div class="container mt-5 mb-5"><div class="d-flex flex-wrap flex-md-nowrap"><div class="w-100"><div class="feature">windows</div><div class="feature">linux</div><div class="feature">macos</div><br><div class="feature">powershell</div><div class="feature">wsl</div><div class="feature">cygwin</div><div class="feature">git-bash</div><div class="feature">cmder</div><div class="feature">clink</div></div><div class="w-100"><div class="feature">full unicode</div><div class="feature">global hotkey</div><div class="feature">plugins</div><div class="feature">tab recovery</div><div class="feature">custom css</div><div class="feature">themes</div><div class="feature">font ligatures</div><div class="feature">clickable paths</div><div class="feature">tabs on top/bottom</div><div class="feature">vibrancy</div><div class="feature">bracketed paste</div></div></div></div><div class="container mt-5 mb-5"><div class="text-center"><a class="btn btn-lg btn-outline-secondary mt-5" href="/terminus/#header"><strong>BEAM ME UP</strong></a></div></div><div class="background-stripe2"><div class="overlay overlay1"></div></div><script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||||
font-family: 'Source Sans Pro', sans-serif;
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||||
background: #111;
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||||
color: #ccc;
|
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
ga('create', 'UA-3278102-18', 'auto');
|
||||||
font-size: 64px;
|
ga('send', 'pageview');</script></body></html>
|
||||||
}
|
|
||||||
|
|
||||||
h1, h3, h5 {
|
|
||||||
font-weight: 300;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn i + span {
|
|
||||||
margin-left: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-outline-primary {
|
|
||||||
color: #b6e7ff !important;
|
|
||||||
}</style></head><body><div class="container mt-5 mb-3"><div class="text-center"><h1>Terminus</h1><h5>A terminal for a more modern age</h5><div class="btn-group mt-3 mb-3"><a class="btn btn-outline-primary"><i class="fa fa-windows"></i><span>Windows</span></a><a class="btn btn-outline-primary"><i class="fa fa-apple"></i><span>macOS</span></a><a class="btn btn-outline-primary"><i class="fa fa-archive"></i><span>DEB</span></a><a class="btn btn-outline-primary"><i class="fa fa-archive"></i><span>RPM</span></a><a class="btn btn-outline-primary"><i class="fa fa-archive"></i><span>TGZ</span></a></div></div><div class="row mt-5"><div class="col-6"><h3>Proper Windows experience</h3><p> <b>Clink </b>provides tab completion, readline-style editing and persistent command history on Windows.</p><p>Also supported:<ul> <li>Classic CMD</li><li>PowerShell </li><li>Bash on Windows </li></ul></p></div><div class="col-6"><h3>User experience</h3><ul><li>Spawn and hide with a global hotkey</li><li>Fully customizable hotkey schema</li><li>Restores tabs </li><li>Drag in a file to paste the path</li><li>Click paths and URLs to open in browser/file manager</li><li>Keeps the current directory in new tabs</li></ul></div></div><div class="row mt-5"><div class="col-6"><h3>Customizable</h3><p>Multiple app themes and a myriad of community color schemes for the terminal. Color scheme editor included.</p></div><div class="col-6"><h3>Infinitely extensible</h3><p>Install plugins from the NPM repository, or create your own with Typescript and Angular framework.</p></div></div></div></body></html>
|
|
1
docs/index.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
import './styles.scss'
|
135
docs/index.pug
@@ -1,88 +1,69 @@
|
|||||||
doctype html
|
doctype html
|
||||||
html
|
html
|
||||||
head
|
head
|
||||||
link(href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css", rel="stylesheet")
|
base(href='dist/')
|
||||||
link(href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css", rel="stylesheet")
|
meta(name='viewport', content='initial-scale=1, minimal-ui, shrink-to-fit=no')
|
||||||
link(href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400", rel="stylesheet")
|
link(href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400", rel="stylesheet")
|
||||||
style.
|
script(src='bundle.js')
|
||||||
body {
|
title Terminus
|
||||||
font-family: 'Source Sans Pro', sans-serif;
|
|
||||||
background: #111;
|
|
||||||
color: #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 64px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1, h3, h5 {
|
|
||||||
font-weight: 300;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn i + span {
|
|
||||||
margin-left: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-outline-primary {
|
|
||||||
color: #b6e7ff !important;
|
|
||||||
}
|
|
||||||
body
|
body
|
||||||
.container.mt-5.mb-3
|
.mt-5.mb-5#header
|
||||||
.text-center
|
.text-center
|
||||||
h1 Terminus
|
h1 Terminus
|
||||||
h5 A terminal for a more modern age
|
.subtitle.mb-3 A terminal for a more modern age
|
||||||
|
|
||||||
.btn-group.mt-3.mb-3
|
a.btn.btn-lg.btn-outline-dark.mt-4(href='https://github.com/Eugeny/terminus/releases/latest', target='_blank')
|
||||||
a.btn.btn-outline-primary
|
strong DOWNLOAD
|
||||||
i.fa.fa-windows
|
|
||||||
span Windows
|
|
||||||
|
|
||||||
a.btn.btn-outline-primary
|
a.btn.btn-lg.btn-outline-secondary.mt-4.ml-3(href='https://github.com/Eugeny/terminus', target='_blank')
|
||||||
i.fa.fa-apple
|
strong GITHUB
|
||||||
span macOS
|
|
||||||
|
|
||||||
a.btn.btn-outline-primary
|
|
||||||
i.fa.fa-archive
|
|
||||||
span DEB
|
|
||||||
|
|
||||||
a.btn.btn-outline-primary
|
|
||||||
i.fa.fa-archive
|
|
||||||
span RPM
|
|
||||||
|
|
||||||
a.btn.btn-outline-primary
|
|
||||||
i.fa.fa-archive
|
|
||||||
span TGZ
|
|
||||||
|
|
||||||
.row.mt-5
|
|
||||||
.col-6
|
|
||||||
h3 Proper Windows experience
|
|
||||||
p
|
|
||||||
b Clink
|
|
||||||
| provides tab completion, readline-style editing and persistent command history on Windows.
|
|
||||||
p Also supported:
|
|
||||||
ul
|
|
||||||
li Classic CMD
|
|
||||||
li PowerShell
|
|
||||||
li Bash on Windows
|
|
||||||
|
|
||||||
.col-6
|
|
||||||
h3 User experience
|
|
||||||
ul
|
|
||||||
li Spawn and hide with a global hotkey
|
|
||||||
li Fully customizable hotkey schema
|
|
||||||
li Restores tabs
|
|
||||||
li Drag in a file to paste the path
|
|
||||||
li Click paths and URLs to open in browser/file manager
|
|
||||||
li Keeps the current directory in new tabs
|
|
||||||
|
|
||||||
.row.mt-5
|
|
||||||
.col-6
|
|
||||||
h3 Customizable
|
|
||||||
p Multiple app themes and a myriad of community color schemes for the terminal. Color scheme editor included.
|
|
||||||
|
|
||||||
.col-6
|
|
||||||
h3 Infinitely extensible
|
|
||||||
p Install plugins from the NPM repository, or create your own with Typescript and Angular framework.
|
|
||||||
|
|
||||||
|
|
||||||
|
.background-stripe
|
||||||
|
.overlay.overlay1
|
||||||
|
.overlay.overlay2
|
||||||
|
.terminal
|
||||||
|
|
||||||
|
.container.mt-5.mb-5
|
||||||
|
.d-flex.flex-wrap.flex-md-nowrap
|
||||||
|
.w-100
|
||||||
|
.feature windows
|
||||||
|
.feature linux
|
||||||
|
.feature macos
|
||||||
|
br
|
||||||
|
.feature powershell
|
||||||
|
.feature wsl
|
||||||
|
.feature cygwin
|
||||||
|
.feature git-bash
|
||||||
|
.feature cmder
|
||||||
|
.feature clink
|
||||||
|
|
||||||
|
.w-100
|
||||||
|
.feature full unicode
|
||||||
|
.feature global hotkey
|
||||||
|
.feature plugins
|
||||||
|
.feature tab recovery
|
||||||
|
.feature custom css
|
||||||
|
.feature themes
|
||||||
|
.feature font ligatures
|
||||||
|
.feature clickable paths
|
||||||
|
.feature tabs on top/bottom
|
||||||
|
.feature vibrancy
|
||||||
|
.feature bracketed paste
|
||||||
|
|
||||||
|
.container.mt-5.mb-5
|
||||||
|
.text-center
|
||||||
|
a.btn.btn-lg.btn-outline-secondary.mt-5(href='/terminus/#header')
|
||||||
|
strong BEAM ME UP
|
||||||
|
|
||||||
|
.background-stripe2
|
||||||
|
.overlay.overlay1
|
||||||
|
|
||||||
|
script.
|
||||||
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||||
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||||
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||||
|
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||||
|
|
||||||
|
ga('create', 'UA-3278102-18', 'auto');
|
||||||
|
ga('send', 'pageview');
|
||||||
|
@@ -1,15 +1,24 @@
|
|||||||
{
|
{
|
||||||
"name": "docs",
|
"name": "docs",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "",
|
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "pug index.pug",
|
"build": "webpack --progress",
|
||||||
"watch": "pug -w index.pug"
|
"watch": "webpack --progress --watch"
|
||||||
},
|
},
|
||||||
"author": "",
|
"private": true,
|
||||||
"license": "ISC",
|
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"pug-cli": "^1.0.0-alpha6"
|
"bootstrap": "^4.1.3",
|
||||||
|
"css-loader": "^1.0.0",
|
||||||
|
"file-loader": "^1.1.11",
|
||||||
|
"node-sass": "^4.9.3",
|
||||||
|
"pug": "^2.0.3",
|
||||||
|
"pug-cli": "^1.0.0-alpha6",
|
||||||
|
"pug-html-loader": "^1.1.5",
|
||||||
|
"sass-loader": "^7.1.0",
|
||||||
|
"style-loader": "^0.22.1",
|
||||||
|
"val-loader": "^1.1.1",
|
||||||
|
"webpack": "^4.16.5",
|
||||||
|
"webpack-cli": "^3.1.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BIN
docs/readme.png
Normal file
After Width: | Height: | Size: 862 KiB |
141
docs/styles.scss
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
$font-family-sans-serif: "Source Sans Pro";
|
||||||
|
$border-radius-lg: 0;
|
||||||
|
$btn-border-width: 3px;
|
||||||
|
|
||||||
|
@import "node_modules/bootstrap/scss/bootstrap";
|
||||||
|
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 10vw;
|
||||||
|
font-weight: 200;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subtitle {
|
||||||
|
font-style: italic;
|
||||||
|
color: #999;
|
||||||
|
font-size: 5vw;
|
||||||
|
font-weight: 300;
|
||||||
|
}
|
||||||
|
|
||||||
|
.background-stripe {
|
||||||
|
width: 100vw;
|
||||||
|
background-image: url('./background.jpeg');
|
||||||
|
background-size: cover;
|
||||||
|
height: 30vw;
|
||||||
|
margin: 200px 0 150px;
|
||||||
|
min-height: 1000px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.overlay {
|
||||||
|
position: absolute;
|
||||||
|
width: 100vw;
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
|
||||||
|
&.overlay1 {
|
||||||
|
top: -1px;
|
||||||
|
left: 0;
|
||||||
|
border-top: 10vw solid white;
|
||||||
|
border-right: 100vw solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.overlay2 {
|
||||||
|
bottom: -1px;
|
||||||
|
right: 0;
|
||||||
|
border-bottom: 10vw solid white;
|
||||||
|
border-left: 100vw solid transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.terminal {
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 5vw;
|
||||||
|
|
||||||
|
width: 1304px;
|
||||||
|
margin-left: -652px;
|
||||||
|
height: 972px;
|
||||||
|
border-radius: 9px;
|
||||||
|
|
||||||
|
box-shadow: 0 0 100px black;
|
||||||
|
background: url('./terminal.png');
|
||||||
|
background-size: cover;
|
||||||
|
|
||||||
|
animation: slideIn ease-out 1s;
|
||||||
|
opacity: .95;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-width: 1500px) {
|
||||||
|
min-height: 500px;
|
||||||
|
margin: 200px 0 100px;
|
||||||
|
|
||||||
|
.terminal {
|
||||||
|
width: 652px;
|
||||||
|
top: -100px;
|
||||||
|
margin-left: -326px;
|
||||||
|
height: 486px;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-width: 750px) {
|
||||||
|
min-height: 250px;
|
||||||
|
margin: 100px 0 50px;
|
||||||
|
|
||||||
|
.terminal {
|
||||||
|
width: 326px;
|
||||||
|
top: -50px;
|
||||||
|
margin-left: -163px;
|
||||||
|
height: 243px;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature {
|
||||||
|
font-size: 45px;
|
||||||
|
line-height: 40px;
|
||||||
|
opacity: .5;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes slideIn {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
margin-top: 200px;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: .95;
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.background-stripe2 {
|
||||||
|
width: 100vw;
|
||||||
|
background-image: url('./background.jpeg');
|
||||||
|
background-size: cover;
|
||||||
|
height: 30vw;
|
||||||
|
margin: 100px 0 0;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.overlay {
|
||||||
|
position: absolute;
|
||||||
|
width: 100vw;
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
|
||||||
|
&.overlay1 {
|
||||||
|
top: -1px;
|
||||||
|
right: 0;
|
||||||
|
border-top: 10vw solid white;
|
||||||
|
border-left: 100vw solid transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
BIN
docs/terminal.png
Normal file
After Width: | Height: | Size: 21 KiB |
27
docs/webpack.config.js
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
const path = require('path')
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
entry: {
|
||||||
|
'index.ignore': 'file-loader?name=../index.html!pug-html-loader!' + path.resolve(__dirname, './index.pug'),
|
||||||
|
'bundle': path.resolve(__dirname, 'index.js'),
|
||||||
|
},
|
||||||
|
context: __dirname,
|
||||||
|
output: {
|
||||||
|
path: path.join(__dirname, 'dist'),
|
||||||
|
filename: '[name].js'
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] },
|
||||||
|
{
|
||||||
|
test: /\.(jpeg|png)?$/,
|
||||||
|
use: {
|
||||||
|
loader: 'file-loader',
|
||||||
|
options: {
|
||||||
|
name: 'assets/[name].[ext]'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
}
|
89
package.json
@@ -5,74 +5,121 @@
|
|||||||
"@types/node": "7.0.5",
|
"@types/node": "7.0.5",
|
||||||
"@types/webpack-env": "1.13.0",
|
"@types/webpack-env": "1.13.0",
|
||||||
"apply-loader": "0.1.0",
|
"apply-loader": "0.1.0",
|
||||||
"awesome-typescript-loader": "3.1.2",
|
"awesome-typescript-loader": "^5.0.0",
|
||||||
"core-js": "2.4.1",
|
"core-js": "2.4.1",
|
||||||
"cross-env": "4.0.0",
|
"cross-env": "4.0.0",
|
||||||
"css-loader": "0.28.0",
|
"css-loader": "0.28.0",
|
||||||
"electron": "1.7.2",
|
"electron": "3.0.0-beta.5",
|
||||||
"electron-builder": "17.1.1",
|
"electron-builder": "^20.27.1",
|
||||||
"electron-builder-squirrel-windows": "17.0.1",
|
"electron-builder-squirrel-windows": "17.0.1",
|
||||||
"electron-rebuild": "1.5.11",
|
"electron-installer-snap": "^3.0.0",
|
||||||
"file-loader": "0.9.0",
|
"electron-rebuild": "^1.8.2",
|
||||||
|
"file-loader": "^1.1.11",
|
||||||
"font-awesome": "4.7.0",
|
"font-awesome": "4.7.0",
|
||||||
|
"graceful-fs": "^4.1.11",
|
||||||
"html-loader": "0.4.4",
|
"html-loader": "0.4.4",
|
||||||
"json-loader": "0.5.4",
|
"json-loader": "0.5.4",
|
||||||
"less": "2.7.1",
|
"less": "2.7.1",
|
||||||
"less-loader": "2.2.3",
|
"less-loader": "2.2.3",
|
||||||
"node-abi": "2.0.3",
|
"node-abi": "^2.4.1",
|
||||||
"node-gyp": "3.4.0",
|
"node-gyp": "^3.6.2",
|
||||||
"node-sass": "4.5.3",
|
"node-sass": "^4.5.3",
|
||||||
"npmlog": "4.1.0",
|
"npmlog": "4.1.0",
|
||||||
"pug": "2.0.0-beta11",
|
"npx": "^9.7.1",
|
||||||
|
"pug": "^2.0.3",
|
||||||
"pug-html-loader": "1.0.9",
|
"pug-html-loader": "1.0.9",
|
||||||
"pug-loader": "2.3.0",
|
"pug-lint": "^2.5.0",
|
||||||
|
"pug-loader": "^2.4.0",
|
||||||
"pug-static-loader": "0.0.1",
|
"pug-static-loader": "0.0.1",
|
||||||
"raven-js": "3.16.0",
|
"raven-js": "3.16.0",
|
||||||
"raw-loader": "0.5.1",
|
"raw-loader": "0.5.1",
|
||||||
"sass-loader": "6.0.3",
|
"sass-loader": "^7.0.1",
|
||||||
"shelljs": "0.7.7",
|
"shelljs": "0.7.7",
|
||||||
"source-sans-pro": "2.0.10",
|
"source-sans-pro": "2.0.10",
|
||||||
"style-loader": "0.13.1",
|
"style-loader": "0.13.1",
|
||||||
|
"svg-inline-loader": "^0.8.0",
|
||||||
"to-string-loader": "1.1.5",
|
"to-string-loader": "1.1.5",
|
||||||
"tslint": "5.1.0",
|
"tslint": "5.1.0",
|
||||||
"tslint-config-standard": "5.0.2",
|
"tslint-config-standard": "5.0.2",
|
||||||
"tslint-eslint-rules": "4.0.0",
|
"tslint-eslint-rules": "4.0.0",
|
||||||
"typescript": "2.2.2",
|
"typescript": "^2.8.3",
|
||||||
"url-loader": "0.5.7",
|
"url-loader": "0.5.7",
|
||||||
"val-loader": "0.5.0",
|
"val-loader": "0.5.0",
|
||||||
"webpack": "^3.0.0",
|
"webpack": "^4.8.3",
|
||||||
"yaml-loader": "0.4.0"
|
"webpack-cli": "^2.1.3",
|
||||||
|
"yaml-loader": "0.4.0",
|
||||||
|
"yarn": "^1.3.2"
|
||||||
},
|
},
|
||||||
"build": {
|
"build": {
|
||||||
"appId": "org.terminus",
|
"appId": "org.terminus",
|
||||||
"productName": "Terminus",
|
"productName": "Terminus",
|
||||||
"compression": "normal",
|
"compression": "normal",
|
||||||
|
"files": [
|
||||||
|
"**/*",
|
||||||
|
"dist"
|
||||||
|
],
|
||||||
"extraResources": [
|
"extraResources": [
|
||||||
"builtin-plugins",
|
"builtin-plugins",
|
||||||
"clink"
|
"clink"
|
||||||
],
|
],
|
||||||
"win": {
|
"win": {
|
||||||
"icon": "./build/windows/icon.ico"
|
"icon": "./build/windows/icon.ico",
|
||||||
|
"publish": [
|
||||||
|
"github"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"squirrelWindows": {
|
"squirrelWindows": {
|
||||||
"iconUrl": "https://github.com/Eugeny/terminus/raw/master/build/windows/icon.ico"
|
"iconUrl": "https://github.com/Eugeny/terminus/raw/master/build/windows/icon.ico",
|
||||||
|
"artifactName": "terminus-${version}-${os}-${arch}.exe"
|
||||||
},
|
},
|
||||||
"mac": {
|
"mac": {
|
||||||
"category": "public.app-category.video",
|
"category": "public.app-category.video",
|
||||||
"icon": "./build/mac/icon.icns",
|
"icon": "./build/mac/icon.icns",
|
||||||
"identity": null
|
"publish": [
|
||||||
|
"github"
|
||||||
|
],
|
||||||
|
"extendInfo": {
|
||||||
|
"NSRequiresAquaSystemAppearance": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dmg": {
|
||||||
|
"artifactName": "terminus-${version}-${os}-${arch}.dmg"
|
||||||
},
|
},
|
||||||
"linux": {
|
"linux": {
|
||||||
"category": "Utilities",
|
"category": "Utilities",
|
||||||
"icon": "./build/icons"
|
"icon": "./build/icons",
|
||||||
|
"publish": [
|
||||||
|
"github"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"deb": {
|
||||||
|
"depends": [
|
||||||
|
"screen",
|
||||||
|
"gconf2",
|
||||||
|
"gconf-service",
|
||||||
|
"libnotify4",
|
||||||
|
"libappindicator1",
|
||||||
|
"libxtst6",
|
||||||
|
"libnss3",
|
||||||
|
"tmux"
|
||||||
|
],
|
||||||
|
"artifactName": "terminus-${version}-${os}-${arch}.deb"
|
||||||
|
},
|
||||||
|
"rpm": {
|
||||||
|
"depends": [
|
||||||
|
"screen",
|
||||||
|
"gnome-python2-gnomekeyring"
|
||||||
|
],
|
||||||
|
"artifactName": "terminus-${version}-${os}-${arch}.rpm"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "webpack --color --config app/webpack.config.js && webpack --color --config terminus-core/webpack.config.js && webpack --color --config terminus-settings/webpack.config.js && webpack --color --config terminus-terminal/webpack.config.js && webpack --color --config terminus-settings/webpack.config.js && webpack --color --config terminus-plugin-manager/webpack.config.js && webpack --color --config terminus-community-color-schemes/webpack.config.js",
|
"build": "webpack --color --config app/webpack.config.js && webpack --color --config terminus-core/webpack.config.js && webpack --color --config terminus-settings/webpack.config.js && webpack --color --config terminus-terminal/webpack.config.js && webpack --color --config terminus-settings/webpack.config.js && webpack --color --config terminus-plugin-manager/webpack.config.js && webpack --color --config terminus-community-color-schemes/webpack.config.js && webpack --color --config terminus-ssh/webpack.config.js",
|
||||||
"watch": "webpack --progress --color --watch",
|
"watch": "webpack --progress --color --watch",
|
||||||
"start": "cross-env DEV=1 electron --js-flags='--ignition' app --debug",
|
"start": "cross-env DEV=1 electron app --debug",
|
||||||
|
"prod": "cross-env DEV=1 electron app",
|
||||||
"lint": "tslint -c tslint.json -t stylish terminus-*/src/**/*.ts terminus-*/src/*.ts app/src/*.ts",
|
"lint": "tslint -c tslint.json -t stylish terminus-*/src/**/*.ts terminus-*/src/*.ts app/src/*.ts",
|
||||||
"postinstall": "install-app-deps"
|
"postinstall": "install-app-deps"
|
||||||
},
|
},
|
||||||
"false": {}
|
"repository": "eugeny/terminus"
|
||||||
}
|
}
|
||||||
|
@@ -4,8 +4,11 @@ const vars = require('./vars')
|
|||||||
|
|
||||||
builder({
|
builder({
|
||||||
dir: true,
|
dir: true,
|
||||||
linux: ['deb', 'rpm', 'tar.gz'],
|
linux: ['snap', 'deb', 'rpm', 'tar.gz'],
|
||||||
|
config: {
|
||||||
extraMetadata: {
|
extraMetadata: {
|
||||||
version: vars.version,
|
version: vars.version,
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
publish: 'onTag',
|
||||||
})
|
})
|
||||||
|
@@ -5,7 +5,10 @@ const vars = require('./vars')
|
|||||||
builder({
|
builder({
|
||||||
dir: true,
|
dir: true,
|
||||||
mac: ['dmg'],
|
mac: ['dmg'],
|
||||||
|
config: {
|
||||||
extraMetadata: {
|
extraMetadata: {
|
||||||
version: vars.version,
|
version: vars.version,
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
publish: 'onTag',
|
||||||
})
|
})
|
||||||
|
@@ -3,7 +3,25 @@ const rebuild = require('electron-rebuild').default
|
|||||||
const path = require('path')
|
const path = require('path')
|
||||||
const vars = require('./vars')
|
const vars = require('./vars')
|
||||||
|
|
||||||
let buildPath = path.resolve(__dirname, '../terminus-terminal')
|
lifecycles = []
|
||||||
rebuild(buildPath, vars.electronVersion, process.arch, [], true).then(() => {
|
lifecycles.push(rebuild({
|
||||||
console.log('Done')
|
buildPath: path.resolve(__dirname, '../app'),
|
||||||
|
electronVersion: vars.electronVersion,
|
||||||
|
force: true,
|
||||||
|
}).lifecycle)
|
||||||
|
lifecycles.push(rebuild({
|
||||||
|
buildPath: path.resolve(__dirname, '../terminus-ssh'),
|
||||||
|
electronVersion: vars.electronVersion,
|
||||||
|
force: true,
|
||||||
|
}).lifecycle)
|
||||||
|
lifecycles.push(rebuild({
|
||||||
|
buildPath: path.resolve(__dirname, '../terminus-terminal'),
|
||||||
|
electronVersion: vars.electronVersion,
|
||||||
|
force: true,
|
||||||
|
}).lifecycle)
|
||||||
|
|
||||||
|
for (let lc of lifecycles) {
|
||||||
|
lc.on('module-found', name => {
|
||||||
|
console.info('Rebuilding', name)
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
@@ -5,7 +5,10 @@ const vars = require('./vars')
|
|||||||
builder({
|
builder({
|
||||||
dir: true,
|
dir: true,
|
||||||
win: ['squirrel'],
|
win: ['squirrel'],
|
||||||
|
config: {
|
||||||
extraMetadata: {
|
extraMetadata: {
|
||||||
version: vars.version,
|
version: vars.version,
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
publish: 'onTag',
|
||||||
})
|
})
|
||||||
|
@@ -4,22 +4,30 @@ const path = require('path')
|
|||||||
const vars = require('./vars')
|
const vars = require('./vars')
|
||||||
const log = require('npmlog')
|
const log = require('npmlog')
|
||||||
|
|
||||||
|
const localBinPath = path.resolve(__dirname, '../node_modules/.bin');
|
||||||
|
const npx = `${localBinPath}/npx`;
|
||||||
|
|
||||||
log.info('deps', 'app')
|
log.info('deps', 'app')
|
||||||
sh.exec('npm prune')
|
sh.exec(`${npx} yarn install`)
|
||||||
sh.exec('npm install')
|
|
||||||
sh.exec('npm update --dev')
|
|
||||||
|
|
||||||
sh.cd('app')
|
sh.cd('app')
|
||||||
sh.exec('npm prune')
|
sh.exec(`${npx} yarn install`)
|
||||||
sh.exec('npm install')
|
|
||||||
sh.exec('npm update --dev')
|
|
||||||
sh.cd('..')
|
sh.cd('..')
|
||||||
|
|
||||||
vars.builtinPlugins.forEach(plugin => {
|
vars.builtinPlugins.forEach(plugin => {
|
||||||
log.info('deps', plugin)
|
log.info('deps', plugin)
|
||||||
sh.cd(plugin)
|
sh.cd(plugin)
|
||||||
sh.exec('npm prune')
|
sh.exec(`${npx} yarn install`)
|
||||||
sh.exec('npm install')
|
|
||||||
sh.exec('npm update --dev')
|
|
||||||
sh.cd('..')
|
sh.cd('..')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (['darwin', 'linux'].includes(process.platform)) {
|
||||||
|
sh.cd('node_modules')
|
||||||
|
for (let x of vars.builtinPlugins) {
|
||||||
|
sh.ln('-fs', '../' + x, x)
|
||||||
|
}
|
||||||
|
for (let x of vars.bundledModules) {
|
||||||
|
sh.ln('-fs', '../app/node_modules/' + x, x)
|
||||||
|
}
|
||||||
|
sh.cd('..')
|
||||||
|
}
|
||||||
|
@@ -22,3 +22,4 @@ vars.builtinPlugins.forEach(plugin => {
|
|||||||
}
|
}
|
||||||
sh.cd('..')
|
sh.cd('..')
|
||||||
})
|
})
|
||||||
|
fs.unlinkSync(path.join(target, 'package.json'), '{}')
|
||||||
|
11
scripts/set-plugin-versions.js
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
const sh = require('shelljs')
|
||||||
|
const vars = require('./vars')
|
||||||
|
const log = require('npmlog')
|
||||||
|
|
||||||
|
vars.builtinPlugins.forEach(plugin => {
|
||||||
|
log.info('bump', plugin)
|
||||||
|
sh.cd(plugin)
|
||||||
|
sh.exec('npm --no-git-tag-version version ' + vars.version)
|
||||||
|
sh.cd('..')
|
||||||
|
})
|
@@ -1,16 +1,24 @@
|
|||||||
const path = require('path')
|
const path = require('path')
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
|
const childProcess = require('child_process')
|
||||||
|
|
||||||
const appInfo = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../app/package.json')))
|
const appInfo = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../app/package.json')))
|
||||||
const pkgInfo = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../package.json')))
|
const pkgInfo = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../package.json')))
|
||||||
|
|
||||||
|
exports.version = childProcess.execSync('git describe --tags', {encoding:'utf-8'})
|
||||||
|
exports.version = exports.version.substring(1, exports.version.length - 1)
|
||||||
|
|
||||||
exports.builtinPlugins = [
|
exports.builtinPlugins = [
|
||||||
'terminus-core',
|
'terminus-core',
|
||||||
'terminus-settings',
|
'terminus-settings',
|
||||||
'terminus-terminal',
|
'terminus-terminal',
|
||||||
'terminus-community-color-schemes',
|
'terminus-community-color-schemes',
|
||||||
'terminus-plugin-manager',
|
'terminus-plugin-manager',
|
||||||
|
'terminus-ssh',
|
||||||
]
|
]
|
||||||
exports.nativeModules = ['node-pty', 'font-manager']
|
exports.bundledModules = [
|
||||||
exports.version = appInfo.version
|
'@angular',
|
||||||
|
'@ng-bootstrap',
|
||||||
|
]
|
||||||
|
exports.nativeModules = ['node-pty-tmp', 'font-manager', 'xkeychain', 'electron-vibrancy']
|
||||||
exports.electronVersion = pkgInfo.devDependencies.electron
|
exports.electronVersion = pkgInfo.devDependencies.electron
|
||||||
|
@@ -1,7 +1,10 @@
|
|||||||
{
|
{
|
||||||
"name": "terminus-community-color-schemes",
|
"name": "terminus-community-color-schemes",
|
||||||
"version": "0.0.1",
|
"version": "1.0.0-alpha.48",
|
||||||
"description": "Community color schemes for Terminus",
|
"description": "Community color schemes for Terminus",
|
||||||
|
"keywords": [
|
||||||
|
"terminus-builtin-plugin"
|
||||||
|
],
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"typings": "dist/index.d.ts",
|
"typings": "dist/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
54
terminus-community-color-schemes/schemes/Base16 Default Dark
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
! Base16 Default Dark
|
||||||
|
! Scheme: Chris Kempson (http://chriskempson.com)
|
||||||
|
|
||||||
|
#define base00 #181818
|
||||||
|
#define base01 #282828
|
||||||
|
#define base02 #383838
|
||||||
|
#define base03 #585858
|
||||||
|
#define base04 #b8b8b8
|
||||||
|
#define base05 #d8d8d8
|
||||||
|
#define base06 #e8e8e8
|
||||||
|
#define base07 #f8f8f8
|
||||||
|
#define base08 #ab4642
|
||||||
|
#define base09 #dc9656
|
||||||
|
#define base0A #f7ca88
|
||||||
|
#define base0B #a1b56c
|
||||||
|
#define base0C #86c1b9
|
||||||
|
#define base0D #7cafc2
|
||||||
|
#define base0E #ba8baf
|
||||||
|
#define base0F #a16946
|
||||||
|
|
||||||
|
*.foreground: base05
|
||||||
|
#ifdef background_opacity
|
||||||
|
*.background: [background_opacity]base00
|
||||||
|
#else
|
||||||
|
*.background: base00
|
||||||
|
#endif
|
||||||
|
*.cursorColor: base05
|
||||||
|
|
||||||
|
*.color0: base00
|
||||||
|
*.color1: base08
|
||||||
|
*.color2: base0B
|
||||||
|
*.color3: base0A
|
||||||
|
*.color4: base0D
|
||||||
|
*.color5: base0E
|
||||||
|
*.color6: base0C
|
||||||
|
*.color7: base05
|
||||||
|
|
||||||
|
*.color8: base03
|
||||||
|
*.color9: base08
|
||||||
|
*.color10: base0B
|
||||||
|
*.color11: base0A
|
||||||
|
*.color12: base0D
|
||||||
|
*.color13: base0E
|
||||||
|
*.color14: base0C
|
||||||
|
*.color15: base07
|
||||||
|
|
||||||
|
! Note: colors beyond 15 might not be loaded (e.g., xterm, urxvt),
|
||||||
|
! use 'shell' template to set these if necessary
|
||||||
|
*.color16: base09
|
||||||
|
*.color17: base0F
|
||||||
|
*.color18: base01
|
||||||
|
*.color19: base02
|
||||||
|
*.color20: base04
|
||||||
|
*.color21: base06
|
36
terminus-community-color-schemes/schemes/Tango
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
! special
|
||||||
|
*.foreground: #babdb6
|
||||||
|
*.background: #000000
|
||||||
|
*.cursorColor: #babdb6
|
||||||
|
|
||||||
|
! black
|
||||||
|
*.color0: #2e3436
|
||||||
|
*.color8: #555753
|
||||||
|
|
||||||
|
! red
|
||||||
|
*.color1: #cc0000
|
||||||
|
*.color9: #ef2929
|
||||||
|
|
||||||
|
! green
|
||||||
|
*.color2: #4e9a06
|
||||||
|
*.color10: #8ae234
|
||||||
|
|
||||||
|
! yellow
|
||||||
|
*.color3: #c4a000
|
||||||
|
*.color11: #fce94f
|
||||||
|
|
||||||
|
! blue
|
||||||
|
*.color4: #3465a4
|
||||||
|
*.color12: #729fcf
|
||||||
|
|
||||||
|
! magenta
|
||||||
|
*.color5: #75507b
|
||||||
|
*.color13: #ad7fa8
|
||||||
|
|
||||||
|
! cyan
|
||||||
|
*.color6: #06989a
|
||||||
|
*.color14: #34e2e2
|
||||||
|
|
||||||
|
! white
|
||||||
|
*.color7: #d3d7cf
|
||||||
|
*.color15: #eeeeec
|
44
terminus-community-color-schemes/schemes/base2tone-cave-dark
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
!
|
||||||
|
! Generated with :
|
||||||
|
! XRDB2Xrecources.py
|
||||||
|
!
|
||||||
|
*.foreground: #9f999b
|
||||||
|
*.background: #222021
|
||||||
|
*.cursorColor: #996e00
|
||||||
|
!
|
||||||
|
! Black
|
||||||
|
*.color0: #222021
|
||||||
|
*.color8: #635f60
|
||||||
|
!
|
||||||
|
! Red
|
||||||
|
*.color1: #936c7a
|
||||||
|
*.color9: #ddaf3c
|
||||||
|
!
|
||||||
|
! Green
|
||||||
|
*.color2: #cca133
|
||||||
|
*.color10: #2f2d2e
|
||||||
|
!
|
||||||
|
! Yellow
|
||||||
|
*.color3: #ffcc4d
|
||||||
|
*.color11: #565254
|
||||||
|
!
|
||||||
|
! Blue
|
||||||
|
*.color4: #9c818b
|
||||||
|
*.color12: #706b6d
|
||||||
|
!
|
||||||
|
! Magenta
|
||||||
|
*.color5: #cca133
|
||||||
|
*.color13: #f0a8c1
|
||||||
|
!
|
||||||
|
! Cyan
|
||||||
|
*.color6: #d27998
|
||||||
|
*.color14: #c39622
|
||||||
|
!
|
||||||
|
! White
|
||||||
|
*.color7: #9f999b
|
||||||
|
*.color15: #ffebf2
|
||||||
|
!
|
||||||
|
! Bold, Italic, Underline
|
||||||
|
*.colorBD: #9f999b
|
||||||
|
!*.colorIT:
|
||||||
|
!*.colorUL:
|
@@ -0,0 +1,44 @@
|
|||||||
|
!
|
||||||
|
! Generated with :
|
||||||
|
! XRDB2Xrecources.py
|
||||||
|
!
|
||||||
|
*.foreground: #ada594
|
||||||
|
*.background: #292724
|
||||||
|
*.cursorColor: #bc672f
|
||||||
|
!
|
||||||
|
! Black
|
||||||
|
*.color0: #292724
|
||||||
|
*.color8: #7e7767
|
||||||
|
!
|
||||||
|
! Red
|
||||||
|
*.color1: #816f4b
|
||||||
|
*.color9: #f29d63
|
||||||
|
!
|
||||||
|
! Green
|
||||||
|
*.color2: #ec9255
|
||||||
|
*.color10: #3d3a34
|
||||||
|
!
|
||||||
|
! Yellow
|
||||||
|
*.color3: #ffb380
|
||||||
|
*.color11: #615c51
|
||||||
|
!
|
||||||
|
! Blue
|
||||||
|
*.color4: #957e50
|
||||||
|
*.color12: #908774
|
||||||
|
!
|
||||||
|
! Magenta
|
||||||
|
*.color5: #ec9255
|
||||||
|
*.color13: #ddcba6
|
||||||
|
!
|
||||||
|
! Cyan
|
||||||
|
*.color6: #ac8e53
|
||||||
|
*.color14: #e58748
|
||||||
|
!
|
||||||
|
! White
|
||||||
|
*.color7: #ada594
|
||||||
|
*.color15: #f2ead9
|
||||||
|
!
|
||||||
|
! Bold, Italic, Underline
|
||||||
|
*.colorBD: #ada594
|
||||||
|
!*.colorIT:
|
||||||
|
!*.colorUL:
|
@@ -0,0 +1,44 @@
|
|||||||
|
!
|
||||||
|
! Generated with :
|
||||||
|
! XRDB2Xrecources.py
|
||||||
|
!
|
||||||
|
*.foreground: #9094a7
|
||||||
|
*.background: #1b1f32
|
||||||
|
*.cursorColor: #289dbd
|
||||||
|
!
|
||||||
|
! Black
|
||||||
|
*.color0: #1b1f32
|
||||||
|
*.color8: #51587b
|
||||||
|
!
|
||||||
|
! Red
|
||||||
|
*.color1: #627af4
|
||||||
|
*.color9: #75d5f0
|
||||||
|
!
|
||||||
|
! Green
|
||||||
|
*.color2: #67c9e4
|
||||||
|
*.color10: #252a41
|
||||||
|
!
|
||||||
|
! Yellow
|
||||||
|
*.color3: #99e9ff
|
||||||
|
*.color11: #444b6f
|
||||||
|
!
|
||||||
|
! Blue
|
||||||
|
*.color4: #7289fd
|
||||||
|
*.color12: #5e6587
|
||||||
|
!
|
||||||
|
! Magenta
|
||||||
|
*.color5: #67c9e4
|
||||||
|
*.color13: #c3cdfe
|
||||||
|
!
|
||||||
|
! Cyan
|
||||||
|
*.color6: #8b9efd
|
||||||
|
*.color14: #5cbcd6
|
||||||
|
!
|
||||||
|
! White
|
||||||
|
*.color7: #9094a7
|
||||||
|
*.color15: #e1e6ff
|
||||||
|
!
|
||||||
|
! Bold, Italic, Underline
|
||||||
|
*.colorBD: #9094a7
|
||||||
|
!*.colorIT:
|
||||||
|
!*.colorUL:
|
@@ -0,0 +1,44 @@
|
|||||||
|
!
|
||||||
|
! Generated with :
|
||||||
|
! XRDB2Xrecources.py
|
||||||
|
!
|
||||||
|
*.foreground: #a4a1b5
|
||||||
|
*.background: #2a2734
|
||||||
|
*.cursorColor: #b37537
|
||||||
|
!
|
||||||
|
! Black
|
||||||
|
*.color0: #2a2734
|
||||||
|
*.color8: #6c6783
|
||||||
|
!
|
||||||
|
! Red
|
||||||
|
*.color1: #8a75f5
|
||||||
|
*.color9: #ffb870
|
||||||
|
!
|
||||||
|
! Green
|
||||||
|
*.color2: #ffad5c
|
||||||
|
*.color10: #363342
|
||||||
|
!
|
||||||
|
! Yellow
|
||||||
|
*.color3: #ffcc99
|
||||||
|
*.color11: #545167
|
||||||
|
!
|
||||||
|
! Blue
|
||||||
|
*.color4: #9a86fd
|
||||||
|
*.color12: #787391
|
||||||
|
!
|
||||||
|
! Magenta
|
||||||
|
*.color5: #ffad5c
|
||||||
|
*.color13: #d9d2fe
|
||||||
|
!
|
||||||
|
! Cyan
|
||||||
|
*.color6: #afa0fe
|
||||||
|
*.color14: #ffa142
|
||||||
|
!
|
||||||
|
! White
|
||||||
|
*.color7: #a4a1b5
|
||||||
|
*.color15: #eeebff
|
||||||
|
!
|
||||||
|
! Bold, Italic, Underline
|
||||||
|
*.colorBD: #a4a1b5
|
||||||
|
!*.colorIT:
|
||||||
|
!*.colorUL:
|
@@ -0,0 +1,44 @@
|
|||||||
|
!
|
||||||
|
! Generated with :
|
||||||
|
! XRDB2Xrecources.py
|
||||||
|
!
|
||||||
|
*.foreground: #a1b5a1
|
||||||
|
*.background: #2a2d2a
|
||||||
|
*.cursorColor: #656b47
|
||||||
|
!
|
||||||
|
! Black
|
||||||
|
*.color0: #2a2d2a
|
||||||
|
*.color8: #535f53
|
||||||
|
!
|
||||||
|
! Red
|
||||||
|
*.color1: #5c705c
|
||||||
|
*.color9: #cbe25a
|
||||||
|
!
|
||||||
|
! Green
|
||||||
|
*.color2: #bfd454
|
||||||
|
*.color10: #353b35
|
||||||
|
!
|
||||||
|
! Yellow
|
||||||
|
*.color3: #e5fb79
|
||||||
|
*.color11: #485148
|
||||||
|
!
|
||||||
|
! Blue
|
||||||
|
*.color4: #687d68
|
||||||
|
*.color12: #5e6e5e
|
||||||
|
!
|
||||||
|
! Magenta
|
||||||
|
*.color5: #bfd454
|
||||||
|
*.color13: #c8e4c8
|
||||||
|
!
|
||||||
|
! Cyan
|
||||||
|
*.color6: #8fae8f
|
||||||
|
*.color14: #b1c44f
|
||||||
|
!
|
||||||
|
! White
|
||||||
|
*.color7: #a1b5a1
|
||||||
|
*.color15: #f0fff0
|
||||||
|
!
|
||||||
|
! Bold, Italic, Underline
|
||||||
|
*.colorBD: #a1b5a1
|
||||||
|
!*.colorIT:
|
||||||
|
!*.colorUL:
|
@@ -0,0 +1,44 @@
|
|||||||
|
!
|
||||||
|
! Generated with :
|
||||||
|
! XRDB2Xrecources.py
|
||||||
|
!
|
||||||
|
*.foreground: #9e999f
|
||||||
|
*.background: #222022
|
||||||
|
*.cursorColor: #995900
|
||||||
|
!
|
||||||
|
! Black
|
||||||
|
*.color0: #222022
|
||||||
|
*.color8: #635f63
|
||||||
|
!
|
||||||
|
! Red
|
||||||
|
*.color1: #8f6c93
|
||||||
|
*.color9: #d9b98c
|
||||||
|
!
|
||||||
|
! Green
|
||||||
|
*.color2: #cc8c33
|
||||||
|
*.color10: #2f2d2f
|
||||||
|
!
|
||||||
|
! Yellow
|
||||||
|
*.color3: #ffd599
|
||||||
|
*.color11: #575158
|
||||||
|
!
|
||||||
|
! Blue
|
||||||
|
*.color4: #9a819c
|
||||||
|
*.color12: #6f6b70
|
||||||
|
!
|
||||||
|
! Magenta
|
||||||
|
*.color5: #cc8c33
|
||||||
|
*.color13: #eaa8f0
|
||||||
|
!
|
||||||
|
! Cyan
|
||||||
|
*.color6: #cb79d2
|
||||||
|
*.color14: #c38022
|
||||||
|
!
|
||||||
|
! White
|
||||||
|
*.color7: #9e999f
|
||||||
|
*.color15: #fdebff
|
||||||
|
!
|
||||||
|
! Bold, Italic, Underline
|
||||||
|
*.colorBD: #9e999f
|
||||||
|
!*.colorIT:
|
||||||
|
!*.colorUL:
|
@@ -0,0 +1,44 @@
|
|||||||
|
!
|
||||||
|
! Generated with :
|
||||||
|
! XRDB2Xrecources.py
|
||||||
|
!
|
||||||
|
*.foreground: #575158
|
||||||
|
*.background: #fbfaf9
|
||||||
|
*.cursorColor: #eaa8f0
|
||||||
|
!
|
||||||
|
! Black
|
||||||
|
*.color0: #222022
|
||||||
|
*.color8: #635f63
|
||||||
|
!
|
||||||
|
! Red
|
||||||
|
*.color1: #8f6c93
|
||||||
|
*.color9: #d9b98c
|
||||||
|
!
|
||||||
|
! Green
|
||||||
|
*.color2: #cc8c33
|
||||||
|
*.color10: #2f2d2f
|
||||||
|
!
|
||||||
|
! Yellow
|
||||||
|
*.color3: #ffd599
|
||||||
|
*.color11: #575158
|
||||||
|
!
|
||||||
|
! Blue
|
||||||
|
*.color4: #9a819c
|
||||||
|
*.color12: #6f6b70
|
||||||
|
!
|
||||||
|
! Magenta
|
||||||
|
*.color5: #b87414
|
||||||
|
*.color13: #eaa8f0
|
||||||
|
!
|
||||||
|
! Cyan
|
||||||
|
*.color6: #cb79d2
|
||||||
|
*.color14: #c38022
|
||||||
|
!
|
||||||
|
! White
|
||||||
|
*.color7: #9e999f
|
||||||
|
*.color15: #fbfaf9
|
||||||
|
!
|
||||||
|
! Bold, Italic, Underline
|
||||||
|
*.colorBD: #575158
|
||||||
|
!*.colorIT:
|
||||||
|
!*.colorUL:
|
44
terminus-community-color-schemes/schemes/base2tone-lake-dark
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
!
|
||||||
|
! Generated with :
|
||||||
|
! XRDB2Xrecources.py
|
||||||
|
!
|
||||||
|
*.foreground: #7ba8b7
|
||||||
|
*.background: #192d34
|
||||||
|
*.cursorColor: #84740b
|
||||||
|
!
|
||||||
|
! Black
|
||||||
|
*.color0: #192d34
|
||||||
|
*.color8: #3d6876
|
||||||
|
!
|
||||||
|
! Red
|
||||||
|
*.color1: #3e91ac
|
||||||
|
*.color9: #d6c65c
|
||||||
|
!
|
||||||
|
! Green
|
||||||
|
*.color2: #cbbb4d
|
||||||
|
*.color10: #223c44
|
||||||
|
!
|
||||||
|
! Yellow
|
||||||
|
*.color3: #ffeb66
|
||||||
|
*.color11: #335966
|
||||||
|
!
|
||||||
|
! Blue
|
||||||
|
*.color4: #499fbc
|
||||||
|
*.color12: #467686
|
||||||
|
!
|
||||||
|
! Magenta
|
||||||
|
*.color5: #cbbb4d
|
||||||
|
*.color13: #a5d8e9
|
||||||
|
!
|
||||||
|
! Cyan
|
||||||
|
*.color6: #62b1cb
|
||||||
|
*.color14: #c4b031
|
||||||
|
!
|
||||||
|
! White
|
||||||
|
*.color7: #7ba8b7
|
||||||
|
*.color15: #e1f7ff
|
||||||
|
!
|
||||||
|
! Bold, Italic, Underline
|
||||||
|
*.colorBD: #7ba8b7
|
||||||
|
!*.colorIT:
|
||||||
|
!*.colorUL:
|
@@ -0,0 +1,44 @@
|
|||||||
|
!
|
||||||
|
! Generated with :
|
||||||
|
! XRDB2Xrecources.py
|
||||||
|
!
|
||||||
|
*.foreground: #7b9eb7
|
||||||
|
*.background: #192834
|
||||||
|
*.cursorColor: #4d8217
|
||||||
|
!
|
||||||
|
! Black
|
||||||
|
*.color0: #192834
|
||||||
|
*.color8: #3d5e76
|
||||||
|
!
|
||||||
|
! Red
|
||||||
|
*.color1: #277fbe
|
||||||
|
*.color9: #8cdd3c
|
||||||
|
!
|
||||||
|
! Green
|
||||||
|
*.color2: #80bf40
|
||||||
|
*.color10: #223644
|
||||||
|
!
|
||||||
|
! Yellow
|
||||||
|
*.color3: #a6f655
|
||||||
|
*.color11: #335166
|
||||||
|
!
|
||||||
|
! Blue
|
||||||
|
*.color4: #4299d7
|
||||||
|
*.color12: #466b86
|
||||||
|
!
|
||||||
|
! Magenta
|
||||||
|
*.color5: #80bf40
|
||||||
|
*.color13: #afddfe
|
||||||
|
!
|
||||||
|
! Cyan
|
||||||
|
*.color6: #47adf5
|
||||||
|
*.color14: #73b234
|
||||||
|
!
|
||||||
|
! White
|
||||||
|
*.color7: #7b9eb7
|
||||||
|
*.color15: #d1ecff
|
||||||
|
!
|
||||||
|
! Bold, Italic, Underline
|
||||||
|
*.colorBD: #7b9eb7
|
||||||
|
!*.colorIT:
|
||||||
|
!*.colorUL:
|
@@ -0,0 +1,44 @@
|
|||||||
|
!
|
||||||
|
! Generated with :
|
||||||
|
! XRDB2Xrecources.py
|
||||||
|
!
|
||||||
|
*.foreground: #4f5664
|
||||||
|
*.background: #faf8f5
|
||||||
|
*.cursorColor: #b7c9eb
|
||||||
|
!
|
||||||
|
! Black
|
||||||
|
*.color0: #232834
|
||||||
|
*.color8: #656e81
|
||||||
|
!
|
||||||
|
! Red
|
||||||
|
*.color1: #1659df
|
||||||
|
*.color9: #c6b28b
|
||||||
|
!
|
||||||
|
! Green
|
||||||
|
*.color2: #b29762
|
||||||
|
*.color10: #31363f
|
||||||
|
!
|
||||||
|
! Yellow
|
||||||
|
*.color3: #e5ddcd
|
||||||
|
*.color11: #4f5664
|
||||||
|
!
|
||||||
|
! Blue
|
||||||
|
*.color4: #3d75e6
|
||||||
|
*.color12: #707a8f
|
||||||
|
!
|
||||||
|
! Magenta
|
||||||
|
*.color5: #896724
|
||||||
|
*.color13: #b7c9eb
|
||||||
|
!
|
||||||
|
! Cyan
|
||||||
|
*.color6: #728fcb
|
||||||
|
*.color14: #9a7c42
|
||||||
|
!
|
||||||
|
! White
|
||||||
|
*.color7: #8d95a5
|
||||||
|
*.color15: #faf8f5
|
||||||
|
!
|
||||||
|
! Bold, Italic, Underline
|
||||||
|
*.colorBD: #4f5664
|
||||||
|
!*.colorIT:
|
||||||
|
!*.colorUL:
|
44
terminus-community-color-schemes/schemes/base2tone-pool-dark
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
!
|
||||||
|
! Generated with :
|
||||||
|
! XRDB2Xrecources.py
|
||||||
|
!
|
||||||
|
*.foreground: #9a90a7
|
||||||
|
*.background: #2a2433
|
||||||
|
*.cursorColor: #cf504a
|
||||||
|
!
|
||||||
|
! Black
|
||||||
|
*.color0: #2a2433
|
||||||
|
*.color8: #635775
|
||||||
|
!
|
||||||
|
! Red
|
||||||
|
*.color1: #aa75f5
|
||||||
|
*.color9: #fc8983
|
||||||
|
!
|
||||||
|
! Green
|
||||||
|
*.color2: #f87972
|
||||||
|
*.color10: #372f42
|
||||||
|
!
|
||||||
|
! Yellow
|
||||||
|
*.color3: #ffb6b3
|
||||||
|
*.color11: #574b68
|
||||||
|
!
|
||||||
|
! Blue
|
||||||
|
*.color4: #b886fd
|
||||||
|
*.color12: #706383
|
||||||
|
!
|
||||||
|
! Magenta
|
||||||
|
*.color5: #f87972
|
||||||
|
*.color13: #e4d2fe
|
||||||
|
!
|
||||||
|
! Cyan
|
||||||
|
*.color6: #c7a0fe
|
||||||
|
*.color14: #f36f68
|
||||||
|
!
|
||||||
|
! White
|
||||||
|
*.color7: #9a90a7
|
||||||
|
*.color15: #f3ebff
|
||||||
|
!
|
||||||
|
! Bold, Italic, Underline
|
||||||
|
*.colorBD: #9a90a7
|
||||||
|
!*.colorIT:
|
||||||
|
!*.colorUL:
|
44
terminus-community-color-schemes/schemes/base2tone-sea-dark
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
!
|
||||||
|
! Generated with :
|
||||||
|
! XRDB2Xrecources.py
|
||||||
|
!
|
||||||
|
*.foreground: #a1aab5
|
||||||
|
*.background: #1d262f
|
||||||
|
*.cursorColor: #067953
|
||||||
|
!
|
||||||
|
! Black
|
||||||
|
*.color0: #1d262f
|
||||||
|
*.color8: #4a5f78
|
||||||
|
!
|
||||||
|
! Red
|
||||||
|
*.color1: #34659d
|
||||||
|
*.color9: #14e19d
|
||||||
|
!
|
||||||
|
! Green
|
||||||
|
*.color2: #0fc78a
|
||||||
|
*.color10: #27323f
|
||||||
|
!
|
||||||
|
! Yellow
|
||||||
|
*.color3: #47ebb4
|
||||||
|
*.color11: #405368
|
||||||
|
!
|
||||||
|
! Blue
|
||||||
|
*.color4: #57718e
|
||||||
|
*.color12: #738191
|
||||||
|
!
|
||||||
|
! Magenta
|
||||||
|
*.color5: #0fc78a
|
||||||
|
*.color13: #afd4fe
|
||||||
|
!
|
||||||
|
! Cyan
|
||||||
|
*.color6: #6e9bcf
|
||||||
|
*.color14: #0db57d
|
||||||
|
!
|
||||||
|
! White
|
||||||
|
*.color7: #a1aab5
|
||||||
|
*.color15: #ebf4ff
|
||||||
|
!
|
||||||
|
! Bold, Italic, Underline
|
||||||
|
*.colorBD: #a1aab5
|
||||||
|
!*.colorIT:
|
||||||
|
!*.colorUL:
|
@@ -0,0 +1,44 @@
|
|||||||
|
!
|
||||||
|
! Generated with :
|
||||||
|
! XRDB2Xrecources.py
|
||||||
|
!
|
||||||
|
*.foreground: #a1a1b5
|
||||||
|
*.background: #24242e
|
||||||
|
*.cursorColor: #b25424
|
||||||
|
!
|
||||||
|
! Black
|
||||||
|
*.color0: #24242e
|
||||||
|
*.color8: #5b5b76
|
||||||
|
!
|
||||||
|
! Red
|
||||||
|
*.color1: #7676f4
|
||||||
|
*.color9: #f37b3f
|
||||||
|
!
|
||||||
|
! Green
|
||||||
|
*.color2: #ec7336
|
||||||
|
*.color10: #333342
|
||||||
|
!
|
||||||
|
! Yellow
|
||||||
|
*.color3: #fe8c52
|
||||||
|
*.color11: #515167
|
||||||
|
!
|
||||||
|
! Blue
|
||||||
|
*.color4: #767693
|
||||||
|
*.color12: #737391
|
||||||
|
!
|
||||||
|
! Magenta
|
||||||
|
*.color5: #ec7336
|
||||||
|
*.color13: #cecee3
|
||||||
|
!
|
||||||
|
! Cyan
|
||||||
|
*.color6: #8a8aad
|
||||||
|
*.color14: #e66e33
|
||||||
|
!
|
||||||
|
! White
|
||||||
|
*.color7: #a1a1b5
|
||||||
|
*.color15: #ebebff
|
||||||
|
!
|
||||||
|
! Bold, Italic, Underline
|
||||||
|
*.colorBD: #a1a1b5
|
||||||
|
!*.colorIT:
|
||||||
|
!*.colorUL:
|
@@ -10,38 +10,38 @@ export class ColorSchemes extends TerminalColorSchemeProvider {
|
|||||||
|
|
||||||
schemeContents.keys().forEach(schemeFile => {
|
schemeContents.keys().forEach(schemeFile => {
|
||||||
let lines = (schemeContents(schemeFile) as string).split('\n')
|
let lines = (schemeContents(schemeFile) as string).split('\n')
|
||||||
|
|
||||||
|
// process #define variables
|
||||||
|
let variables: any = {}
|
||||||
|
lines
|
||||||
|
.filter(x => x.startsWith('#define'))
|
||||||
|
.map(x => x.split(' ').map(v => v.trim()))
|
||||||
|
.forEach(([ignore, variableName, variableValue]) => {
|
||||||
|
variables[variableName] = variableValue
|
||||||
|
})
|
||||||
|
|
||||||
let values: any = {}
|
let values: any = {}
|
||||||
lines
|
lines
|
||||||
.filter(x => x.startsWith('*.'))
|
.filter(x => x.startsWith('*.'))
|
||||||
.map(x => x.substring(2))
|
.map(x => x.substring(2))
|
||||||
.map(x => x.split(':').map(v => v.trim()))
|
.map(x => x.split(':').map(v => v.trim()))
|
||||||
.forEach(([key, value]) => {
|
.forEach(([key, value]) => {
|
||||||
values[key] = value
|
values[key] = variables[value] ? variables[value] : value
|
||||||
})
|
})
|
||||||
|
|
||||||
|
let colors: string[] = []
|
||||||
|
let colorIndex = 0
|
||||||
|
while (values[`color${colorIndex}`]) {
|
||||||
|
colors.push(values[`color${colorIndex}`])
|
||||||
|
colorIndex++
|
||||||
|
}
|
||||||
|
|
||||||
schemes.push({
|
schemes.push({
|
||||||
name: schemeFile.split('/')[1].trim(),
|
name: schemeFile.split('/')[1].trim(),
|
||||||
foreground: values.foreground,
|
foreground: values.foreground,
|
||||||
background: values.background,
|
background: values.background,
|
||||||
cursor: values.cursorColor,
|
cursor: values.cursorColor,
|
||||||
colors: [
|
colors,
|
||||||
values.color0,
|
|
||||||
values.color1,
|
|
||||||
values.color2,
|
|
||||||
values.color3,
|
|
||||||
values.color4,
|
|
||||||
values.color5,
|
|
||||||
values.color6,
|
|
||||||
values.color7,
|
|
||||||
values.color8,
|
|
||||||
values.color9,
|
|
||||||
values.color10,
|
|
||||||
values.color11,
|
|
||||||
values.color12,
|
|
||||||
values.color13,
|
|
||||||
values.color14,
|
|
||||||
values.color15,
|
|
||||||
],
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@@ -18,9 +18,10 @@ module.exports = {
|
|||||||
extensions: ['.ts', '.js'],
|
extensions: ['.ts', '.js'],
|
||||||
},
|
},
|
||||||
module: {
|
module: {
|
||||||
loaders: [
|
rules: [
|
||||||
{
|
{
|
||||||
test: /\.ts$/,
|
test: /\.ts$/,
|
||||||
|
use: {
|
||||||
loader: 'awesome-typescript-loader',
|
loader: 'awesome-typescript-loader',
|
||||||
options: {
|
options: {
|
||||||
configFileName: path.resolve(__dirname, 'tsconfig.json'),
|
configFileName: path.resolve(__dirname, 'tsconfig.json'),
|
||||||
@@ -30,8 +31,9 @@ module.exports = {
|
|||||||
"*": [path.resolve(__dirname, '../app/node_modules/*')],
|
"*": [path.resolve(__dirname, '../app/node_modules/*')],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{ test: /[\\\/]schemes[\\\/]/, loader: "raw-loader" },
|
{ test: /[\\\/]schemes[\\\/]/, use: "raw-loader" },
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
externals: [
|
externals: [
|
||||||
|
11
terminus-community-color-schemes/yarn.lock
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@types/node@7.0.12":
|
||||||
|
version "7.0.12"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.12.tgz#ae5f67a19c15f752148004db07cbbb372e69efc9"
|
||||||
|
|
||||||
|
"@types/webpack-env@^1.13.0":
|
||||||
|
version "1.13.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.1.tgz#b45c222e24301bd006e3edfc762cc6b51bda236a"
|
@@ -1,7 +1,10 @@
|
|||||||
{
|
{
|
||||||
"name": "terminus-core",
|
"name": "terminus-core",
|
||||||
"version": "0.0.1",
|
"version": "1.0.0-alpha.48",
|
||||||
"description": "Terminus core",
|
"description": "Terminus core",
|
||||||
|
"keywords": [
|
||||||
|
"terminus-builtin-plugin"
|
||||||
|
],
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"typings": "dist/index.d.ts",
|
"typings": "dist/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -14,14 +17,16 @@
|
|||||||
"author": "Eugene Pankov",
|
"author": "Eugene Pankov",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ng-bootstrap/ng-bootstrap": "1.0.0-alpha.22",
|
"@types/js-yaml": "^3.9.0",
|
||||||
"@types/js-yaml": "^3.5.29",
|
"@types/node": "^7.0.37",
|
||||||
"@types/node": "^7.0.12",
|
|
||||||
"@types/webpack-env": "^1.13.0",
|
"@types/webpack-env": "^1.13.0",
|
||||||
|
"@types/winston": "^2.3.6",
|
||||||
|
"axios": "0.16.2",
|
||||||
"bootstrap": "4.0.0-alpha.6",
|
"bootstrap": "4.0.0-alpha.6",
|
||||||
"core-js": "^2.4.1",
|
"core-js": "^2.4.1",
|
||||||
"ngx-perfect-scrollbar": "4.0.0",
|
"electron-updater": "^2.8.9",
|
||||||
"typescript": "^2.4.0"
|
"ng2-dnd": "^5.0.2",
|
||||||
|
"ngx-perfect-scrollbar": "^6.0.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@angular/animations": "4.0.1",
|
"@angular/animations": "4.0.1",
|
||||||
@@ -34,8 +39,9 @@
|
|||||||
"zone.js": "0.8.4"
|
"zone.js": "0.8.4"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"deepmerge": "^1.4.4",
|
"deepmerge": "^1.5.0",
|
||||||
"js-yaml": "^3.8.4"
|
"js-yaml": "^3.9.0",
|
||||||
|
"winston": "^2.4.0"
|
||||||
},
|
},
|
||||||
"false": {}
|
"false": {}
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
export { BaseTabComponent } from '../components/baseTab.component'
|
export { BaseTabComponent } from '../components/baseTab.component'
|
||||||
export { TabRecoveryProvider } from './tabRecovery'
|
export { TabRecoveryProvider, RecoveredTab } from './tabRecovery'
|
||||||
export { ToolbarButtonProvider, IToolbarButton } from './toolbarButtonProvider'
|
export { ToolbarButtonProvider, IToolbarButton } from './toolbarButtonProvider'
|
||||||
export { ConfigProvider } from './configProvider'
|
export { ConfigProvider } from './configProvider'
|
||||||
export { HotkeyProvider, IHotkeyDescription } from './hotkeyProvider'
|
export { HotkeyProvider, IHotkeyDescription } from './hotkeyProvider'
|
||||||
|
@@ -1,3 +1,10 @@
|
|||||||
export abstract class TabRecoveryProvider {
|
import { TabComponentType } from '../services/app.service'
|
||||||
abstract async recover (recoveryToken: any): Promise<void>
|
|
||||||
|
export interface RecoveredTab {
|
||||||
|
type: TabComponentType,
|
||||||
|
options?: any,
|
||||||
|
}
|
||||||
|
|
||||||
|
export abstract class TabRecoveryProvider {
|
||||||
|
abstract async recover (recoveryToken: any): Promise<RecoveredTab|null>
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,9 @@
|
|||||||
|
import { SafeHtml } from '@angular/platform-browser'
|
||||||
|
|
||||||
export interface IToolbarButton {
|
export interface IToolbarButton {
|
||||||
icon: string
|
icon: SafeHtml
|
||||||
title: string
|
title: string
|
||||||
|
touchBarTitle?: string
|
||||||
weight?: number
|
weight?: number
|
||||||
click: () => void
|
click: () => void
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
title-bar(
|
title-bar(
|
||||||
*ngIf='config.store.appearance.frame == "full" && config.store.appearance.dock == "off"',
|
*ngIf='!hostApp.isFullScreen && config.store.appearance.frame == "full" && config.store.appearance.dock == "off"',
|
||||||
[class.inset]='hostApp.platform == Platform.macOS'
|
[class.inset]='hostApp.platform == Platform.macOS'
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -7,50 +7,65 @@ title-bar(
|
|||||||
[class.tabs-on-top]='config.store.appearance.tabsLocation == "top"'
|
[class.tabs-on-top]='config.store.appearance.tabsLocation == "top"'
|
||||||
)
|
)
|
||||||
.tab-bar(
|
.tab-bar(
|
||||||
[class.inset]='hostApp.platform == Platform.macOS && config.store.appearance.frame == "thin" && config.store.appearance.tabsLocation == "top"'
|
*ngIf='!hostApp.isFullScreen',
|
||||||
|
)
|
||||||
|
.inset.background(*ngIf='hostApp.platform == Platform.macOS && config.store.appearance.frame == "thin" && config.store.appearance.tabsLocation == "top"')
|
||||||
|
.tabs(
|
||||||
|
dnd-sortable-container,
|
||||||
|
[sortableData]='app.tabs',
|
||||||
)
|
)
|
||||||
.tabs
|
|
||||||
tab-header(
|
tab-header(
|
||||||
*ngFor='let tab of app.tabs; let idx = index',
|
*ngFor='let tab of app.tabs; let idx = index',
|
||||||
|
dnd-sortable,
|
||||||
|
[sortableIndex]='idx',
|
||||||
|
(onDragStart)='onTabDragStart()',
|
||||||
|
(onDragEnd)='onTabDragEnd()',
|
||||||
|
|
||||||
[index]='idx',
|
[index]='idx',
|
||||||
[tab]='tab',
|
[tab]='tab',
|
||||||
[active]='tab == app.activeTab',
|
[active]='tab == app.activeTab',
|
||||||
[hasActivity]='tab.hasActivity',
|
[hasActivity]='tab.hasActivity',
|
||||||
[class.drag-region]='hostApp.platform == Platform.macOS',
|
|
||||||
@animateTab,
|
@animateTab,
|
||||||
(click)='app.selectTab(tab)',
|
(click)='app.selectTab(tab)',
|
||||||
(closeClicked)='app.closeTab(tab)',
|
[class.fully-draggable]='hostApp.platform != Platform.macOS',
|
||||||
|
[class.drag-region]='hostApp.platform == Platform.macOS && !tabsDragging',
|
||||||
)
|
)
|
||||||
|
|
||||||
.btn-group
|
.btn-group.background
|
||||||
button.btn.btn-secondary.btn-tab-bar(
|
button.btn.btn-secondary.btn-tab-bar(
|
||||||
*ngFor='let button of leftToolbarButtons',
|
*ngFor='let button of leftToolbarButtons',
|
||||||
[title]='button.title',
|
[title]='button.title',
|
||||||
(click)='button.click()',
|
(click)='button.click()',
|
||||||
|
[innerHTML]='button.icon',
|
||||||
)
|
)
|
||||||
i.fa([class]='"fa fa-" + button.icon')
|
|
||||||
|
|
||||||
.drag-space
|
.drag-space.background([class.persistent]='config.store.appearance.frame == "thin" && hostApp.platform != Platform.macOS')
|
||||||
|
|
||||||
.btn-group
|
.btn-group.background
|
||||||
button.btn.btn-secondary.btn-tab-bar(
|
button.btn.btn-secondary.btn-tab-bar(
|
||||||
*ngFor='let button of rightToolbarButtons',
|
*ngFor='let button of rightToolbarButtons',
|
||||||
[title]='button.title',
|
[title]='button.title',
|
||||||
(click)='button.click()',
|
(click)='button.click()',
|
||||||
|
[innerHTML]='button.icon',
|
||||||
)
|
)
|
||||||
i.fa([class]='"fa fa-" + button.icon')
|
|
||||||
|
|
||||||
window-controls(
|
button.btn.btn-secondary.btn-tab-bar.btn-update(
|
||||||
|
*ngIf='appUpdate',
|
||||||
|
title='Update available',
|
||||||
|
(click)='updateApp()',
|
||||||
|
[innerHTML]='updateIcon'
|
||||||
|
)
|
||||||
|
|
||||||
|
window-controls.background(
|
||||||
*ngIf='config.store.appearance.frame == "thin" && (hostApp.platform == Platform.Windows || hostApp.platform == Platform.Linux)',
|
*ngIf='config.store.appearance.frame == "thin" && (hostApp.platform == Platform.Windows || hostApp.platform == Platform.Linux)',
|
||||||
)
|
)
|
||||||
|
|
||||||
start-page(*ngIf='ready && app.tabs.length == 0')
|
start-page(*ngIf='ready && app.tabs.length == 0')
|
||||||
|
|
||||||
tab-body(
|
tab-body(
|
||||||
*ngFor='let tab of app.tabs; trackBy: tab?.id',
|
*ngFor='let tab of unsortedTabs',
|
||||||
[active]='tab == app.activeTab',
|
[active]='tab == app.activeTab',
|
||||||
[tab]='tab',
|
[tab]='tab',
|
||||||
[scrollable]='tab.scrollable',
|
|
||||||
)
|
)
|
||||||
|
|
||||||
ng-template(ngbModalContainer)
|
ng-template(ngbModalContainer)
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
-webkit-user-drag: none;
|
-webkit-user-drag: none;
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
|
will-change: transform;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
animation: 0.5s ease-out fadeIn;
|
animation: 0.5s ease-out fadeIn;
|
||||||
}
|
}
|
||||||
@@ -34,6 +35,7 @@ $tab-border-radius: 4px;
|
|||||||
line-height: $tabs-height + 2px;
|
line-height: $tabs-height + 2px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
padding: 0 15px;
|
padding: 0 15px;
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
border-bottom: 2px solid transparent;
|
border-bottom: 2px solid transparent;
|
||||||
@@ -45,7 +47,6 @@ $tab-border-radius: 4px;
|
|||||||
color: #aaa;
|
color: #aaa;
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&>.tabs {
|
&>.tabs {
|
||||||
@@ -55,17 +56,23 @@ $tab-border-radius: 4px;
|
|||||||
}
|
}
|
||||||
|
|
||||||
&>.drag-space {
|
&>.drag-space {
|
||||||
|
min-width: 1px;
|
||||||
|
flex: 1 0 1%;
|
||||||
|
-webkit-app-region: drag;
|
||||||
|
|
||||||
|
&.persistent {
|
||||||
min-width: 100px;
|
min-width: 100px;
|
||||||
flex: 1 0 25%;
|
flex: 1 0 25%;
|
||||||
-webkit-app-region: drag;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.inset {
|
& > .inset {
|
||||||
padding-left: 85px;
|
width: 85px;
|
||||||
|
flex: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
window-controls {
|
window-controls {
|
||||||
margin-left: 10px;
|
padding-left: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,3 +87,13 @@ hotkey-hint {
|
|||||||
right: 0;
|
right: 0;
|
||||||
max-width: 300px;
|
max-width: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::ng-deep .btn-tab-bar svg {
|
||||||
|
height: 16px;
|
||||||
|
fill: white;
|
||||||
|
fill-opacity: 0.75;
|
||||||
|
}
|
||||||
|
|
||||||
|
::ng-deep .btn-update svg {
|
||||||
|
fill: cyan;
|
||||||
|
}
|
||||||
|
@@ -1,16 +1,21 @@
|
|||||||
import { Component, Inject, Input, HostListener } from '@angular/core'
|
import { Component, Inject, Input, HostListener, HostBinding } from '@angular/core'
|
||||||
import { trigger, style, animate, transition, state } from '@angular/animations'
|
import { trigger, style, animate, transition, state } from '@angular/animations'
|
||||||
|
import { DomSanitizer, SafeHtml } from '@angular/platform-browser'
|
||||||
|
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
|
||||||
|
|
||||||
import { ElectronService } from '../services/electron.service'
|
import { ElectronService } from '../services/electron.service'
|
||||||
import { HostAppService, Platform } from '../services/hostApp.service'
|
import { HostAppService, Platform } from '../services/hostApp.service'
|
||||||
import { HotkeysService } from '../services/hotkeys.service'
|
import { HotkeysService } from '../services/hotkeys.service'
|
||||||
import { Logger, LogService } from '../services/log.service'
|
import { Logger, LogService } from '../services/log.service'
|
||||||
import { QuitterService } from '../services/quitter.service'
|
|
||||||
import { ConfigService } from '../services/config.service'
|
import { ConfigService } from '../services/config.service'
|
||||||
import { DockingService } from '../services/docking.service'
|
import { DockingService } from '../services/docking.service'
|
||||||
import { TabRecoveryService } from '../services/tabRecovery.service'
|
import { TabRecoveryService } from '../services/tabRecovery.service'
|
||||||
import { ThemesService } from '../services/themes.service'
|
import { ThemesService } from '../services/themes.service'
|
||||||
|
import { UpdaterService, Update } from '../services/updater.service'
|
||||||
|
import { TouchbarService } from '../services/touchbar.service'
|
||||||
|
|
||||||
|
import { BaseTabComponent } from './baseTab.component'
|
||||||
|
import { SafeModeModalComponent } from './safeModeModal.component'
|
||||||
import { AppService, IToolbarButton, ToolbarButtonProvider } from '../api'
|
import { AppService, IToolbarButton, ToolbarButtonProvider } from '../api'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@@ -28,9 +33,16 @@ import { AppService, IToolbarButton, ToolbarButtonProvider } from '../api'
|
|||||||
'flex-basis': '1px',
|
'flex-basis': '1px',
|
||||||
'width': '1px',
|
'width': '1px',
|
||||||
}),
|
}),
|
||||||
animate('250ms ease-in-out')
|
animate('250ms ease-in-out', style({
|
||||||
|
'flex-basis': '200px',
|
||||||
|
'width': '200px',
|
||||||
|
}))
|
||||||
]),
|
]),
|
||||||
transition(':leave', [
|
transition(':leave', [
|
||||||
|
style({
|
||||||
|
'flex-basis': '200px',
|
||||||
|
'width': '200px',
|
||||||
|
}),
|
||||||
animate('250ms ease-in-out', style({
|
animate('250ms ease-in-out', style({
|
||||||
'flex-basis': '1px',
|
'flex-basis': '1px',
|
||||||
'width': '1px',
|
'width': '1px',
|
||||||
@@ -44,20 +56,28 @@ export class AppRootComponent {
|
|||||||
@Input() ready = false
|
@Input() ready = false
|
||||||
@Input() leftToolbarButtons: IToolbarButton[]
|
@Input() leftToolbarButtons: IToolbarButton[]
|
||||||
@Input() rightToolbarButtons: IToolbarButton[]
|
@Input() rightToolbarButtons: IToolbarButton[]
|
||||||
|
@HostBinding('class') hostClass = `platform-${process.platform}`
|
||||||
|
tabsDragging = false
|
||||||
|
unsortedTabs: BaseTabComponent[] = []
|
||||||
|
updateIcon: SafeHtml
|
||||||
private logger: Logger
|
private logger: Logger
|
||||||
|
private appUpdate: Update
|
||||||
|
|
||||||
constructor (
|
constructor (
|
||||||
private docking: DockingService,
|
private docking: DockingService,
|
||||||
private electron: ElectronService,
|
private electron: ElectronService,
|
||||||
private tabRecovery: TabRecoveryService,
|
private tabRecovery: TabRecoveryService,
|
||||||
|
private hotkeys: HotkeysService,
|
||||||
|
private updater: UpdaterService,
|
||||||
|
private touchbar: TouchbarService,
|
||||||
public hostApp: HostAppService,
|
public hostApp: HostAppService,
|
||||||
public hotkeys: HotkeysService,
|
|
||||||
public config: ConfigService,
|
public config: ConfigService,
|
||||||
public app: AppService,
|
public app: AppService,
|
||||||
@Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[],
|
@Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[],
|
||||||
log: LogService,
|
log: LogService,
|
||||||
|
ngbModal: NgbModal,
|
||||||
|
domSanitizer: DomSanitizer,
|
||||||
_themes: ThemesService,
|
_themes: ThemesService,
|
||||||
_quitter: QuitterService,
|
|
||||||
) {
|
) {
|
||||||
this.logger = log.create('main')
|
this.logger = log.create('main')
|
||||||
this.logger.info('v', electron.app.getVersion())
|
this.logger.info('v', electron.app.getVersion())
|
||||||
@@ -65,6 +85,8 @@ export class AppRootComponent {
|
|||||||
this.leftToolbarButtons = this.getToolbarButtons(false)
|
this.leftToolbarButtons = this.getToolbarButtons(false)
|
||||||
this.rightToolbarButtons = this.getToolbarButtons(true)
|
this.rightToolbarButtons = this.getToolbarButtons(true)
|
||||||
|
|
||||||
|
this.updateIcon = domSanitizer.bypassSecurityTrustHtml(require('../icons/gift.svg')),
|
||||||
|
|
||||||
this.hotkeys.matchedHotkey.subscribe((hotkey) => {
|
this.hotkeys.matchedHotkey.subscribe((hotkey) => {
|
||||||
if (hotkey.startsWith('tab-')) {
|
if (hotkey.startsWith('tab-')) {
|
||||||
let index = parseInt(hotkey.split('-')[1])
|
let index = parseInt(hotkey.split('-')[1])
|
||||||
@@ -74,7 +96,7 @@ export class AppRootComponent {
|
|||||||
}
|
}
|
||||||
if (this.app.activeTab) {
|
if (this.app.activeTab) {
|
||||||
if (hotkey === 'close-tab') {
|
if (hotkey === 'close-tab') {
|
||||||
this.app.closeTab(this.app.activeTab)
|
this.app.closeTab(this.app.activeTab, true)
|
||||||
}
|
}
|
||||||
if (hotkey === 'toggle-last-tab') {
|
if (hotkey === 'toggle-last-tab') {
|
||||||
this.app.toggleLastTab()
|
this.app.toggleLastTab()
|
||||||
@@ -86,6 +108,9 @@ export class AppRootComponent {
|
|||||||
this.app.previousTab()
|
this.app.previousTab()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (hotkey === 'toggle-fullscreen') {
|
||||||
|
this.hostApp.toggleFullscreen()
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
this.docking.dock()
|
this.docking.dock()
|
||||||
@@ -93,22 +118,44 @@ export class AppRootComponent {
|
|||||||
this.docking.dock()
|
this.docking.dock()
|
||||||
})
|
})
|
||||||
|
|
||||||
this.hostApp.secondInstance.subscribe(() => {
|
this.hostApp.secondInstance$.subscribe(() => {
|
||||||
this.onGlobalHotkey()
|
this.onGlobalHotkey()
|
||||||
})
|
})
|
||||||
this.hotkeys.globalHotkey.subscribe(() => {
|
this.hotkeys.globalHotkey.subscribe(() => {
|
||||||
this.onGlobalHotkey()
|
this.onGlobalHotkey()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (window['safeModeReason']) {
|
||||||
|
ngbModal.open(SafeModeModalComponent)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.updater.check().then(update => {
|
||||||
|
this.appUpdate = update
|
||||||
|
})
|
||||||
|
|
||||||
|
this.touchbar.update()
|
||||||
|
|
||||||
|
config.changed$.subscribe(() => this.updateVibrancy())
|
||||||
|
this.updateVibrancy()
|
||||||
|
|
||||||
|
this.app.tabOpened$.subscribe(tab => this.unsortedTabs.push(tab))
|
||||||
|
this.app.tabClosed$.subscribe(tab => {
|
||||||
|
this.unsortedTabs = this.unsortedTabs.filter(x => x !== tab)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
onGlobalHotkey () {
|
onGlobalHotkey () {
|
||||||
if (this.electron.app.window.isFocused()) {
|
if (this.electron.app.window.isFocused()) {
|
||||||
// focused
|
// focused
|
||||||
|
this.electron.loseFocus()
|
||||||
|
if (this.hostApp.platform !== Platform.macOS) {
|
||||||
this.electron.app.window.hide()
|
this.electron.app.window.hide()
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!this.electron.app.window.isVisible()) {
|
if (!this.electron.app.window.isVisible()) {
|
||||||
// unfocused, invisible
|
// unfocused, invisible
|
||||||
this.electron.app.window.show()
|
this.electron.app.window.show()
|
||||||
|
this.electron.app.window.focus()
|
||||||
} else {
|
} else {
|
||||||
if (this.config.store.appearance.dock === 'off') {
|
if (this.config.store.appearance.dock === 'off') {
|
||||||
// not docked, visible
|
// not docked, visible
|
||||||
@@ -131,16 +178,8 @@ export class AppRootComponent {
|
|||||||
if (this.app.tabs.length === 0) {
|
if (this.app.tabs.length === 0) {
|
||||||
this.app.openDefaultTab()
|
this.app.openDefaultTab()
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private getToolbarButtons (aboveZero: boolean): IToolbarButton[] {
|
this.app.emitReady()
|
||||||
let buttons: IToolbarButton[] = []
|
|
||||||
this.toolbarButtonProviders.forEach((provider) => {
|
|
||||||
buttons = buttons.concat(provider.provide())
|
|
||||||
})
|
|
||||||
return buttons
|
|
||||||
.filter((button) => (button.weight > 0) === aboveZero)
|
|
||||||
.sort((a: IToolbarButton, b: IToolbarButton) => (a.weight || 0) - (b.weight || 0))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@HostListener('dragover')
|
@HostListener('dragover')
|
||||||
@@ -152,4 +191,34 @@ export class AppRootComponent {
|
|||||||
onDrop () {
|
onDrop () {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateApp () {
|
||||||
|
this.electron.shell.openExternal(this.appUpdate.url)
|
||||||
|
}
|
||||||
|
|
||||||
|
onTabDragStart () {
|
||||||
|
this.tabsDragging = true
|
||||||
|
}
|
||||||
|
|
||||||
|
onTabDragEnd () {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.tabsDragging = false
|
||||||
|
this.app.emitTabsChanged()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private getToolbarButtons (aboveZero: boolean): IToolbarButton[] {
|
||||||
|
let buttons: IToolbarButton[] = []
|
||||||
|
this.config.enabledServices(this.toolbarButtonProviders).forEach(provider => {
|
||||||
|
buttons = buttons.concat(provider.provide())
|
||||||
|
})
|
||||||
|
return buttons
|
||||||
|
.filter((button) => (button.weight > 0) === aboveZero)
|
||||||
|
.sort((a: IToolbarButton, b: IToolbarButton) => (a.weight || 0) - (b.weight || 0))
|
||||||
|
}
|
||||||
|
|
||||||
|
private updateVibrancy () {
|
||||||
|
this.hostApp.setVibrancy(this.config.store.appearance.vibrancy)
|
||||||
|
this.hostApp.getWindow().setOpacity(this.config.store.appearance.opacity)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,16 +1,21 @@
|
|||||||
import { Subject, BehaviorSubject } from 'rxjs'
|
import { Observable, Subject } from 'rxjs'
|
||||||
import { ViewRef } from '@angular/core'
|
import { ViewRef } from '@angular/core'
|
||||||
|
|
||||||
export abstract class BaseTabComponent {
|
export abstract class BaseTabComponent {
|
||||||
private static lastTabID = 0
|
private static lastTabID = 0
|
||||||
id: number
|
id: number
|
||||||
title$ = new BehaviorSubject<string>(null)
|
title: string
|
||||||
scrollable: boolean
|
customTitle: string
|
||||||
hasActivity = false
|
hasActivity = false
|
||||||
focused$ = new Subject<void>()
|
|
||||||
blurred$ = new Subject<void>()
|
|
||||||
hasFocus = false
|
hasFocus = false
|
||||||
hostView: ViewRef
|
hostView: ViewRef
|
||||||
|
protected titleChange = new Subject<string>()
|
||||||
|
protected focused = new Subject<void>()
|
||||||
|
protected blurred = new Subject<void>()
|
||||||
|
|
||||||
|
get focused$ (): Observable<void> { return this.focused }
|
||||||
|
get blurred$ (): Observable<void> { return this.blurred }
|
||||||
|
get titleChange$ (): Observable<string> { return this.titleChange }
|
||||||
|
|
||||||
constructor () {
|
constructor () {
|
||||||
this.id = BaseTabComponent.lastTabID++
|
this.id = BaseTabComponent.lastTabID++
|
||||||
@@ -22,6 +27,13 @@ export abstract class BaseTabComponent {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setTitle (title: string) {
|
||||||
|
this.title = title
|
||||||
|
if (!this.customTitle) {
|
||||||
|
this.titleChange.next(title)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
displayActivity (): void {
|
displayActivity (): void {
|
||||||
this.hasActivity = true
|
this.hasActivity = true
|
||||||
}
|
}
|
||||||
@@ -30,9 +42,21 @@ export abstract class BaseTabComponent {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async canClose (): Promise<boolean> {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
emitFocused () {
|
||||||
|
this.focused.next()
|
||||||
|
}
|
||||||
|
|
||||||
|
emitBlurred () {
|
||||||
|
this.blurred.next()
|
||||||
|
}
|
||||||
|
|
||||||
destroy (): void {
|
destroy (): void {
|
||||||
this.focused$.complete()
|
this.focused.complete()
|
||||||
this.blurred$.complete()
|
this.blurred.complete()
|
||||||
this.title$.complete()
|
this.titleChange.complete()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
4
terminus-core/src/components/checkbox.component.pug
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
.icon((click)='click()', tabindex='0', [class.active]='model', (keyup.space)='click()')
|
||||||
|
i.fa.fa-square-o.off
|
||||||
|
i.fa.fa-check-square.on
|
||||||
|
.text((click)='click()') {{text}}
|
51
terminus-core/src/components/checkbox.component.scss
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
:host {
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 5px 0;
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
background: rgba(255,255,255,.05);
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
background: rgba(255,255,255,.1);
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&[disabled] {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
position: relative;
|
||||||
|
flex: none;
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
|
||||||
|
i {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: -2px;
|
||||||
|
transition: 0.25s opacity;
|
||||||
|
display: block;
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
i.on, &.active i.off {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
i.off, &.active i.on {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.text {
|
||||||
|
flex: auto;
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
}
|
45
terminus-core/src/components/checkbox.component.ts
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
import { NgZone, Component, Input } from '@angular/core'
|
||||||
|
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'checkbox',
|
||||||
|
template: require('./checkbox.component.pug'),
|
||||||
|
styles: [require('./checkbox.component.scss')],
|
||||||
|
providers: [
|
||||||
|
{ provide: NG_VALUE_ACCESSOR, useExisting: CheckboxComponent, multi: true },
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class CheckboxComponent implements ControlValueAccessor {
|
||||||
|
@Input() model: boolean
|
||||||
|
@Input() disabled: boolean
|
||||||
|
@Input() text: string
|
||||||
|
private changed = new Array<(val: boolean) => void>()
|
||||||
|
|
||||||
|
click () {
|
||||||
|
NgZone.assertInAngularZone()
|
||||||
|
if (this.disabled) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.model = !this.model
|
||||||
|
for (let fx of this.changed) {
|
||||||
|
fx(this.model)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
writeValue (obj: any) {
|
||||||
|
this.model = obj
|
||||||
|
}
|
||||||
|
|
||||||
|
registerOnChange (fn: any): void {
|
||||||
|
this.changed.push(fn)
|
||||||
|
}
|
||||||
|
|
||||||
|
registerOnTouched (fn: any): void {
|
||||||
|
this.changed.push(fn)
|
||||||
|
}
|
||||||
|
|
||||||
|
setDisabledState (isDisabled: boolean) {
|
||||||
|
this.disabled = isDisabled
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,6 @@
|
|||||||
|
.modal-body
|
||||||
|
input.form-control(type='text', [(ngModel)]='value', (keyup.enter)='save()', autofocus)
|
||||||
|
|
||||||
|
.modal-footer
|
||||||
|
button.btn.btn-outline-primary((click)='save()') Save
|
||||||
|
button.btn.btn-outline-secondary((click)='close()') Cancel
|
22
terminus-core/src/components/renameTabModal.component.ts
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { Component, Input } from '@angular/core'
|
||||||
|
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'rename-tab-modal',
|
||||||
|
template: require('./renameTabModal.component.pug'),
|
||||||
|
})
|
||||||
|
export class RenameTabModalComponent {
|
||||||
|
@Input() value: string
|
||||||
|
|
||||||
|
constructor (
|
||||||
|
private modalInstance: NgbActiveModal
|
||||||
|
) { }
|
||||||
|
|
||||||
|
save () {
|
||||||
|
this.modalInstance.close(this.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
close () {
|
||||||
|
this.modalInstance.dismiss()
|
||||||
|
}
|
||||||
|
}
|
7
terminus-core/src/components/safeModeModal.component.pug
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
.modal-body
|
||||||
|
.alert.alert-danger Terminus could not start with your plugins, so all third party plugins have been disabled in this session. The error was:
|
||||||
|
|
||||||
|
pre {{error}}
|
||||||
|
|
||||||
|
.modal-footer
|
||||||
|
button.btn.btn-outline-primary((click)='close()') Close
|
19
terminus-core/src/components/safeModeModal.component.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import { Component, Input } from '@angular/core'
|
||||||
|
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
template: require('./safeModeModal.component.pug'),
|
||||||
|
})
|
||||||
|
export class SafeModeModalComponent {
|
||||||
|
@Input() error: Error
|
||||||
|
|
||||||
|
constructor (
|
||||||
|
public modalInstance: NgbActiveModal,
|
||||||
|
) {
|
||||||
|
this.error = window['safeModeReason']
|
||||||
|
}
|
||||||
|
|
||||||
|
close () {
|
||||||
|
this.modalInstance.dismiss()
|
||||||
|
}
|
||||||
|
}
|
@@ -1,29 +1,20 @@
|
|||||||
div
|
div
|
||||||
.terminus-logo
|
.terminus-logo
|
||||||
.part(style='transform: rotateZ(0deg)')
|
|
||||||
div
|
|
||||||
.part(style='transform: rotateZ(51deg)')
|
|
||||||
div
|
|
||||||
.part(style='transform: rotateZ(102deg)')
|
|
||||||
div
|
|
||||||
.part(style='transform: rotateZ(154deg)')
|
|
||||||
div
|
|
||||||
.part(style='transform: rotateZ(205deg)')
|
|
||||||
div
|
|
||||||
.part(style='transform: rotateZ(257deg)')
|
|
||||||
div
|
|
||||||
.part(style='transform: rotateZ(308deg)')
|
|
||||||
div
|
|
||||||
h1.terminus-title Terminus
|
h1.terminus-title Terminus
|
||||||
|
sup α
|
||||||
|
|
||||||
button.btn.btn-primary.btn-lg.btn-block(
|
.list-group
|
||||||
|
a.list-group-item.list-group-item-action(
|
||||||
*ngFor='let button of getButtons()',
|
*ngFor='let button of getButtons()',
|
||||||
(click)='button.click()',
|
(click)='button.click()',
|
||||||
)
|
)
|
||||||
i.fa([class]='"fa fa-" + button.icon')
|
.d-flex.align-self-center([innerHTML]='button.icon')
|
||||||
span {{button.title}}
|
span {{button.title}}
|
||||||
|
|
||||||
footer
|
footer
|
||||||
|
.pull-right
|
||||||
|
.form-control-static Version: {{version}}
|
||||||
|
|
||||||
.btn-group
|
.btn-group
|
||||||
button.btn.btn-secondary((click)='openGitHub()')
|
button.btn.btn-secondary((click)='openGitHub()')
|
||||||
i.fa.fa-github
|
i.fa.fa-github
|
||||||
|
@@ -24,6 +24,14 @@ footer {
|
|||||||
background: rgba(0,0,0,.5);
|
background: rgba(0,0,0,.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
button {
|
a, button {
|
||||||
-webkit-app-region: no-drag;
|
-webkit-app-region: no-drag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.list-group-item ::ng-deep svg {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
margin-right: 10px;
|
||||||
|
fill: white;
|
||||||
|
fill-opacity: 0.75;
|
||||||
|
}
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
|
import * as os from 'os'
|
||||||
import { Component, Inject } from '@angular/core'
|
import { Component, Inject } from '@angular/core'
|
||||||
import { ElectronService } from '../services/electron.service'
|
import { ElectronService } from '../services/electron.service'
|
||||||
|
import { ConfigService } from '../services/config.service'
|
||||||
import { IToolbarButton, ToolbarButtonProvider } from '../api'
|
import { IToolbarButton, ToolbarButtonProvider } from '../api'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@@ -8,13 +10,18 @@ import { IToolbarButton, ToolbarButtonProvider } from '../api'
|
|||||||
styles: [require('./startPage.component.scss')],
|
styles: [require('./startPage.component.scss')],
|
||||||
})
|
})
|
||||||
export class StartPageComponent {
|
export class StartPageComponent {
|
||||||
|
version: string
|
||||||
|
|
||||||
constructor (
|
constructor (
|
||||||
private electron: ElectronService,
|
private electron: ElectronService,
|
||||||
|
private config: ConfigService,
|
||||||
@Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[],
|
@Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[],
|
||||||
) { }
|
) {
|
||||||
|
this.version = electron.app.getVersion()
|
||||||
|
}
|
||||||
|
|
||||||
getButtons (): IToolbarButton[] {
|
getButtons (): IToolbarButton[] {
|
||||||
return this.toolbarButtonProviders
|
return this.config.enabledServices(this.toolbarButtonProviders)
|
||||||
.map(provider => provider.provide())
|
.map(provider => provider.provide())
|
||||||
.reduce((a, b) => a.concat(b))
|
.reduce((a, b) => a.concat(b))
|
||||||
.sort((a: IToolbarButton, b: IToolbarButton) => (a.weight || 0) - (b.weight || 0))
|
.sort((a: IToolbarButton, b: IToolbarButton) => (a.weight || 0) - (b.weight || 0))
|
||||||
@@ -25,6 +32,13 @@ export class StartPageComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
reportBug () {
|
reportBug () {
|
||||||
this.electron.shell.openExternal('https://github.com/eugeny/terminus/issues/new')
|
let body = `Version: ${this.version}\n`
|
||||||
|
body += `Platform: ${os.platform()} ${os.release()}\n\n`
|
||||||
|
let label = {
|
||||||
|
darwin: 'macOS',
|
||||||
|
windows: 'Windows',
|
||||||
|
linux: 'Linux',
|
||||||
|
}[os.platform()]
|
||||||
|
this.electron.shell.openExternal(`https://github.com/eugeny/terminus/issues/new?body=${encodeURIComponent(body)}&labels=${label}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -4,10 +4,6 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
&.scrollable {
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
@@ -15,4 +11,9 @@
|
|||||||
flex: auto;
|
flex: auto;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
> perfect-scrollbar {
|
||||||
|
width: auto;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|