Add basic material ui components

This commit is contained in:
Sean Engelhardt 2018-06-25 17:03:52 +02:00 committed by FinnStutzenstein
parent 42473e1a8a
commit 4966092b31
14 changed files with 351 additions and 176 deletions

167
client/package-lock.json generated
View File

@ -116,13 +116,21 @@
} }
}, },
"@angular/animations": { "@angular/animations": {
"version": "6.0.4", "version": "6.0.6",
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.0.4.tgz", "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.0.6.tgz",
"integrity": "sha512-Ro1XEwShk8XRAogfu73fKLTBLnND1s+MGhN+ymwr7ib9hqxVr7jMNE+MXPqG2/1BX9c+7NHb30B8G4woQn62vw==", "integrity": "sha512-mJvWn0GuYARJfV9/KNUn5qUc5iNJKMSSNm//pRtUB8n829KnJHLnGpNsr95dzARH5wI3Om/t6hG3M0XCLbIfNQ==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/cdk": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-6.3.0.tgz",
"integrity": "sha512-L1NM2hU8xvb35mDKIw+SR9UZGZtbSQl6fmd9X/tedaNYjIvyQ7SIX7iDJ+LqD0xUQopB+SeuhDL7D6IwGMV2bQ==",
"requires": {
"tslib": "^1.7.1"
}
},
"@angular/cli": { "@angular/cli": {
"version": "6.0.8", "version": "6.0.8",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-6.0.8.tgz", "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-6.0.8.tgz",
@ -161,25 +169,25 @@
} }
}, },
"@angular/common": { "@angular/common": {
"version": "6.0.4", "version": "6.0.6",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-6.0.4.tgz", "resolved": "https://registry.npmjs.org/@angular/common/-/common-6.0.6.tgz",
"integrity": "sha512-z2UE6a43u49omsqjzwdHhwD+wpCPauuD13FMkVQMLwzugKhNri0LjMk5I0I9xLz9OyXICm2B+wPAQN4d07savg==", "integrity": "sha512-SjCrrGNJSeRMtNLv/ug5HpyRUexdNl11TrWCWMeu3ye3ss4k6EnuM9jGB196B0PIm0IbjO0KrpQ8bqBx0/2vqw==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/compiler": { "@angular/compiler": {
"version": "6.0.4", "version": "6.0.6",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-6.0.4.tgz", "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-6.0.6.tgz",
"integrity": "sha512-qwjuPacuRKUroD+xev653mljV9Jwhi2tvwGo/cVadq0isJ2rVH1hO6sa1FWFnNf1KPnyolMobZlMgg8DFW/yRw==", "integrity": "sha512-lcDNfkYLOWzOOqdD2Kspxwjk3xGs8kVLbq/8uk/aJ96ty8aA9j8Nbf3h53SCY9LuGoJMjOaaUpgwZCszFzqQyA==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/compiler-cli": { "@angular/compiler-cli": {
"version": "6.0.4", "version": "6.0.6",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-6.0.4.tgz", "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-6.0.6.tgz",
"integrity": "sha512-bkN21JJrsbIdXNfOc9I9iB7AETUe4/QvApC25R3/pERSyhkK7UNNHTqg4FY5xMdSxlZd1ccWj8rvSbS+hFbTBw==", "integrity": "sha512-vWJK+X6B63+kdAN2s7Az1NHF4gAbECf1fkB+zkO6pP706teW4VlN2xdXeHLXgvK39iDJbhbctTnDfhqIaPmyjw==",
"dev": true, "dev": true,
"requires": { "requires": {
"chokidar": "^1.4.2", "chokidar": "^1.4.2",
@ -322,55 +330,63 @@
} }
}, },
"@angular/core": { "@angular/core": {
"version": "6.0.4", "version": "6.0.6",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-6.0.4.tgz", "resolved": "https://registry.npmjs.org/@angular/core/-/core-6.0.6.tgz",
"integrity": "sha512-WCW8wyRoIKkjGjOjVLFpUyhQw/K0//s3W0qo1/vH6m9njC63jP/VP+2Xnt8bdtgeET2NYUeyl+w/0vUXqYlnEA==", "integrity": "sha512-7J4wuQ5Bss2GmCptyXSfmgWk/IbCFK/MJwaXOpADLB9iWOkOIvKRSTntb4l6j3OVd9boCbs6Z/xW/HT964iMvw==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/forms": { "@angular/forms": {
"version": "6.0.4", "version": "6.0.6",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-6.0.4.tgz", "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-6.0.6.tgz",
"integrity": "sha512-JcKyCCkAwF3NlWuwPxtpRhFX/8QbFUkA4W0N62L+Odm8G0/P4QhMw/99o5kRs5xrsQRVyFlGvdYOrkgDyyZkGg==", "integrity": "sha512-uVcvUz8JzO/R6HtxIUtefjK55nf4gJt9WjVdnjmA66pQe1+aQYscyQu9QFykGfGqta/0luhVSU7J+5g0rIRr/g==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/http": { "@angular/http": {
"version": "6.0.4", "version": "6.0.6",
"resolved": "https://registry.npmjs.org/@angular/http/-/http-6.0.4.tgz", "resolved": "https://registry.npmjs.org/@angular/http/-/http-6.0.6.tgz",
"integrity": "sha512-bq7cS0/5hM3Af3FolEe7HpKP19/7MJWIPGi5k9rYCGM4dXKFiKa+LA/SbXE0DMiKxhAQbZDwQ9HN04r70DRyBQ==", "integrity": "sha512-ZyY7JS3lQM0HnKfoCJl+S9ZHeQVdG+FefjYE2s7pBKUufaoMo9DTIfQe5ZgSQeXRAFKjuUyJDf1EZlPVVvQzIw==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/language-service": { "@angular/language-service": {
"version": "6.0.4", "version": "6.0.6",
"resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-6.0.4.tgz", "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-6.0.6.tgz",
"integrity": "sha512-LyFh/sFtnyjJJYO5UKM31nGSSkmGYFMwqzwbG+l0QNQXNoa9jj+OApvu0oOY5F0WP9DBrOAzj74j2M5olprtMQ==", "integrity": "sha512-6zRuKreMPlLQkLGS7KaJ4xehwirPbst+S6tQZltcSHjgIKrZBu3acL7/tUo5G5jQW6OnPXWK9UYs2kCffPS3AQ==",
"dev": true "dev": true
}, },
"@angular/material": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/@angular/material/-/material-6.3.0.tgz",
"integrity": "sha512-asSzdfLkDDbQEyM/GKUxrlvuj8OvO5DqrNJ3e3uvi0OmZDpaO50yubQvrJ26nbqgwgRo+qwiGNN6XcFwYTRVPQ==",
"requires": {
"tslib": "^1.7.1"
}
},
"@angular/platform-browser": { "@angular/platform-browser": {
"version": "6.0.4", "version": "6.0.6",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-6.0.4.tgz", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-6.0.6.tgz",
"integrity": "sha512-4y6rSqOLuBs+RL0CIM+RZ5T8a5Tm1NisZcTUGvM8lVYPNkqTzNfHQXhBq8mTgRw9JopEwOj+UEqBbgrNX715yQ==", "integrity": "sha512-c+2c4Ba8IeIt9CnF1RmJVf/0xwljT9GSIJUC61SLrX01NMwRxDq/LC+tatcBGLzZ6rc1eYmsd1exTHOGfENOxw==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/platform-browser-dynamic": { "@angular/platform-browser-dynamic": {
"version": "6.0.4", "version": "6.0.6",
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.0.4.tgz", "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.0.6.tgz",
"integrity": "sha512-uh7MoQi9kyKPFHrD7HPOU5gWyhF4pPJuGltyMTOtM/f5TNL9QQI2EugijKnnSFLQ8+7UQjmFAVeRqH9jylhIyQ==", "integrity": "sha512-t5+dvfcwVaDa5H8qsVnPAvmNJa0rDwJMu1T6kfz8sAxzgiw6tOvIQShJX0Ka94+nPpd4mg7gv43VV705z6ryMA==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/router": { "@angular/router": {
"version": "6.0.4", "version": "6.0.6",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-6.0.4.tgz", "resolved": "https://registry.npmjs.org/@angular/router/-/router-6.0.6.tgz",
"integrity": "sha512-IKUtbbRtHN8I+Hp8/pLqBPyXJmQHrPFGzKU3H43TovD++mmT5AaYVCeJgkGUB//wjtLN3y0X/yrmyWFWcN35Gw==", "integrity": "sha512-R49Gh/ate//AloPGjtQ2Nl3HNMT21pumcUoWZEZtYw8UyTbxSKLMc40yzdsldGrKZ/G/CafFTaS1hpZD7MF5/w==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
@ -384,24 +400,24 @@
} }
}, },
"@fortawesome/fontawesome-common-types": { "@fortawesome/fontawesome-common-types": {
"version": "0.2.0-9", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.0-9.tgz", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.0.tgz",
"integrity": "sha512-V+PyKLFoFvfg9hj4weCjWVYPKvUI5hFLlPxPzb/SIrI9zhlOibHKtVpOy577fIXV7HFTy+FpeSlMDrhkV76dfA==" "integrity": "sha512-raAiqWiXGZeQpFzz5fpLa6EQR3kSAK1cT5qaUanB9h4FatXvKEOPutDyeGQsF0hRtGfMb518Mzc7+LjBPDJCOg=="
}, },
"@fortawesome/fontawesome-svg-core": { "@fortawesome/fontawesome-svg-core": {
"version": "1.2.0-14", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.0-14.tgz", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.0.tgz",
"integrity": "sha512-V13Ou3UZ+Y0J5WTnhHDUmZFsz8ycxAyGaowrrPu7uuZXVT78/l4OCrOP6y5U6PdZoy3VJbZvkxCXZyTA6C32fA==", "integrity": "sha512-Wqh3kxcxeFCCLN3LevXJaZiBZ9V8ggOUpcQC+TBIaQIPNtMmUwsghLVpI6ojYKjoIvKi1nyAR9wpOTUVoxl4rA==",
"requires": { "requires": {
"@fortawesome/fontawesome-common-types": "^0.2.0-9" "@fortawesome/fontawesome-common-types": "^0.2.0"
} }
}, },
"@fortawesome/free-solid-svg-icons": { "@fortawesome/free-solid-svg-icons": {
"version": "5.1.0-11", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.1.0-11.tgz", "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.1.0.tgz",
"integrity": "sha512-Dc5EaDbQryTRSt96NzxEnENX+bcKXun3mpvdPt8rSkx3Kf8Kyda60qaA3Or6AKfNYcxLup5Q6zwfWdhdhTNrpQ==", "integrity": "sha512-MijNhBFEporjnyg1BDnyBWwypFa+RkmQFqX94NZa7xWGIKirvujw2JG0BRR9jQZPFHcI4pRzhXMxBxUUi786yA==",
"requires": { "requires": {
"@fortawesome/fontawesome-common-types": "^0.2.0-9" "@fortawesome/fontawesome-common-types": "^0.2.0"
} }
}, },
"@ngtools/webpack": { "@ngtools/webpack": {
@ -1550,11 +1566,6 @@
"hoek": "2.x.x" "hoek": "2.x.x"
} }
}, },
"bootstrap": {
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz",
"integrity": "sha1-WjiTlFSfIzMIdaOxUGVldPip63E="
},
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@ -3971,14 +3982,12 @@
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"balanced-match": "^1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
@ -3993,20 +4002,17 @@
"code-point-at": { "code-point-at": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
@ -4123,8 +4129,7 @@
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
@ -4136,7 +4141,6 @@
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
@ -4151,7 +4155,6 @@
"version": "3.0.4", "version": "3.0.4",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
} }
@ -4159,14 +4162,12 @@
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"minipass": { "minipass": {
"version": "2.2.4", "version": "2.2.4",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"safe-buffer": "^5.1.1", "safe-buffer": "^5.1.1",
"yallist": "^3.0.0" "yallist": "^3.0.0"
@ -4185,7 +4186,6 @@
"version": "0.5.1", "version": "0.5.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
} }
@ -4266,8 +4266,7 @@
"number-is-nan": { "number-is-nan": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
@ -4279,7 +4278,6 @@
"version": "1.4.0", "version": "1.4.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"wrappy": "1" "wrappy": "1"
} }
@ -4401,7 +4399,6 @@
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
@ -6150,9 +6147,9 @@
} }
}, },
"karma": { "karma": {
"version": "2.0.3", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/karma/-/karma-2.0.3.tgz", "resolved": "https://registry.npmjs.org/karma/-/karma-2.0.4.tgz",
"integrity": "sha512-7bVCQs8+DCLWj5TIUBIgPa95/o8X9pBhyF+E2hX51Z6Ttq2biYWQlynBmunKZGRyNOIyg89TnVtC58q9eGBFFw==", "integrity": "sha512-32yhTwoi6BZgJZhR78GwhzyFABbYG/1WwQqYgY7Vh96Demvua2jM3+FyRltIMTUH/Kd5xaQvDw2L7jTvkYFeXg==",
"dev": true, "dev": true,
"requires": { "requires": {
"bluebird": "^3.3.0", "bluebird": "^3.3.0",
@ -6455,9 +6452,9 @@
} }
}, },
"log4js": { "log4js": {
"version": "2.9.0", "version": "2.10.0",
"resolved": "https://registry.npmjs.org/log4js/-/log4js-2.9.0.tgz", "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.10.0.tgz",
"integrity": "sha512-pptn4+5Q3ysOW6Jgm9lzhDUCFEYv7FLrazEzPQQlxgSP+IVl5HMPgT8hm2DyRqGY4GUiVjZz4XXRvTZ9BELQyw==", "integrity": "sha512-NnhN9PjFF9zhxinAjlmDYvkqqrIW+yA3LLJAoTJ3fs6d1zru86OqQHfsxiUcc1kRq3z+faGR4DeyXUfiNbVxKQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"amqplib": "^0.5.2", "amqplib": "^0.5.2",
@ -6712,9 +6709,9 @@
} }
}, },
"mailgun-js": { "mailgun-js": {
"version": "0.18.0", "version": "0.18.1",
"resolved": "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.18.0.tgz", "resolved": "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.18.1.tgz",
"integrity": "sha512-o0P6jjZlx5CQj12tvVgDTbgjTqVN0+5h6/6P1+3c6xmozVKBwniQ6Qt3MkCSF0+ueVTbobAfWyGpWRZMJu8t1g==", "integrity": "sha512-lvuMP14u24HS2uBsJEnzSyPMxzU2b99tQsIx1o6QNjqxjk8b3WvR+vq5oG1mjqz/IBYo+5gF+uSoDS0RkMVHmg==",
"dev": true, "dev": true,
"optional": true, "optional": true,
"requires": { "requires": {
@ -8464,9 +8461,9 @@
"dev": true "dev": true
}, },
"prettier": { "prettier": {
"version": "1.13.5", "version": "1.13.6",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.5.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.6.tgz",
"integrity": "sha512-4M90mfvLz6yRf2Dhzd+xPIE6b4xkI8nHMJhsSm9IlfG17g6wujrrm7+H1X8x52tC4cSNm6HmuhCUSNe6Hd5wfw==", "integrity": "sha512-p5eqCNiohWZN++7aJXUVj0JgLqHCPLf9GLIcLBHGNWs4Y9FJOPs6+KNO2WT0udJIQJTbeZFrJkjzjcb8fkAYYQ==",
"dev": true "dev": true
}, },
"pretty-error": { "pretty-error": {
@ -9352,9 +9349,9 @@
} }
}, },
"rxjs": { "rxjs": {
"version": "6.2.0", "version": "6.2.1",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.0.tgz", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.1.tgz",
"integrity": "sha512-qBzf5uu6eOKiCZuAE0SgZ0/Qp+l54oeVxFfC2t+mJ2SFI6IB8gmMdJHs5DUMu5kqifqcCtsKS2XHjhZu6RKvAw==", "integrity": "sha512-OwMxHxmnmHTUpgO+V7dZChf3Tixf4ih95cmXjzzadULziVl/FKhHScGLj4goEw9weePVOH2Q0+GcCBUhKCZc/g==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }

View File

@ -13,28 +13,29 @@
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@angular/animations": "^6.0.3", "@angular/animations": "^6.0.6",
"@angular/common": "^6.0.3", "@angular/cdk": "^6.3.0",
"@angular/compiler": "^6.0.3", "@angular/common": "^6.0.6",
"@angular/core": "^6.0.3", "@angular/compiler": "^6.0.6",
"@angular/forms": "^6.0.3", "@angular/core": "^6.0.6",
"@angular/http": "^6.0.3", "@angular/forms": "^6.0.6",
"@angular/platform-browser": "^6.0.3", "@angular/http": "^6.0.6",
"@angular/platform-browser-dynamic": "^6.0.3", "@angular/material": "^6.3.0",
"@angular/router": "^6.0.3", "@angular/platform-browser": "^6.0.6",
"@fortawesome/angular-fontawesome": "^0.1.0-10", "@angular/platform-browser-dynamic": "^6.0.6",
"@fortawesome/fontawesome-svg-core": "^1.2.0-11", "@angular/router": "^6.0.6",
"@fortawesome/free-solid-svg-icons": "^5.1.0-11", "@fortawesome/angular-fontawesome": "0.1.0-10",
"bootstrap": "^3.3.7", "@fortawesome/fontawesome-svg-core": "^1.2.0",
"@fortawesome/free-solid-svg-icons": "^5.1.0",
"core-js": "^2.5.4", "core-js": "^2.5.4",
"rxjs": "^6.0.0", "rxjs": "^6.2.1",
"zone.js": "^0.8.26" "zone.js": "^0.8.26"
}, },
"devDependencies": { "devDependencies": {
"@angular-devkit/build-angular": "~0.6.8", "@angular-devkit/build-angular": "~0.6.8",
"@angular/cli": "~6.0.8", "@angular/cli": "~6.0.8",
"@angular/compiler-cli": "^6.0.3", "@angular/compiler-cli": "^6.0.6",
"@angular/language-service": "^6.0.3", "@angular/language-service": "^6.0.6",
"@types/jasmine": "~2.8.6", "@types/jasmine": "~2.8.6",
"@types/jasminewd2": "~2.0.3", "@types/jasminewd2": "~2.0.3",
"@types/node": "~8.9.4", "@types/node": "~8.9.4",
@ -42,13 +43,13 @@
"husky": "^0.14.3", "husky": "^0.14.3",
"jasmine-core": "~2.99.1", "jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1", "jasmine-spec-reporter": "~4.2.1",
"karma": "^2.0.3", "karma": "^2.0.4",
"karma-chrome-launcher": "~2.2.0", "karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.0", "karma-coverage-istanbul-reporter": "~2.0.0",
"karma-jasmine": "~1.1.1", "karma-jasmine": "~1.1.1",
"karma-jasmine-html-reporter": "^0.2.2", "karma-jasmine-html-reporter": "^0.2.2",
"npm-run-all": "^4.1.3", "npm-run-all": "^4.1.3",
"prettier": "^1.13.5", "prettier": "^1.13.6",
"pretty-quick": "^1.6.0", "pretty-quick": "^1.6.0",
"protractor": "~5.3.0", "protractor": "~5.3.0",
"ts-node": "~5.0.1", "ts-node": "~5.0.1",

View File

@ -1,7 +0,0 @@
.loginForm .input-group-addon i {
width: 15px;
}
.login-logo {
width: 250px;
}

View File

@ -1,11 +1,30 @@
// angular modules
import { BrowserModule, Title } from '@angular/platform-browser'; import { BrowserModule, Title } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms'; // <-- NgModel lives here import { FormsModule } from '@angular/forms';
import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http'; import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http';
// MaterialUI modules
import {
MatButtonModule,
MatCheckboxModule,
MatToolbarModule,
MatCardModule,
MatInputModule,
MatProgressSpinnerModule,
MatSidenavModule
} from '@angular/material';
import { MatListModule } from '@angular/material/list';
import { MatExpansionModule } from '@angular/material/expansion';
import { MatMenuModule } from '@angular/material/menu';
// FontAwesome modules
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
import { library } from '@fortawesome/fontawesome-svg-core'; import { library } from '@fortawesome/fontawesome-svg-core';
import { fas } from '@fortawesome/free-solid-svg-icons'; import { fas } from '@fortawesome/free-solid-svg-icons';
// App components and services
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { LoginComponent } from './site/login/login.component'; import { LoginComponent } from './site/login/login.component';
import { AppRoutingModule } from './app-routing.module'; import { AppRoutingModule } from './app-routing.module';
@ -44,6 +63,17 @@ library.add(fas);
headerName: 'X-CSRFToken' headerName: 'X-CSRFToken'
}), }),
FormsModule, FormsModule,
BrowserAnimationsModule,
MatButtonModule,
MatCheckboxModule,
MatToolbarModule,
MatCardModule,
MatInputModule,
MatProgressSpinnerModule,
MatSidenavModule,
MatListModule,
MatExpansionModule,
MatMenuModule,
FontAwesomeModule, FontAwesomeModule,
AppRoutingModule AppRoutingModule
], ],

