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

View File

@ -13,28 +13,29 @@
},
"private": true,
"dependencies": {
"@angular/animations": "^6.0.3",
"@angular/common": "^6.0.3",
"@angular/compiler": "^6.0.3",
"@angular/core": "^6.0.3",
"@angular/forms": "^6.0.3",
"@angular/http": "^6.0.3",
"@angular/platform-browser": "^6.0.3",
"@angular/platform-browser-dynamic": "^6.0.3",
"@angular/router": "^6.0.3",
"@fortawesome/angular-fontawesome": "^0.1.0-10",
"@fortawesome/fontawesome-svg-core": "^1.2.0-11",
"@fortawesome/free-solid-svg-icons": "^5.1.0-11",
"bootstrap": "^3.3.7",
"@angular/animations": "^6.0.6",
"@angular/cdk": "^6.3.0",
"@angular/common": "^6.0.6",
"@angular/compiler": "^6.0.6",
"@angular/core": "^6.0.6",
"@angular/forms": "^6.0.6",
"@angular/http": "^6.0.6",
"@angular/material": "^6.3.0",
"@angular/platform-browser": "^6.0.6",
"@angular/platform-browser-dynamic": "^6.0.6",
"@angular/router": "^6.0.6",
"@fortawesome/angular-fontawesome": "0.1.0-10",
"@fortawesome/fontawesome-svg-core": "^1.2.0",
"@fortawesome/free-solid-svg-icons": "^5.1.0",
"core-js": "^2.5.4",
"rxjs": "^6.0.0",
"rxjs": "^6.2.1",
"zone.js": "^0.8.26"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.6.8",
"@angular/cli": "~6.0.8",
"@angular/compiler-cli": "^6.0.3",
"@angular/language-service": "^6.0.3",
"@angular/compiler-cli": "^6.0.6",
"@angular/language-service": "^6.0.6",
"@types/jasmine": "~2.8.6",
"@types/jasminewd2": "~2.0.3",
"@types/node": "~8.9.4",
@ -42,13 +43,13 @@
"husky": "^0.14.3",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "^2.0.3",
"karma": "^2.0.4",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.0",
"karma-jasmine": "~1.1.1",
"karma-jasmine-html-reporter": "^0.2.2",
"npm-run-all": "^4.1.3",
"prettier": "^1.13.5",
"prettier": "^1.13.6",
"pretty-quick": "^1.6.0",
"protractor": "~5.3.0",
"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 { BrowserAnimationsModule } from '@angular/platform-browser/animations';
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';
// 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 { library } from '@fortawesome/fontawesome-svg-core';
import { fas } from '@fortawesome/free-solid-svg-icons';
// App components and services
import { AppComponent } from './app.component';
import { LoginComponent } from './site/login/login.component';
import { AppRoutingModule } from './app-routing.module';
@ -44,6 +63,17 @@ library.add(fas);
headerName: 'X-CSRFToken'
}),
FormsModule,
BrowserAnimationsModule,
MatButtonModule,
MatCheckboxModule,
MatToolbarModule,
MatCardModule,
MatInputModule,
MatProgressSpinnerModule,
MatSidenavModule,
MatListModule,
MatExpansionModule,
MatMenuModule,
FontAwesomeModule,
AppRoutingModule
],

View File

@ -1,3 +1,20 @@
<p>
agenda works!
</p>
<mat-toolbar color='primary'>
<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 {
width: 200px;
margin: auto;
background: #f0f0f0f0;
padding: 10px;
width: auto;
height: 100%;
flex-grow: 1;
.login-card {
width: 400px;
margin: 10% auto;
}
.mat-card-title {
font-size: 16px;
}

View File

@ -1,33 +1,29 @@
<div class="ngdialog-content" role="document">
<form (ngSubmit)="onSubmit()" ngNativeValidate class="ng-valid ng-dirty ng-valid-parse">
<div class="modal-header">
<img src="/assets/img/openslides-logo.png" alt="OpenSlides" class="login-logo center-block">
</div>
<div class="modal-body loginForm">
{{info}}
<!-- Instead of the original approach, user alert component -->
<app-alert [alert]="alert"></app-alert>
<div class="input-group form-group">
<div class="input-group-addon">
<fa-icon icon="user"></fa-icon>
</div>
<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"
placeholder="Username" name="username">
</div>
<div class="input-group form-group">
<div class="input-group-addon">
<fa-icon icon="key"></fa-icon>
</div>
<input [(ngModel)]="user.password" type="password" class="form-control
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>
</div>
<mat-card class="login-card">
<mat-card-header>
<mat-card-title>OpenSides 3 - Login</mat-card-title>
</mat-card-header>
<mat-card-content>
<form class="login-full-widht">
<table class="example-full-width" cellspacing="0">
<tr>
<td>
<mat-form-field class="login-full-widht">
<input matInput placeholder="Username" [(ngModel)]="user.username" name="username" required>
</mat-form-field>
</td>
</tr>
<tr>
<td>
<mat-form-field class="example-full-width">
<input matInput placeholder="Password" [(ngModel)]="user.password" type="password" name="password" required>
</mat-form-field>
</td>
</tr>
</table>
</form>
<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,
//like saving a "logged in state" and real checking the server
//if logIn was fine
onSubmit() {
formLogin(): void {
this.authService.login(this.user).subscribe(res => {
if (res.status === 400) {
//TODO, add more errors here, use

View File

@ -1,3 +1,20 @@
<p>
motions works!
</p>
<mat-toolbar color='primary'>
<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>
<nav>
<a routerLink="/" routerLinkActive="active"> Home </a>
<a routerLink="/agenda" routerLinkActive="active"> Agenda </a>
<a routerLink="/motions" routerLinkActive="active"> Motions </a>
</nav>
<router-outlet></router-outlet>
<footer>
Footer
<button (click)="logOutButton()">LogOut</button>
</footer>
<mat-sidenav-container autosize>
<mat-sidenav #sideNav [mode]="isMobile ? 'push' : 'side'" [opened]='!isMobile' disableClose='!isMobile'>
<mat-toolbar class='nav-toolbar' color='primary'>
<!-- logo -->
<mat-toolbar-row>
<img src='/assets/img/openslides-logo-dark.png' alt='OpenSlides-logo'>
</mat-toolbar-row>
</mat-toolbar>
<!-- 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 { Router } from '@angular/router';
import { BreakpointObserver, Breakpoints, BreakpointState } from '@angular/cdk/layout';
import { AuthService } from 'app/core/services/auth.service';
@ -9,9 +10,25 @@ import { AuthService } from 'app/core/services/auth.service';
styleUrls: ['./site.component.css']
})
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() {
console.log('logout');

View File

@ -1,3 +1,10 @@
<p>
start works!
</p>
<mat-toolbar color='primary'>
<!-- 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;
}