View File

@ -1,3 +1,20 @@
<p> <mat-toolbar color='primary'>
agenda works!
</p> <button class='generic-plus-button' mat-fab>
<fa-icon icon='plus'></fa-icon>
</button>
<!-- TODO translate -->
<span class='app-name'>Agenda</span>
<!-- download button on the right -->
<span class='spacer'></span>
<button mat-icon-button (click)='drawer.toggle()'>
<fa-icon icon='download'></fa-icon>
</button>
</mat-toolbar>
<div class="app-content">
Agenda Works
</div>

View File

@ -1,9 +1,7 @@
.ngdialog-content { .login-card {
width: 200px; width: 400px;
margin: auto; margin: 10% auto;
background: #f0f0f0f0; }
padding: 10px; .mat-card-title {
width: auto; font-size: 16px;
height: 100%;
flex-grow: 1;
} }

View File

@ -1,33 +1,29 @@
<div class="ngdialog-content" role="document"> <mat-card class="login-card">
<form (ngSubmit)="onSubmit()" ngNativeValidate class="ng-valid ng-dirty ng-valid-parse"> <mat-card-header>
<div class="modal-header"> <mat-card-title>OpenSides 3 - Login</mat-card-title>
<img src="/assets/img/openslides-logo.png" alt="OpenSlides" class="login-logo center-block"> </mat-card-header>
</div> <mat-card-content>
<div class="modal-body loginForm"> <form class="login-full-widht">
{{info}} <table class="example-full-width" cellspacing="0">
<!-- Instead of the original approach, user alert component --> <tr>
<app-alert [alert]="alert"></app-alert> <td>
<mat-form-field class="login-full-widht">
<div class="input-group form-group"> <input matInput placeholder="Username" [(ngModel)]="user.username" name="username" required>
<div class="input-group-addon"> </mat-form-field>
<fa-icon icon="user"></fa-icon> </td>
</div> </tr>
<input [(ngModel)]="user.username" os-focus-me="" type="text" class="form-control input-lg ng-valid ng-not-empty ng-dirty ng-valid-parse ng-touched" <tr>
placeholder="Username" name="username"> <td>
</div> <mat-form-field class="example-full-width">
<div class="input-group form-group"> <input matInput placeholder="Password" [(ngModel)]="user.password" type="password" name="password" required>
<div class="input-group-addon"> </mat-form-field>
<fa-icon icon="key"></fa-icon> </td>
</div> </tr>
<input [(ngModel)]="user.password" type="password" class="form-control </table>
input-lg ng-valid ng-not-empty ng-dirty
ng-valid-parse ng-touched" placeholder="Passwort" name="password">
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary" translate="">
<span class="ng-scope">Anmelden</span>
</button>
</div>
</div>
</form> </form>
</div> <mat-spinner [style.display]="showSpinner ? 'block' : 'none'"></mat-spinner>
</mat-card-content>
<mat-card-actions>
<button mat-raised-button (click)="formLogin()" color="primary">Login</button>
</mat-card-actions>
</mat-card>

View File

@ -41,7 +41,7 @@ export class LoginComponent extends BaseComponent implements OnInit {
//Todo: This serves as a prototype and need enhancement, //Todo: This serves as a prototype and need enhancement,
//like saving a "logged in state" and real checking the server //like saving a "logged in state" and real checking the server
//if logIn was fine //if logIn was fine
onSubmit() { formLogin(): void {
this.authService.login(this.user).subscribe(res => { this.authService.login(this.user).subscribe(res => {
if (res.status === 400) { if (res.status === 400) {
//TODO, add more errors here, use //TODO, add more errors here, use

View File

@ -1,3 +1,20 @@
<p> <mat-toolbar color='primary'>
motions works!
</p> <button class='generic-plus-button' mat-fab>
<fa-icon icon='plus'></fa-icon>
</button>
<!-- TODO translate -->
<span class='app-name'>Motions</span>
<!-- download button on the right -->
<span class='spacer'></span>
<button mat-icon-button (click)='drawer.toggle()'>
<fa-icon icon='download'></fa-icon>
</button>
</mat-toolbar>
<div class="app-content">
Motion Works
</div>

View File

@ -0,0 +1,9 @@
mat-sidenav-container {
height: 100%;
}
.projector-button {
position: absolute;
bottom: 10px;
right: 10px;
}

View File

@ -1,11 +1,64 @@
<h1> The actual OpenSlides Content! </h1> <mat-sidenav-container autosize>
<nav> <mat-sidenav #sideNav [mode]="isMobile ? 'push' : 'side'" [opened]='!isMobile' disableClose='!isMobile'>
<a routerLink="/" routerLinkActive="active"> Home </a> <mat-toolbar class='nav-toolbar' color='primary'>
<a routerLink="/agenda" routerLinkActive="active"> Agenda </a>
<a routerLink="/motions" routerLinkActive="active"> Motions </a> <!-- logo -->
</nav> <mat-toolbar-row>
<router-outlet></router-outlet> <img src='/assets/img/openslides-logo-dark.png' alt='OpenSlides-logo'>
<footer> </mat-toolbar-row>
Footer </mat-toolbar>
<button (click)="logOutButton()">LogOut</button>
</footer> <!-- User Menu -->
<mat-expansion-panel>
<mat-expansion-panel-header>
<!-- TODO use an operator service or get from whoami -->
UserName
</mat-expansion-panel-header>
<mat-action-row>
<button (click)='logOutButton()' mat-button>Logout</button>
</mat-action-row>
</mat-expansion-panel>
<!-- navigation -->
<mat-nav-list>
<a mat-list-item routerLink='/' routerLinkActive='active' (click)='isMobile ? sideNav.toggle() : null'>
<fa-icon icon='home'></fa-icon> Home
</a>
<a mat-list-item routerLink='/agenda' routerLinkActive='active' (click)='isMobile ? sideNav.toggle() : null'>
<fa-icon icon='calendar'></fa-icon> Agenda
</a>
<a mat-list-item routerLink='/motions' routerLinkActive='active' (click)='isMobile ? sideNav.toggle() : null'>
<fa-icon icon='file-alt'></fa-icon> Motions
</a>
</mat-nav-list>
</mat-sidenav>
<!-- the first toolbar row is (still) a global element
the second one shall be handled by the apps -->
<mat-toolbar color='primary'>
<!-- show/hide menu button -->
<!-- <button mat-icon-button (click)='sideNav.toggle()'> -->
<button mat-icon-button *ngIf="isMobile" (click)='sideNav.toggle()'>
<fa-icon icon='bars'></fa-icon>
</button>
<!-- glob search and generic menu on the right -->
<span class='spacer'></span>
<button mat-icon-button (click)='sideNav.toggle()'>
<fa-icon icon='search'></fa-icon>
</button>
<button mat-icon-button (click)='sideNav.toggle()'>
<fa-icon icon='ellipsis-v'></fa-icon>
</button>
</mat-toolbar>
<!-- continue with <mat-toolbar> in the app-->
<router-outlet></router-outlet>
<!-- the global projector button -->
<button class='projector-button' mat-fab>
<fa-icon icon='video'></fa-icon>
</button>
</mat-sidenav-container>

View File

@ -1,5 +1,6 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { BreakpointObserver, Breakpoints, BreakpointState } from '@angular/cdk/layout';
import { AuthService } from 'app/core/services/auth.service'; import { AuthService } from 'app/core/services/auth.service';
@ -9,9 +10,25 @@ import { AuthService } from 'app/core/services/auth.service';
styleUrls: ['./site.component.css'] styleUrls: ['./site.component.css']
}) })
export class SiteComponent implements OnInit { export class SiteComponent implements OnInit {
constructor(private authService: AuthService, private router: Router) {} isMobile = false;
ngOnInit() {} constructor(
private authService: AuthService,
private router: Router,
private breakpointObserver: BreakpointObserver
) {}
ngOnInit() {
this.breakpointObserver
.observe([Breakpoints.Small, Breakpoints.HandsetPortrait])
.subscribe((state: BreakpointState) => {
if (state.matches) {
this.isMobile = true;
} else {
this.isMobile = false;
}
});
}
logOutButton() { logOutButton() {
console.log('logout'); console.log('logout');

View File

@ -1,3 +1,10 @@
<p> <mat-toolbar color='primary'>
start works!
</p> <!-- TODO translate -->
<span class='app-name'>Home</span>
</mat-toolbar>
<div class="app-content">
[Welcome to OpenSlide]
</div>

View File

@ -1 +1,41 @@
@import '~bootstrap/dist/css/bootstrap.min.css'; /*use a 'theme' for MaterialUI. TODO We will need to build an OpenSlides-Theme*/
@import '~@angular/material/prebuilt-themes/indigo-pink.css';
html,
body {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: 0;
padding: 0;
height: 100% !important;
}
body {
background: #fafafa;
margin: 0 auto;
padding: 0;
}
/**the plus button in Motion, Agenda, etc*/
.generic-plus-button {
bottom: -30px;
}
/**title of an app page*/
.app-name {
margin-left: 20px;
}
/**content of an app page*/
.app-content {
margin: 20px;
margin-top: 50px;
}
/**use to push content to the right side*/
.spacer {
flex: 1 1 auto;
}